<p>Kevin Harwell has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/7486">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pjsip_options: contacts sometimes not being updated on reload<br><br>For both dynamic and static contacts it was possible that potential AOR<br>changes were not being applied to all contacts. This was because the qualify<br>and schedule code was only retrieving AOR's, and contacts with frequencies<br>greater than zero.<br><br>For instance the following could happen: and AOR/contact has a frequency of 5,<br>it then gets set to 0, and then a reload occurs. All scheduled OPTIONS are<br>stopped, a list of AOR's is retrieved with frequency > 0, but none are<br>selected since in this scenario all are 0. The contact for the one previously<br>set to 5 though does not get updated, so it's status remains "AVAILABLE".<br><br>This patch makes it so all contacts (static and dynamic) are selected, and<br>appropriately updated if need be.<br><br>ASTERISK-27467 #close<br><br>Change-Id: I7a920170f89c683af9505d4723a44fc6841decdb<br>---<br>M res/res_pjsip/pjsip_options.c<br>1 file changed, 10 insertions(+), 24 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/86/7486/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">diff --git a/res/res_pjsip/pjsip_options.c b/res/res_pjsip/pjsip_options.c<br>index d4ea911..c529b09 100644<br>--- a/res/res_pjsip/pjsip_options.c<br>+++ b/res/res_pjsip/pjsip_options.c<br>@@ -1185,32 +1185,21 @@<br>     return 0;<br> }<br> <br>-/*!<br>- * \internal<br>- * \brief Unschedule all existing contacts<br>- */<br>-static int unschedule_all_cb(void *obj, void *arg, int flags)<br>-{<br>- struct sched_data *data = obj;<br>-<br>-    AST_SCHED_DEL_UNREF(sched, data->id, ao2_ref(data, -1));<br>-<br>-       return CMP_MATCH;<br>-}<br>-<br> static void qualify_and_schedule_all(void)<br> {<br>-    struct ast_variable *var = ast_variable_new("qualify_frequency >", "0", "");<br>         struct ao2_container *aors;<br>   struct ao2_container *contacts;<br> <br>-   if (!var) {<br>-          return;<br>-      }<br>-    aors = ast_sorcery_retrieve_by_fields(ast_sip_get_sorcery(),<br>-         "aor", AST_RETRIEVE_FLAG_MULTIPLE, var);<br>+   /*<br>+    * It's possible that the AOR had some of it's fields updated prior to a<br>+      * reload. For instance qualifying could have been turned on or off by<br>+        * setting the qualify_frequency. Due to this we have to iterate through<br>+      * all contacts (static and dynamic), and not just ones where the frequency<br>+   * is greater than zero, updating any contact fields with the AOR's values.<br>+       */<br> <br>-       ao2_callback(sched_qualifies, OBJ_NODATA | OBJ_MULTIPLE | OBJ_UNLINK, unschedule_all_cb, NULL);<br>+      aors = ast_sorcery_retrieve_by_fields(ast_sip_get_sorcery(),<br>+         "aor", AST_RETRIEVE_FLAG_MULTIPLE | AST_RETRIEVE_FLAG_ALL, NULL);<br> <br>        if (aors) {<br>           ao2_callback(aors, OBJ_NODATA, qualify_and_schedule_all_cb, NULL);<br>@@ -1218,14 +1207,11 @@<br>   }<br> <br>  contacts = ast_sorcery_retrieve_by_fields(ast_sip_get_sorcery(),<br>-             "contact", AST_RETRIEVE_FLAG_MULTIPLE, var);<br>+               "contact", AST_RETRIEVE_FLAG_MULTIPLE | AST_RETRIEVE_FLAG_ALL, NULL);<br>       if (contacts) {<br>               ao2_callback(contacts, OBJ_NODATA, qualify_and_schedule_cb_without_aor, NULL);<br>                ao2_ref(contacts, -1);<br>        }<br>-<br>- ast_variables_destroy(var);<br>-<br> }<br> <br> int ast_sip_format_contact_ami(void *obj, void *arg, int flags)<br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/7486">change 7486</a>. To unsubscribe, visit <a href="https://gerrit.asterisk.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.asterisk.org/7486"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: 13 </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I7a920170f89c683af9505d4723a44fc6841decdb </div>
<div style="display:none"> Gerrit-Change-Number: 7486 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Kevin Harwell <kharwell@digium.com> </div>