Revision
17414
Author
dyatsin
Date
2010-04-23 16:35:21 -0500 (Fri, 23 Apr 2010)

Log Message

Merge branch 'master' of git@git.freeswitch.org:freeswitch

Modified Paths

Diff

Modified: freeswitch/trunk/Freeswitch.2008.express.sln (17413 => 17414)


--- freeswitch/trunk/Freeswitch.2008.express.sln	2010-04-23 21:34:57 UTC (rev 17413)
+++ freeswitch/trunk/Freeswitch.2008.express.sln	2010-04-23 21:35:21 UTC (rev 17414)
@@ -613,6 +613,24 @@
 		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
 	EndProjectSection
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download JSON", "libs\win32\Download JSON.2008.vcproj", "{B808178B-82F0-4CF4-A2B1-921939FA24D0}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libjson", "libs\win32\json\libjson.2008.vcproj", "{9778F1C0-09BC-4698-8EBC-BD982247209A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_curl", "src\mod\applications\mod_curl\mod_curl.2008.vcproj", "{EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}"
+	ProjectSection(ProjectDependencies) = postProject
+		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+		{87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588}
+		{9778F1C0-09BC-4698-8EBC-BD982247209A} = {9778F1C0-09BC-4698-8EBC-BD982247209A}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_json_cdr", "src\mod\event_handlers\mod_json_cdr\mod_json_cdr.2008.vcproj", "{EBE7452D-B3F7-4798-8EED-A0DDE2D738F5}"
+	ProjectSection(ProjectDependencies) = postProject
+		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+		{87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588}
+		{9778F1C0-09BC-4698-8EBC-BD982247209A} = {9778F1C0-09BC-4698-8EBC-BD982247209A}
+	EndProjectSection
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		All|Win32 = All|Win32
@@ -1602,7 +1620,6 @@
 		{D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.All|Win32.Build.0 = Release|Win32
 		{D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.All|x64.ActiveCfg = Release|Win32
 		{D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|Win32.ActiveCfg = Debug|Win32
-		{D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|Win32.Build.0 = Debug|Win32
 		{D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|x64.ActiveCfg = Debug|Win32
 		{D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|x64.Build.0 = Debug|Win32
 		{D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|Win32.ActiveCfg = Release|Win32
@@ -2002,6 +2019,31 @@
 		{432DB165-1EB2-4781-A9C0-71E62610B20A}.Release|Win32.Build.0 = Release|Win32
 		{432DB165-1EB2-4781-A9C0-71E62610B20A}.Release|x64.ActiveCfg = Release|x64
 		{432DB165-1EB2-4781-A9C0-71E62610B20A}.Release|x64.Build.0 = Release|x64
+		{B808178B-82F0-4CF4-A2B1-921939FA24D0}.All|Win32.ActiveCfg = Release|Win32
+		{B808178B-82F0-4CF4-A2B1-921939FA24D0}.All|x64.ActiveCfg = Release|Win32
+		{B808178B-82F0-4CF4-A2B1-921939FA24D0}.Debug|Win32.ActiveCfg = Debug|Win32
+		{B808178B-82F0-4CF4-A2B1-921939FA24D0}.Debug|Win32.Build.0 = Debug|Win32
+		{B808178B-82F0-4CF4-A2B1-921939FA24D0}.Debug|x64.ActiveCfg = Debug|Win32
+		{B808178B-82F0-4CF4-A2B1-921939FA24D0}.Release|Win32.ActiveCfg = Release|Win32
+		{B808178B-82F0-4CF4-A2B1-921939FA24D0}.Release|x64.ActiveCfg = Release|Win32
+		{9778F1C0-09BC-4698-8EBC-BD982247209A}.All|Win32.ActiveCfg = Release|Win32
+		{9778F1C0-09BC-4698-8EBC-BD982247209A}.All|x64.ActiveCfg = Release|Win32
+		{9778F1C0-09BC-4698-8EBC-BD982247209A}.Debug|Win32.ActiveCfg = Debug|Win32
+		{9778F1C0-09BC-4698-8EBC-BD982247209A}.Debug|x64.ActiveCfg = Debug|Win32
+		{9778F1C0-09BC-4698-8EBC-BD982247209A}.Release|Win32.ActiveCfg = Release|Win32
+		{9778F1C0-09BC-4698-8EBC-BD982247209A}.Release|x64.ActiveCfg = Release|Win32
+		{EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.All|Win32.ActiveCfg = Release|Win32
+		{EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.All|x64.ActiveCfg = Release|Win32
+		{EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Debug|Win32.ActiveCfg = Debug|Win32
+		{EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Debug|x64.ActiveCfg = Debug|Win32
+		{EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Release|Win32.ActiveCfg = Release|Win32
+		{EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Release|x64.ActiveCfg = Release|Win32
+		{EBE7452D-B3F7-4798-8EED-A0DDE2D738F5}.All|Win32.ActiveCfg = Release|Win32
+		{EBE7452D-B3F7-4798-8EED-A0DDE2D738F5}.All|x64.ActiveCfg = Release|Win32
+		{EBE7452D-B3F7-4798-8EED-A0DDE2D738F5}.Debug|Win32.ActiveCfg = Debug|Win32
+		{EBE7452D-B3F7-4798-8EED-A0DDE2D738F5}.Debug|x64.ActiveCfg = Debug|Win32
+		{EBE7452D-B3F7-4798-8EED-A0DDE2D738F5}.Release|Win32.ActiveCfg = Release|Win32
+		{EBE7452D-B3F7-4798-8EED-A0DDE2D738F5}.Release|x64.ActiveCfg = Release|Win32
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

Modified: freeswitch/trunk/freeswitch.spec (17413 => 17414)


--- freeswitch/trunk/freeswitch.spec	2010-04-23 21:34:57 UTC (rev 17413)
+++ freeswitch/trunk/freeswitch.spec	2010-04-23 21:35:21 UTC (rev 17414)
@@ -9,8 +9,8 @@
 Summary:      FreeSWITCH open source telephony platform
 License:      MPL
 Group:        Productivity/Telephony/Servers
-Version:      1.0.4
-Release:      1
+Version:      1.0.7
+Release:      trunk
 URL:          http://www.freeswitch.org/
 Packager:     	Michal Bielicki
 Vendor:       	http://www.freeswitch.org/
@@ -355,6 +355,7 @@
 %dir %attr(0750, freeswitch, daemon) %{prefix}/conf
 %dir %attr(0750, freeswitch, daemon) %{prefix}/conf/autoload_configs
 %dir %attr(0750, freeswitch, daemon) %{prefix}/conf/dialplan
+%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/dialplan/skinny-patterns
 %dir %attr(0750, freeswitch, daemon) %{prefix}/conf/directory
 %dir %attr(0750, freeswitch, daemon) %{prefix}/conf/directory/default
 %dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang
@@ -430,6 +431,7 @@
 %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/dialplan/*.xml
 %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/dialplan/default/*.xml
 %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/dialplan/public/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/dialplan/skinny-patterns
 %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/directory/*.xml
 %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/directory/default/*
 %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/ivr_menus/*.xml
@@ -614,6 +616,9 @@
 %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/ru/dir/*.xml
 
 %changelog
+* Fr Apr 23 2010 - michal.bielicki@seventhsignal.de
+- bumped spec file vrersion up to 1.0.7-trunk for trunk
+- added skinny dialplan stuff to specfile
 * Sun Mar 28 2010 - michal.bielicki@seventhsignal.de
 - added sangoma codec config file
 * Wed Dec 02 2009 - michal.bielicki@seventhsignal.de

Modified: freeswitch/trunk/libs/freetdm/src/ftmod/ftmod_sangoma_boost/ftmod_sangoma_boost.c (17413 => 17414)


--- freeswitch/trunk/libs/freetdm/src/ftmod/ftmod_sangoma_boost/ftmod_sangoma_boost.c	2010-04-23 21:34:57 UTC (rev 17413)
+++ freeswitch/trunk/libs/freetdm/src/ftmod/ftmod_sangoma_boost/ftmod_sangoma_boost.c	2010-04-23 21:35:21 UTC (rev 17414)
@@ -617,9 +617,6 @@
 		return;
 	}
 
-	OUTBOUND_REQUESTS[event->call_setup_id].event = *event;
-	SETUP_GRID[event->span][event->chan] = event->call_setup_id;
-
 	if (mcon->sigmod) {
 		ftdmchan = OUTBOUND_REQUESTS[event->call_setup_id].ftdmchan;
 	} else {
@@ -1011,8 +1008,8 @@
 			} else if (ftdmchan->state == FTDM_CHANNEL_STATE_HANGUP ||  ftdm_test_sflag(ftdmchan, SFLAG_HANGUP)) {
 				ftdm_log(FTDM_LOG_CRIT, "s%dc%d:FTDMCHAN STATE HANGUP -> Changed to HANGUP COMPLETE\n", BOOST_EVENT_SPAN(mcon->sigmod, event), BOOST_EVENT_CHAN(mcon->sigmod, event));
 				ftdm_set_state_r(ftdmchan, FTDM_CHANNEL_STATE_HANGUP_COMPLETE, 0, r);
-      } else if (ftdmchan->state == FTDM_CHANNEL_STATE_DIALING) {
-        ftdm_log(FTDM_LOG_WARNING, "s%dc%d:Collision, hanging up incoming call\n", BOOST_EVENT_SPAN(mcon->sigmod, event), BOOST_EVENT_CHAN(mcon->sigmod, event));
+			} else if (ftdmchan->state == FTDM_CHANNEL_STATE_DIALING) {
+        		ftdm_log(FTDM_LOG_WARNING, "s%dc%d:Collision, hanging up incoming call\n", BOOST_EVENT_SPAN(mcon->sigmod, event), BOOST_EVENT_CHAN(mcon->sigmod, event));
 				ftdm_set_state_r(ftdmchan, FTDM_CHANNEL_STATE_TERMINATING, 0, r);
 			} else {
 				ftdm_log(FTDM_LOG_CRIT, "s%dc%d:FTDMCHAN STATE INVALID %s on IN CALL\n", BOOST_EVENT_SPAN(mcon->sigmod, event), BOOST_EVENT_CHAN(mcon->sigmod, event), ftdm_channel_state2str(ftdmchan->state));
@@ -1312,6 +1309,8 @@
 		if (event->call_setup_id) {
 			nack_map[event->call_setup_id] = 0;
 			release_request_id(event->call_setup_id);
+		} else {
+			handle_call_done(span, mcon, event);
 		}
 		break;
     case SIGBOOST_EVENT_INSERT_CHECK_LOOP:
@@ -1921,13 +1920,17 @@
 
 static void ftdm_cli_span_state_cmd(ftdm_span_t *span, char *state)
 {
-	unsigned j;
+	unsigned int j;
 	int cnt=0;
+	ftdm_channel_state_t state_e = ftdm_str2ftdm_channel_state(state);
+	if (state_e == FTDM_CHANNEL_STATE_INVALID) {
+		ftdm_log(FTDM_LOG_CRIT, "Checking for channels not in the INVALID state is probably not waht you want\n");
+	}
 	for(j = 1; j <= span->chan_count; j++) {
-		if (span->channels[j]->state != FTDM_CHANNEL_STATE_DOWN) {
+		if (span->channels[j]->state != state_e) {
 			ftdm_channel_t *ftdmchan = span->channels[j];
 			ftdm_log(FTDM_LOG_CRIT, "Channel %i s%dc%d State=%s\n",
-				j,ftdmchan->physical_span_id-1,ftdmchan->physical_chan_id-1,ftdm_channel_state2str(ftdmchan->state));
+				j, ftdmchan->physical_span_id-1, ftdmchan->physical_chan_id-1, ftdm_channel_state2str(ftdmchan->state));
 			cnt++;
 		}
 	}

Modified: freeswitch/trunk/libs/freetdm/src/include/ftdm_types.h (17413 => 17414)


--- freeswitch/trunk/libs/freetdm/src/include/ftdm_types.h	2010-04-23 21:34:57 UTC (rev 17413)
+++ freeswitch/trunk/libs/freetdm/src/include/ftdm_types.h	2010-04-23 21:35:21 UTC (rev 17414)
@@ -383,7 +383,8 @@
 } ftdm_channel_state_t;
 #define CHANNEL_STATE_STRINGS "DOWN", "HOLD", "SUSPENDED", "DIALTONE", "COLLECT", \
 		"RING", "BUSY", "ATTN", "GENRING", "DIALING", "GET_CALLERID", "CALLWAITING", \
-		"RESTART", "PROGRESS", "PROGRESS_MEDIA", "UP", "IDLE", "TERMINATING", "CANCEL", "HANGUP", "HANGUP_COMPLETE", "INVALID"
+		"RESTART", "PROGRESS", "PROGRESS_MEDIA", "UP", "IDLE", "TERMINATING", "CANCEL", \
+		"HANGUP", "HANGUP_COMPLETE", "IN_LOOP", "INVALID"
 FTDM_STR2ENUM_P(ftdm_str2ftdm_channel_state, ftdm_channel_state2str, ftdm_channel_state_t)
 
 typedef enum {

Modified: freeswitch/trunk/src/mod/codecs/mod_mp4v/Makefile ( => )



Modified: freeswitch/trunk/src/mod/codecs/mod_mp4v/mod_mp4v.c
===================================================================

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c (17413 => 17414)


--- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c	2010-04-23 21:34:57 UTC (rev 17413)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c	2010-04-23 21:35:21 UTC (rev 17414)
@@ -160,22 +160,29 @@
 
 
 	if (sofia_test_flag(tech_pvt, TFLAG_RECOVERING_BRIDGE)) {
-		switch_core_session_t *other_session;
+		switch_core_session_t *other_session = NULL;
 		const char *uuid = switch_core_session_get_uuid(session);
 
 		if (switch_channel_test_flag(channel, CF_BRIDGE_ORIGINATOR)) {
 			const char *other_uuid = switch_channel_get_variable(channel, SWITCH_SIGNAL_BOND_VARIABLE);
+			int x = 0;
 
-			if (other_uuid && (other_session = switch_core_session_locate(other_uuid))) {
+			if (other_uuid) {
+				for(x = 0; other_session == NULL && x < 5; x++) {
+					other_session = switch_core_session_locate(other_uuid);
+					switch_yield(100000);
+				}
+			}
+
+			if (other_session) {
 				switch_channel_t *other_channel = switch_core_session_get_channel(other_session);
-
 				switch_channel_clear_flag(channel, CF_BRIDGE_ORIGINATOR);
 				switch_channel_wait_for_state_timeout(other_channel, CS_RESET, 5000);
 				switch_channel_wait_for_flag(channel, CF_REQ_MEDIA, SWITCH_FALSE, 10000, NULL);
 				switch_channel_wait_for_flag(channel, CF_MEDIA_ACK, SWITCH_TRUE, 10000, NULL);
 				switch_channel_wait_for_flag(other_channel, CF_REQ_MEDIA, SWITCH_FALSE, 10000, NULL);
 				switch_channel_wait_for_flag(other_channel, CF_MEDIA_ACK, SWITCH_TRUE, 10000, NULL);
-
+				
 				if (switch_channel_test_flag(channel, CF_PROXY_MODE) && switch_channel_test_flag(other_channel, CF_PROXY_MODE)) {
 					switch_ivr_signal_bridge(session, other_session);
 				} else {

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c (17413 => 17414)


--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c	2010-04-23 21:34:57 UTC (rev 17413)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c	2010-04-23 21:35:21 UTC (rev 17414)
@@ -3571,6 +3571,18 @@
 					match = 0;
 					got_audio = 0;
 				}
+				
+				for (map = m->m_rtpmaps; map; map = map->rm_next) {
+					if ((zstr(map->rm_encoding) || (tech_pvt->profile->ndlb & PFLAG_NDLB_ALLOW_BAD_IANANAME)) && map->rm_pt < 96) {
+						match = (map->rm_pt == tech_pvt->agreed_pt) ? 1 : 0;
+					} else {
+						match = strcasecmp(map->rm_encoding, tech_pvt->rm_encoding) ? 0 : 1;
+					}					
+				}
+
+				if (match) {
+					switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Existing codec is already acceptable, using that.\n");
+				}
 			}
 
 			for (map = m->m_rtpmaps; map; map = map->rm_next) {
@@ -4247,7 +4259,7 @@
 			}
 
 			if ((tmp = switch_channel_get_variable(channel, "sip_use_pt"))) {
-				tech_pvt->agreed_pt = atoi(tmp);
+				tech_pvt->pt = tech_pvt->agreed_pt = atoi(tmp);
 			}
 
 			sofia_glue_tech_set_codec(tech_pvt, 1);

Modified: freeswitch/trunk/src/mod/event_handlers/mod_json_cdr/mod_json_cdr.2008.vcproj (17413 => 17414)


--- freeswitch/trunk/src/mod/event_handlers/mod_json_cdr/mod_json_cdr.2008.vcproj	2010-04-23 21:34:57 UTC (rev 17413)
+++ freeswitch/trunk/src/mod/event_handlers/mod_json_cdr/mod_json_cdr.2008.vcproj	2010-04-23 21:35:21 UTC (rev 17414)
@@ -104,7 +104,7 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				AdditionalIncludeDirectories=""
+				AdditionalIncludeDirectories="&quot;$(InputDir)..\..\..\..\libs\json-c-0.9&quot;"
 				UsePrecompiledHeader="0"
 			/>
 			<Tool

Modified: freeswitch/trunk/src/mod/event_handlers/mod_json_cdr/mod_json_cdr.c (17413 => 17414)


--- freeswitch/trunk/src/mod/event_handlers/mod_json_cdr/mod_json_cdr.c	2010-04-23 21:34:57 UTC (rev 17413)
+++ freeswitch/trunk/src/mod/event_handlers/mod_json_cdr/mod_json_cdr.c	2010-04-23 21:35:21 UTC (rev 17414)
@@ -178,7 +178,7 @@
 }
 
 #define JSON_ENSURE_SUCCESS(obj) if (is_error(obj)) { return; }
-SWITCH_DECLARE(void) set_json_profile_data(struct json_object *json, switch_caller_profile_t *caller_profile)
+static void set_json_profile_data(struct json_object *json, switch_caller_profile_t *caller_profile)
 {
 	struct json_object *param = NULL;
 
@@ -236,7 +236,7 @@
 
 }
 
-SWITCH_DECLARE(void) set_json_chan_vars(struct json_object *json, switch_channel_t *channel)
+static void set_json_chan_vars(struct json_object *json, switch_channel_t *channel)
 {
 	struct json_object *variable = NULL;
 	switch_event_header_t *hi = switch_channel_variable_first(channel);
@@ -268,7 +268,7 @@
 
 
 
-SWITCH_DECLARE(switch_status_t) generate_json_cdr(switch_core_session_t *session, struct json_object **json_cdr)
+static switch_status_t generate_json_cdr(switch_core_session_t *session, struct json_object **json_cdr)
 {
 
 	struct json_object *cdr = json_object_new_object();

Modified: freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx (17413 => 17414)


--- freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx	2010-04-23 21:34:57 UTC (rev 17413)
+++ freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx	2010-04-23 21:35:21 UTC (rev 17414)
@@ -3244,6 +3244,140 @@
 }
 
 
+SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtcp_hdr_t_version_set(void * jarg1, unsigned int jarg2) {
+  switch_rtcp_hdr_t *arg1 = (switch_rtcp_hdr_t *) 0 ;
+  unsigned int arg2 ;
+  
+  arg1 = (switch_rtcp_hdr_t *)jarg1; 
+  arg2 = (unsigned int)jarg2; 
+  if (arg1) (arg1)->version = arg2;
+  
+}
+
+
+SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_rtcp_hdr_t_version_get(void * jarg1) {
+  unsigned int jresult ;
+  switch_rtcp_hdr_t *arg1 = (switch_rtcp_hdr_t *) 0 ;
+  unsigned int result;
+  
+  arg1 = (switch_rtcp_hdr_t *)jarg1; 
+  result = (unsigned int) ((arg1)->version);
+  jresult = result; 
+  return jresult;
+}
+
+
+SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtcp_hdr_t_p_set(void * jarg1, unsigned int jarg2) {
+  switch_rtcp_hdr_t *arg1 = (switch_rtcp_hdr_t *) 0 ;
+  unsigned int arg2 ;
+  
+  arg1 = (switch_rtcp_hdr_t *)jarg1; 
+  arg2 = (unsigned int)jarg2; 
+  if (arg1) (arg1)->p = arg2;
+  
+}
+
+
+SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_rtcp_hdr_t_p_get(void * jarg1) {
+  unsigned int jresult ;
+  switch_rtcp_hdr_t *arg1 = (switch_rtcp_hdr_t *) 0 ;
+  unsigned int result;
+  
+  arg1 = (switch_rtcp_hdr_t *)jarg1; 
+  result = (unsigned int) ((arg1)->p);
+  jresult = result; 
+  return jresult;
+}
+
+
+SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtcp_hdr_t_count_set(void * jarg1, unsigned int jarg2) {
+  switch_rtcp_hdr_t *arg1 = (switch_rtcp_hdr_t *) 0 ;
+  unsigned int arg2 ;
+  
+  arg1 = (switch_rtcp_hdr_t *)jarg1; 
+  arg2 = (unsigned int)jarg2; 
+  if (arg1) (arg1)->count = arg2;
+  
+}
+
+
+SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_rtcp_hdr_t_count_get(void * jarg1) {
+  unsigned int jresult ;
+  switch_rtcp_hdr_t *arg1 = (switch_rtcp_hdr_t *) 0 ;
+  unsigned int result;
+  
+  arg1 = (switch_rtcp_hdr_t *)jarg1; 
+  result = (unsigned int) ((arg1)->count);
+  jresult = result; 
+  return jresult;
+}
+
+
+SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtcp_hdr_t_type_set(void * jarg1, unsigned int jarg2) {
+  switch_rtcp_hdr_t *arg1 = (switch_rtcp_hdr_t *) 0 ;
+  unsigned int arg2 ;
+  
+  arg1 = (switch_rtcp_hdr_t *)jarg1; 
+  arg2 = (unsigned int)jarg2; 
+  if (arg1) (arg1)->type = arg2;
+  
+}
+
+
+SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_rtcp_hdr_t_type_get(void * jarg1) {
+  unsigned int jresult ;
+  switch_rtcp_hdr_t *arg1 = (switch_rtcp_hdr_t *) 0 ;
+  unsigned int result;
+  
+  arg1 = (switch_rtcp_hdr_t *)jarg1; 
+  result = (unsigned int) ((arg1)->type);
+  jresult = result; 
+  return jresult;
+}
+
+
+SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtcp_hdr_t_length_set(void * jarg1, unsigned int jarg2) {
+  switch_rtcp_hdr_t *arg1 = (switch_rtcp_hdr_t *) 0 ;
+  unsigned int arg2 ;
+  
+  arg1 = (switch_rtcp_hdr_t *)jarg1; 
+  arg2 = (unsigned int)jarg2; 
+  if (arg1) (arg1)->length = arg2;
+  
+}
+
+
+SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_rtcp_hdr_t_length_get(void * jarg1) {
+  unsigned int jresult ;
+  switch_rtcp_hdr_t *arg1 = (switch_rtcp_hdr_t *) 0 ;
+  unsigned int result;
+  
+  arg1 = (switch_rtcp_hdr_t *)jarg1; 
+  result = (unsigned int) ((arg1)->length);
+  jresult = result; 
+  return jresult;
+}
+
+
+SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_rtcp_hdr_t() {
+  void * jresult ;
+  switch_rtcp_hdr_t *result = 0 ;
+  
+  result = (switch_rtcp_hdr_t *)new switch_rtcp_hdr_t();
+  jresult = (void *)result; 
+  return jresult;
+}
+
+
+SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_rtcp_hdr_t(void * jarg1) {
+  switch_rtcp_hdr_t *arg1 = (switch_rtcp_hdr_t *) 0 ;
+  
+  arg1 = (switch_rtcp_hdr_t *)jarg1; 
+  delete arg1;
+  
+}
+
+
 SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38MaxBitRate_set(void * jarg1, unsigned long jarg2) {
   switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ;
   uint32_t arg2 ;
@@ -25900,6 +26034,17 @@
 }
 
 
+SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_RTCP_MAX_BUF_LEN_get() {
+  int jresult ;
+  int result;
+  
+  result = (int) 16384;
+  
+  jresult = result; 
+  return jresult;
+}
+
+
 SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_RTP_MAX_CRYPTO_LEN_get() {
   int jresult ;
   int result;
@@ -26288,21 +26433,23 @@
 }
 
 
-SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_set_remote_address(void * jarg1, char * jarg2, unsigned short jarg3, int jarg4, void * jarg5) {
+SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_set_remote_address(void * jarg1, char * jarg2, unsigned short jarg3, unsigned short jarg4, int jarg5, void * jarg6) {
   int jresult ;
   switch_rtp_t *arg1 = (switch_rtp_t *) 0 ;
   char *arg2 = (char *) 0 ;
   switch_port_t arg3 ;
-  switch_bool_t arg4 ;
-  char **arg5 = (char **) 0 ;
+  switch_port_t arg4 ;
+  switch_bool_t arg5 ;
+  char **arg6 = (char **) 0 ;
   switch_status_t result;
   
   arg1 = (switch_rtp_t *)jarg1; 
   arg2 = (char *)jarg2; 
   arg3 = (switch_port_t)jarg3; 
-  arg4 = (switch_bool_t)jarg4; 
-  arg5 = (char **)jarg5; 
-  result = (switch_status_t)switch_rtp_set_remote_address(arg1,(char const *)arg2,arg3,arg4,(char const **)arg5);
+  arg4 = (switch_port_t)jarg4; 
+  arg5 = (switch_bool_t)jarg5; 
+  arg6 = (char **)jarg6; 
+  result = (switch_status_t)switch_rtp_set_remote_address(arg1,(char const *)arg2,arg3,arg4,arg5,(char const **)arg6);
   jresult = result; 
   return jresult;
 }
@@ -26420,6 +26567,22 @@
 }
 
 
+SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_activate_rtcp(void * jarg1, int jarg2, unsigned short jarg3) {
+  int jresult ;
+  switch_rtp_t *arg1 = (switch_rtp_t *) 0 ;
+  int arg2 ;
+  switch_port_t arg3 ;
+  switch_status_t result;
+  
+  arg1 = (switch_rtp_t *)jarg1; 
+  arg2 = (int)jarg2; 
+  arg3 = (switch_port_t)jarg3; 
+  result = (switch_status_t)switch_rtp_activate_rtcp(arg1,arg2,arg3);
+  jresult = result; 
+  return jresult;
+}
+
+
 SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_activate_jitter_buffer(void * jarg1, unsigned long jarg2) {
   int jresult ;
   switch_rtp_t *arg1 = (switch_rtp_t *) 0 ;
@@ -26638,6 +26801,20 @@
 }
 
 
+SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtcp_zerocopy_read_frame(void * jarg1, void * jarg2) {
+  int jresult ;
+  switch_rtp_t *arg1 = (switch_rtp_t *) 0 ;
+  switch_rtcp_frame_t *arg2 = (switch_rtcp_frame_t *) 0 ;
+  switch_status_t result;
+  
+  arg1 = (switch_rtp_t *)jarg1; 
+  arg2 = (switch_rtcp_frame_t *)jarg2; 
+  result = (switch_status_t)switch_rtcp_zerocopy_read_frame(arg1,arg2);
+  jresult = result; 
+  return jresult;
+}
+
+
 SWIGEXPORT void SWIGSTDCALL CSharp_rtp_flush_read_buffer(void * jarg1, int jarg2) {
   switch_rtp_t *arg1 = (switch_rtp_t *) 0 ;
   switch_rtp_flush_t arg2 ;

Modified: freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs (17413 => 17414)


--- freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs	2010-04-23 21:34:57 UTC (rev 17413)
+++ freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs	2010-04-23 21:35:21 UTC (rev 17414)
@@ -4056,8 +4056,8 @@
     return ret;
   }
 
-  public static switch_status_t switch_rtp_set_remote_address(SWIGTYPE_p_switch_rtp rtp_session, string host, ushort port, switch_bool_t change_adv_addr, ref string err) {
-    switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtp_set_remote_address(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), host, port, (int)change_adv_addr, ref err);
+  public static switch_status_t switch_rtp_set_remote_address(SWIGTYPE_p_switch_rtp rtp_session, string host, ushort port, ushort remote_rtcp_port, switch_bool_t change_adv_addr, ref string err) {
+    switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtp_set_remote_address(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), host, port, remote_rtcp_port, (int)change_adv_addr, ref err);
     return ret;
   }
 
@@ -4106,6 +4106,11 @@
     return ret;
   }
 
+  public static switch_status_t switch_rtp_activate_rtcp(SWIGTYPE_p_switch_rtp rtp_session, int send_rate, ushort remote_port) {
+    switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtp_activate_rtcp(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), send_rate, remote_port);
+    return ret;
+  }
+
   public static switch_status_t switch_rtp_activate_jitter_buffer(SWIGTYPE_p_switch_rtp rtp_session, uint queue_frames) {
     switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtp_activate_jitter_buffer(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), queue_frames);
     return ret;
@@ -4183,6 +4188,11 @@
     return ret;
   }
 
+  public static switch_status_t switch_rtcp_zerocopy_read_frame(SWIGTYPE_p_switch_rtp rtp_session, SWIGTYPE_p_switch_rtcp_frame frame) {
+    switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtcp_zerocopy_read_frame(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), SWIGTYPE_p_switch_rtcp_frame.getCPtr(frame));
+    return ret;
+  }
+
   public static void rtp_flush_read_buffer(SWIGTYPE_p_switch_rtp rtp_session, switch_rtp_flush_t flush) {
     freeswitchPINVOKE.rtp_flush_read_buffer(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), (int)flush);
   }
@@ -4914,6 +4924,7 @@
   public static readonly int SWITCH_SMIN = freeswitchPINVOKE.SWITCH_SMIN_get();
   public static readonly int SWITCH_RESAMPLE_QUALITY = freeswitchPINVOKE.SWITCH_RESAMPLE_QUALITY_get();
   public static readonly int SWITCH_RTP_MAX_BUF_LEN = freeswitchPINVOKE.SWITCH_RTP_MAX_BUF_LEN_get();
+  public static readonly int SWITCH_RTCP_MAX_BUF_LEN = freeswitchPINVOKE.SWITCH_RTCP_MAX_BUF_LEN_get();
   public static readonly int SWITCH_RTP_MAX_CRYPTO_LEN = freeswitchPINVOKE.SWITCH_RTP_MAX_CRYPTO_LEN_get();
   public static readonly int SWITCH_RTP_KEY_LEN = freeswitchPINVOKE.SWITCH_RTP_KEY_LEN_get();
   public static readonly string SWITCH_RTP_CRYPTO_KEY_32 = freeswitchPINVOKE.SWITCH_RTP_CRYPTO_KEY_32_get();
@@ -5866,6 +5877,42 @@
   [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_rtp_hdr_t")]
   public static extern void delete_switch_rtp_hdr_t(HandleRef jarg1);
 
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_rtcp_hdr_t_version_set")]
+  public static extern void switch_rtcp_hdr_t_version_set(HandleRef jarg1, uint jarg2);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_rtcp_hdr_t_version_get")]
+  public static extern uint switch_rtcp_hdr_t_version_get(HandleRef jarg1);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_rtcp_hdr_t_p_set")]
+  public static extern void switch_rtcp_hdr_t_p_set(HandleRef jarg1, uint jarg2);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_rtcp_hdr_t_p_get")]
+  public static extern uint switch_rtcp_hdr_t_p_get(HandleRef jarg1);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_rtcp_hdr_t_count_set")]
+  public static extern void switch_rtcp_hdr_t_count_set(HandleRef jarg1, uint jarg2);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_rtcp_hdr_t_count_get")]
+  public static extern uint switch_rtcp_hdr_t_count_get(HandleRef jarg1);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_rtcp_hdr_t_type_set")]
+  public static extern void switch_rtcp_hdr_t_type_set(HandleRef jarg1, uint jarg2);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_rtcp_hdr_t_type_get")]
+  public static extern uint switch_rtcp_hdr_t_type_get(HandleRef jarg1);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_rtcp_hdr_t_length_set")]
+  public static extern void switch_rtcp_hdr_t_length_set(HandleRef jarg1, uint jarg2);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_rtcp_hdr_t_length_get")]
+  public static extern uint switch_rtcp_hdr_t_length_get(HandleRef jarg1);
+
+  [DllImport("mod_managed", EntryPoint="CSharp_new_switch_rtcp_hdr_t")]
+  public static extern IntPtr new_switch_rtcp_hdr_t();
+
+  [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_rtcp_hdr_t")]
+  public static extern void delete_switch_rtcp_hdr_t(HandleRef jarg1);
+
   [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38MaxBitRate_set")]
   public static extern void switch_t38_options_t_T38MaxBitRate_set(HandleRef jarg1, uint jarg2);
 
@@ -11152,6 +11199,9 @@
   [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_RTP_MAX_BUF_LEN_get")]
   public static extern int SWITCH_RTP_MAX_BUF_LEN_get();
 
+  [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_RTCP_MAX_BUF_LEN_get")]
+  public static extern int SWITCH_RTCP_MAX_BUF_LEN_get();
+
   [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_RTP_MAX_CRYPTO_LEN_get")]
   public static extern int SWITCH_RTP_MAX_CRYPTO_LEN_get();
 
@@ -11240,7 +11290,7 @@
   public static extern IntPtr switch_rtp_new(string jarg1, ushort jarg2, string jarg3, ushort jarg4, byte jarg5, uint jarg6, uint jarg7, uint jarg8, string jarg9, ref string jarg10, HandleRef jarg11);
 
   [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_set_remote_address")]
-  public static extern int switch_rtp_set_remote_address(HandleRef jarg1, string jarg2, ushort jarg3, int jarg4, ref string jarg5);
+  public static extern int switch_rtp_set_remote_address(HandleRef jarg1, string jarg2, ushort jarg3, ushort jarg4, int jarg5, ref string jarg6);
 
   [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_get_remote_host")]
   public static extern string switch_rtp_get_remote_host(HandleRef jarg1);
@@ -11272,6 +11322,9 @@
   [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_activate_ice")]
   public static extern int switch_rtp_activate_ice(HandleRef jarg1, string jarg2, string jarg3);
 
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_activate_rtcp")]
+  public static extern int switch_rtp_activate_rtcp(HandleRef jarg1, int jarg2, ushort jarg3);
+
   [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_activate_jitter_buffer")]
   public static extern int switch_rtp_activate_jitter_buffer(HandleRef jarg1, uint jarg2);
 
@@ -11320,6 +11373,9 @@
   [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_zerocopy_read_frame")]
   public static extern int switch_rtp_zerocopy_read_frame(HandleRef jarg1, HandleRef jarg2, uint jarg3);
 
+  [DllImport("mod_managed", EntryPoint="CSharp_switch_rtcp_zerocopy_read_frame")]
+  public static extern int switch_rtcp_zerocopy_read_frame(HandleRef jarg1, HandleRef jarg2);
+
   [DllImport("mod_managed", EntryPoint="CSharp_rtp_flush_read_buffer")]
   public static extern void rtp_flush_read_buffer(HandleRef jarg1, int jarg2);
 
@@ -16855,6 +16911,36 @@
 using System;
 using System.Runtime.InteropServices;
 
+public class SWIGTYPE_p_switch_rtcp_frame {
+  private HandleRef swigCPtr;
+
+  internal SWIGTYPE_p_switch_rtcp_frame(IntPtr cPtr, bool futureUse) {
+    swigCPtr = new HandleRef(this, cPtr);
+  }
+
+  protected SWIGTYPE_p_switch_rtcp_frame() {
+    swigCPtr = new HandleRef(null, IntPtr.Zero);
+  }
+
+  internal static HandleRef getCPtr(SWIGTYPE_p_switch_rtcp_frame obj) {
+    return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
+  }
+}
+
+}
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 1.3.35
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+namespace FreeSWITCH.Native {
+
+using System;
+using System.Runtime.InteropServices;
+
 public class SWIGTYPE_p_switch_rtp {
   private HandleRef swigCPtr;
 
@@ -21473,6 +21559,7 @@
   SWITCH_MESSAGE_INDICATE_PROXY_MEDIA,
   SWITCH_MESSAGE_INDICATE_APPLICATION_EXEC,
   SWITCH_MESSAGE_INDICATE_APPLICATION_EXEC_COMPLETE,
+  SWITCH_MESSAGE_INDICATE_PHONE_EVENT,
   SWITCH_MESSAGE_INVALID
 }
 
@@ -22861,6 +22948,7 @@
   SWITCH_EVENT_SERVER_DISCONNECTED,
   SWITCH_EVENT_SEND_INFO,
   SWITCH_EVENT_RECV_INFO,
+  SWITCH_EVENT_RECV_RTCP_MESSAGE,
   SWITCH_EVENT_CALL_SECURE,
   SWITCH_EVENT_NAT,
   SWITCH_EVENT_RECORD_START,
@@ -25770,6 +25858,103 @@
 
 namespace FreeSWITCH.Native {
 
+using System;
+using System.Runtime.InteropServices;
+
+public class switch_rtcp_hdr_t : IDisposable {
+  private HandleRef swigCPtr;
+  protected bool swigCMemOwn;
+
+  internal switch_rtcp_hdr_t(IntPtr cPtr, bool cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = new HandleRef(this, cPtr);
+  }
+
+  internal static HandleRef getCPtr(switch_rtcp_hdr_t obj) {
+    return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
+  }
+
+  ~switch_rtcp_hdr_t() {
+    Dispose();
+  }
+
+  public virtual void Dispose() {
+    lock(this) {
+      if(swigCPtr.Handle != IntPtr.Zero && swigCMemOwn) {
+        swigCMemOwn = false;
+        freeswitchPINVOKE.delete_switch_rtcp_hdr_t(swigCPtr);
+      }
+      swigCPtr = new HandleRef(null, IntPtr.Zero);
+      GC.SuppressFinalize(this);
+    }
+  }
+
+  public uint version {
+    set {
+      freeswitchPINVOKE.switch_rtcp_hdr_t_version_set(swigCPtr, value);
+    } 
+    get {
+      uint ret = freeswitchPINVOKE.switch_rtcp_hdr_t_version_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public uint p {
+    set {
+      freeswitchPINVOKE.switch_rtcp_hdr_t_p_set(swigCPtr, value);
+    } 
+    get {
+      uint ret = freeswitchPINVOKE.switch_rtcp_hdr_t_p_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public uint count {
+    set {
+      freeswitchPINVOKE.switch_rtcp_hdr_t_count_set(swigCPtr, value);
+    } 
+    get {
+      uint ret = freeswitchPINVOKE.switch_rtcp_hdr_t_count_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public uint type {
+    set {
+      freeswitchPINVOKE.switch_rtcp_hdr_t_type_set(swigCPtr, value);
+    } 
+    get {
+      uint ret = freeswitchPINVOKE.switch_rtcp_hdr_t_type_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public uint length {
+    set {
+      freeswitchPINVOKE.switch_rtcp_hdr_t_length_set(swigCPtr, value);
+    } 
+    get {
+      uint ret = freeswitchPINVOKE.switch_rtcp_hdr_t_length_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public switch_rtcp_hdr_t() : this(freeswitchPINVOKE.new_switch_rtcp_hdr_t(), true) {
+  }
+
+}
+
+}
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 1.3.35
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+namespace FreeSWITCH.Native {
+
 public enum switch_rtp_bug_flag_t {
   RTP_BUG_NONE = 0,
   RTP_BUG_CISCO_SKIP_MARK_BIT_2833 = (1 << 0),
@@ -25953,7 +26138,9 @@
   SWITCH_ZRTP_FLAG_SECURE_MITM_RECV = (1 << 26),
   SWITCH_RTP_FLAG_DEBUG_RTP_READ = (1 << 27),
   SWITCH_RTP_FLAG_DEBUG_RTP_WRITE = (1 << 28),
-  SWITCH_RTP_FLAG_VIDEO = (1 << 29)
+  SWITCH_RTP_FLAG_VIDEO = (1 << 29),
+  SWITCH_RTP_FLAG_ENABLE_RTCP = (1 << 30),
+  SWITCH_RTP_FLAG_RTCP_PASSTHRU = (1 << 31)
 }
 
 }

Modified: freeswitch/trunk/src/switch_channel.c (17413 => 17414)


--- freeswitch/trunk/src/switch_channel.c	2010-04-23 21:34:57 UTC (rev 17413)
+++ freeswitch/trunk/src/switch_channel.c	2010-04-23 21:35:21 UTC (rev 17414)
@@ -2108,6 +2108,11 @@
 		switch_log_printf(SWITCH_CHANNEL_ID_LOG, file, func, line, switch_channel_get_uuid(channel), SWITCH_LOG_NOTICE, "Hangup %s [%s] [%s]\n",
 						  channel->name, state_names[last_state], switch_channel_cause2str(channel->hangup_cause));
 
+
+		if (!switch_core_session_running(channel->session)) {
+			switch_core_session_thread_launch(channel->session);
+		}
+
 		if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_HANGUP) == SWITCH_STATUS_SUCCESS) {
 			switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Hangup-Cause", switch_channel_cause2str(hangup_cause));
 			switch_channel_event_set_data(channel, event);

Modified: freeswitch/trunk/src/switch_ivr_originate.c (17413 => 17414)


--- freeswitch/trunk/src/switch_ivr_originate.c	2010-04-23 21:34:57 UTC (rev 17413)
+++ freeswitch/trunk/src/switch_ivr_originate.c	2010-04-23 21:35:21 UTC (rev 17414)
@@ -1366,6 +1366,9 @@
 		int argc;
 		char *argv[256];
 
+		switch_event_del_header(var_event, SWITCH_EXPORT_VARS_VARIABLE);
+		switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, SWITCH_EXPORT_VARS_VARIABLE, export_vars);
+
 		if ((argc = switch_separate_string(cptmp, ',', argv, (sizeof(argv) / sizeof(argv[0]))))) {
 			int x;