diff --git a/channels/chan_zap.c b/channels/chan_zap.c index e025c89f38da859bb71103f08296043504f91951..88780490b1bd00f9bc6c8fbfdb128caae20b8686 100755 --- a/channels/chan_zap.c +++ b/channels/chan_zap.c @@ -8457,6 +8457,49 @@ static int action_zapdialoffhook(struct mansession *s, struct message *m) return 0; } +static int action_zapshowchannels(struct mansession *s, struct message *m) +{ + struct zt_pvt *tmp = NULL; + char *id = astman_get_header(m, "ActionID"); + char idText[256] = ""; + + astman_send_ack(s, m, "Zapata channel status will follow"); + if (id && !ast_strlen_zero(id)) + snprintf(idText, sizeof(idText) - 1, "ActionID: %s\r\n", id); + + ast_mutex_lock(&iflock); + + tmp = iflist; + while (tmp) { + if (tmp->channel > 0) { + int alarm = get_alarms(tmp); + + ast_cli(s->fd, + "Event: ZapShowChannels\r\n" + "Channel: %d\r\n" + "Signalling: %s\r\n" + "Context: %s\r\n" + "Alarm: %s\r\n" + "%s" + "\r\n", + tmp->channel, sig2str(tmp->sig), tmp->context, + alarm2str(alarm), idText); + } + + tmp = tmp->next; + } + + ast_mutex_unlock(&iflock); + + ast_cli(s->fd, + "Event: ZapShowChannelsComplete\r\n" + "%s" + "\r\n", + idText); + + return 0; +} + static int __unload_module(void) { int x = 0; @@ -8485,6 +8528,7 @@ static int __unload_module(void) ast_manager_unregister( "ZapTransfer" ); ast_manager_unregister( "ZapDNDoff" ); ast_manager_unregister( "ZapDNDon" ); + ast_manager_unregister("ZapShowChannels"); ast_unregister_application(app_callingpres); ast_channel_unregister(typecompat); ast_channel_unregister(type); @@ -9262,6 +9306,7 @@ int load_module(void) ast_manager_register( "ZapDialOffhook", 0, action_zapdialoffhook, "Dial over Zap channel while offhook" ); ast_manager_register( "ZapDNDon", 0, action_zapdndon, "Toggle Zap channel Do Not Disturb status ON" ); ast_manager_register( "ZapDNDoff", 0, action_zapdndoff, "Toggle Zap channel Do Not Disturb status OFF" ); + ast_manager_register("ZapShowChannels", 0, action_zapshowchannels, "Show status zapata channels"); return res; }