diff options
-rw-r--r-- | channels/chan_sip.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 5be0200ed..ff0067dcd 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -9240,6 +9240,15 @@ static struct sip_pvt *__find_call(struct sip_request *req, struct ast_sockaddr switch (found) { case SIP_REQ_MATCH: + sip_pvt_lock(sip_pvt_ptr); + if (args.method != SIP_RESPONSE && args.authentication_present + && strcmp(args.fromtag, sip_pvt_ptr->theirtag)) { + /* If we have a request that uses athentication and the fromtag is + * different from that in the original call dialog, update the + * fromtag in the saved call dialog */ + ast_string_field_set(sip_pvt_ptr, theirtag, args.fromtag); + } + sip_pvt_unlock(sip_pvt_ptr); ao2_iterator_destroy(iterator); dialog_unref(fork_pvt, "unref fork_pvt"); free_via(via); |