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

FreeSWITCH SVN anthm at freeswitch.org
Thu Mar 26 17:27:07 PDT 2009


Author: anthm
Date: Thu Mar 26 19:27:07 2009
New Revision: 12801

Log:
reduce exponential mwi notifies

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

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c	Thu Mar 26 19:27:07 2009
@@ -477,6 +477,8 @@
 		sofia_presence_handle_sip_i_publish(nua, profile, nh, sofia_private, sip, tags);
 		break;
 	case nua_i_register:
+		//nua_respond(nh, SIP_200_OK, SIPTAG_CONTACT(sip->sip_contact), NUTAG_WITH_THIS(nua), TAG_END());
+		//nua_handle_destroy(nh);
 		sofia_reg_handle_sip_i_register(nua, profile, nh, sofia_private, sip, tags);
 		break;
 	case nua_i_state:

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	Thu Mar 26 19:27:07 2009
@@ -283,6 +283,8 @@
 	switch_event_header_t *hp;
 	struct mwi_helper h = { 0 };
 	char *pname = NULL;
+	const char *call_id;
+	const char *sub_call_id;
 
 	switch_assert(event != NULL);
 
@@ -296,6 +298,9 @@
 		return;
 	}
 
+	call_id = switch_event_get_header(event, "call-id");
+	sub_call_id = switch_event_get_header(event, "sub-call-id");
+
 	dup_account = strdup(account);
 	switch_assert(dup_account != NULL);
 	sofia_glue_get_user_host(dup_account, &user, &host);
@@ -339,30 +344,39 @@
 
 	stream.write_function(&stream, "\r\n");
 	
-	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);
-
-	switch_assert(sql != NULL);
-	sofia_glue_execute_sql_callback(profile, SWITCH_FALSE, profile->ireg_mutex, sql, sofia_presence_mwi_callback, &h);
-	
-	switch_safe_free(sql);
-
-	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);
-
+	sql = NULL;
 
+	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%%' and call_id='%q')",
+							 stream.data, host, user, host, host, sub_call_id);
+	} else if (!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);
+	}
+
+	if (sql) {
+		sofia_glue_execute_sql_callback(profile, SWITCH_FALSE, profile->ireg_mutex, sql, sofia_presence_mwi_callback, &h);
+		switch_safe_free(sql);
+
+	} 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);
+		switch_assert(sql != NULL);
+		sofia_glue_execute_sql_callback(profile, SWITCH_FALSE, profile->ireg_mutex, sql, sofia_presence_mwi_callback2, &h);
+	}
 
-	switch_assert(sql != NULL);
-	sofia_glue_execute_sql_callback(profile, SWITCH_FALSE, profile->ireg_mutex, sql, sofia_presence_mwi_callback2, &h);
 
 	switch_safe_free(sql);
-
 	switch_safe_free(stream.data);
-
 	switch_safe_free(dup_account);
+
 	if (profile) {
 		sofia_glue_release_profile(profile);
 	}
@@ -791,6 +805,7 @@
 		if (switch_event_create(&event, SWITCH_EVENT_MESSAGE_QUERY) == SWITCH_STATUS_SUCCESS) {
 			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Message-Account", "sip:%s@%s", user, host);
 			switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "VM-Sofia-Profile", profile->name);
+			switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "VM-sub-call-id", argv[7]);
 			switch_event_fire(&event);
 		}
 		return 0;

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c	Thu Mar 26 19:27:07 2009
@@ -1137,6 +1137,7 @@
 			if (switch_event_create(&s_event, SWITCH_EVENT_MESSAGE_QUERY) == SWITCH_STATUS_SUCCESS) {
 				switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "Message-Account", "sip:%s@%s", to_user, reg_host);
 				switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "VM-Sofia-Profile", profile->name);
+				switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "VM-Call-ID", call_id);
 			}
 		} else {
 			if (switch_event_create_subclass(&s_event, SWITCH_EVENT_CUSTOM, MY_EVENT_UNREGISTER) == SWITCH_STATUS_SUCCESS) {



More information about the Freeswitch-svn mailing list