chan_dahdi: Add logical group at DAHDIChannel event and CHANNEL function
authorcirillor <cirillor@lbv.org.br>
Tue, 5 Mar 2019 14:15:00 +0000 (11:15 -0300)
committerCirillo Ferreira <cirillor@lbv.org.br>
Mon, 11 Mar 2019 12:32:24 +0000 (06:32 -0600)
Add logical group at DAHDIChannel event
and create "dahdi_group" at CHANNEL function.

ASTERISK-28317

Change-Id: Ic1f834cd53982a9707a9748395ee746d6575086a

channels/chan_dahdi.c

index 1eb618b..9f03042 100644 (file)
                        <enum name="dahdi_span">
                                <para>R/O DAHDI span related to this channel.</para>
                        </enum>
+                       <enum name="dahdi_group">
+                               <para>R/O DAHDI logical group related to this channel.</para>
+                       </enum>
                        <enum name="dahdi_type">
                                <para>R/O DAHDI channel type, one of:</para>
                                <enumlist>
                        <synopsis>Raised when a DAHDI channel is created or an underlying technology is associated with a DAHDI channel.</synopsis>
                        <syntax>
                                <channel_snapshot/>
+                               <parameter name="DAHDIGroup">
+                                       <para>The DAHDI logical group associated with this channel.</para>
+                               </parameter>
                                <parameter name="DAHDISpan">
                                        <para>The DAHDI span associated with this channel.</para>
                                </parameter>
@@ -1727,21 +1733,24 @@ static struct ast_manager_event_blob *dahdichannel_to_ami(struct stasis_message
 {
        RAII_VAR(struct ast_str *, channel_string, NULL, ast_free);
        struct ast_channel_blob *obj = stasis_message_data(msg);
-       struct ast_json *span, *channel;
+       struct ast_json *group, *span, *channel;
 
        channel_string = ast_manager_build_channel_state_string(obj->snapshot);
        if (!channel_string) {
                return NULL;
        }
 
+       group = ast_json_object_get(obj->blob, "group");
        span = ast_json_object_get(obj->blob, "span");
        channel = ast_json_object_get(obj->blob, "channel");
 
        return ast_manager_event_blob_create(EVENT_FLAG_CALL, "DAHDIChannel",
                "%s"
+               "DAHDIGroup: %llu\r\n"
                "DAHDISpan: %u\r\n"
                "DAHDIChannel: %s\r\n",
                ast_str_buffer(channel_string),
+               (ast_group_t)ast_json_integer_get(group),
                (unsigned int)ast_json_integer_get(span),
                ast_json_string_get(channel));
 }
@@ -1751,13 +1760,14 @@ STASIS_MESSAGE_TYPE_DEFN_LOCAL(dahdichannel_type,
        );
 
 /*! \brief Sends a DAHDIChannel channel blob used to produce DAHDIChannel AMI messages */
-static void publish_dahdichannel(struct ast_channel *chan, int span, const char *dahdi_channel)
+static void publish_dahdichannel(struct ast_channel *chan, ast_group_t group, int span, const char *dahdi_channel)
 {
        RAII_VAR(struct ast_json *, blob, NULL, ast_json_unref);
 
        ast_assert(dahdi_channel != NULL);
 
-       blob = ast_json_pack("{s: i, s: s}",
+       blob = ast_json_pack("{s: i, s: i, s: s}",
+               "group", group,
                "span", span,
                "channel", dahdi_channel);
        if (!blob) {
@@ -1793,7 +1803,7 @@ static void dahdi_ami_channel_event(struct dahdi_pvt *p, struct ast_channel *cha
                /* Real channel */
                snprintf(ch_name, sizeof(ch_name), "%d", p->channel);
        }
-       publish_dahdichannel(chan, p->span, ch_name);
+       publish_dahdichannel(chan, p->group, p->span, ch_name);
 }
 
 #ifdef HAVE_PRI
@@ -6692,6 +6702,10 @@ static int dahdi_func_read(struct ast_channel *chan, const char *function, char
                ast_mutex_lock(&p->lock);
                snprintf(buf, len, "%d", p->span);
                ast_mutex_unlock(&p->lock);
+       } else if (!strcasecmp(data, "dahdi_group")) {
+               ast_mutex_lock(&p->lock);
+               snprintf(buf, len, "%llu", p->group);
+               ast_mutex_unlock(&p->lock);
        } else if (!strcasecmp(data, "dahdi_type")) {
                ast_mutex_lock(&p->lock);
                switch (p->sig) {