From 3a625af272ee8c6f878ba4d44ed1c741a1582395 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 3 Aug 2005 21:07:02 +0000 Subject: * add C examples * change doxygen to output stuff in "doxygen/" instead of "doxygen-doc/" * implement avahi_entry_group_{reset,is_empty}() and make everyone use it * move holdoff (SLEEPING) time checking from server to entry group * add preliminary error codes git-svn-id: file:///home/lennart/svn/public/avahi/trunk@216 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe --- avahi-daemon/DBUS-API | 2 ++ avahi-daemon/EntryGroup.introspect | 5 +++++ avahi-daemon/dbus-protocol.c | 29 +++++++++++++++++++++++++++++ avahi-daemon/main.c | 36 +++++++++++++++--------------------- avahi-daemon/static-services.c | 16 +++++++++------- 5 files changed, 60 insertions(+), 28 deletions(-) (limited to 'avahi-daemon') diff --git a/avahi-daemon/DBUS-API b/avahi-daemon/DBUS-API index eb62ae3..9b46ac0 100644 --- a/avahi-daemon/DBUS-API +++ b/avahi-daemon/DBUS-API @@ -20,7 +20,9 @@ org.freedesktop.Avahi.Server org.freedesktop.Avahi.EntryGroup void Free() void Commit() + void Reset() int32 GetState() + boolean IsEmpty() void AddService(int32 interface, int32 protocol, string name, string type, string domain, string host, uint16 port, string txt[]) void AddAddress(int32 interface, int32 protocol, string name, string address) SIGNAL StateChanged(int32 state) diff --git a/avahi-daemon/EntryGroup.introspect b/avahi-daemon/EntryGroup.introspect index 6da6973..fa21b04 100644 --- a/avahi-daemon/EntryGroup.introspect +++ b/avahi-daemon/EntryGroup.introspect @@ -13,6 +13,7 @@ + @@ -21,6 +22,10 @@ + + + + diff --git a/avahi-daemon/dbus-protocol.c b/avahi-daemon/dbus-protocol.c index 0813617..c6a60df 100644 --- a/avahi-daemon/dbus-protocol.c +++ b/avahi-daemon/dbus-protocol.c @@ -513,6 +513,35 @@ static DBusHandlerResult msg_entry_group_impl(DBusConnection *c, DBusMessage *m, avahi_entry_group_commit(i->entry_group); return respond_ok(c, m); + + } else if (dbus_message_is_method_call(m, AVAHI_DBUS_INTERFACE_ENTRY_GROUP, "Reset")) { + + if (!dbus_message_get_args(m, &error, DBUS_TYPE_INVALID)) { + avahi_log_warn("Error parsing EntryGroup::Reset message"); + goto fail; + } + + avahi_entry_group_reset(i->entry_group); + return respond_ok(c, m); + + } else if (dbus_message_is_method_call(m, AVAHI_DBUS_INTERFACE_ENTRY_GROUP, "IsEmpty")) { + DBusMessage *reply; + gboolean b; + + if (!dbus_message_get_args(m, &error, DBUS_TYPE_INVALID)) { + avahi_log_warn("Error parsing EntryGroup::IsEmpty message"); + goto fail; + } + + b = avahi_entry_group_is_empty(i->entry_group); + + reply = dbus_message_new_method_return(m); + dbus_message_append_args(m, DBUS_TYPE_BOOLEAN, &b, DBUS_TYPE_INVALID); + dbus_connection_send(c, reply, NULL); + dbus_message_unref(reply); + + return DBUS_HANDLER_RESULT_HANDLED; + } else if (dbus_message_is_method_call(m, AVAHI_DBUS_INTERFACE_ENTRY_GROUP, "GetState")) { DBusMessage *reply; gint32 t; diff --git a/avahi-daemon/main.c b/avahi-daemon/main.c index 7d83c46..1083416 100644 --- a/avahi-daemon/main.c +++ b/avahi-daemon/main.c @@ -131,14 +131,16 @@ finish: return ret; } -static AvahiEntryGroup* add_dns_servers(AvahiServer *s, gchar **l) { +static AvahiEntryGroup* add_dns_servers(AvahiServer *s, AvahiEntryGroup* g, gchar **l) { gchar **p; - AvahiEntryGroup *g; g_assert(s); g_assert(l); - g = avahi_entry_group_new(s, NULL, NULL); + if (!g) + g = avahi_entry_group_new(s, NULL, NULL); + + g_assert(avahi_entry_group_is_empty(g)); for (p = l; *p; p++) { AvahiAddress a; @@ -155,19 +157,15 @@ static AvahiEntryGroup* add_dns_servers(AvahiServer *s, gchar **l) { avahi_entry_group_commit(g); return g; - } static void remove_dns_server_entry_groups(void) { - if (resolv_conf_entry_group) { - avahi_entry_group_free(resolv_conf_entry_group); - resolv_conf_entry_group = NULL; - } + + if (resolv_conf_entry_group) + avahi_entry_group_reset(resolv_conf_entry_group); - if (dns_servers_entry_group) { - avahi_entry_group_free(dns_servers_entry_group); - dns_servers_entry_group = NULL; - } + if (dns_servers_entry_group) + avahi_entry_group_reset(dns_servers_entry_group); } static void server_callback(AvahiServer *s, AvahiServerState state, gpointer userdata) { @@ -188,10 +186,10 @@ static void server_callback(AvahiServer *s, AvahiServerState state, gpointer use remove_dns_server_entry_groups(); if (resolv_conf && resolv_conf[0]) - resolv_conf_entry_group = add_dns_servers(s, resolv_conf); + resolv_conf_entry_group = add_dns_servers(s, resolv_conf_entry_group, resolv_conf); if (c->publish_dns_servers && c->publish_dns_servers[0]) - dns_servers_entry_group = add_dns_servers(s, c->publish_dns_servers); + dns_servers_entry_group = add_dns_servers(s, dns_servers_entry_group, c->publish_dns_servers); simple_protocol_restart_queries(); @@ -207,8 +205,6 @@ static void server_callback(AvahiServer *s, AvahiServerState state, gpointer use avahi_server_set_host_name(s, n); g_free(n); } - - } static void help(FILE *f, const gchar *argv0) { @@ -476,15 +472,13 @@ static gboolean signal_callback(GIOChannel *source, GIOCondition condition, gpoi static_service_load(); static_service_add_to_server(); - if (resolv_conf_entry_group) { - avahi_entry_group_free(resolv_conf_entry_group); - resolv_conf_entry_group = NULL; - } + if (resolv_conf_entry_group) + avahi_entry_group_reset(resolv_conf_entry_group); load_resolv_conf(&config); if (resolv_conf && resolv_conf[0]) - resolv_conf_entry_group = add_dns_servers(avahi_server, resolv_conf); + resolv_conf_entry_group = add_dns_servers(avahi_server, resolv_conf_entry_group, resolv_conf); break; diff --git a/avahi-daemon/static-services.c b/avahi-daemon/static-services.c index 1f9b765..8c54eab 100644 --- a/avahi-daemon/static-services.c +++ b/avahi-daemon/static-services.c @@ -152,7 +152,8 @@ static void static_service_free(StaticService *s) { static void static_service_group_free(StaticServiceGroup *g) { g_assert(g); - remove_static_service_group_from_server(g); + if (g->entry_group) + avahi_entry_group_free(g->entry_group); while (g->services) static_service_free(g->services); @@ -202,8 +203,11 @@ static void add_static_service_group_to_server(StaticServiceGroup *g) { g->chosen_name = replacestr(g->name, "%h", avahi_server_get_host_name(avahi_server)); else g->chosen_name = g_strdup(g->name); - - g->entry_group = avahi_entry_group_new(avahi_server, entry_group_callback, g); + + if (!g->entry_group) + g->entry_group = avahi_entry_group_new(avahi_server, entry_group_callback, g); + + g_assert(avahi_entry_group_is_empty(g->entry_group)); for (s = g->services; s; s = s->services_next) { @@ -226,10 +230,8 @@ static void add_static_service_group_to_server(StaticServiceGroup *g) { static void remove_static_service_group_from_server(StaticServiceGroup *g) { g_assert(g); - if (g->entry_group) { - avahi_entry_group_free(g->entry_group); - g->entry_group = NULL; - } + if (g->entry_group) + avahi_entry_group_reset(g->entry_group); } typedef enum { -- cgit