chan_sip.c: Update dialog fromtag after request with auth
[asterisk/asterisk.git] / channels / chan_sip.c
index 1d58a84..4112e00 100644 (file)
@@ -9234,6 +9234,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);