mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 04:11:08 +00:00
chan_sip: Allow target refresh (Contact update) on re-INVITE.
Previously, the Contact was stored only on initial INVITE and on any 18X and 200. That meant that after re-INVITEs from *us* the Contact could get updated, but after re-INVITEs from the *peer*, it did not. This changeset fixes this inconsistency, properly allowing target refreshes through re-INVITES (RFC3261, 12.2). If your strictrtp setting allows it, this change allows you to switch the source IP of a connected/calling device mid-call with a simple re-INVITE from the new IP. ASTERISK-26358 #close Change-Id: Ibb8512054ab27c8c3d2514022568fde943bf2435
This commit is contained in:
committed by
Walter Doekes
parent
7580a736bb
commit
da8ba990d1
@@ -26057,12 +26057,15 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, str
|
||||
copy_request(&p->initreq, req); /* Save this INVITE as the transaction basis */
|
||||
if (sipdebug)
|
||||
ast_debug(1, "Initializing initreq for method %s - callid %s\n", sip_methods[req->method].text, p->callid);
|
||||
|
||||
/* Parse new contact both for existing (re-invite) and new calls. */
|
||||
parse_ok_contact(p, req);
|
||||
|
||||
if (!p->owner) { /* Not a re-invite */
|
||||
if (req->debug)
|
||||
ast_verbose("Using INVITE request as basis request - %s\n", p->callid);
|
||||
if (newcall)
|
||||
append_history(p, "Invite", "New call: %s", p->callid);
|
||||
parse_ok_contact(p, req);
|
||||
} else { /* Re-invite on existing call */
|
||||
ast_clear_flag(&p->flags[0], SIP_OUTGOING); /* This is now an inbound dialog */
|
||||
if (get_rpid(p, req)) {
|
||||
|
Reference in New Issue
Block a user