diff options
author | kraxel <kraxel> | 2006-01-31 14:05:09 +0000 |
---|---|---|
committer | kraxel <kraxel> | 2006-01-31 14:05:09 +0000 |
commit | 204520ac1d70a7d6c6084c2ec98560d580f38fa2 (patch) | |
tree | 5fef0b342a450412e74c32de62e45423f987402d | |
parent | c28bc1bc12c466c58a71eeed8f2d38e46008ee2f (diff) | |
download | xenwatch-204520ac1d70a7d6c6084c2ec98560d580f38fa2.tar.gz |
- lots of mdns updates.
-rw-r--r-- | INSTALL | 2 | ||||
-rw-r--r-- | mdns-browser.c | 19 | ||||
-rw-r--r-- | mdns-publish-xendom.c | 66 | ||||
-rw-r--r-- | mdns.c | 234 | ||||
-rw-r--r-- | mdns.h | 2 | ||||
-rw-r--r-- | mk/Autoconf.mk | 2 | ||||
-rw-r--r-- | mk/Compile.mk | 2 | ||||
-rw-r--r-- | mk/Variables.mk | 8 | ||||
-rw-r--r-- | xd_view.c | 6 | ||||
-rw-r--r-- | xenlog.c | 34 |
10 files changed, 311 insertions, 64 deletions
@@ -56,4 +56,4 @@ Have fun, Gerd -- -Gerd Knorr <kraxel@bytesex.org> +Gerd Hoffmann <kraxel@suse.de> diff --git a/mdns-browser.c b/mdns-browser.c index 2368890..340e587 100644 --- a/mdns-browser.c +++ b/mdns-browser.c @@ -18,8 +18,10 @@ static Display *dpy; static struct mdns_window *mdns; -static char *service = "_xendom._tcp"; +static char *service = "_ssh._tcp"; static char *domain = NULL; +static int urlmode = 0; +static int xenmode = 0; /* ------------------------------------------------------------------ */ @@ -33,6 +35,10 @@ static void usage(FILE *fp) " -h print this text\n" " -s <service> specify service [%s]\n" " -d <domain> specify domain\n" + " -u url mode, displays a different set of default\n" + " columns, useful for _http._tcp & friends.\n" + " -x xen mode, yet another sefault column set, this\n" + " also sets service to _xendom._tcp\n" "\n" "-- \n" "(c) 2006 Gerd Hoffmann <kraxel@suse.de>\n", @@ -46,7 +52,7 @@ main(int argc, char *argv[]) gtk_init(&argc, &argv); for (;;) { - if (-1 == (c = getopt(argc, argv, "hs:d:"))) + if (-1 == (c = getopt(argc, argv, "huxs:d:"))) break; switch (c) { case 's': @@ -55,6 +61,13 @@ main(int argc, char *argv[]) case 'd': domain = optarg; break; + case 'u': + urlmode = 1; + break; + case 'x': + service = "_xendom._tcp"; + xenmode = 1; + break; case 'h': usage(stdout); exit(0); @@ -67,7 +80,7 @@ main(int argc, char *argv[]) dpy = gdk_x11_display_get_xdisplay(gdk_display_get_default()); fcntl(ConnectionNumber(dpy),F_SETFD,FD_CLOEXEC); - mdns = mdns_create_window(1); + mdns = mdns_create_window(1, urlmode, xenmode); if (NULL == mdns) { fprintf(stderr,"Oops: mDNS did't initialize ok\n"); exit(1); diff --git a/mdns-publish-xendom.c b/mdns-publish-xendom.c index 69eccb4..3cc8119 100644 --- a/mdns-publish-xendom.c +++ b/mdns-publish-xendom.c @@ -5,7 +5,9 @@ #include <fcntl.h> #include <syslog.h> #include <string.h> +#include <sys/types.h> #include <sys/utsname.h> +#include <sys/stat.h> #include <xs.h> @@ -17,12 +19,15 @@ #include <avahi-common/malloc.h> #include <avahi-common/error.h> +/* --------------------------------------------------------------------- */ + static AvahiEntryGroup *group = NULL; static AvahiSimplePoll *simple_poll = NULL; static int debug = 0; static int have_tty = 1; static int have_syslog = 0; +static char *appname = "mdns-publish-xendom"; static char *name; static char *service = "_xendom._tcp"; @@ -44,7 +49,7 @@ log_printf(int priority, char *fmt, ...) va_end(args); if (have_tty) - fprintf(stderr, "%s", msgbuf); + fprintf(stderr, "%s: %s", appname, msgbuf); if (have_syslog) syslog(priority, "%s", msgbuf); return rc; @@ -62,17 +67,17 @@ static void entry_group_callback(AvahiEntryGroup *g, switch (state) { case AVAHI_ENTRY_GROUP_ESTABLISHED: - log_printf(LOG_INFO, "Service '%s' successfully established.\n", name); + log_printf(LOG_INFO, "service '%s' successfully established\n", name); break; case AVAHI_ENTRY_GROUP_COLLISION: n = avahi_alternative_service_name(name); - log_printf(LOG_NOTICE, "Service name collision, renaming '%s' to '%s'\n", + log_printf(LOG_NOTICE, "service name collision, renaming '%s' to '%s'\n", name, n); avahi_free(name); name = n; create_services(avahi_entry_group_get_client(g)); break; - case AVAHI_ENTRY_GROUP_FAILURE : + case AVAHI_ENTRY_GROUP_FAILURE: avahi_simple_poll_quit(simple_poll); break; default: @@ -98,13 +103,13 @@ static void create_services(AvahiClient *c) name, service, NULL, NULL, port, vm_uuid, dom_id, NULL); if (ret < 0) { - log_printf(LOG_ERR, "Failed to add '%s' service: %s\n", service, avahi_strerror(ret)); + log_printf(LOG_ERR, "failed to add '%s' service: %s\n", service, avahi_strerror(ret)); goto fail; } /* Tell the server to register the service */ if ((ret = avahi_entry_group_commit(group)) < 0) { - log_printf(LOG_ERR, "Failed to commit entry_group: %s\n", avahi_strerror(ret)); + log_printf(LOG_ERR, "failed to commit entry_group: %s\n", avahi_strerror(ret)); goto fail; } return; @@ -121,7 +126,7 @@ static void client_callback(AvahiClient *c, switch (state) { case AVAHI_CLIENT_CONNECTING: - log_printf(LOG_NOTICE, "avahi not running (yet), I'll keep trying ...\n"); + log_printf(LOG_NOTICE, "avahi daemon not running (yet), I'll keep trying ...\n"); break; case AVAHI_CLIENT_S_RUNNING: if (!group) @@ -138,18 +143,18 @@ static void client_callback(AvahiClient *c, avahi_client_free(c); group = NULL; - log_printf(LOG_NOTICE, "disconnected from avahi, reconnecting ...\n"); + log_printf(LOG_NOTICE, "disconnected from avahi daemon, reconnecting ...\n"); c = avahi_client_new(avahi_simple_poll_get(simple_poll), AVAHI_CLIENT_NO_FAIL, client_callback, NULL, &error); if (!c) { - log_printf(LOG_ERR, "Failed to create client: %s\n", + log_printf(LOG_ERR, "failed to create client: %s\n", avahi_strerror(error)); goto fail; } break; default: - log_printf(LOG_ERR, "Client failure: %s\n", + log_printf(LOG_ERR, "client failure: %s\n", avahi_strerror(avahi_client_errno(c))); goto fail; break; @@ -169,34 +174,39 @@ static int update_xendom_info(void) struct xs_handle *xenstore; xs_transaction_t xst; char *xs_value; + struct stat st; + + if (-1 == stat("/proc/xen", &st)) { + log_printf(LOG_ERR, "/proc/xen not found, running on bare metal?\n"); + return -1; + } xenstore = xs_domain_open(); if (NULL == xenstore) { - log_printf(LOG_ERR, "%s: can't connect to %s\n", __FUNCTION__, - xs_domain_dev()); + log_printf(LOG_ERR, "can't connect to xenstore (%s)\n", xs_domain_dev()); return -1; } if (!(xst = xs_transaction_start(xenstore))) { - log_printf(LOG_ERR, "%s: can't start transaction\n", __FUNCTION__); + log_printf(LOG_ERR, "can't start xenstore transaction\n"); goto out; } xs_value = xs_read(xenstore, xst, "vm", NULL); xs_transaction_end(xenstore, xst, 0); if (!xs_value) { - log_printf(LOG_ERR, "%s: can't read \"vm\" value\n", __FUNCTION__); + log_printf(LOG_ERR, "can't read 'vm' value from xenstore\n"); goto out; } snprintf(vm_uuid, sizeof(vm_uuid), "vm-uuid=%s", xs_value+4); if (!(xst = xs_transaction_start(xenstore))) { - log_printf(LOG_ERR, "%s: can't start transaction\n", __FUNCTION__); + log_printf(LOG_ERR, "can't start xenstore transaction\n"); goto out; } xs_value = xs_read(xenstore, xst, "domid", NULL); xs_transaction_end(xenstore, xst, 0); if (!xs_value) { - log_printf(LOG_ERR, "%s: can't read \"domid\" value\n", __FUNCTION__); + log_printf(LOG_ERR, "can't read 'domid' value from xenstore\n"); goto out; } snprintf(dom_id, sizeof(dom_id), "dom-id=%s", xs_value); @@ -210,15 +220,17 @@ static int update_xendom_info(void) static void usage(FILE *fp) { fprintf(fp, - "This little daemon publishes xen domain info via mDNS.\n" + "This little daemon publishes xen domain info,\n" + "via mDNS (using avahi), as service '_xendom._tcp'.\n" "\n" - "usage: mdns-publish-xendom [options]\n" + "usage: %s [options]\n" "options:\n" " -h print this text\n" " -d enable debug mode\n" "\n" "-- \n" - "(c) 2006 Gerd Hoffmann <kraxel@suse.de>\n"); + "(c) 2006 Gerd Hoffmann <kraxel@suse.de>\n", + appname); } int main(int argc, char*argv[]) @@ -247,22 +259,22 @@ int main(int argc, char*argv[]) } /* open syslog */ - openlog("mdns-publish-xendom", 0, LOG_LOCAL0); + openlog(appname, 0, LOG_LOCAL0); have_syslog = 1; /* figure name */ uname(&uts); - snprintf(buf, sizeof(buf), "Xen domain %s", uts.nodename); + snprintf(buf, sizeof(buf), "xendom %s", uts.nodename); name = avahi_strdup(buf); /* figure domain info */ if (0 != update_xendom_info()) - exit(1); + goto fail; /* prepare nDNS bits */ simple_poll = avahi_simple_poll_new(); if (!simple_poll) { - log_printf(LOG_ERR, "Failed to create simple poll object.\n"); + log_printf(LOG_ERR, "failed to create simple poll object\n"); goto fail; } @@ -270,7 +282,7 @@ int main(int argc, char*argv[]) AVAHI_CLIENT_NO_FAIL, client_callback, NULL, &error); if (!client) { - log_printf(LOG_ERR, "Failed to create client: %s\n", avahi_strerror(error)); + log_printf(LOG_ERR, "failed to create client: %s\n", avahi_strerror(error)); goto fail; } @@ -279,14 +291,16 @@ int main(int argc, char*argv[]) switch (fork()) { case -1: log_printf(LOG_ERR, "fork: %s", strerror(errno)); - exit(1); + goto fail; case 0: + /* child */ close(0); close(1); close(2); setsid(); open("/dev/null", O_RDWR); dup(0); dup(0); have_tty = 0; break; default: + /* parent */ exit(0); } } @@ -296,6 +310,8 @@ int main(int argc, char*argv[]) ret = 0; fail: + log_printf(ret ? LOG_ERR : LOG_INFO, "exiting (%d)\n", ret); + /* Cleanup things */ if (client) avahi_client_free(client); @@ -51,9 +51,19 @@ enum { ST_NUM_COLS }; +static int str_sort[] = { + ST_COL_NAME, + ST_COL_TYPE, + ST_COL_DOMAIN, + ST_COL_INTERFACE, + ST_COL_PROTOCOL, + ST_COL_HOSTNAME, +}; + struct mdns_window { GtkListStore *store; GtkWidget *toplevel, *view, *status; + GtkActionGroup *ag; int standalone; const AvahiPoll *poll_api; @@ -495,7 +505,73 @@ int mdns_browse(struct mdns_window *mdns, /* ---------------------------------------------------------------------- */ -static void menu_cb_close(GtkWidget *whatever, gpointer userdata) +static void menu_cb_view_col(GtkToggleAction *action, gpointer userdata, int id) +{ + struct mdns_window *mdns = userdata; + GtkTreeViewColumn *col; + gboolean active; + + active = gtk_toggle_action_get_active(action); + col = gtk_tree_view_get_column(GTK_TREE_VIEW(mdns->view), id); + gtk_tree_view_column_set_visible(col, active); +} + +static void menu_cb_view_col_type(GtkToggleAction *action, gpointer userdata) +{ + menu_cb_view_col(action, userdata, ST_COL_TYPE); +} + +static void menu_cb_view_col_domain(GtkToggleAction *action, gpointer userdata) +{ + menu_cb_view_col(action, userdata, ST_COL_DOMAIN); +} + +static void menu_cb_view_col_interface(GtkToggleAction *action, gpointer userdata) +{ + menu_cb_view_col(action, userdata, ST_COL_INTERFACE); +} + +static void menu_cb_view_col_protocol(GtkToggleAction *action, gpointer userdata) +{ + menu_cb_view_col(action, userdata, ST_COL_PROTOCOL); +} + +static void menu_cb_view_col_hostname(GtkToggleAction *action, gpointer userdata) +{ + menu_cb_view_col(action, userdata, ST_COL_HOSTNAME); +} + +static void menu_cb_view_col_addr(GtkToggleAction *action, gpointer userdata) +{ + menu_cb_view_col(action, userdata, ST_COL_ADDR); +} + +static void menu_cb_view_col_port(GtkToggleAction *action, gpointer userdata) +{ + menu_cb_view_col(action, userdata, ST_COL_PORT); +} + +static void menu_cb_view_col_path(GtkToggleAction *action, gpointer userdata) +{ + menu_cb_view_col(action, userdata, ST_COL_PATH); +} + +static void menu_cb_view_col_url(GtkToggleAction *action, gpointer userdata) +{ + menu_cb_view_col(action, userdata, ST_COL_URL); +} + +static void menu_cb_view_col_xen_dom_id(GtkToggleAction *action, gpointer userdata) +{ + menu_cb_view_col(action, userdata, ST_COL_XEN_DOM_ID); +} + +static void menu_cb_view_col_xen_vm_uuid(GtkToggleAction *action, gpointer userdata) +{ + menu_cb_view_col(action, userdata, ST_COL_XEN_VM_UUID); +} + +static void menu_cb_close(GtkAction *action, gpointer userdata) { struct mdns_window *mdns = userdata; @@ -521,6 +597,9 @@ static const GtkActionEntry entries[] = { .name = "FileMenu", .label = "_File", },{ + .name = "ViewMenu", + .label = "_View", + },{ .name = "Close", .stock_id = GTK_STOCK_CLOSE, .label = "_Close", @@ -529,12 +608,84 @@ static const GtkActionEntry entries[] = { }, }; +static const GtkToggleActionEntry tentries[] = { + { + .name = "ColType", + .label = "Type", + .callback = G_CALLBACK(menu_cb_view_col_type), + .is_active = 1, + },{ + .name = "ColDomain", + .label = "Domain", + .callback = G_CALLBACK(menu_cb_view_col_domain), + .is_active = 1, + },{ + .name = "ColInterface", + .label = "Interface", + .callback = G_CALLBACK(menu_cb_view_col_interface), + .is_active = 1, + },{ + .name = "ColProtocol", + .label = "Protocol", + .callback = G_CALLBACK(menu_cb_view_col_protocol), + .is_active = 1, + },{ + .name = "ColHostname", + .label = "Hostname", + .callback = G_CALLBACK(menu_cb_view_col_hostname), + .is_active = 1, + },{ + .name = "ColAddress", + .label = "Address", + .callback = G_CALLBACK(menu_cb_view_col_addr), + .is_active = 1, + },{ + .name = "ColPort", + .label = "Port", + .callback = G_CALLBACK(menu_cb_view_col_port), + .is_active = 1, + },{ + .name = "ColPath", + .label = "Path", + .callback = G_CALLBACK(menu_cb_view_col_path), + .is_active = 1, + },{ + .name = "ColURL", + .label = "URL", + .callback = G_CALLBACK(menu_cb_view_col_url), + .is_active = 1, + },{ + .name = "ColXenDomID", + .label = "Xen dom-id", + .callback = G_CALLBACK(menu_cb_view_col_xen_dom_id), + .is_active = 1, + },{ + .name = "ColXenVmUUID", + .label = "Xen vm-uuid", + .callback = G_CALLBACK(menu_cb_view_col_xen_vm_uuid), + .is_active = 1, + } +}; + static char ui_xml[] = "<ui>" " <menubar name='MainMenu'>" " <menu action='FileMenu'>" " <menuitem action='Close'/>" " </menu>" +" <menu action='ViewMenu'>" +" <menuitem action='ColType'/>" +" <menuitem action='ColDomain'/>" +" <menuitem action='ColInterface'/>" +" <menuitem action='ColProtocol'/>" +" <menuitem action='ColHostname'/>" +" <menuitem action='ColAddress'/>" +" <menuitem action='ColPort'/>" +" <menuitem action='ColPath'/>" +" <menuitem action='ColURL'/>" +" <menuitem action='ColXenDomID'/>" +" <menuitem action='ColXenVmUUID'/>" +" </menu>" " </menubar>" " <toolbar action='ToolBar'>" " <toolitem action='Close'/>" @@ -567,6 +718,8 @@ static GtkWidget *mdns_create_view(struct mdns_window *mdns) GtkCellRenderer *renderer; GtkTreeSortable *sortable; GtkWidget *view; + GtkTreeViewColumn *col; + int i; view = gtk_tree_view_new(); gtk_tree_view_set_model(GTK_TREE_VIEW(view), @@ -576,37 +729,37 @@ static GtkWidget *mdns_create_view(struct mdns_window *mdns) renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes - (GTK_TREE_VIEW(view), -1, "name", renderer, + (GTK_TREE_VIEW(view), -1, "Name", renderer, "text", ST_COL_NAME, NULL); renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes - (GTK_TREE_VIEW(view), -1, "type", renderer, + (GTK_TREE_VIEW(view), -1, "Type", renderer, "text", ST_COL_TYPE, NULL); renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes - (GTK_TREE_VIEW(view), -1, "domain", renderer, + (GTK_TREE_VIEW(view), -1, "Domain", renderer, "text", ST_COL_DOMAIN, NULL); renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes - (GTK_TREE_VIEW(view), -1, "if", renderer, + (GTK_TREE_VIEW(view), -1, "If", renderer, "text", ST_COL_INTERFACE, NULL); renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes - (GTK_TREE_VIEW(view), -1, "proto", renderer, + (GTK_TREE_VIEW(view), -1, "Proto", renderer, "text", ST_COL_PROTOCOL, NULL); renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes - (GTK_TREE_VIEW(view), -1, "hostname", renderer, + (GTK_TREE_VIEW(view), -1, "Hostname", renderer, "text", ST_COL_HOSTNAME, NULL); @@ -615,37 +768,37 @@ static GtkWidget *mdns_create_view(struct mdns_window *mdns) "xalign", 1.0, NULL); gtk_tree_view_insert_column_with_attributes - (GTK_TREE_VIEW(view), -1, "address", renderer, + (GTK_TREE_VIEW(view), -1, "Address", renderer, "text", ST_COL_ADDR, NULL); renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes - (GTK_TREE_VIEW(view), -1, "port", renderer, + (GTK_TREE_VIEW(view), -1, "Port", renderer, "text", ST_COL_PORT, NULL); renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes - (GTK_TREE_VIEW(view), -1, "path", renderer, + (GTK_TREE_VIEW(view), -1, "Path", renderer, "text", ST_COL_PATH, NULL); renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes - (GTK_TREE_VIEW(view), -1, "url", renderer, + (GTK_TREE_VIEW(view), -1, "URL", renderer, "text", ST_COL_URL, NULL); renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes - (GTK_TREE_VIEW(view), -1, "id", renderer, + (GTK_TREE_VIEW(view), -1, "ID", renderer, "text", ST_COL_XEN_DOM_ID, NULL); renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes - (GTK_TREE_VIEW(view), -1, "vm", renderer, + (GTK_TREE_VIEW(view), -1, "VM", renderer, "text", ST_COL_XEN_VM_UUID, NULL); @@ -655,22 +808,58 @@ static GtkWidget *mdns_create_view(struct mdns_window *mdns) (GTK_TREE_VIEW(view), -1, "", renderer, NULL); + /* sort bits */ sortable = GTK_TREE_SORTABLE(mdns->store); - gtk_tree_sortable_set_sort_func(sortable, ST_COL_NAME, - gtk_sort_iter_compare_str, - GINT_TO_POINTER(ST_COL_NAME), NULL); + for (i = 0; i < sizeof(str_sort)/sizeof(str_sort[0]); i++) { + gtk_tree_sortable_set_sort_func(sortable, str_sort[i], + gtk_sort_iter_compare_str, + GINT_TO_POINTER(str_sort[i]), NULL); + col = gtk_tree_view_get_column(GTK_TREE_VIEW(view), str_sort[i]); + gtk_tree_view_column_set_sort_column_id(col, str_sort[i]); + } gtk_tree_sortable_set_sort_column_id(sortable, ST_COL_NAME, GTK_SORT_ASCENDING); return view; } -struct mdns_window *mdns_create_window(int standalone) +static void set_default_visible_cols(struct mdns_window *mdns, int url, int xen) +{ + GtkToggleAction *ta; + + ta = GTK_TOGGLE_ACTION(gtk_action_group_get_action(mdns->ag, "ColType")); + gtk_toggle_action_set_active(ta, FALSE); + ta = GTK_TOGGLE_ACTION(gtk_action_group_get_action(mdns->ag, "ColDomain")); + gtk_toggle_action_set_active(ta, FALSE); + + ta = GTK_TOGGLE_ACTION(gtk_action_group_get_action(mdns->ag, "ColInterface")); + gtk_toggle_action_set_active(ta, TRUE); + ta = GTK_TOGGLE_ACTION(gtk_action_group_get_action(mdns->ag, "ColProtocol")); + gtk_toggle_action_set_active(ta, TRUE); + ta = GTK_TOGGLE_ACTION(gtk_action_group_get_action(mdns->ag, "ColHostname")); + gtk_toggle_action_set_active(ta, TRUE); + + ta = GTK_TOGGLE_ACTION(gtk_action_group_get_action(mdns->ag, "ColAddress")); + gtk_toggle_action_set_active(ta, !xen && !url); + ta = GTK_TOGGLE_ACTION(gtk_action_group_get_action(mdns->ag, "ColPort")); + gtk_toggle_action_set_active(ta, !xen && !url); + ta = GTK_TOGGLE_ACTION(gtk_action_group_get_action(mdns->ag, "ColPath")); + gtk_toggle_action_set_active(ta, !xen && !url); + + ta = GTK_TOGGLE_ACTION(gtk_action_group_get_action(mdns->ag, "ColURL")); + gtk_toggle_action_set_active(ta, url); + + ta = GTK_TOGGLE_ACTION(gtk_action_group_get_action(mdns->ag, "ColXenDomID")); + gtk_toggle_action_set_active(ta, xen); + ta = GTK_TOGGLE_ACTION(gtk_action_group_get_action(mdns->ag, "ColXenVmUUID")); + gtk_toggle_action_set_active(ta, xen); +} + +struct mdns_window *mdns_create_window(int standalone, int url, int xen) { struct mdns_window *mdns; GtkWidget *vbox, *menubar, *toolbar, *scroll; GtkAccelGroup *accel; - GtkActionGroup *ag; GtkUIManager *ui; GError *err; @@ -690,9 +879,11 @@ struct mdns_window *mdns_create_window(int standalone) /* menu + toolbar */ ui = gtk_ui_manager_new(); - ag = gtk_action_group_new("MenuActions"); - gtk_action_group_add_actions(ag, entries, G_N_ELEMENTS(entries), mdns); - gtk_ui_manager_insert_action_group(ui, ag, 0); + mdns->ag = gtk_action_group_new("MenuActions"); + gtk_action_group_add_actions(mdns->ag, entries, G_N_ELEMENTS(entries), mdns); + gtk_action_group_add_toggle_actions(mdns->ag, tentries, + G_N_ELEMENTS(tentries), mdns); + gtk_ui_manager_insert_action_group(ui, mdns->ag, 0); accel = gtk_ui_manager_get_accel_group(ui); gtk_window_add_accel_group(GTK_WINDOW(mdns->toplevel), accel); @@ -747,6 +938,7 @@ struct mdns_window *mdns_create_window(int standalone) gtk_container_add(GTK_CONTAINER(scroll), mdns->view); gtk_box_pack_end(GTK_BOX(vbox), mdns->status, FALSE, TRUE, 0); + set_default_visible_cols(mdns, url, xen); return mdns; } @@ -1,6 +1,6 @@ struct mdns_window; -struct mdns_window *mdns_create_window(int standalone); +struct mdns_window *mdns_create_window(int standalone, int url, int xen); void mdns_show_window(struct mdns_window *mdns); void mdns_destroy_window(struct mdns_window *mdns); diff --git a/mk/Autoconf.mk b/mk/Autoconf.mk index 51053c9..aea4900 100644 --- a/mk/Autoconf.mk +++ b/mk/Autoconf.mk @@ -1,7 +1,7 @@ # # simple autoconf system for GNU make # -# (c) 2002-2004 Gerd Knorr <kraxel@bytesex.org> +# (c) 2002-2006 Gerd Hoffmann <kraxel@suse.de> # # credits for creating this one go to the autotools people because # they managed it to annoy lots of developers and users (including diff --git a/mk/Compile.mk b/mk/Compile.mk index 49dddbf..da14d58 100644 --- a/mk/Compile.mk +++ b/mk/Compile.mk @@ -1,7 +1,7 @@ # # some rules to compile stuff ... # -# (c) 2002-2004 Gerd Knorr <kraxel@bytesex.org> +# (c) 2002-2006 Gerd Hoffmann <kraxel@suse.de> # # main features: # * autodependencies via "cpp -MD" diff --git a/mk/Variables.mk b/mk/Variables.mk index 930f824..69486f3 100644 --- a/mk/Variables.mk +++ b/mk/Variables.mk @@ -29,9 +29,11 @@ INSTALL_DATA := $(INSTALL) -m 644 INSTALL_DIR := $(INSTALL) -d # cflags -CFLAGS ?= -g -O2 -CFLAGS += -Wall -Wmissing-prototypes -Wstrict-prototypes \ - -Wpointer-arith -Wunused +CFLAGS ?= -g -O2 +CXXFLAGS ?= $(CFLAGS) +CFLAGS += -Wall -Wmissing-prototypes -Wstrict-prototypes \ + -Wpointer-arith -Wunused +CXXFLAGS += -Wall -Wpointer-arith -Wunused # add /usr/local to the search path if something is in there ... ifneq ($(wildcard /usr/local/include/*.h),) @@ -426,7 +426,7 @@ static void menu_cb_mdns(void) #ifdef HAVE_AVAHI struct mdns_window *mdns; - mdns = mdns_create_window(0); + mdns = mdns_create_window(0,0,1); if (NULL == mdns) { gtk_message(GTK_MESSAGE_ERROR, "Can't setup mDNS browser, sorry.\n"); return; @@ -507,8 +507,8 @@ static void menu_cb_domain_destroy(void) static void menu_cb_about(void) { static char *comments = "xen domain monitor"; - static char *copyright = "(c) 2005 Gerd Knorr"; - static char *authors[] = { "Gerd Knorr <kraxel@suse.de>", NULL }; + static char *copyright = "(c) 2005-2006 Gerd Hoffmann"; + static char *authors[] = { "Gerd Hoffmann <kraxel@suse.de>", NULL }; gtk_show_about_dialog(GTK_WINDOW(xd_toplevel), "authors", authors, @@ -7,19 +7,42 @@ int main(int argc, char *argv[]) { - struct xs_handle *xenstore; + struct xs_handle *xenstore = NULL; xs_transaction_t xst; char *xs_value = NULL, **vec; char *value; unsigned int count; - xenstore = xs_daemon_open_readonly(); if (NULL == xenstore) { - fprintf(stderr,"can't connect to %s\n",xs_daemon_socket_ro()); + xenstore = xs_daemon_open_readonly(); + if (NULL == xenstore) + fprintf(stderr,"can't connect to %s\n",xs_daemon_socket_ro()); + else + printf("connected to %s\n", xs_daemon_socket_ro()); + } + + if (NULL == xenstore) { + xenstore = xs_daemon_open(); + if (NULL == xenstore) + fprintf(stderr,"can't connect to %s\n",xs_daemon_socket()); + else + printf("connected to %s\n", xs_daemon_socket()); + } + + if (NULL == xenstore) { + xenstore = xs_domain_open(); + if (NULL == xenstore) + fprintf(stderr, "can't connect to %s\n", xs_domain_dev()); + else + printf("connected to %s\n", xs_domain_dev()); + } + + if (NULL == xenstore) { + fprintf(stderr, "can't access xenstore, exiting\n"); exit(1); } - xs_watch(xenstore, "/", "token"); + xs_watch(xenstore, "/", "token"); for (;;) { vec = xs_read_watch(xenstore, &count); if (NULL == vec) { @@ -44,7 +67,8 @@ int main(int argc, char *argv[]) value = "<null>"; break; } - fprintf(stderr,"%-64s : \"%s\"\n", vec[XS_WATCH_PATH], value); + printf("%-64s : \"%s\"\n", vec[XS_WATCH_PATH], value); + fflush(stdout); if (xs_value) { free(xs_value); |