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

Freeswitch SVN anthm at freeswitch.org
Fri Jan 25 20:53:43 EST 2008


Author: anthm
Date: Fri Jan 25 20:53:42 2008
New Revision: 7365

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

Log:
prevent invalid state change

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c	Fri Jan 25 20:53:42 2008
@@ -1808,7 +1808,9 @@
 	switch_channel_set_flag(nchannel, CF_OUTBOUND);
 	switch_set_flag_locked(tech_pvt, TFLAG_OUTBOUND);
 	switch_clear_flag_locked(tech_pvt, TFLAG_LATE_NEGOTIATION);
-	switch_channel_set_state(nchannel, CS_INIT);
+	if (switch_channel_get_state(nchannel) == CS_NEW) {
+		switch_channel_set_state(nchannel, CS_INIT);
+	}
 	tech_pvt->caller_profile = caller_profile;
 	*new_session = nsession;
 	cause = SWITCH_CAUSE_SUCCESS;

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	Fri Jan 25 20:53:42 2008
@@ -1530,7 +1530,9 @@
 				if (switch_channel_test_flag(channel, CF_BYPASS_MEDIA)) {
 					switch_channel_set_variable(channel, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, "RECEIVED_NOMEDIA");
 					switch_set_flag_locked(tech_pvt, TFLAG_READY);
-					switch_channel_set_state(channel, CS_INIT);
+					if (switch_channel_get_state(channel) == CS_NEW) {
+						switch_channel_set_state(channel, CS_INIT);
+					}
 					switch_set_flag(tech_pvt, TFLAG_SDP);
 					goto done;
 				} else {
@@ -1553,7 +1555,9 @@
 						su_home_t *home = NULL;
 						switch_channel_set_variable(channel, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, "RECEIVED");
 						switch_set_flag_locked(tech_pvt, TFLAG_READY);
-						switch_channel_set_state(channel, CS_INIT);
+						if (switch_channel_get_state(channel) == CS_NEW) {
+							switch_channel_set_state(channel, CS_INIT);
+						}
 						switch_set_flag(tech_pvt, TFLAG_SDP);
 						if (replaces_str) {
 							home = su_home_new(sizeof(*home));
@@ -1748,7 +1752,9 @@
 							}
 							if (switch_channel_get_state(channel) == CS_HIBERNATE) {
 								switch_set_flag_locked(tech_pvt, TFLAG_READY);
-								switch_channel_set_state(channel, CS_INIT);
+								if (switch_channel_get_state(channel) == CS_NEW) {
+									switch_channel_set_state(channel, CS_INIT);
+								}
 								switch_set_flag(tech_pvt, TFLAG_SDP);
 							}
 							goto done;



More information about the Freeswitch-svn mailing list