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
--
Daniel-Constantin Mierla
http://www.asipto.com