]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
chan_sip: fix Local From tag on outbound register regression
authorScott Griepentrog <sgriepentrog@digium.com>
Tue, 14 Jan 2014 18:12:52 +0000 (18:12 +0000)
committerScott Griepentrog <sgriepentrog@digium.com>
Tue, 14 Jan 2014 18:12:52 +0000 (18:12 +0000)
In ASTERISK-12117, an improvement to insure consistant local from tags
on outbound registrations resulted in an undesirable behavior - caused
by leftover unexpired sip_pvt dialogs (with the previous cseq number),
resulting in many uncessary REGISTER requests.  Instead of significant
rework of transmit_register(), this change deletes the dialogs after a
200 OK response indiciating a successful registration, keeping the old
dialogs from interfering with normal operation.

(closes issue ASTERISK-22946)
Reported by: Stephan Eisvogel
Review: https://reviewboard.asterisk.org/r/3109/
........

Merged revisions 405433 from http://svn.asterisk.org/svn/asterisk/branches/1.8

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@405434 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 1d39713aaafa0d85bd031a7226c05b71413c76d4..c92055d1f0fecb09db1e81ed71bd639e9505e48c 100644 (file)
@@ -15221,7 +15221,7 @@ static int transmit_register(struct sip_registry *r, int sipmethod, const char *
 
                /* reset tag to consistent value from registry */
                ast_string_field_set(p, tag, r->localtag);
-               
+
                if (p->do_history) {
                        append_history(p, "RegistryInit", "Account: %s@%s", r->username, r->hostname);
                }
@@ -23469,9 +23469,9 @@ static int handle_response_register(struct sip_pvt *p, int resp, const char *res
                if (r->call)
                        r->call = dialog_unref(r->call, "unsetting registry->call pointer-- case 200");
                p->registry = registry_unref(p->registry, "unref registry entry p->registry");
-               /* Let this one hang around until we have all the responses */
-               sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT);
-               /* p->needdestroy = 1; */
+
+               /* destroy dialog now to avoid interference with next register */
+               pvt_set_needdestroy(p, "Registration successfull");
 
                /* set us up for re-registering
                 * figure out how long we got registered for