Revision
15405
Author
anthm
Date
2009-11-09 18:26:54 -0600 (Mon, 09 Nov 2009)

Log Message

experimental support for send-message-query-on-register=first-only

Modified Paths

Diff

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h (15404 => 15405)


--- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h	2009-11-09 23:49:35 UTC (rev 15404)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h	2009-11-10 00:26:54 UTC (rev 15405)
@@ -193,6 +193,7 @@
 	PFLAG_NAT_OPTIONS_PING,
 	PFLAG_AUTOFIX_TIMING,
 	PFLAG_MESSAGE_QUERY_ON_REGISTER,
+	PFLAG_MESSAGE_QUERY_ON_FIRST_REGISTER,
 	PFLAG_RTP_AUTOFLUSH_DURING_BRIDGE,
 	PFLAG_MANUAL_REDIRECT,
 	PFLAG_AUTO_NAT,

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c (15404 => 15405)


--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c	2009-11-09 23:49:35 UTC (rev 15404)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c	2009-11-10 00:26:54 UTC (rev 15405)
@@ -1863,6 +1863,8 @@
 					} else if (!strcasecmp(var, "send-message-query-on-register")) {
 						if (switch_true(val)) {
 							sofia_set_pflag(profile, PFLAG_MESSAGE_QUERY_ON_REGISTER);
+						} else if (!strcasecmp(val, "first-only")) {
+							sofia_set_pflag(profile, PFLAG_MESSAGE_QUERY_ON_FIRST_REGISTER);
 						} else {
 							sofia_clear_pflag(profile, PFLAG_MESSAGE_QUERY_ON_REGISTER);
 						}
@@ -2476,6 +2478,8 @@
 					} else if (!strcasecmp(var, "send-message-query-on-register")) {
 						if (switch_true(val)) {
 							sofia_set_pflag(profile, PFLAG_MESSAGE_QUERY_ON_REGISTER);
+						} else if (!strcasecmp(val, "first-only")) {
+							sofia_set_pflag(profile, PFLAG_MESSAGE_QUERY_ON_FIRST_REGISTER);
 						} else {
 							sofia_clear_pflag(profile, PFLAG_MESSAGE_QUERY_ON_REGISTER);
 						}

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c (15404 => 15405)


--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c	2009-11-09 23:49:35 UTC (rev 15404)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c	2009-11-10 00:26:54 UTC (rev 15405)
@@ -1213,14 +1213,28 @@
 	if (regtype == REG_REGISTER) {
 		char exp_param[128] = "";
 		char date[80] = "";
-
+		long nc_long = 0;		
+		
 		s_event = NULL;
 
 		if (exptime) {
 			switch_snprintf(exp_param, sizeof(exp_param), "expires=%ld", exptime);
 			sip_contact_add_param(nua_handle_home(nh), sip->sip_contact, exp_param);
+			
+			if (auth_params && sofia_test_pflag(profile, PFLAG_MESSAGE_QUERY_ON_FIRST_REGISTER)) {
+				const char *nc = NULL;
 
-			if (sofia_test_pflag(profile, PFLAG_MESSAGE_QUERY_ON_REGISTER)) {
+				if ((nc = switch_event_get_header(auth_params, "sip_auth_nc"))) {
+					nc_long = strtoul(nc, 0, 16);
+				} else {
+					switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, 
+									  "No nonce count, cannot determine if this was the first register, sending notify implicitly.\n");
+					nc_long = 1;
+				}
+			}
+			
+			if (sofia_test_pflag(profile, PFLAG_MESSAGE_QUERY_ON_REGISTER) || 
+				(nc_long == 1 && sofia_test_pflag(profile, PFLAG_MESSAGE_QUERY_ON_FIRST_REGISTER))) {
 				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", mwi_user, mwi_host);
 					switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "VM-Sofia-Profile", profile->name);