+ STAT_OUTPUT(" Commands sent : %d", silcd->stat.commands_sent);
+ STAT_OUTPUT(" Commands received : %d", silcd->stat.commands_received);
+ STAT_OUTPUT(" Connections : %d", silcd->stat.conn_num);
+
+#undef STAT_OUTPUT
+
+#ifdef SILC_DEBUG
+ /* Dump internal flags */
+ fprintf(fdd, "\nDumping internal flags\n");
+ fprintf(fdd, " server_type : %d\n", silcd->server_type);
+ fprintf(fdd, " standalone : %d\n", silcd->standalone);
+ fprintf(fdd, " listenning : %d\n", silcd->listenning);
+ fprintf(fdd, " background : %d\n", silcd->background);
+ fprintf(fdd, " backup_router : %d\n", silcd->backup_router);
+ fprintf(fdd, " backup_primary : %d\n", silcd->backup_primary);
+ fprintf(fdd, " backup_noswitch : %d\n", silcd->backup_noswitch);
+ fprintf(fdd, " backup_closed : %d\n", silcd->backup_closed);
+ fprintf(fdd, " wait_backup : %d\n", silcd->wait_backup);
+ if (silcd->router)
+ fprintf(fdd, " primary router : %s\n",
+ silcd->router->server_name ? silcd->router->server_name : "");
+
+ /* Dump connections */
+ {
+ SilcPacketStream s;
+ SilcDList conns = silc_packet_engine_get_streams(silcd->packet_engine);
+
+ fprintf(fdd, "\nDumping connections\n");
+ silc_dlist_start(conns);
+ while ((s = silc_dlist_get(conns))) {
+ const char *hostname, *ip;
+ SilcUInt16 port;
+ SilcSocket sock;
+ SilcIDListData idata = silc_packet_get_context(s);
+ if (!silc_socket_stream_get_info(silc_packet_stream_get_stream(s),
+ &sock, &hostname, &ip, &port))
+ continue;
+ fprintf(fdd, " %d: host %s ip %s port %d type %d\n",
+ sock, hostname ? hostname : "N/A",
+ ip ? ip : "N/A", port, idata ? idata->conn_type : 0);
+ }
+ silc_dlist_uninit(conns);
+ }
+
+ /* Dump lists */
+ {
+ SilcList list;
+ SilcIDCacheEntry id_cache = NULL;
+ SilcServerEntry server_entry;
+ SilcClientEntry client_entry;
+ SilcChannelEntry channel_entry;
+ int c;
+
+ fprintf(fdd, "\nDumping databases\n");
+
+ if (silc_idcache_get_all(silcd->local_list->servers, &list)) {
+ c = 1;
+ fprintf(fdd, "\nServers in local-list:\n");
+ while ((id_cache = silc_list_get(list))) {
+ server_entry = (SilcServerEntry)id_cache->context;
+ fprintf(fdd, " %d: name %s id %s status 0x%x\n", c,
+ server_entry->server_name ? server_entry->server_name :
+ "N/A", server_entry->id ?
+ silc_id_render(server_entry->id, SILC_ID_SERVER) : "N/A",
+ server_entry->data.status);
+ c++;
+ }
+ }
+ if (silc_idcache_get_all(silcd->global_list->servers, &list)) {
+ fprintf(fdd, "\nServers in global-list:\n");
+ c = 1;
+ while ((id_cache = silc_list_get(list))) {
+ server_entry = (SilcServerEntry)id_cache->context;
+ fprintf(fdd, " %d: name %s id %s status 0x%x\n", c,
+ server_entry->server_name ? server_entry->server_name :
+ "N/A", server_entry->id ?
+ silc_id_render(server_entry->id, SILC_ID_SERVER) : "N/A",
+ server_entry->data.status);
+ c++;
+ }
+ }
+ if (silc_idcache_get_all(silcd->local_list->clients, &list)) {
+ fprintf(fdd, "\nClients in local-list:\n");
+ c = 1;
+ while ((id_cache = silc_list_get(list))) {
+ client_entry = (SilcClientEntry)id_cache->context;
+ server_entry = client_entry->router;
+ fprintf(fdd, " %d: name %s id %s status 0x%x from %s\n", c,
+ client_entry->nickname ? client_entry->nickname :
+ (unsigned char *)"N/A", client_entry->id ?
+ silc_id_render(client_entry->id, SILC_ID_CLIENT) : "N/A",
+ client_entry->data.status, server_entry ?
+ server_entry->server_name ? server_entry->server_name :
+ "N/A" : "local");
+ c++;
+ }
+ }
+ if (silc_idcache_get_all(silcd->global_list->clients, &list)) {
+ fprintf(fdd, "\nClients in global-list:\n");
+ c = 1;
+ while ((id_cache = silc_list_get(list))) {
+ client_entry = (SilcClientEntry)id_cache->context;
+ server_entry = client_entry->router;
+ fprintf(fdd, " %d: name %s id %s status 0x%x from %s\n", c,
+ client_entry->nickname ? client_entry->nickname :
+ (unsigned char *)"N/A", client_entry->id ?
+ silc_id_render(client_entry->id, SILC_ID_CLIENT) : "N/A",
+ client_entry->data.status, server_entry ?
+ server_entry->server_name ? server_entry->server_name :
+ "N/A" : "local");
+ c++;
+ }
+ }
+ if (silc_idcache_get_all(silcd->local_list->channels, &list)) {
+ fprintf(fdd, "\nChannels in local-list:\n");
+ c = 1;
+ while ((id_cache = silc_list_get(list))) {
+ channel_entry = (SilcChannelEntry)id_cache->context;
+ fprintf(fdd, " %d: name %s id %s\n", c,
+ channel_entry->channel_name ? channel_entry->channel_name :
+ "N/A", channel_entry->id ?
+ silc_id_render(channel_entry->id, SILC_ID_CHANNEL) : "N/A");
+ c++;
+ }
+ }
+ if (silc_idcache_get_all(silcd->global_list->channels, &list)) {
+ fprintf(fdd, "\nChannels in global-list:\n");
+ c = 1;
+ while ((id_cache = silc_list_get(list))) {
+ channel_entry = (SilcChannelEntry)id_cache->context;
+ fprintf(fdd, " %d: name %s id %s\n", c,
+ channel_entry->channel_name ? channel_entry->channel_name :
+ "N/A", channel_entry->id ?
+ silc_id_render(channel_entry->id, SILC_ID_CHANNEL) : "N/A");
+ c++;
+ }
+ }
+ }
+#endif