[Freeswitch-svn] [commit] r12841 - freeswitch/trunk/src/mod/endpoints/mod_sofia

FreeSWITCH SVN mikej at freeswitch.org
Mon Mar 30 10:20:46 PDT 2009


Author: mikej
Date: Mon Mar 30 12:20:46 2009
New Revision: 12841

Log:
fix mwi

Modified:
   freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c	Mon Mar 30 12:20:46 2009
@@ -285,6 +285,7 @@
 	char *pname = NULL;
 	const char *call_id;
 	const char *sub_call_id;
+	int for_everyone = 0;
 
 	switch_assert(event != NULL);
 
@@ -301,6 +302,11 @@
 	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 @@
 	
 	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);
 



More information about the Freeswitch-svn mailing list