]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-3794 this bug haunts me
authorAnthony Minessale <anthm@freeswitch.org>
Fri, 3 Feb 2012 02:41:15 +0000 (20:41 -0600)
committerAnthony Minessale <anthm@freeswitch.org>
Fri, 3 Feb 2012 02:41:15 +0000 (20:41 -0600)
src/mod/endpoints/mod_sofia/sofia_presence.c

index a34b15f04218df115612698e54fac8bd77173a0d..2818d7c5f687dd053d28dca60f57e66016426719 100644 (file)
@@ -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);