diff --git a/src/mod/endpoints/mod_sofia/sofia_glue.c b/src/mod/endpoints/mod_sofia/sofia_glue.c index 79b66ff8f9..ab9e244501 100644 --- a/src/mod/endpoints/mod_sofia/sofia_glue.c +++ b/src/mod/endpoints/mod_sofia/sofia_glue.c @@ -3291,6 +3291,10 @@ uint8_t sofia_glue_negotiate_sdp(switch_core_session_t *session, sdp_session_t * ptime = maxptime; } + if (!ptime) { + ptime = 20; + } + for (i = first; i < last && i < tech_pvt->num_codecs; i++) { const switch_codec_implementation_t *imp = tech_pvt->codecs[i]; uint32_t codec_rate = imp->samples_per_second; diff --git a/src/switch_ivr_originate.c b/src/switch_ivr_originate.c index 4e31fce9e7..a259c3fa2b 100644 --- a/src/switch_ivr_originate.c +++ b/src/switch_ivr_originate.c @@ -1566,6 +1566,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess int local_clobber = 0; const char *cancel_key = NULL; const char *holding = NULL; + const char *soft_holding = NULL; const char *export_vars = NULL; @@ -2638,7 +2639,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess notready: if (caller_channel) { - const char *soft_holding = switch_channel_get_variable(caller_channel, SWITCH_SOFT_HOLDING_UUID_VARIABLE); + soft_holding = switch_channel_get_variable(caller_channel, SWITCH_SOFT_HOLDING_UUID_VARIABLE); holding = switch_channel_get_variable(caller_channel, SWITCH_HOLDING_UUID_VARIABLE); switch_channel_set_variable(caller_channel, SWITCH_HOLDING_UUID_VARIABLE, NULL); @@ -2757,7 +2758,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess switch_core_session_rwunlock(peer_session); } force_reason = SWITCH_CAUSE_ATTENDED_TRANSFER; - } else { + } else if (zstr(soft_holding)) { if (peer_channel && switch_channel_ready(peer_channel)) { switch_core_session_t *holding_session; @@ -2845,9 +2846,12 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess } } + + if (oglobals.idx > IDX_NADA) { - peer_session = originate_status[oglobals.idx].peer_session; - peer_channel = originate_status[oglobals.idx].peer_channel; + if ((peer_session = originate_status[oglobals.idx].peer_session)) { + peer_channel = switch_core_session_get_channel(originate_status[oglobals.idx].peer_session); + } } else { status = SWITCH_STATUS_FALSE; if (caller_channel && peer_channel) {