diff options
author | kraxel <kraxel> | 2007-02-07 09:35:45 +0000 |
---|---|---|
committer | kraxel <kraxel> | 2007-02-07 09:35:45 +0000 |
commit | d857edabedfa81d983d4e8dd0363a58de9792c3e (patch) | |
tree | 965b71b6c90d605dd141c330b0eb03bc73b9162d | |
parent | 32f212ab9d1b4dcf4e2be5abc3776d8192bb93f4 (diff) | |
download | xenwatch-d857edabedfa81d983d4e8dd0363a58de9792c3e.tar.gz |
misc tweaks
-rw-r--r-- | mdns-browser.c | 2 | ||||
-rw-r--r-- | mdns-publish-vnc.c | 2 | ||||
-rw-r--r-- | mdns-publish-xendom.c | 3 | ||||
-rw-r--r-- | mdns-publish.c | 38 | ||||
-rw-r--r-- | mdns-publish.h | 3 | ||||
-rw-r--r-- | mdns.c | 25 | ||||
-rw-r--r-- | mdns.h | 7 | ||||
-rw-r--r-- | xd_view.c | 2 |
8 files changed, 58 insertions, 24 deletions
diff --git a/mdns-browser.c b/mdns-browser.c index f0f1bee..bca3ab1 100644 --- a/mdns-browser.c +++ b/mdns-browser.c @@ -89,7 +89,7 @@ main(int argc, char *argv[]) fcntl(ConnectionNumber(dpy),F_SETFD,FD_CLOEXEC); detect_desktop(); - mdns = mdns_create_window(1, view); + mdns = mdns_create_window(1, view, NULL); if (NULL == mdns) { fprintf(stderr,"Oops: mDNS did't initialize ok\n"); exit(1); diff --git a/mdns-publish-vnc.c b/mdns-publish-vnc.c index 1a88fa0..d192bb2 100644 --- a/mdns-publish-vnc.c +++ b/mdns-publish-vnc.c @@ -74,7 +74,7 @@ static void try_attach_domain(struct mdns_pub *mdns, struct dom *dom, int boot) snprintf(dom->label, sizeof(dom->label), "host %s, guest %s", uts.nodename, dom->name); mdns_log_printf(mdns, LOG_INFO, "pub: %s (%d)\n", dom->name, dom->domid); - dom->entry = mdns_pub_add(mdns, dom->label, "_rfb._tcp", dom->vnc_port); + dom->entry = mdns_pub_add(mdns, dom->label, "_rfb._tcp", dom->vnc_port, NULL); dom->published = 1; } diff --git a/mdns-publish-xendom.c b/mdns-publish-xendom.c index 339858f..ec22206 100644 --- a/mdns-publish-xendom.c +++ b/mdns-publish-xendom.c @@ -188,7 +188,8 @@ int main(int argc, char*argv[]) mdns = mdns_pub_init(debug); if (NULL == mdns) goto fail; - mdns_pub_add(mdns, buf, service, port); + mdns_pub_add(mdns, buf, service, port, + vm_uuid, dom_id, NULL); mdns_sigsetup(mdns); /* enter main loop */ diff --git a/mdns-publish.c b/mdns-publish.c index a0e3cc4..81944f7 100644 --- a/mdns-publish.c +++ b/mdns-publish.c @@ -65,27 +65,29 @@ static char *client_state_name[] = { [ AVAHI_CLIENT_CONNECTING ] = "connecting", }; +static void update_services(AvahiClient *c, struct mdns_pub *mdns); + static void entry_group_callback(AvahiEntryGroup *g, AvahiEntryGroupState state, void *userdata) { struct mdns_pub_entry *entry = userdata; + char *n; mdns_log_printf(entry->mdns, LOG_DEBUG, "%s: %s: state %d [%s]\n", __FUNCTION__, entry->name, state, group_state_name[state]); switch (state) { case AVAHI_ENTRY_GROUP_COLLISION: -#if 0 - n = avahi_alternative_service_name(name); - mdns_log_printf(mdns, LOG_NOTICE, + n = avahi_alternative_service_name(entry->name); + mdns_log_printf(entry->mdns, 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)); + entry->name, n); + avahi_free(entry->name); + entry->name = n; + avahi_entry_group_reset(entry->group); + update_services(avahi_entry_group_get_client(g), entry->mdns); break; -#endif case AVAHI_ENTRY_GROUP_FAILURE: mdns_pub_appquit++; break; @@ -236,7 +238,7 @@ struct mdns_pub *mdns_pub_init(int debug) memset(mdns, 0, sizeof(*mdns)); INIT_LIST_HEAD(&mdns->entries); mdns->debug = debug; - mdns->have_tty = 1; + mdns->have_tty = isatty(2); openlog(mdns_pub_appname, 0, LOG_LOCAL0); mdns->have_syslog = 1; @@ -286,20 +288,33 @@ void mdns_pub_fini(struct mdns_pub *mdns) /* --------------------------------------------------------------------- */ struct mdns_pub_entry *mdns_pub_add(struct mdns_pub *mdns, - char *name, char *service, int port) + char *name, char *service, int port, + ...) { struct mdns_pub_entry *entry; + va_list args; + char *txt; + int i; entry = avahi_malloc(sizeof(*entry)); if (NULL == entry) return NULL; memset(entry, 0, sizeof(*entry)); - entry->name = name; + entry->name = avahi_strdup(name); entry->service = service; entry->port = port; entry->mdns = mdns; + va_start(args, port); + for (i = 0; i < sizeof(entry->txt)/sizeof(entry->txt[0]); i++) { + txt = va_arg(args,char*); + if (NULL == txt) + break; + entry->txt[i] = txt; + } + va_end(args); + list_add_tail(&entry->next, &mdns->entries); if (mdns->client) update_services(mdns->client, mdns); @@ -316,6 +331,7 @@ void mdns_pub_del(struct mdns_pub_entry *entry) avahi_entry_group_free(entry->group); entry->group = NULL; } + avahi_free(entry->name); list_del(&entry->next); avahi_free(entry); } diff --git a/mdns-publish.h b/mdns-publish.h index 46a87fb..a6183d3 100644 --- a/mdns-publish.h +++ b/mdns-publish.h @@ -13,7 +13,8 @@ void mdns_pub_fini(struct mdns_pub *mdns); /* add and remove services */ struct mdns_pub_entry *mdns_pub_add(struct mdns_pub *mdns, - char *name, char *service, int port); + char *name, char *service, int port, + ...); void mdns_pub_del(struct mdns_pub_entry *entry); void mdns_pub_del_all(struct mdns_pub *mdns); @@ -119,6 +119,7 @@ struct mdns_window { GtkWidget *toplevel, *view, *status; GtkActionGroup *ag; int standalone; + mdns_callback callback; const AvahiPoll *poll_api; AvahiGLibPoll *glib_poll; @@ -715,7 +716,7 @@ static void row_activate(GtkTreeView* treeview, GtkTreeViewColumn* col, gpointer data) { -// struct mdns_window *mdns = data; + struct mdns_window *mdns = data; GtkTreeModel* model; GtkTreeIter iter; char *name, *type, *host, *port, *url; @@ -732,9 +733,13 @@ static void row_activate(GtkTreeView* treeview, ST_COL_URL, &url, -1); - rc = run_actions(default_actions, array_size(default_actions), - name, type, host, port, url); - /* FIXME: error message if failed */ + if (mdns->callback) { + mdns->callback(mdns, name, type, host, atoi(port), url); + } else { + rc = run_actions(default_actions, array_size(default_actions), + name, type, host, port, url); + /* FIXME: error message if failed */ + } } /* ---------------------------------------------------------------------- */ @@ -850,9 +855,11 @@ static char ui_xml[] = " <menuitem action='ColXenVmUUID'/>" " </menu>" " </menubar>" +#ifdef WITH_TOOLBAR " <toolbar action='ToolBar'>" " <toolitem action='Close'/>" " </toolbar>" +#endif "</ui>"; /* ------------------------------------------------------------------ */ @@ -1024,7 +1031,8 @@ static void set_default_visible_cols(struct mdns_window *mdns, enum mdns_view vi gtk_toggle_action_set_active(ta, view == MDNS_VIEW_XEN); } -struct mdns_window *mdns_create_window(int standalone, enum mdns_view view) +struct mdns_window *mdns_create_window(int standalone, enum mdns_view view, + mdns_callback callback) { struct mdns_window *mdns; GtkWidget *vbox, *menubar, *toolbar, *scroll, *frame; @@ -1039,6 +1047,7 @@ struct mdns_window *mdns_create_window(int standalone, enum mdns_view view) return NULL; } mdns->standalone = standalone; + mdns->callback = callback; mdns->toplevel = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(mdns->toplevel), "mdns"); @@ -1099,7 +1108,8 @@ struct mdns_window *mdns_create_window(int standalone, enum mdns_view view) menubar = gtk_ui_manager_get_widget(ui, "/MainMenu"); gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0); toolbar = gtk_ui_manager_get_widget(ui, "/ToolBar"); - gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0); + if (toolbar) + gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), scroll, TRUE, TRUE, 0); gtk_container_add(GTK_CONTAINER(scroll), mdns->view); @@ -1131,7 +1141,8 @@ int mdns_view(struct mdns_window *mdns, enum mdns_view view) #else /* ! HAVE_AVAHI */ -struct mdns_window *mdns_create_window(int standalone, enum mdns_view view) +struct mdns_window *mdns_create_window(int standalone, enum mdns_view view, + mdns_callback callback) { fprintf(stderr,"Compiled without mDNS support, sorry.\n"); return NULL; @@ -6,7 +6,12 @@ enum mdns_view { MDNS_VIEW_XEN, }; -struct mdns_window *mdns_create_window(int standalone, enum mdns_view view); +typedef void (*mdns_callback)(struct mdns_window *mdns, + char *name, char *type, + char *host, int port, char *url); + +struct mdns_window *mdns_create_window(int standalone, enum mdns_view view, + mdns_callback callback); void mdns_show_window(struct mdns_window *mdns); void mdns_destroy_window(struct mdns_window *mdns); @@ -289,7 +289,7 @@ static void menu_cb_mdns(void) #ifdef HAVE_AVAHI struct mdns_window *mdns; - mdns = mdns_create_window(0, MDNS_VIEW_XEN); + mdns = mdns_create_window(0, MDNS_VIEW_XEN, NULL); if (NULL == mdns) { gtk_message(GTK_MESSAGE_ERROR, "Can't setup mDNS browser, sorry.\n"); return; |