diff options
Diffstat (limited to 'hardinfo2')
| -rw-r--r-- | hardinfo2/Makefile.in | 2 | ||||
| -rw-r--r-- | hardinfo2/computer.c | 45 | ||||
| -rw-r--r-- | hardinfo2/network.c | 306 | ||||
| -rw-r--r-- | hardinfo2/shell.c | 4 | 
4 files changed, 307 insertions, 50 deletions
| diff --git a/hardinfo2/Makefile.in b/hardinfo2/Makefile.in index 1653e73d..384b23da 100644 --- a/hardinfo2/Makefile.in +++ b/hardinfo2/Makefile.in @@ -11,7 +11,7 @@ OBJECTS = hardinfo.o shell.o util.o iconcache.o loadgraph.o  \  		vendor.o socket.o syncmanager.o  BENCHMARK_OBJECTS = fbench.o sha1.o blowfish.o md5.o nqueens.o -MODULES = computer.so devices.so benchmark.so  +MODULES = computer.so devices.so benchmark.so network.so  all:	$(OBJECTS) $(MODULES) hardinfo diff --git a/hardinfo2/computer.c b/hardinfo2/computer.c index a314adb0..558206e7 100644 --- a/hardinfo2/computer.c +++ b/hardinfo2/computer.c @@ -38,7 +38,6 @@ gchar *callback_modules();  gchar *callback_boots();  gchar *callback_locales();  gchar *callback_fs(); -gchar *callback_shares();  gchar *callback_display();  gchar *callback_network();  gchar *callback_users(); @@ -51,7 +50,6 @@ void scan_modules(gboolean reload);  void scan_boots(gboolean reload);  void scan_locales(gboolean reload);  void scan_fs(gboolean reload); -void scan_shares(gboolean reload);  void scan_display(gboolean reload);  void scan_network(gboolean reload);  void scan_users(gboolean reload); @@ -64,9 +62,7 @@ static ModuleEntry entries[] = {      {"Boots", "boot.png", callback_boots, scan_boots},      {"Languages", "language.png", callback_locales, scan_locales},      {"Filesystems", "dev_removable.png", callback_fs, scan_fs}, -    {"Shared Directories", "shares.png", callback_shares, scan_shares},      {"Display", "monitor.png", callback_display, scan_display}, -    {"Network Interfaces", "network.png", callback_network, scan_network},      {"Environment Variables", "environment.png", callback_env_var, scan_env_var},      {"Users", "users.png", callback_users, scan_users},      {NULL}, @@ -87,9 +83,6 @@ static Computer *computer = NULL;  #include <arch/this/uptime.h>  #include <arch/this/os.h>  #include <arch/this/filesystem.h> -#include <arch/this/samba.h> -#include <arch/this/nfs.h> -#include <arch/this/net.h>  #include <arch/common/users.h>  #include <arch/this/boots.h>  #include <arch/common/environment.h> @@ -172,14 +165,6 @@ void scan_fs(gboolean reload)      SCAN_END();  } -void scan_shares(gboolean reload) -{ -    SCAN_START(); -    scan_samba_shared_directories(); -    scan_nfs_shared_directories(); -    SCAN_END(); -} -  void scan_display(gboolean reload)  {      SCAN_START(); @@ -187,13 +172,6 @@ void scan_display(gboolean reload)      SCAN_END();  } -void scan_network(gboolean reload) -{ -    SCAN_START(); -    scan_net_interfaces(); -    SCAN_END(); -} -  void scan_users(gboolean reload)  {      SCAN_START(); @@ -326,14 +304,6 @@ gchar *callback_fs()  			   "[Mounted File Systems]\n%s\n", fs_list);  } -gchar *callback_shares() -{ -    return g_strdup_printf("[SAMBA]\n" -			   "%s\n" -			   "[NFS]\n" -			   "%s", smb_shares_list, nfs_shares_list); -} -  gchar *callback_display()  {      return g_strdup_printf("[Display]\n" @@ -361,21 +331,6 @@ gchar *callback_display()  			   computer->display->dri ? "Yes" : "No");  } -gchar *callback_network() -{ -    return g_strdup_printf("%s\n" -                           "[$ShellParam$]\n" -			   "ReloadInterval=3000\n" -			   "ViewType=1\n" -			   "ColumnTitle$TextValue=Device\n" -			   "ColumnTitle$Value=IP Address\n" -			   "ColumnTitle$Extra1=Statistics\n" -			   "ShowColumnHeaders=true\n" -			   "%s", -			   network_interfaces, -			   network_icons); -} -  gchar *callback_users()  {      return g_strdup_printf("[$ShellParam$]\n" diff --git a/hardinfo2/network.c b/hardinfo2/network.c new file mode 100644 index 00000000..10b291bd --- /dev/null +++ b/hardinfo2/network.c @@ -0,0 +1,306 @@ +/* + *    HardInfo - Displays System Information + *    Copyright (C) 2003-2008 Leandro A. F. Pereira <leandro@hardinfo.org> + * + *    This program is free software; you can redistribute it and/or modify + *    it under the terms of the GNU General Public License as published by + *    the Free Software Foundation, version 2. + * + *    This program is distributed in the hope that it will be useful, + *    but WITHOUT ANY WARRANTY; without even the implied warranty of + *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *    GNU General Public License for more details. + * + *    You should have received a copy of the GNU General Public License + *    along with this program; if not, write to the Free Software + *    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA + */ + +#include <stdlib.h> +#include <string.h> +#include <gtk/gtk.h> +#include <config.h> +#include <time.h> +#include <string.h> +#include <sys/utsname.h> +#include <sys/stat.h> + +#include <hardinfo.h> +#include <iconcache.h> +#include <shell.h> + +#include <vendor.h> + +static GHashTable *moreinfo = NULL; + +/* Callbacks */ +gchar *callback_network(); +gchar *callback_route(); +gchar *callback_dns(); +gchar *callback_connections(); +gchar *callback_shares(); +gchar *callback_arp(); + +/* Scan callbacks */ +void scan_network(gboolean reload); +void scan_route(gboolean reload); +void scan_dns(gboolean reload); +void scan_connections(gboolean reload); +void scan_shares(gboolean reload); +void scan_arp(gboolean reload); + +static ModuleEntry entries[] = { +    {"Interfaces", "network.png", callback_network, scan_network}, +    {"Connections", "module.png", callback_connections, scan_connections}, +    {"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}, +    {"Shared Directories", "shares.png", callback_shares, scan_shares}, +    {NULL}, +}; + +#include <arch/this/samba.h> +#include <arch/this/nfs.h> +#include <arch/this/net.h> + +void scan_shares(gboolean reload) +{ +    SCAN_START(); +    scan_samba_shared_directories(); +    scan_nfs_shared_directories(); +    SCAN_END(); +} + +static gchar *__nameservers = NULL; +void scan_dns(gboolean reload) +{ +    FILE *resolv; +    gchar buffer[256]; +     +    SCAN_START(); +     +    g_free(__nameservers); +    __nameservers = g_strdup(""); +     +    if ((resolv = fopen("/etc/resolv.conf", "r"))) { +      while (fgets(buffer, 256, resolv)) { +        if (g_str_has_prefix(buffer, "nameserver")) { +          __nameservers = h_strdup_cprintf("%s=\n", +                                           __nameservers, +                                           g_strstrip(buffer + sizeof("nameserver"))); +        }  +      } +      fclose(resolv); +    } +     +    SCAN_END(); +} + +void scan_network(gboolean reload) +{ +    SCAN_START(); +    scan_net_interfaces(); +    SCAN_END(); +} + +static gchar *__routing_table = NULL; +void scan_route(gboolean reload) +{ +    FILE *route; +    gchar buffer[256]; +     +    SCAN_START(); + +    g_free(__routing_table); +    __routing_table = g_strdup(""); +     +    if ((route = popen("route -n", "r"))) { +      /* eat first two lines */ +      fgets(buffer, 256, route); +      fgets(buffer, 256, route); + +      while (fgets(buffer, 256, route)) { +        buffer[15] = '\0'; +        buffer[31] = '\0'; +        buffer[47] = '\0'; +        buffer[53] = '\0'; +         +        __routing_table = h_strdup_cprintf("%s / %s=%s|%s|%s\n", +                                           __routing_table, +                                           g_strstrip(buffer), g_strstrip(buffer + 16), +                                           g_strstrip(buffer + 72), +                                           g_strstrip(buffer + 48), +                                           g_strstrip(buffer + 32)); +      } +       +      pclose(route); +    } +     +    SCAN_END(); +} + +static gchar *__arp_table = NULL; +void scan_arp(gboolean reload) +{ +    FILE *arp; +    gchar buffer[256]; +     +    SCAN_START(); + +    g_free(__arp_table); +    __arp_table = g_strdup(""); +     +    if ((arp = fopen("/proc/net/arp", "r"))) { +      /* eat first line */ +      fgets(buffer, 256, arp); + +      while (fgets(buffer, 256, arp)) { +        buffer[15] = '\0'; +        buffer[58] = '\0'; +         +        __arp_table = h_strdup_cprintf("%s=%s|%s\n", +                                       __arp_table, +                                       g_strstrip(buffer), +                                       g_strstrip(buffer + 41), +                                       g_strstrip(buffer + 72)); +      } +       +      pclose(arp); +    } +     +    SCAN_END(); +} + +static gchar *__connections = NULL; +void scan_connections(gboolean reload) +{ +    FILE *netstat; +    gchar buffer[256]; +     +    SCAN_START(); + +    g_free(__connections); +    __connections = g_strdup(""); +     +    if ((netstat = popen("netstat -an", "r"))) { +      while (fgets(buffer, 256, netstat)) { +      } +       +      pclose(netstat); +    } +     +    SCAN_END(); +} + +gchar *callback_arp() +{ +    return g_strdup_printf("[ARP Table]\n" +                           "%s\n" +                           "[$ShellParam$]\n" +                           "ReloadInterval=3000\n" +                           "ColumnTitle$TextValue=Hardware Address\n" +                           "ColumnTitle$Value=IP Address\n" +                           "ColumnTitle$Extra1=Interface\n" +                           "ShowColumnHeaders=true\n", +                           __arp_table); +} + +gchar *callback_shares() +{ +    return g_strdup_printf("[SAMBA]\n" +			   "%s\n" +			   "[NFS]\n" +			   "%s", smb_shares_list, nfs_shares_list); +} + +gchar *callback_dns() +{ +    return g_strdup_printf("[Name servers]\n" +                           "%s\n", __nameservers); +} + +gchar *callback_connections() +{ +    return g_strdup_printf("[Connections]\n" +                           "Local Address=Protocol|Foreign Address|State\n" +                           "[$ShellParam$]\n" +                           "ColumnTitle$TextValue=Local Address\n" +                           "ColumnTitle$Value=Protocol\n" +                           "ColumnTitle$Extra1=Foreign Address\n" +                           "ColumnTitle$Extra2=State\n" +                           "ShowColumnHeaders=true\n"); +} + +gchar *callback_network() +{ +    return g_strdup_printf("%s\n" +                           "[$ShellParam$]\n" +			   "ReloadInterval=3000\n" +			   "ViewType=1\n" +			   "ColumnTitle$TextValue=Device\n" +			   "ColumnTitle$Value=IP Address\n" +			   "ColumnTitle$Extra1=Statistics\n" +			   "ShowColumnHeaders=true\n" +			   "%s", +			   network_interfaces, +			   network_icons); +} + +gchar *callback_route() +{ +    return g_strdup_printf("[IP routing table]\n" +                           "%s\n" +                           "[$ShellParam$]\n" +                           "ViewType=0\n" +                           "ReloadInterval=3000\n" +                           "ColumnTitle$TextValue=Destination / Gateway\n" +                           "ColumnTitle$Value=Interface\n" +                           "ColumnTitle$Extra1=Flags\n" +                           "ColumnTitle$Extra2=Mask\n" +                           "ShowColumnHeaders=true\n", +                           __routing_table); +} + +gchar *hi_more_info(gchar * entry) +{ +    gchar *info = (gchar *) g_hash_table_lookup(moreinfo, entry); + +    if (info) +	return g_strdup(info); + +    return g_strdup_printf("[%s]", entry); +} + +ModuleEntry *hi_module_get_entries(void) +{ +    return entries; +} + +gchar *hi_module_get_name(void) +{ +    return g_strdup("Network"); +} + +guchar hi_module_get_weight(void) +{ +    return 85; +} + +void hi_module_init(void) +{ +    moreinfo = +	g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); +} + +ModuleAbout *hi_module_get_about(void) +{ +    static ModuleAbout ma[] = { +	{ +	 .author = "Leandro A. F. Pereira", +	 .description = "Gathers information about this computer's network connection", +	 .version = VERSION, +	 .license = "GNU GPL version 2"} +    }; + +    return ma; +} diff --git a/hardinfo2/shell.c b/hardinfo2/shell.c index 8ae2fd3b..90086103 100644 --- a/hardinfo2/shell.c +++ b/hardinfo2/shell.c @@ -720,9 +720,6 @@ info_tree_compare_val_func(GtkTreeModel * model,  static void set_view_type(ShellViewType viewtype)  { -    if (viewtype == shell->view_type) -	return; -      if (viewtype < SHELL_VIEW_NORMAL || viewtype >= SHELL_VIEW_N_VIEWS)  	viewtype = SHELL_VIEW_NORMAL; @@ -745,7 +742,6 @@ static void set_view_type(ShellViewType viewtype)      /* turn off the save graphic action */      shell_action_set_enabled("SaveGraphAction", FALSE); -      switch (viewtype) {      default:      case SHELL_VIEW_NORMAL: | 
