]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
pjsip_options: dynamic contact's fields not updated on reload
authorKevin Harwell <kharwell@digium.com>
Fri, 8 Dec 2017 00:18:00 +0000 (18:18 -0600)
committerKevin Harwell <kharwell@digium.com>
Fri, 8 Dec 2017 00:38:13 +0000 (18:38 -0600)
Dynamic contacts were not being properly updated on reload. As a matter of
fact any changes to the AOR that a dynamic contact was associated with were
not being applied.

On reload, this patch makes it so for each dynamic contact, the associated
AOR is now retrieved and the AOR's fields are applied to the contact.

ASTERISK-27467

Change-Id: I8e3165dc6a745218c1c9db837f77fafa0516985d

res/res_pjsip/pjsip_options.c

index 662166c89b5e4aa5c5e412ebfabf445b19b8590a..8c22fd2fcf3d4e68960b798c0054b66fbf6bd559 100644 (file)
@@ -1147,7 +1147,24 @@ static int qualify_and_schedule_cb_with_aor(void *obj, void *arg, int flags)
 
 static int qualify_and_schedule_cb_without_aor(void *obj, void *arg, int flags)
 {
-       qualify_and_schedule_contact((struct ast_sip_contact *) obj);
+       /*
+        * These are really dynamic contacts. We need to retrieve the aor associated
+        * with the contact since it's possible some of the aor's fields were updated
+        * since last load.
+        */
+       struct ast_sip_contact *contact = obj;
+       struct ast_sip_aor *aor = ast_sip_location_retrieve_aor(contact->aor);
+
+       if (aor) {
+               qualify_and_schedule_cb_with_aor(obj, aor, flags);
+               ao2_ref(aor, -1);
+       } else {
+               ast_log(LOG_WARNING, "Unable to locate AOR for contact '%s'. Keeping old "
+                       "associated settings: frequency=%d, timeout=%f, authenticate=%s\n",
+                       contact->uri, contact->qualify_frequency, contact->qualify_timeout,
+                       contact->authenticate_qualify ? "yes" : "no");
+               qualify_and_schedule_contact(contact);
+       }
 
        return 0;
 }