--- chan_iax2.c.orig 2007-01-25 14:07:20.000000000 -0500 +++ chan_iax2.c 2007-01-25 14:49:51.000000000 -0500 @@ -4368,6 +4368,43 @@ return ret; } /* /JDG */ +/* callback to display iax peers in manager format */ +static int manager_iax2_show_peer_list( struct mansession *s, struct message *m ) +{ + struct iax2_peer *peer; + char iabuf[INET_ADDRSTRLEN]; + int peer_count = 0; + + ast_cli(s->fd, "Response: Success\r\nMessage: IAX Peer status list will follow\r\n\r\n"); + + ast_mutex_lock(&peerl.lock); + for (peer = peerl.peers;peer;peer = peer->next) { + char nm[20]; + char status[20]; + + ast_cli(s->fd, "Event: PeerEntry\r\nChanneltype: IAX\r\n"); + + if (!ast_strlen_zero(peer->username)) { + ast_cli(s->fd, "ObjectName: %s\r\nObjectUsername: %s\r\n", peer->name, peer->username); + } else { + ast_cli(s->fd, "ObjectName: %s\r\n", peer->name); + } + ast_cli(s->fd, "ChanObjectType: peer\r\n"); + ast_cli(s->fd, "IPaddress: %s\r\n", peer->addr.sin_addr.s_addr ? ast_inet_ntoa(iabuf, sizeof(iabuf), peer->addr.sin_addr) : "-none-"); + ast_copy_string(nm, ast_inet_ntoa(iabuf, sizeof(iabuf), peer->mask), sizeof(nm)); + ast_cli(s->fd, "Mask: %s\r\n", nm); + ast_cli(s->fd, "Port: %d\r\n", ntohs(peer->addr.sin_port)); + ast_cli(s->fd, "Dynamic: %s\r\n", ast_test_flag(peer, IAX_DYNAMIC) ? "Yes" : "No"); + peer_status(peer, status, sizeof(status)); + ast_cli(s->fd, "Status: %s\r\n\r\n", status); + peer_count++; + } + ast_mutex_unlock(&peerl.lock); + + ast_cli(s->fd, "Event: PeerlistComplete\r\nListItems: %d\r\n\r\n", peer_count); + return RESULT_SUCCESS; +} + static char *regstate2str(int regstate) { switch(regstate) { @@ -9648,6 +9685,7 @@ if (iaxs[x]) iax2_destroy(x); ast_manager_unregister( "IAXpeers" ); + ast_manager_unregister( "IAXpeerlist" ); ast_manager_unregister( "IAXnetstats" ); ast_unregister_application(papp); ast_cli_unregister_multiple(iax2_cli, sizeof(iax2_cli) / sizeof(iax2_cli[0])); @@ -9727,6 +9765,7 @@ ast_register_application(papp, iax2_prov_app, psyn, pdescrip); ast_manager_register( "IAXpeers", 0, manager_iax2_show_peers, "List IAX Peers" ); + ast_manager_register( "IAXpeerlist", 0, manager_iax2_show_peer_list, "List IAX Peers" ); ast_manager_register( "IAXnetstats", 0, manager_iax2_show_netstats, "Show IAX Netstats" ); set_config(config, 0);