From f8a0a58f0d8cc7525e1df270fda47c16c6a8cb82 Mon Sep 17 00:00:00 2001 From: Scott Griepentrog <sgriepentrog@digium.com> Date: Tue, 14 Jan 2014 18:12:52 +0000 Subject: [PATCH] chan_sip: fix Local From tag on outbound register regression 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 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 1d39713aaa..c92055d1f0 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -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 -- GitLab