[mod_sofia] add sip_refer_continue_after_reply channel variable.

Set to true to prevent hangup when response to REFER request is received.
Added sip_refer_target_status_code and sip_refer_target_provisional_status_code
channel variables to store responses from NOTIFY sipfrags.
This commit is contained in:
Chris Rienzo 2021-02-10 21:16:41 -05:00 committed by Andrey Volk
parent a26d0c39b0
commit 1adcebb309
2 changed files with 5 additions and 2 deletions

View File

@ -1553,7 +1553,7 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
if (msg->string_array_arg[0]) {
tech_pvt->proxy_refer_uuid = (char *)msg->string_array_arg[0];
} else {
} else if (!switch_channel_var_true(tech_pvt->channel, "sip_refer_continue_after_reply")) {
switch_mutex_unlock(tech_pvt->sofia_mutex);
sofia_wait_for_reply(tech_pvt, 9999, 10);
switch_mutex_lock(tech_pvt->sofia_mutex);

View File

@ -679,13 +679,16 @@ void sofia_handle_sip_i_notify(switch_core_session_t *session, int status,
status_val = atoi(p);
}
if (!status_val || status_val >= 200) {
switch_channel_set_variable_printf(channel, "sip_refer_target_status_code", "%d", status_val);
switch_channel_set_variable(channel, "sip_refer_reply", sip->sip_payload->pl_data);
if (status_val == 200) {
if (status_val == 200 && !switch_channel_var_true(channel, "sip_refer_continue_after_reply")) {
switch_channel_hangup(channel, SWITCH_CAUSE_BLIND_TRANSFER);
}
if ((int)tech_pvt->want_event == 9999) {
tech_pvt->want_event = 0;
}
} else if (status_val < 200) {
switch_channel_set_variable_printf(channel, "sip_refer_target_provisional_status_code", "%d", status_val);
}
}
}