diff options
-rw-r--r-- | hardinfo2/hardinfo.h | 2 | ||||
-rw-r--r-- | hardinfo2/network.c | 58 | ||||
-rw-r--r-- | hardinfo2/util.c | 6 |
3 files changed, 63 insertions, 3 deletions
diff --git a/hardinfo2/hardinfo.h b/hardinfo2/hardinfo.h index 534a3123..63a5cfa8 100644 --- a/hardinfo2/hardinfo.h +++ b/hardinfo2/hardinfo.h @@ -65,7 +65,7 @@ struct _ModuleAbout { /* String utility functions */ inline void remove_quotes(gchar *str); -inline void strend(gchar *str, gchar chr); +inline char *strend(gchar *str, gchar chr); inline void remove_linefeed(gchar *str); gchar *strreplace(gchar *string, gchar *replace, gchar new_char); 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); diff --git a/hardinfo2/util.c b/hardinfo2/util.c index d2954573..9ef0c869 100644 --- a/hardinfo2/util.c +++ b/hardinfo2/util.c @@ -86,14 +86,16 @@ inline gchar *size_human_readable(gfloat size) return g_strdup_printf("%.1f GiB", size / GiB); } -inline void strend(gchar * str, gchar chr) +inline char *strend(gchar * str, gchar chr) { if (!str) - return; + return NULL; char *p; if ((p = strchr(str, chr))) *p = 0; + + return str; } inline void remove_quotes(gchar * str) |