[Freeswitch-svn] [commit] r6332 - freeswitch/trunk/src/mod/endpoints/mod_woomera

Freeswitch SVN anthm at freeswitch.org
Mon Nov 19 11:38:31 EST 2007


Author: anthm
Date: Mon Nov 19 11:38:31 2007
New Revision: 6332

Modified:
   freeswitch/trunk/src/mod/endpoints/mod_woomera/mod_woomera.c

Log:
update

Modified: freeswitch/trunk/src/mod/endpoints/mod_woomera/mod_woomera.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_woomera/mod_woomera.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_woomera/mod_woomera.c	Mon Nov 19 11:38:31 2007
@@ -90,7 +90,7 @@
 	TFLAG_DESTROY = (1 << 7),
 	TFLAG_ABORT = (1 << 8),
 	TFLAG_SWITCH = (1 << 9),
-	TFLAG_ANSWER = (1 << 10),
+	TFLAG_ANSWER = (1 << 10)
 } TFLAGS;
 
 struct woomera_message {
@@ -395,6 +395,18 @@
 	tech_pvt = switch_core_session_get_private(session);
 	assert(tech_pvt != NULL);
 
+	for(;;) {
+		if (!switch_test_flag(tech_pvt, TFLAG_ABORT) || !tech_pvt->udp_socket) {
+			return SWITCH_STATUS_GENERR;
+		}
+
+		if (switch_test_flag(tech_pvt, TFLAG_MEDIA)) {
+			break;
+		}
+		switch_yield(1000);
+	}
+
+
 	if (!tech_pvt->udp_socket) {
 		return SWITCH_STATUS_GENERR;
 	}
@@ -428,10 +440,15 @@
 
 	tech_pvt = switch_core_session_get_private(session);
 	assert(tech_pvt != NULL);
-
-	if (!tech_pvt->udp_socket) {
+	
+	if (!switch_test_flag(tech_pvt, TFLAG_ABORT) || !tech_pvt->udp_socket) {
 		return SWITCH_STATUS_GENERR;
 	}
+
+	if (!switch_test_flag(tech_pvt, TFLAG_MEDIA)) {
+		return SWITCH_STATUS_SUCCESS;
+	}
+
 	//pframe = &tech_pvt->frame;
 	len = frame->datalen;
 	if (switch_socket_sendto(tech_pvt->udp_socket, tech_pvt->udpwrite, 0, frame->data, &len) == SWITCH_STATUS_SUCCESS) {
@@ -875,8 +892,11 @@
 		switch_socket_bind(tech_pvt->udp_socket, tech_pvt->udpread);
 		switch_socket_create_pollfd(&tech_pvt->read_poll, tech_pvt->udp_socket, SWITCH_POLLIN | SWITCH_POLLERR, pool);
 		switch_socket_create_pollfd(&tech_pvt->write_poll, tech_pvt->udp_socket, SWITCH_POLLOUT | SWITCH_POLLERR, pool);
+		switch_set_flag_locked(tech_pvt, TFLAG_MEDIA);
+	} else {
+		switch_set_flag_locked(tech_pvt, TFLAG_ABORT);
 	}
-
+	
 	return 0;
 }
 



More information about the Freeswitch-svn mailing list