diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 977c62d2f2..0d0f9992bb 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -22974,6 +22974,9 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, int } } transmit_response_reliable(p, "491 Request Pending", req); + p->pendinginvite = seqno; + check_via(p, req); + copy_request(&p->initreq, req); ast_debug(1, "Got INVITE on call where we already have pending INVITE, deferring that - %s\n", p->callid); /* Don't destroy dialog here */ res = INV_REQ_FAILED; @@ -22993,6 +22996,9 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, int if (p->owner) { ast_debug(3, "INVITE w Replaces on existing call? Refusing action. [%s]\n", p->callid); transmit_response_reliable(p, "400 Bad request", req); /* The best way to not not accept the transfer */ + p->pendinginvite = seqno; + check_via(p, req); + copy_request(&p->initreq, req); /* Do not destroy existing call */ res = INV_REQ_ERROR; goto request_invite_cleanup; @@ -23010,6 +23016,9 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, int sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT); p->invitestate = INV_COMPLETED; res = INV_REQ_ERROR; + p->pendinginvite = seqno; + check_via(p, req); + copy_request(&p->initreq, req); goto request_invite_cleanup; } @@ -23111,6 +23120,9 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, int refer_locked = 0; p->invitestate = INV_COMPLETED; res = INV_REQ_ERROR; + p->pendinginvite = seqno; + check_via(p, req); + copy_request(&p->initreq, req); goto request_invite_cleanup; } }