diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 50b022995921e698e49998a75718d8cb1060b01c..beb512b2ab4130432dcf079f2f375b58b76fa719 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -26605,7 +26605,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 0000000000000000000000000000000000000000..e658faa52ad74f2661c0ff62dfd2ef08e199b605 --- /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"