diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 961c7f4de4..861350bd4c 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -23194,6 +23194,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; @@ -23213,6 +23216,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; @@ -23230,6 +23236,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; } @@ -23331,6 +23340,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; } }