--- asterisk-11.0.0-rc2/channels/chan_sip.c 2012-10-17 15:22:46.000000000 -0400 +++ asterisk-11.0.0-rc2-new/channels/chan_sip.c 2012-11-08 10:12:26.000000000 -0500 @@ -18425,7 +18425,7 @@ case CLI_INIT: e->command = "sip show peers"; e->usage = - "Usage: sip show peers [like ]\n" + "Usage: sip show peers [like ] [summary json/xml/txt]\n" " Lists all known SIP peers.\n" " Optional regular expression pattern is used to filter the peer list.\n"; return NULL; @@ -18463,6 +18463,7 @@ int peers_mon_offline = 0; int peers_unmon_offline = 0; int peers_unmon_online = 0; + int summary_format = 0; const char *id; char idtext[256] = ""; int realtimepeers; @@ -18479,15 +18480,43 @@ } switch (argc) { + case 7: + if (!strcasecmp(argv[3], "like")) { + if (regcomp(®exbuf, argv[4], REG_EXTENDED | REG_NOSUB)) { + return CLI_SHOWUSAGE; + } + havepattern = TRUE; + } + if (!strcasecmp(argv[5], "summary")) { + if (!strcasecmp(argv[4], "xml")) { + summary_format = 2; + } else if (!strcasecmp(argv[4], "json")) { + summary_format = 1; + } else { + summary_format = 0; + } + } else { + return CLI_SHOWUSAGE; + } + break; case 5: if (!strcasecmp(argv[3], "like")) { if (regcomp(®exbuf, argv[4], REG_EXTENDED | REG_NOSUB)) { return CLI_SHOWUSAGE; } havepattern = TRUE; + } else if (!strcasecmp(argv[3], "summary")) { + if (!strcasecmp(argv[4], "xml")) { + summary_format = 2; + } else if (!strcasecmp(argv[4], "json")) { + summary_format = 1; + } else { + summary_format = 0; + } } else { return CLI_SHOWUSAGE; } + break; case 3: break; default: @@ -18634,8 +18663,20 @@ } if (!s) { - ast_cli(fd, "%d sip peers [Monitored: %d online, %d offline Unmonitored: %d online, %d offline]\n", - total_peers, peers_mon_online, peers_mon_offline, peers_unmon_online, peers_unmon_offline); + switch(summary_format) { + case 1: + ast_cli(fd, "{\"sip_peers\":%d,\"monitored\":{\"online\":%d,\"offline\":%d},\"unmonitored\":{\"online\":%d,\"offline\":%d}}\n", + total_peers, peers_mon_online, peers_mon_offline, peers_unmon_online, peers_unmon_offline); + break; + case 2: + ast_cli(fd, "%d%d%d%d%d\n", + total_peers, peers_mon_online, peers_mon_offline, peers_unmon_online, peers_unmon_offline); + break; + default: + ast_cli(fd, "%d sip peers [Monitored: %d online, %d offline Unmonitored: %d online, %d offline]\n", + total_peers, peers_mon_online, peers_mon_offline, peers_unmon_online, peers_unmon_offline); + break; + } } if (havepattern) {