From 7f5b8fba5547fa8fc828f40c8bf47c8c449d2565 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 2 Feb 2012 20:41:15 -0600 Subject: [PATCH] FS-3794 this bug haunts me --- src/mod/endpoints/mod_sofia/sofia_presence.c | 25 +++++++++++++------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/sofia_presence.c b/src/mod/endpoints/mod_sofia/sofia_presence.c index a34b15f042..2818d7c5f6 100644 --- a/src/mod/endpoints/mod_sofia/sofia_presence.c +++ b/src/mod/endpoints/mod_sofia/sofia_presence.c @@ -864,10 +864,12 @@ static void actual_sofia_presence_event_handler(switch_event_t *event) char *call_id = switch_event_get_header(event, "call-id"); char *presence_source = switch_event_get_header(event, "presence-source"); char *call_info_state = switch_event_get_header(event, "presence-call-info-state"); + const char *uuid = switch_event_get_header(event, "unique-id"); switch_console_callback_match_t *matches; struct presence_helper helper = { 0 }; int hup = 0; + if (!mod_sofia_globals.running) { return; } @@ -1052,9 +1054,7 @@ static void actual_sofia_presence_event_handler(switch_event_t *event) continue; } - if (call_info) { - const char *uuid = switch_event_get_header(event, "unique-id"); - + if (call_info) { #if 0 if (mod_sofia_globals.debug_sla > 1) { @@ -1095,17 +1095,26 @@ static void actual_sofia_presence_event_handler(switch_event_t *event) rpid, status, mod_sofia_globals.hostname, profile->name, euser, host); sofia_glue_execute_sql_now(profile, &sql, SWITCH_TRUE); } + + if (zstr(uuid)) { - sql = switch_mprintf("select state,status,rpid,presence_id from sip_dialogs " - "where call_info_state != 'seized' and hostname='%q' and profile_name='%q' and " - "((sip_from_user='%q' and sip_from_host='%q') or presence_id='%q@%q') order by rcd desc", - mod_sofia_globals.hostname, profile->name, euser, host, euser, host); - sofia_glue_execute_sql_callback(profile, profile->ireg_mutex, sql, sofia_presence_dialog_callback, &dh); + sql = switch_mprintf("select state,status,rpid,presence_id from sip_dialogs " + "where call_info_state != 'seized' and hostname='%q' and profile_name='%q' and " + "((sip_from_user='%q' and sip_from_host='%q') or presence_id='%q@%q') order by rcd desc", + mod_sofia_globals.hostname, profile->name, euser, host, euser, host); + } else { + sql = switch_mprintf("select state,status,rpid,presence_id from sip_dialogs " + "where uuid != '%q' and call_info_state != 'seized' and hostname='%q' and profile_name='%q' and " + "((sip_from_user='%q' and sip_from_host='%q') or presence_id='%q@%q') order by rcd desc", + uuid, mod_sofia_globals.hostname, profile->name, euser, host, euser, host); + } if (mod_sofia_globals.debug_presence > 0) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "CHECK SQL: %s@%s [%s]\nhits: %d\n", euser, host, sql, dh.hits); } + sofia_glue_execute_sql_callback(profile, profile->ireg_mutex, sql, sofia_presence_dialog_callback, &dh); + switch_safe_free(sql);