From 44de97d496f88d9eb2f8c0fe6905ff694524c2e8 Mon Sep 17 00:00:00 2001 From: Mark Spencer <markster@digium.com> Date: Sun, 2 May 2004 05:38:20 +0000 Subject: [PATCH] Provide more fine grained control of sip and iax show peers (bug #1470) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@2856 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_iax2.c | 37 ++++++++++++++++++++++++++++++++++++- channels/chan_sip.c | 36 +++++++++++++++++++++++++++++++++++- 2 files changed, 71 insertions(+), 2 deletions(-) diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 230d0c2c69..e517e1954f 100755 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -2956,7 +2956,7 @@ static int iax2_show_peers(int fd, int argc, char *argv[]) struct iax2_peer *peer; char name[256] = ""; int registeredonly=0; - if ((argc != 3) && (argc != 4)) + if ((argc != 3) && (argc != 4) && (argc != 5)) return RESULT_SHOWUSAGE; if ((argc == 4)) { if (!strcasecmp(argv[3], "registered")) { @@ -2969,6 +2969,8 @@ static int iax2_show_peers(int fd, int argc, char *argv[]) for (peer = peerl.peers;peer;peer = peer->next) { char nm[20]; char status[20]; + int print_line = -1; + char srch[2000]; if (registeredonly && !peer->addr.sin_addr.s_addr) continue; if (strlen(peer->username)) @@ -2987,11 +2989,32 @@ static int iax2_show_peers(int fd, int argc, char *argv[]) } else strcpy(status, "Unmonitored"); strncpy(nm, inet_ntoa(peer->mask), sizeof(nm)-1); + + sprintf(srch, FORMAT, name, + peer->addr.sin_addr.s_addr ? inet_ntoa(peer->addr.sin_addr) : "(Unspecified)", + peer->dynamic ? "(D)" : "(S)", + nm, + ntohs(peer->addr.sin_port), peer->trunk ? "(T)" : " ", status); + + if (argc == 5) { + if (!strcasecmp(argv[3],"include") && strstr(srch,argv[4])) { + print_line = -1; + } else if (!strcasecmp(argv[3],"exclude") && !strstr(srch,argv[4])) { + print_line = 1; + } else if (!strcasecmp(argv[3],"begin") && !strncasecmp(srch,argv[4],strlen(argv[4]))) { + print_line = -1; + } else { + print_line = 0; + } + } + + if (print_line) { ast_cli(fd, FORMAT, name, peer->addr.sin_addr.s_addr ? inet_ntoa(peer->addr.sin_addr) : "(Unspecified)", peer->dynamic ? "(D)" : "(S)", nm, ntohs(peer->addr.sin_port), peer->trunk ? "(T)" : " ", status); + } } ast_mutex_unlock(&peerl.lock); return RESULT_SUCCESS; @@ -3176,6 +3199,12 @@ static struct ast_cli_entry cli_show_channels = { { "iax2", "show", "channels", NULL }, iax2_show_channels, "Show active IAX channels", show_channels_usage }; static struct ast_cli_entry cli_show_peers = { { "iax2", "show", "peers", NULL }, iax2_show_peers, "Show defined IAX peers", show_peers_usage }; +static struct ast_cli_entry cli_show_peers_include = + { { "iax2", "show", "peers", "include", NULL }, iax2_show_peers, "Show defined IAX peers", show_peers_usage }; +static struct ast_cli_entry cli_show_peers_exclude = + { { "iax2", "show", "peers", "exclude", NULL }, iax2_show_peers, "Show defined IAX peers", show_peers_usage }; +static struct ast_cli_entry cli_show_peers_begin = + { { "iax2", "show", "peers", "begin", NULL }, iax2_show_peers, "Show defined IAX peers", show_peers_usage }; static struct ast_cli_entry cli_show_registry = { { "iax2", "show", "registry", NULL }, iax2_show_registry, "Show IAX registration status", show_reg_usage }; static struct ast_cli_entry cli_debug = @@ -6740,6 +6769,9 @@ static int __unload_module(void) ast_cli_unregister(&cli_show_users); ast_cli_unregister(&cli_show_channels); ast_cli_unregister(&cli_show_peers); + ast_cli_unregister(&cli_show_peers_include); + ast_cli_unregister(&cli_show_peers_exclude); + ast_cli_unregister(&cli_show_peers_begin); ast_cli_unregister(&cli_show_firmware); ast_cli_unregister(&cli_show_registry); ast_cli_unregister(&cli_debug); @@ -6807,6 +6839,9 @@ int load_module(void) ast_cli_register(&cli_show_users); ast_cli_register(&cli_show_channels); ast_cli_register(&cli_show_peers); + ast_cli_register(&cli_show_peers_include); + ast_cli_register(&cli_show_peers_exclude); + ast_cli_register(&cli_show_peers_begin); ast_cli_register(&cli_show_firmware); ast_cli_register(&cli_show_registry); ast_cli_register(&cli_debug); diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 541418b097..4d07c8cb88 100755 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -4600,13 +4600,15 @@ static int sip_show_peers(int fd, int argc, char *argv[]) #define FORMAT "%-15.15s %-15.15s %s %-15.15s %-8d %-10s\n" struct sip_peer *peer; char name[256] = ""; - if (argc != 3) + if (argc != 3 && argc != 5) return RESULT_SHOWUSAGE; ast_mutex_lock(&peerl.lock); ast_cli(fd, FORMAT2, "Name/username", "Host", " ", "Mask", "Port", "Status"); for (peer = peerl.peers;peer;peer = peer->next) { char nm[20] = ""; char status[20]; + int print_line = -1; + char srch[2000]; strncpy(nm, inet_ntoa(peer->mask), sizeof(nm)-1); if (strlen(peer->username)) snprintf(name, sizeof(name), "%s/%s", peer->name, peer->username); @@ -4623,11 +4625,31 @@ static int sip_show_peers(int fd, int argc, char *argv[]) strcpy(status, "UNKNOWN"); } else strcpy(status, "Unmonitored"); + sprintf(srch, FORMAT, name, + peer->addr.sin_addr.s_addr ? inet_ntoa(peer->addr.sin_addr) : "(Unspecified)", + peer->dynamic ? "(D)" : " ", + nm, + ntohs(peer->addr.sin_port), status); + + if (argc == 5) { + if (!strcasecmp(argv[3],"include") && strstr(srch,argv[4])) { + print_line = -1; + } else if (!strcasecmp(argv[3],"exclude") && !strstr(srch,argv[4])) { + print_line = 1; + } else if (!strcasecmp(argv[3],"begin") && !strncasecmp(srch,argv[4],strlen(argv[4]))) { + print_line = -1; + } else { + print_line = 0; + } + } + + if (print_line) { ast_cli(fd, FORMAT, name, peer->addr.sin_addr.s_addr ? inet_ntoa(peer->addr.sin_addr) : "(Unspecified)", peer->dynamic ? "(D)" : " ", nm, ntohs(peer->addr.sin_port), status); + } } ast_mutex_unlock(&peerl.lock); return RESULT_SUCCESS; @@ -5118,6 +5140,12 @@ static struct ast_cli_entry cli_debug_peer = { { "sip", "debug", "peer", NULL }, sip_do_debug, "Enable SIP debugging on Peername", debug_usage }; static struct ast_cli_entry cli_show_peers = { { "sip", "show", "peers", NULL }, sip_show_peers, "Show defined SIP peers", show_peers_usage }; +static struct ast_cli_entry cli_show_peers_include = + { { "sip", "show", "peers", "include", NULL }, sip_show_peers, "Show defined SIP peers", show_peers_usage }; +static struct ast_cli_entry cli_show_peers_exclude = + { { "sip", "show", "peers", "exclude", NULL }, sip_show_peers, "Show defined SIP peers", show_peers_usage }; +static struct ast_cli_entry cli_show_peers_begin = + { { "sip", "show", "peers", "begin", NULL }, sip_show_peers, "Show defined SIP peers", show_peers_usage }; static struct ast_cli_entry cli_inuse_show = { { "sip", "show", "inuse", NULL }, sip_show_inuse, "List all inuse/limit", show_inuse_usage }; static struct ast_cli_entry cli_show_registry = @@ -7165,6 +7193,9 @@ int load_module() ast_cli_register(&cli_show_channels); ast_cli_register(&cli_show_channel); ast_cli_register(&cli_show_peers); + ast_cli_register(&cli_show_peers_begin); + ast_cli_register(&cli_show_peers_include); + ast_cli_register(&cli_show_peers_exclude); ast_cli_register(&cli_show_registry); ast_cli_register(&cli_debug); ast_cli_register(&cli_debug_ip); @@ -7201,6 +7232,9 @@ int unload_module() ast_cli_unregister(&cli_show_channels); ast_cli_unregister(&cli_show_channel); ast_cli_unregister(&cli_show_peers); + ast_cli_unregister(&cli_show_peers_include); + ast_cli_unregister(&cli_show_peers_exclude); + ast_cli_unregister(&cli_show_peers_begin); ast_cli_unregister(&cli_show_registry); ast_cli_unregister(&cli_debug); ast_cli_unregister(&cli_debug_ip); -- GitLab