diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.h b/src/mod/endpoints/mod_sofia/mod_sofia.h index 90f5d3a511..3cb2ddb50f 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.h +++ b/src/mod/endpoints/mod_sofia/mod_sofia.h @@ -221,6 +221,7 @@ typedef enum { PFLAG_CID_IN_1XX, PFLAG_IN_DIALOG_CHAT, PFLAG_DEL_SUBS_ON_REG, + PFLAG_IGNORE_183NOSDP, /* No new flags below this line */ PFLAG_MAX } PFLAGS; diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index 5a14c2cb5a..58099de641 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -2393,6 +2393,12 @@ switch_status_t reconfig_sofia(sofia_profile_t *profile) } else { sofia_clear_pflag(profile, PFLAG_T38_PASSTHRU); } + } else if (!strcasecmp(var, "ignore-183nosdp")) { + if (switch_true(val)) { + sofia_set_pflag(profile, PFLAG_IGNORE_183NOSDP); + } else { + sofia_clear_pflag(profile, PFLAG_IGNORE_183NOSDP); + } } else if (!strcasecmp(var, "cid-in-1xx")) { if (switch_true(val)) { sofia_set_pflag(profile, PFLAG_CID_IN_1XX); @@ -3050,6 +3056,12 @@ switch_status_t config_sofia(int reload, char *profile_name) } else { sofia_clear_pflag(profile, PFLAG_T38_PASSTHRU); } + } else if (!strcasecmp(var, "ignore-183nosdp")) { + if (switch_true(val)) { + sofia_set_pflag(profile, PFLAG_IGNORE_183NOSDP); + } else { + sofia_clear_pflag(profile, PFLAG_IGNORE_183NOSDP); + } } else if (!strcasecmp(var, "cid-in-1xx")) { if (switch_true(val)) { sofia_set_pflag(profile, PFLAG_CID_IN_1XX); @@ -4597,6 +4609,10 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status, } if (status == 183 && !r_sdp) { + if (switch_true(switch_channel_get_variable(channel, "sip_ignore_183nosdp")) || sofia_test_pflag(profile, PFLAG_IGNORE_183NOSDP)) { + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s Ignoring 183 w/o sdp\n", switch_channel_get_name(channel)); + goto done; + } status = 180; }