[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:
parent
a26d0c39b0
commit
1adcebb309
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue