diff options
| author | Leandro Pereira <leandro@hardinfo.org> | 2009-04-24 23:39:49 -0300 | 
|---|---|---|
| committer | Leandro Pereira <leandro@hardinfo.org> | 2009-04-24 23:39:49 -0300 | 
| commit | 04bcf66369596532695ec5204601a90ebd50976f (patch) | |
| tree | 627c40012d05df9dd45e44cf966978bc8197b43b /hardinfo2 | |
| parent | 02af98db80e09f8a03cdb5fbb44ac3594f0dde96 (diff) | |
| parent | b266765231a28a2878aed08b0d726eea70d389f8 (diff) | |
Merge branch 'master' of git@github.com:lpereira/hardinfo
Diffstat (limited to 'hardinfo2')
| -rw-r--r-- | hardinfo2/Makefile.in | 2 | ||||
| -rw-r--r-- | hardinfo2/arch/linux/x86/processor.h | 2 | ||||
| -rw-r--r-- | hardinfo2/callbacks.c | 5 | ||||
| -rw-r--r-- | hardinfo2/callbacks.h | 1 | ||||
| -rw-r--r-- | hardinfo2/menu.c | 2 | ||||
| -rw-r--r-- | hardinfo2/remote.c | 241 | ||||
| -rw-r--r-- | hardinfo2/uidefs.h | 4 | ||||
| -rw-r--r-- | hardinfo2/vendor.c | 2 | 
8 files changed, 254 insertions, 5 deletions
| diff --git a/hardinfo2/Makefile.in b/hardinfo2/Makefile.in index 03a9df8b..98379ec5 100644 --- a/hardinfo2/Makefile.in +++ b/hardinfo2/Makefile.in @@ -8,7 +8,7 @@ CCSLOW = gcc -O0 -g  OBJECTS = hardinfo.o shell.o util.o iconcache.o loadgraph.o  \  		menu.o stock.o callbacks.o expr.o report.o binreloc.o \ -		vendor.o socket.o syncmanager.o +		vendor.o socket.o syncmanager.o remote.o  BENCHMARK_OBJECTS = fbench.o sha1.o blowfish.o md5.o nqueens.o fftbench.o  MODULES = computer.so devices.so benchmark.so network.so diff --git a/hardinfo2/arch/linux/x86/processor.h b/hardinfo2/arch/linux/x86/processor.h index f83ee752..8f918581 100644 --- a/hardinfo2/arch/linux/x86/processor.h +++ b/hardinfo2/arch/linux/x86/processor.h @@ -416,6 +416,8 @@ static struct {  	{ "tpr",	"Task Priority Register"			},  	{ "vid",	"Voltage Identifier"				},  	{ "fid", 	"Frequency Identifier"				}, +	{ "dtes64", 	"64-bit Debug Store"				}, +	{ "monitor", 	"Monitor/Mwait support"				},  	{ NULL,		NULL						},  }; diff --git a/hardinfo2/callbacks.c b/hardinfo2/callbacks.c index 40ee07bc..bc261b4e 100644 --- a/hardinfo2/callbacks.c +++ b/hardinfo2/callbacks.c @@ -34,6 +34,11 @@ void cb_sync_manager()      sync_manager_show();  } +void cb_connect_to() +{ +    remote_dialog_show(); +} +  void cb_save_graphic()  {      Shell *shell = shell_get_main_shell(); diff --git a/hardinfo2/callbacks.h b/hardinfo2/callbacks.h index 88165f97..6b894ecb 100644 --- a/hardinfo2/callbacks.h +++ b/hardinfo2/callbacks.h @@ -35,5 +35,6 @@ void cb_open_online_docs();  void cb_sync_manager();  void cb_report_bug();  void cb_donate(); +void cb_connect_to();  #endif	/* __CALLBACKS_H__ */ diff --git a/hardinfo2/menu.c b/hardinfo2/menu.c index 63601c39..5a274978 100644 --- a/hardinfo2/menu.c +++ b/hardinfo2/menu.c @@ -55,7 +55,7 @@ static GtkActionEntry entries[] = {      {"ConnectToAction", GTK_STOCK_CONNECT,       "_Connect to...", NULL,       NULL, -     G_CALLBACK(cb_sync_manager)}, +     G_CALLBACK(cb_connect_to)},      {"CopyAction", GTK_STOCK_COPY,       "_Copy to Clipboard", "<control>C", diff --git a/hardinfo2/remote.c b/hardinfo2/remote.c new file mode 100644 index 00000000..028fcd66 --- /dev/null +++ b/hardinfo2/remote.c @@ -0,0 +1,241 @@ +/* + *    Remote Client + *    HardInfo - Displays System Information + *    Copyright (C) 2003-2009 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 <stdio.h> +#include <string.h> +#include <shell.h> +#include <iconcache.h> +#include <hardinfo.h> +#include <config.h> + +/* + * TODO + * + * - Completely disable this feature if libsoup support isn't compiled in + * - Add "Local Computer" + * - Detect machines on local network that runs SSH + *   - IP range scan + *   - mDNS + * - Allow the user to add/remove/edit a machine + *   - Use ~/.ssh/hosts as a starting point? + *   - Different icons for different machines? + *   - Make sure SSH can do port forwarding + *   - Make sure the remote host has HardInfo installed, with the correct + *     version. + * - Allow the user to choose/guess the SSH authentication method + *   - Plain old username / password + *   - Passwordless RSA keys + *   - RSA Keys with passwords + * - Make sure SSH can do port forwarding + * - Make sure the remote host has HardInfo installed + * - Implement XML-RPC server (use libsoup; there's a example with libsoup's sources) + *   - Create abstractions for common module operations + *   - Use function pointers to choose between local and remote modes + *   - Generate a random username/password to be passed to the XML-RPC server; use + *     that username/password on the client; this is just to make sure nobody on the + *     machine will be allowed to obtain information that might be sensitive. This + *     will be passed with base64, so it can be sniffed; this needs root access anyway, + *     so not really a problem. + * - Determine if we're gonna use GIOChannels or create a communication thread + * - Use libsoup XML-RPC support to implement the remote mode + * - Introduce a flag on the modules, stating their ability to be used locally/remotely + *   (Benchmarks can't be used remotely; Displays won't work remotely [unless we use +      X forwarding, but that'll be local X11 info anyway]). + */ + +typedef struct _RemoteDialog RemoteDialog; +struct _RemoteDialog { +  GtkWidget *dialog; +  GtkWidget *btn_connect, *btn_cancel; +}; + +static RemoteDialog +    * remote_dialog_new(GtkTreeModel * model, GtkWidget * parent); + +void remote_dialog_show(GtkTreeModel * model, GtkWidget * parent) +{ +    gboolean success; +    RemoteDialog *rd = remote_dialog_new(model, parent); + +    if (gtk_dialog_run(GTK_DIALOG(rd->dialog)) == GTK_RESPONSE_ACCEPT) { +	shell_status_update("Generating remote..."); +	gtk_widget_hide(rd->dialog); +	shell_view_set_enabled(FALSE); +	shell_status_set_enabled(TRUE); + +//	success = remote_generate(rd); + +	shell_status_set_enabled(FALSE); + +	if (success) +	    shell_status_update("Remote saved."); +	else +	    shell_status_update("Error while creating the remote."); +    } + +    gtk_widget_destroy(rd->dialog); +    g_free(rd); +} + +static RemoteDialog +    * remote_dialog_new(GtkTreeModel * model, GtkWidget * parent) +{ +    RemoteDialog *rd; +    GtkWidget *dialog; +    GtkWidget *dialog1_vbox; +    GtkWidget *scrolledwindow2; +    GtkWidget *treeview2; +    GtkWidget *vbuttonbox3; +    GtkWidget *button3; +    GtkWidget *button6; +    GtkWidget *dialog1_action_area; +    GtkWidget *button8; +    GtkWidget *button7; +    GtkWidget *label; +    GtkWidget *hbox; + +    GtkTreeViewColumn *column; +    GtkCellRenderer *cr_text, *cr_pbuf, *cr_toggle; + +    rd = g_new0(RemoteDialog, 1); + +    dialog = gtk_dialog_new(); +    gtk_window_set_title(GTK_WINDOW(dialog), "Connect to Remote Computer"); +    gtk_container_set_border_width(GTK_CONTAINER(dialog), 5); +    gtk_window_set_default_size(GTK_WINDOW(dialog), 420, 260); +    gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(parent)); +    gtk_window_set_position(GTK_WINDOW(dialog), +			    GTK_WIN_POS_CENTER_ON_PARENT); +    gtk_window_set_type_hint(GTK_WINDOW(dialog), +			     GDK_WINDOW_TYPE_HINT_DIALOG); + +    dialog1_vbox = GTK_DIALOG(dialog)->vbox; +    gtk_box_set_spacing(GTK_BOX(dialog1_vbox), 5); +    gtk_container_set_border_width(GTK_CONTAINER(dialog1_vbox), 4); +    gtk_widget_show(dialog1_vbox); + +    hbox = gtk_hbox_new(FALSE, 5); +    gtk_box_pack_start(GTK_BOX(dialog1_vbox), hbox, FALSE, FALSE, 0); + +    label = gtk_label_new("<big><b>Connect To</b></big>\n" +			  "Please choose the remote computer to connect to:"); +    gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); +    gtk_label_set_use_markup(GTK_LABEL(label), TRUE); +    gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); + + +    gtk_box_pack_start(GTK_BOX(hbox), +		       icon_cache_get_image("network.png"), +		       FALSE, FALSE, 0); +    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0); +    gtk_widget_show_all(hbox); +     +    hbox = gtk_hbox_new(FALSE, 5); +    gtk_box_pack_start(GTK_BOX(dialog1_vbox), hbox, TRUE, TRUE, 0); +    gtk_widget_show(hbox); + +    scrolledwindow2 = gtk_scrolled_window_new(NULL, NULL); +    gtk_widget_show(scrolledwindow2); +    gtk_box_pack_start(GTK_BOX(hbox), scrolledwindow2, TRUE, TRUE, +		       0); +    gtk_widget_set_size_request(scrolledwindow2, -1, 200); +    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow2), +				   GTK_POLICY_AUTOMATIC, +				   GTK_POLICY_AUTOMATIC); +    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW +					(scrolledwindow2), GTK_SHADOW_IN); + +    treeview2 = gtk_tree_view_new_with_model(model); +    gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview2), FALSE); +    gtk_widget_show(treeview2); +    gtk_container_add(GTK_CONTAINER(scrolledwindow2), treeview2); + +    column = gtk_tree_view_column_new(); +    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview2), column); + +    cr_toggle = gtk_cell_renderer_toggle_new(); +    gtk_tree_view_column_pack_start(column, cr_toggle, FALSE); +//    g_signal_connect(cr_toggle, "toggled", +//		     G_CALLBACK(remote_dialog_sel_toggle), rd); +    gtk_tree_view_column_add_attribute(column, cr_toggle, "active", +				       TREE_COL_SEL); + +    cr_pbuf = gtk_cell_renderer_pixbuf_new(); +    gtk_tree_view_column_pack_start(column, cr_pbuf, FALSE); +    gtk_tree_view_column_add_attribute(column, cr_pbuf, "pixbuf", +				       TREE_COL_PBUF); + +    cr_text = gtk_cell_renderer_text_new(); +    gtk_tree_view_column_pack_start(column, cr_text, TRUE); +    gtk_tree_view_column_add_attribute(column, cr_text, "markup", +				       TREE_COL_NAME); + +    vbuttonbox3 = gtk_vbutton_box_new(); +    gtk_widget_show(vbuttonbox3); +    gtk_box_pack_start(GTK_BOX(hbox), vbuttonbox3, FALSE, TRUE, 0); +    gtk_box_set_spacing(GTK_BOX(vbuttonbox3), 5); +    gtk_button_box_set_layout(GTK_BUTTON_BOX(vbuttonbox3), +			      GTK_BUTTONBOX_START); + +    button3 = gtk_button_new_with_mnemonic("_Add"); +    gtk_widget_show(button3); +    gtk_container_add(GTK_CONTAINER(vbuttonbox3), button3); +    GTK_WIDGET_SET_FLAGS(button3, GTK_CAN_DEFAULT); +//    g_signal_connect(button3, "clicked", +//		     G_CALLBACK(remote_dialog_sel_none), rd); + +    button6 = gtk_button_new_with_mnemonic("_Edit"); +    gtk_widget_show(button6); +    gtk_container_add(GTK_CONTAINER(vbuttonbox3), button6); +    GTK_WIDGET_SET_FLAGS(button6, GTK_CAN_DEFAULT); +//    g_signal_connect(button6, "clicked", G_CALLBACK(remote_dialog_sel_all), +//		     rd); + +    button6 = gtk_button_new_with_mnemonic("_Remove"); +    gtk_widget_show(button6); +    gtk_container_add(GTK_CONTAINER(vbuttonbox3), button6); +    GTK_WIDGET_SET_FLAGS(button6, GTK_CAN_DEFAULT); +//    g_signal_connect(button6, "clicked", G_CALLBACK(remote_dialog_sel_all), +//		     rd); + +    dialog1_action_area = GTK_DIALOG(dialog)->action_area; +    gtk_widget_show(dialog1_action_area); +    gtk_button_box_set_layout(GTK_BUTTON_BOX(dialog1_action_area), +			      GTK_BUTTONBOX_END); + +    button8 = gtk_button_new_from_stock(GTK_STOCK_CANCEL); +    gtk_widget_show(button8); +    gtk_dialog_add_action_widget(GTK_DIALOG(dialog), button8, +				 GTK_RESPONSE_CANCEL); +    GTK_WIDGET_SET_FLAGS(button8, GTK_CAN_DEFAULT); + +    button7 = gtk_button_new_from_stock(GTK_STOCK_CONNECT); +    gtk_widget_show(button7); +    gtk_dialog_add_action_widget(GTK_DIALOG(dialog), button7, +				 GTK_RESPONSE_ACCEPT); +    GTK_WIDGET_SET_FLAGS(button7, GTK_CAN_DEFAULT); + +    rd->dialog = dialog; +    rd->btn_cancel = button8; +    rd->btn_connect = button7; + +    gtk_tree_view_collapse_all(GTK_TREE_VIEW(treeview2)); + +    return rd; +} diff --git a/hardinfo2/uidefs.h b/hardinfo2/uidefs.h index 333c9ce5..e3f1d728 100644 --- a/hardinfo2/uidefs.h +++ b/hardinfo2/uidefs.h @@ -4,11 +4,9 @@  char *uidefs_str = "<ui>" \  "	<menubar>" \  "	<menu name=\"InformationMenu\" action=\"InformationMenuAction\">" \ -/*"		<menuitem name=\"Open\" action=\"OpenAction\" />" \  "		<menuitem name=\"ConnectTo\" action=\"ConnectToAction\" />" \ -"		<separator/>" \*/  "		<menuitem name=\"Report\" action=\"ReportAction\" />" \ -/*"		<separator/>" \ */ +"		<separator/>" \  "		<menuitem name=\"Copy\" action=\"CopyAction\" />" \  /*   * Save Image is not ready for prime time. Yet. diff --git a/hardinfo2/vendor.c b/hardinfo2/vendor.c index 0897341a..330372e8 100644 --- a/hardinfo2/vendor.c +++ b/hardinfo2/vendor.c @@ -85,6 +85,8 @@ static const Vendor vendors[] = {      {"OTi", "Ours Technology", "www.oti.com.tw"},      {"BENQ", "BenQ", "www.benq.com"},      {"Acer", "Acer", "www.acer.com"}, +    {"QUANTUM", "Quantum", "www.quantum.com"}, +    {"Kingston", "Kingston", "www.kingston.com"},      /* BIOS manufacturers */      {"American Megatrends", "American Megatrends", "www.ami.com"},      {"Award", "Award Software International", "www.award-bios.com"}, | 
