<p>Joshua Colp <strong>merged</strong> this change.</p><p><a href="https://gerrit.asterisk.org/7849">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  George Joseph: Looks good to me, but someone else must approve
  Joshua Colp: Looks good to me, approved; Approved for Submit

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">res_pjsip_endpoint_identifier_ip.c: Allow multiple IdentifyDetail AMI events.<br><br>The AMI PJSIPShowEndpoint action could only list one IdentifyDetail AMI<br>event per endpoint.  However, there is no reason that multiple<br>type=identify sections cannot identify the same endpoint.<br><br>* Reworked format_ami_endpoint_identify() to generate as many<br>IdentifyDetail AMI events as there are matching identifiers.<br><br>Change-Id: Ie146792aef72d78e05416ab5b27bc552a30399db<br>---<br>M res/res_pjsip_endpoint_identifier_ip.c<br>1 file changed, 32 insertions(+), 25 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">diff --git a/res/res_pjsip_endpoint_identifier_ip.c b/res/res_pjsip_endpoint_identifier_ip.c<br>index e40f9bf..51337c0 100644<br>--- a/res/res_pjsip_endpoint_identifier_ip.c<br>+++ b/res/res_pjsip_endpoint_identifier_ip.c<br>@@ -484,47 +484,54 @@<br>    return ast_sip_sorcery_object_to_ami(identify, buf);<br> }<br> <br>-static int find_identify_by_endpoint(void *obj, void *arg, int flags)<br>+static int send_identify_ami_event(void *obj, void *arg, void *data, int flags)<br> {<br>     struct ip_identify_match *identify = obj;<br>     const char *endpoint_name = arg;<br>+     struct ast_sip_ami *ami = data;<br>+      struct ast_str *buf;<br> <br>-      return strcmp(identify->endpoint_name, endpoint_name) ? 0 : CMP_MATCH;<br>+    /* Build AMI event */<br>+        buf = ast_sip_create_ami_event("IdentifyDetail", ami);<br>+     if (!buf) {<br>+          return CMP_STOP;<br>+     }<br>+    if (sip_identify_to_ami(identify, &buf)) {<br>+               ast_free(buf);<br>+               return CMP_STOP;<br>+     }<br>+    ast_str_append(&buf, 0, "EndpointName: %s\r\n", endpoint_name);<br>+<br>+     /* Send AMI event */<br>+ astman_append(ami->s, "%s\r\n", ast_str_buffer(buf));<br>+   ++ami->count;<br>+<br>+  ast_free(buf);<br>+       return 0;<br> }<br> <br> static int format_ami_endpoint_identify(const struct ast_sip_endpoint *endpoint,<br>                                   struct ast_sip_ami *ami)<br> {<br>- RAII_VAR(struct ao2_container *, identifies, NULL, ao2_cleanup);<br>-     RAII_VAR(struct ip_identify_match *, identify, NULL, ao2_cleanup);<br>-   RAII_VAR(struct ast_str *, buf, NULL, ast_free);<br>+     struct ao2_container *identifies;<br>+    struct ast_variable fields = {<br>+               .name = "endpoint",<br>+                .value = ast_sorcery_object_get_id(endpoint),<br>+        };<br> <br>         identifies = ast_sorcery_retrieve_by_fields(ast_sip_get_sorcery(), "identify",<br>-             AST_RETRIEVE_FLAG_MULTIPLE | AST_RETRIEVE_FLAG_ALL, NULL);<br>+           AST_RETRIEVE_FLAG_MULTIPLE, &fields);<br>     if (!identifies) {<br>            return -1;<br>    }<br> <br>- identify = ao2_callback(identifies, 0, find_identify_by_endpoint,<br>-            (void *) ast_sorcery_object_get_id(endpoint));<br>-       if (!identify) {<br>-             return 1;<br>-    }<br>+    /* Build and send any found identify object's AMI IdentifyDetail event. */<br>+       ao2_callback_data(identifies, OBJ_MULTIPLE | OBJ_NODATA,<br>+             send_identify_ami_event,<br>+             (void *) ast_sorcery_object_get_id(endpoint),<br>+                ami);<br> <br>-     if (!(buf = ast_sip_create_ami_event("IdentifyDetail", ami))) {<br>-            return -1;<br>-   }<br>-<br>- if (sip_identify_to_ami(identify, &buf)) {<br>-               return -1;<br>-   }<br>-<br>- ast_str_append(&buf, 0, "EndpointName: %s\r\n",<br>-                ast_sorcery_object_get_id(endpoint));<br>-<br>-     astman_append(ami->s, "%s\r\n", ast_str_buffer(buf));<br>-   ami->count++;<br>-<br>+  ao2_ref(identifies, -1);<br>      return 0;<br> }<br> <br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/7849">change 7849</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/7849"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: Ie146792aef72d78e05416ab5b27bc552a30399db </div>
<div style="display:none"> Gerrit-Change-Number: 7849 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: Richard Mudgett <rmudgett@digium.com> </div>
<div style="display:none"> Gerrit-Reviewer: George Joseph <gjoseph@digium.com> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins2 </div>
<div style="display:none"> Gerrit-Reviewer: Joshua Colp <jcolp@digium.com> </div>