]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
fix a few regressions from the last commit
authorAnthony Minessale <anthm@freeswitch.org>
Thu, 25 Oct 2012 19:06:05 +0000 (14:06 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Thu, 25 Oct 2012 19:06:05 +0000 (14:06 -0500)
src/mod/endpoints/mod_sofia/sofia_presence.c
src/mod/endpoints/mod_sofia/sofia_reg.c

index 42fefe3af8ed9abd9a271d48e88888949deeed34..53a150e33b2cb49d7cc5bfb26f9d87a34f70cc3a 100644 (file)
@@ -620,9 +620,15 @@ static int sofia_presence_dialog_callback(void *pArg, int argc, char **argv, cha
 
        if (argc >= 4) {
 
+               if (argc == 5 && !zstr(argv[4])) {
+                       if (!switch_ivr_uuid_exists(argv[5])) {
+                               return 0;
+                       }
+               }
+
                if (mod_sofia_globals.debug_presence > 0) {
-                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "CHECK DIALOG state[%s] status[%s] rpid[%s] pres[%s]\n", 
-                                                         argv[0], argv[1], argv[2], argv[3]);
+                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "CHECK DIALOG state[%s] status[%s] rpid[%s] pres[%s] uuid[%s]\n", 
+                                                         argv[0], argv[1], argv[2], argv[3], argv[4]);
                }
 
                if (!helper->hits) {
@@ -668,7 +674,7 @@ static void do_normal_probe(switch_event_t *event)
        }
 
        if (probe_euser && probe_host && (profile = sofia_glue_find_profile(probe_host))) {
-               sql = switch_mprintf("select state,status,rpid,presence_id from sip_dialogs "
+               sql = switch_mprintf("select state,status,rpid,presence_id,uuid from sip_dialogs "
                                                         "where hostname='%q' and profile_name='%q' and call_info_state != 'seized' 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, probe_euser, probe_host, probe_euser, probe_host);
@@ -1061,7 +1067,12 @@ static void actual_sofia_presence_event_handler(switch_event_t *event)
                status = NULL;
        }
 
-       if (status && switch_stristr("CS_HANGUP", status)) {
+       if (!zstr(uuid) && !switch_ivr_uuid_exists(uuid)) {
+               status = "CS_HANGUP";
+       }
+
+
+       if ((status && switch_stristr("CS_HANGUP", status)) || (!zstr(uuid) && !switch_ivr_uuid_exists(uuid))) {
                status = "Available";
                hup = 1;
        }
@@ -1279,12 +1290,12 @@ static void actual_sofia_presence_event_handler(switch_event_t *event)
 
                                if (zstr(uuid)) {
                                
-                                       sql = switch_mprintf("select state,status,rpid,presence_id from sip_dialogs "
+                                       sql = switch_mprintf("select state,status,rpid,presence_id,uuid 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 "
+                                       sql = switch_mprintf("select state,status,rpid,presence_id,uuid 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);
index 2d54f31bc4ad81252c6a250adbf9b323ba0e35ae..e7f6a2fbdcb10d6c742be1e1f6d9d75640adfe2c 100644 (file)
@@ -759,6 +759,8 @@ void sofia_reg_check_expire(sofia_profile_t *profile, time_t now, int reboot)
 
        sofia_glue_execute_sql(profile, &sql, SWITCH_TRUE);
 
+       sofia_presence_check_subscriptions(profile, now);
+
        if (now) {
                sql = switch_mprintf("delete from sip_dialogs where (expires = -1 or (expires > 0 and expires <= %ld)) and hostname='%q'",
                                                (long) now, mod_sofia_globals.hostname);