--- chan_iax2.c.orig 2007-01-25 17:05:38.000000000 -0500 +++ chan_iax2.c 2007-01-25 17:19:06.000000000 -0500 @@ -4345,6 +4345,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 = NULL; + int peer_count = 0; + + astman_append(s, "Response: Success\r\nMessage: IAX Peer status list will follow\r\n\r\n"); + + + AST_LIST_LOCK(&peers); + AST_LIST_TRAVERSE(&peers, peer, entry) { + char nm[20]; + char status[20]; + + astman_append(s, "Event: PeerEntry\r\nChanneltype: IAX\r\n"); + + if (!ast_strlen_zero(peer->username)) { + astman_append(s, "ObjectName: %s\r\nObjectUsername: %s\r\n", peer->name, peer->username); + } else { + astman_append(s, "ObjectName: %s\r\n", peer->name); + } + astman_append(s, "ChanObjectType: peer\r\n"); + astman_append(s, "IPaddress: %s\r\n", peer->addr.sin_addr.s_addr ? ast_inet_ntoa(peer->addr.sin_addr) : "-none-"); + ast_copy_string(nm, ast_inet_ntoa(peer->mask), sizeof(nm)); + astman_append(s, "Mask: %s\r\n", nm); + astman_append(s, "Port: %d\r\n", ntohs(peer->addr.sin_port)); + astman_append(s, "Dynamic: %s\r\n", ast_test_flag(peer, IAX_DYNAMIC) ? "Yes" : "No"); + peer_status(peer, status, sizeof(status)); + astman_append(s, "Status: %s\r\n\r\n", status); + peer_count++; + } + AST_LIST_UNLOCK(&peers); + + astman_append(s, "Event: PeerlistComplete\r\nListItems: %d\r\n\r\n", peer_count); + return RESULT_SUCCESS; +} + static char *regstate2str(int regstate) { switch(regstate) { @@ -10066,6 +10103,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(cli_iax2, sizeof(cli_iax2) / sizeof(struct ast_cli_entry)); @@ -10142,6 +10180,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" ); if(set_config(config, 0) == -1)