Index: channels/chan_iax2.c =================================================================== RCS file: /usr/cvsroot/asterisk/channels/chan_iax2.c,v retrieving revision 1.124 diff -u -r1.124 chan_iax2.c --- channels/chan_iax2.c 21 Apr 2004 00:33:09 -0000 1.124 +++ channels/chan_iax2.c 23 Apr 2004 21:08:12 -0000 @@ -2864,7 +2864,7 @@ 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")) { @@ -2877,6 +2877,8 @@ 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)) @@ -2895,11 +2897,32 @@ } 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; @@ -3084,6 +3107,12 @@ { { "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 = @@ -6639,6 +6668,9 @@ 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); @@ -6706,6 +6738,9 @@ 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);