Hello Sebastian,
On 07/30/08 10:52, Schumann Sebastian wrote:
Dear all
I use OpenSER with the perl extension to publish presence states for non-SIMPLE/PUBLISH capable devices using an outbound proxy. My idea is to send all SIP messages to an outbound-proxy, that forwards them to the respective registrar/SIP proxy. The outbound proxy uses SIP messages (INVITE, BYE, CANCEL...) as triggers to call a perl script that publishes the presence state to a presence agent using PUA_MI.
Currently, registrar, presence agent and the publishing functionality are hosted on one machine. But I think that should not have any impact on the whole idea...
All what I wanted to do works fine so far, except that after some time, I get MySQL errors. The Perl script does not use the database, only from OpenSER script, actions are called. I posted below some of the error messages I receive and after, the part of my config performing database queries. Does anyone see a obvious mistake in there? I tried OpenSER lastest branch and current trunk, both produce the error after some time.
Thanks for your help!
Sebastian
Jul 30 11:07:30 [4329] ERROR:mysql:db_mysql_submit_query: driver error: Commands out of sync; you can't run this command now Jul 30 11:07:30 [4329] ERROR:mysql:db_mysql_query: error while submitting query Jul 30 11:07:30 [4329] ERROR:pua:db_update: while querying db table pua Jul 30 11:07:30 [4329] ERROR:mysql:db_mysql_submit_query: driver error: Commands out of sync; you can't run this command now Jul 30 11:07:30 [4329] ERROR:mysql:db_mysql_query: error while submitting query Jul 30 11:07:30 [4329] ERROR:xcap_client:query_xcap_update: in sql query Jul 30 11:07:30 [4329] ERROR:mysql:db_mysql_submit_query: driver error: Commands out of sync; you can't run this command now Jul 30 11:07:30 [4329] ERROR:mysql:db_mysql_delete: error while submitting query Jul 30 11:07:30 [4329] ERROR:presence:update_db_subs: deleting expired information from database Jul 30 11:07:30 [4329] ERROR:mysql:db_mysql_submit_query: driver error: Commands out of sync; you can't run this command now Jul 30 11:07:30 [4329] ERROR:mysql:db_mysql_query: error while submitting query Jul 30 11:07:30 [4329] ERROR:presence:msg_watchers_clean: querying database for expired messages Jul 30 11:07:30 [4329] ERROR:mysql:db_mysql_submit_query: driver error: Commands out of sync; you can't run this command now Jul 30 11:07:30 [4329] ERROR:mysql:db_mysql_query: error while submitting query Jul 30 11:07:30 [4329] ERROR:presence:msg_presentity_clean: querying database for expired messages Jul 30 11:09:10 [4329] ERROR:mysql:db_mysql_submit_query: driver error: Commands out of sync; you can't run this command now Jul 30 11:09:10 [4329] ERROR:mysql:db_mysql_query: error while submitting query Jul 30 11:09:10 [4329] ERROR:pua:db_update: while querying db table pua Jul 30 11:09:10 [4329] ERROR:mysql:db_mysql_submit_query: driver error: Commands out of sync; you can't run this command now Jul 30 11:09:10 [4329] ERROR:mysql:db_mysql_query: error while submitting query Jul 30 11:09:10 [4329] ERROR:xcap_client:query_xcap_update: in sql query Jul 30 11:09:10 [4329] ERROR:mysql:db_mysql_submit_query: driver error: Commands out of sync; you can't run this command now Jul 30 11:09:10 [4329] ERROR:mysql:db_mysql_delete: error while submitting query Jul 30 11:09:10 [4329] ERROR:presence:update_db_subs: deleting expired information from database Jul 30 11:09:10 [4329] ERROR:mysql:db_mysql_submit_query: driver error: Commands out of sync; you can't run this command now Jul 30 11:09:10 [4329] ERROR:mysql:db_mysql_query: error while submitting query Jul 30 11:09:10 [4329] ERROR:presence:msg_watchers_clean: querying database for expired messages Jul 30 11:09:10 [4329] ERROR:mysql:db_mysql_submit_query: driver error: Commands out of sync; you can't run this command now Jul 30 11:09:10 [4329] ERROR:mysql:db_mysql_query: error while submitting query Jul 30 11:09:10 [4329] ERROR:presence:msg_presentity_clean: querying database for expired messages
203 if (uri==myself) { 204 if (method=="REGISTER") { 205 # Uncomment this if you want to use digest authentication 206 if (!www_authorize("IP", "subscriber")) { 207 www_challenge("IP", "0"); 208 exit; 209 }; 210 211 # query if dialog exists for registering URI 212 avp_delete("*"); 213 if (avp_db_query("SELECT from_uri, 214 to_uri 215 FROM dialog 216 WHERE from_uri='$tu' or to_uri='$tu' or from_uri='$tu:5060' or to_uri='$tu:5060'")) { 217 #xlog("L_INFO", ">>> Dialog active: caller=$avp(i:1) callee=$avp(i:2)\n"); 218 } else { 219 #xlog("L_INFO", ">>> No Dialog active: avp_db_query() returned no records\n"); 220 }; 221 xlog("L_INFO", ">>>>>>>>> REGISTER received ($tu)\n"); 222 if(!is_avp_set("$avp(i:1)")) { # no call active for registering to_uri user 223 xlog("L_INFO", ">>>>>>>>> PUBLISHED\n"); 224 perl_exec("publish"); 225 } else { 226 xlog("L_INFO", ">>>>>>>>> NOT PUBLISHED, call active\n"); 227 } 228 save("location"); 229 exit; 230 } 231 232 if(is_method("SUBSCRIBE|PUBLISH")) { 233 if(is_method("PUBLISH")) { 234 if($si == "IP") { 235 if (!t_newtran()) { 236 sl_reply_error(); 237 exit; 238 }; 239 handle_publish(); 240 t_release(); 241 } else { 242 sl_send_reply("488","Not Acceptable Here"); 243 } 244 } else if(is_method("SUBSCRIBE")) { 245 if (!proxy_authorize("", "subscriber")) { 246 proxy_challenge("", "1"); 247 exit; 248 }; 249 handle_subscribe(); 250 t_release(); 251 }; 252 exit; 253 }; 252 exit; 253 }; 254 255 lookup("aliases"); 256 257 # native SIP destinations are handled using our USRLOC DB 258 if (!lookup("location")) { 259 sl_send_reply("404", "Not Found"); 260 exit; 261 } else { 262 append_hf("P-hint: usrloc applied\r\n"); 263 if(method=="INVITE") { 264 # Store Dialog in db 265 setflag(5); 266 # Session timer 267 setflag(6); 268 if (sstCheckMin("1")) { 269 xlog("L_ERR", "422 Session Timer Too Small reply sent.\n"); 270 exit; 271 } 272 xlog("L_INFO", ">>>>>>>>> INVITE received ($fu busy)\n"); 273 perl_exec("publish"); 274 } 275 }; 276 };
there seems to be a module which does not free the DB result, maybe in some error case. Could you spot other error message before those messages in the openser logs, maybe you can get a hint? Not sure I remember correctly, but I think I sent a patch with some extra log messages to identify such situation. The affected process seems to be the timer.
Cheers, Daniel