aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkraxel <kraxel>2007-02-07 09:35:45 +0000
committerkraxel <kraxel>2007-02-07 09:35:45 +0000
commitd857edabedfa81d983d4e8dd0363a58de9792c3e (patch)
tree965b71b6c90d605dd141c330b0eb03bc73b9162d
parent32f212ab9d1b4dcf4e2be5abc3776d8192bb93f4 (diff)
downloadxenwatch-d857edabedfa81d983d4e8dd0363a58de9792c3e.tar.gz
misc tweaks
-rw-r--r--mdns-browser.c2
-rw-r--r--mdns-publish-vnc.c2
-rw-r--r--mdns-publish-xendom.c3
-rw-r--r--mdns-publish.c38
-rw-r--r--mdns-publish.h3
-rw-r--r--mdns.c25
-rw-r--r--mdns.h7
-rw-r--r--xd_view.c2
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);
diff --git a/mdns.c b/mdns.c
index 1336559..7d32d0d 100644
--- a/mdns.c
+++ b/mdns.c
@@ -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;
diff --git a/mdns.h b/mdns.h
index ee1fc1c..ef669ec 100644
--- a/mdns.h
+++ b/mdns.h
@@ -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);
diff --git a/xd_view.c b/xd_view.c
index 163a709..8034460 100644
--- a/xd_view.c
+++ b/xd_view.c
@@ -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;