From 7299658c54d0e5207648530738a8c0ba45c7944a Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Sat, 23 Jan 2010 03:59:01 +0000 Subject: [PATCH] tweak git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@16474 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/mod/endpoints/mod_sofia/mod_sofia.c | 49 ++++++++++++------------ src/mod/endpoints/mod_sofia/sofia_glue.c | 21 ++++++++++ 2 files changed, 46 insertions(+), 24 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index 8db4330c01..998303ac7c 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -1403,40 +1403,41 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi case SWITCH_MESSAGE_INDICATE_MEDIA: { - uint32_t send_invite = 1; + uint32_t send_invite = 1; + switch_channel_clear_flag(channel, CF_PROXY_MODE); sofia_glue_tech_set_local_sdp(tech_pvt, NULL, SWITCH_FALSE); - if (!(switch_channel_test_flag(channel, CF_ANSWERED) || switch_channel_test_flag(channel, CF_EARLY_MEDIA))) { - if (!switch_channel_test_flag(tech_pvt->channel, CF_OUTBOUND)) { - const char *r_sdp = switch_channel_get_variable(channel, SWITCH_R_SDP_VARIABLE); - tech_pvt->num_codecs = 0; - sofia_glue_tech_prepare_codecs(tech_pvt); - if (sofia_glue_tech_media(tech_pvt, r_sdp) != SWITCH_STATUS_SUCCESS) { - switch_channel_set_variable(channel, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, "CODEC NEGOTIATION ERROR"); - status = SWITCH_STATUS_FALSE; - goto end_lock; - } - send_invite = 0; - } - } + if (!(switch_channel_test_flag(channel, CF_ANSWERED) || switch_channel_test_flag(channel, CF_EARLY_MEDIA))) { + if (!switch_channel_test_flag(tech_pvt->channel, CF_OUTBOUND)) { + const char *r_sdp = switch_channel_get_variable(channel, SWITCH_R_SDP_VARIABLE); - if (!switch_rtp_ready(tech_pvt->rtp_session)) { + tech_pvt->num_codecs = 0; + sofia_glue_tech_prepare_codecs(tech_pvt); + if (sofia_glue_tech_media(tech_pvt, r_sdp) != SWITCH_STATUS_SUCCESS) { + switch_channel_set_variable(channel, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, "CODEC NEGOTIATION ERROR"); + status = SWITCH_STATUS_FALSE; + goto end_lock; + } + send_invite = 0; + } + } + + if (!switch_rtp_ready(tech_pvt->rtp_session)) { sofia_glue_tech_prepare_codecs(tech_pvt); - if ((status = sofia_glue_tech_choose_port(tech_pvt, 0)) != SWITCH_STATUS_SUCCESS) { + if ((status = sofia_glue_tech_choose_port(tech_pvt, 0)) != SWITCH_STATUS_SUCCESS) { switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); - goto end_lock; - } - } + goto end_lock; + } + } sofia_glue_set_local_sdp(tech_pvt, NULL, 0, NULL, 1); - if (send_invite) { + if (send_invite) { switch_channel_set_flag(channel, CF_REQ_MEDIA); - switch_channel_clear_flag(channel, CF_PROXY_MODE); sofia_glue_do_invite(session); - } - } - break; + } + } + break; case SWITCH_MESSAGE_INDICATE_SIMPLIFY: { diff --git a/src/mod/endpoints/mod_sofia/sofia_glue.c b/src/mod/endpoints/mod_sofia/sofia_glue.c index e4025cb592..fec804ab78 100644 --- a/src/mod/endpoints/mod_sofia/sofia_glue.c +++ b/src/mod/endpoints/mod_sofia/sofia_glue.c @@ -51,12 +51,22 @@ void sofia_glue_set_image_sdp(private_object_t *tech_pvt, switch_t38_options_t * } } + if (!ip) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "%s NO IP!\n", switch_channel_get_name(tech_pvt->channel)); + return; + } + if (!port) { if (!(port = tech_pvt->adv_sdp_audio_port)) { port = tech_pvt->proxy_sdp_audio_port; } } + if (!port) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "%s NO PORT!\n", switch_channel_get_name(tech_pvt->channel)); + return; + } + if (!tech_pvt->owner_id) { tech_pvt->owner_id = (uint32_t) switch_epoch_time_now(NULL) - port; } @@ -141,12 +151,23 @@ void sofia_glue_set_local_sdp(private_object_t *tech_pvt, const char *ip, uint32 ip = tech_pvt->proxy_sdp_audio_ip; } } + + if (!ip) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "%s NO IP!\n", switch_channel_get_name(tech_pvt->channel)); + return; + } + if (!port) { if (!(port = tech_pvt->adv_sdp_audio_port)) { port = tech_pvt->proxy_sdp_audio_port; } } + if (!port) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "%s NO PORT!\n", switch_channel_get_name(tech_pvt->channel)); + return; + } + if (!sr) { sr = "sendrecv"; }