diff options
Diffstat (limited to 'hardinfo2')
| -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) | 
