diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 29b92a51ce..f6fb2af7ca 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -23208,9 +23208,7 @@ 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; @@ -23230,7 +23228,6 @@ 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 */ @@ -23250,7 +23247,6 @@ 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; @@ -23355,7 +23351,6 @@ 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; @@ -26208,13 +26203,13 @@ static int handle_incoming(struct sip_pvt *p, struct sip_request *req, struct as if (!req->ignore && req->method == SIP_INVITE) { transmit_response_reliable(p, "481 Call/Transaction Does Not Exist", req); /* Will cease to exist after ACK */ + return res; } else if (req->method != SIP_ACK) { transmit_response(p, "481 Call/Transaction Does Not Exist", req); sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT); - } else { - ast_debug(1, "Got ACK for unknown dialog... strange.\n"); + return res; } - return res; + /* Otherwise, this is an ACK. It will always have a to-tag */ } }