diff options
author | Leandro Augusto Fogolin Pereira <leandro@zorg.(none)> | 2009-01-23 17:19:49 -0200 |
---|---|---|
committer | Leandro Augusto Fogolin Pereira <leandro@zorg.(none)> | 2009-01-23 17:19:49 -0200 |
commit | bfc6c84290261a525e7351d062e6a04db2051863 (patch) | |
tree | a8e244ca44c752d908438176c26bac71ecd0778e /hardinfo2/network.c | |
parent | 6db7d6e0a562a10839268db9592932e9b8a58f58 (diff) |
Add Network statistics (aka netstat -s).
Diffstat (limited to 'hardinfo2/network.c')
-rw-r--r-- | hardinfo2/network.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/hardinfo2/network.c b/hardinfo2/network.c index 99067fae..f60e4517 100644 --- a/hardinfo2/network.c +++ b/hardinfo2/network.c @@ -16,6 +16,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include <ctype.h> #include <stdlib.h> #include <string.h> #include <gtk/gtk.h> @@ -40,6 +41,7 @@ gchar *callback_dns(); gchar *callback_connections(); gchar *callback_shares(); gchar *callback_arp(); +gchar *callback_statistics(); /* Scan callbacks */ void scan_network(gboolean reload); @@ -48,6 +50,7 @@ void scan_dns(gboolean reload); void scan_connections(gboolean reload); void scan_shares(gboolean reload); void scan_arp(gboolean reload); +void scan_statistics(gboolean reload); static ModuleEntry entries[] = { {"Interfaces", "network.png", callback_network, scan_network}, @@ -55,6 +58,7 @@ static ModuleEntry entries[] = { {"Routing Table", "network-generic.png", callback_route, scan_route}, {"ARP Table", "module.png", callback_arp, scan_arp}, {"DNS Servers", "module.png", callback_dns, scan_dns}, + {"Statistics", "module.png", callback_statistics, scan_statistics}, {"Shared Directories", "shares.png", callback_shares, scan_shares}, {NULL}, }; @@ -71,6 +75,52 @@ void scan_shares(gboolean reload) SCAN_END(); } +static gchar *__statistics = NULL; +void scan_statistics(gboolean reload) +{ + FILE *netstat; + gchar buffer[256]; + + SCAN_START(); + + g_free(__statistics); + __statistics = g_strdup(""); + + if ((netstat = popen("netstat -s", "r"))) { + while (fgets(buffer, 256, netstat)) { + if (!isspace(buffer[0]) && strchr(buffer, ':')) { + gchar *tmp; + + tmp = g_ascii_strup(strend(buffer, ':'), -1); + + __statistics = h_strdup_cprintf("[%s]\n", + __statistics, + tmp); + + g_free(tmp); + } else if (isdigit(buffer[4])) { + gchar *tmp1 = buffer + 4, + *tmp2 = tmp1; + + while (*tmp2 && !isspace(*tmp2)) tmp2++; + *tmp2 = 0; + tmp2++; + + *tmp2 = toupper(*tmp2); + + __statistics = h_strdup_cprintf("%s=%s\n", + __statistics, + g_strstrip(tmp1), + g_strstrip(tmp2)); + } + } + + pclose(netstat); + } + + SCAN_END(); +} + static gchar *__nameservers = NULL; void scan_dns(gboolean reload) { @@ -275,6 +325,14 @@ gchar *callback_route() __routing_table); } +gchar *callback_statistics() +{ + return g_strdup_printf("%s\n" + "[$ShellParam$]\n" + "ReloadInterval=3000\n", + __statistics); +} + gchar *hi_more_info(gchar * entry) { gchar *info = (gchar *) g_hash_table_lookup(moreinfo, entry); |