summaryrefslogtreecommitdiffstats
path: root/avahi-daemon
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2005-08-03 21:07:02 +0000
committerLennart Poettering <lennart@poettering.net>2005-08-03 21:07:02 +0000
commit3a625af272ee8c6f878ba4d44ed1c741a1582395 (patch)
treeee5fb1f6bff53c670cede2882bbe69d408777894 /avahi-daemon
parent69ea921fa92b0b23faf0a955628e3afab5117534 (diff)
* 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
Diffstat (limited to 'avahi-daemon')
-rw-r--r--avahi-daemon/DBUS-API2
-rw-r--r--avahi-daemon/EntryGroup.introspect5
-rw-r--r--avahi-daemon/dbus-protocol.c29
-rw-r--r--avahi-daemon/main.c36
-rw-r--r--avahi-daemon/static-services.c16
5 files changed, 60 insertions, 28 deletions
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 @@
<interface name="org.freedesktop.Avahi.EntryGroup">
<method name="Free"/>
<method name="Commit"/>
+ <method name="Reset"/>
<method name="GetState">
<arg name="state" type="i" direction="out"/>
@@ -21,6 +22,10 @@
<arg name="state" type="i"/>
</signal>
+ <method name="IsEmpty">
+ <arg name="empty" type="b" direction="out"/>
+ </method>
+
<method name="AddService">
<arg name="interface" type="i" direction="in"/>
<arg name="protocol" type="i" direction="in"/>
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 {