From e50533706505f5b0951924faf6ab3864baa8b289 Mon Sep 17 00:00:00 2001 From: Mark Petersen Date: Fri, 7 Jan 2022 11:01:27 +0100 Subject: [PATCH] chan_sip.c Fix pickup on channel that are in AST_STATE_DOWN resolve issue with pickup on device that uses "183" and not "180" ASTERISK-29832 Change-Id: I4c7d223870f8ce9a7354e0f73d4e4cb2e8b58841 --- channels/chan_sip.c | 9 ++++++++- doc/CHANGES-staging/chan_sip_pickup_AST_STATE_DOWN.txt | 3 +++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 doc/CHANGES-staging/chan_sip_pickup_AST_STATE_DOWN.txt diff --git a/channels/chan_sip.c b/channels/chan_sip.c index e19e19db08..b6aff80cc8 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -26607,7 +26607,14 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, str if (!error && ast_strlen_zero(pickup.exten) && ast_channel_state(replaces_chan) != AST_STATE_RINGING && ast_channel_state(replaces_chan) != AST_STATE_RING && - ast_channel_state(replaces_chan) != AST_STATE_UP) { + ast_channel_state(replaces_chan) != AST_STATE_UP && + /* + * Check the down state as well because some SIP devices do not + * give 180 ringing when they can just give 183 session progress + * instead. same fix the one in ast_can_pickup + * git show 0a8f9d2cf08 + */ + ast_channel_state(replaces_chan) != AST_STATE_DOWN) { ast_log(LOG_NOTICE, "Supervised transfer attempted to replace non-ringing or active call id (%s)!\n", replace_id); transmit_response_reliable(p, "603 Declined (Replaces)", req); error = 1; diff --git a/doc/CHANGES-staging/chan_sip_pickup_AST_STATE_DOWN.txt b/doc/CHANGES-staging/chan_sip_pickup_AST_STATE_DOWN.txt new file mode 100644 index 0000000000..e658faa52a --- /dev/null +++ b/doc/CHANGES-staging/chan_sip_pickup_AST_STATE_DOWN.txt @@ -0,0 +1,3 @@ +Subject: chan_sip.c + +resolve issue with pickup on device that uses "183" and not "180"