]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
fix mwi
authorMichael Jerris <mike@jerris.com>
Mon, 30 Mar 2009 17:20:46 +0000 (17:20 +0000)
committerMichael Jerris <mike@jerris.com>
Mon, 30 Mar 2009 17:20:46 +0000 (17:20 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@12841 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/endpoints/mod_sofia/sofia_presence.c

index 456a7ff131bfd846e56c10812295f6ffb3693e1a..1a8dcf26dd2d4e12807048317e4ad37ae30e03f6 100644 (file)
@@ -285,6 +285,7 @@ static void actual_sofia_presence_mwi_event_handler(switch_event_t *event)
        char *pname = NULL;
        const char *call_id;
        const char *sub_call_id;
+       int for_everyone = 0;
 
        switch_assert(event != NULL);
 
@@ -301,6 +302,11 @@ static void actual_sofia_presence_mwi_event_handler(switch_event_t *event)
        call_id = switch_event_get_header(event, "call-id");
        sub_call_id = switch_event_get_header(event, "sub-call-id");
 
+       if (!call_id && !sub_call_id) {
+               for_everyone = 1;
+       }
+
+
        dup_account = strdup(account);
        switch_assert(dup_account != NULL);
        sofia_glue_get_user_host(dup_account, &user, &host);
@@ -346,34 +352,45 @@ static void actual_sofia_presence_mwi_event_handler(switch_event_t *event)
        
        sql = NULL;
 
-       if (sub_call_id) {
+       if (for_everyone) {
                sql = switch_mprintf("select proto,sip_user,sip_host,sub_to_user,sub_to_host,event,contact,call_id,full_from,"
                                                         "full_via,expires,user_agent,accept,profile_name"
                                                         ",'%q','%q' from sip_subscriptions where event='message-summary' "
-                                                        "and sub_to_user='%q' and (sub_to_host='%q' or presence_hosts like '%%%q%%' and call_id='%q')",
-                                                        stream.data, host, user, host, host, sub_call_id);
-       } else if (!call_id) {
+                                                        "and sub_to_user='%q' and (sub_to_host='%q' or presence_hosts like '%%%q%%')",
+                                                        stream.data, host, user, host, host);
+       } else if (sub_call_id) {
                sql = switch_mprintf("select proto,sip_user,sip_host,sub_to_user,sub_to_host,event,contact,call_id,full_from,"
                                                         "full_via,expires,user_agent,accept,profile_name"
                                                         ",'%q','%q' from sip_subscriptions where event='message-summary' "
-                                                        "and sub_to_user='%q' and (sub_to_host='%q' or presence_hosts like '%%%q%%')",
-                                                        stream.data, host, user, host, host);
+                                                        "and sub_to_user='%q' and (sub_to_host='%q' or presence_hosts like '%%%q%%' and call_id='%q')",
+                                                        stream.data, host, user, host, host, sub_call_id);
        }
 
+
        if (sql) {
                sofia_glue_execute_sql_callback(profile, SWITCH_FALSE, profile->ireg_mutex, sql, sofia_presence_mwi_callback, &h);
-               switch_safe_free(sql);
+               free(sql);
+               sql = NULL;
+               
+       }
 
+       if (for_everyone) {
+               sql = switch_mprintf("select sip_user,sip_host,contact,profile_name,'%q' "
+                                                        "from sip_registrations where sip_user='%q' and sip_host='%q'", 
+                                                        stream.data, user, host);
        } else if (call_id) {
                sql = switch_mprintf("select sip_user,sip_host,contact,profile_name,'%q' "
                                                         "from sip_registrations where sip_user='%q' and sip_host='%q' and call_id='%q'", 
                                                         stream.data, user, host, call_id);
+       }
+
+       if (sql) {
                switch_assert(sql != NULL);
                sofia_glue_execute_sql_callback(profile, SWITCH_FALSE, profile->ireg_mutex, sql, sofia_presence_mwi_callback2, &h);
+               free(sql);
+               sql = NULL;
        }
 
-
-       switch_safe_free(sql);
        switch_safe_free(stream.data);
        switch_safe_free(dup_account);