summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2006-08-22 02:15:27 +0000
committerLennart Poettering <lennart@poettering.net>2006-08-22 02:15:27 +0000
commit6db0d600cffd0db86982d0cee38973105d65654f (patch)
treed62b3041f62fc353fdfb7899445a1c0a3eb2c756
parent8f02a455414a986c3616c37df103d586b888708c (diff)
implement avahi_client_set_host_name() as wrapper around the new DBUS function o.fd.A.S.SetHostName
git-svn-id: file:///home/lennart/svn/public/avahi/trunk@1261 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe
-rw-r--r--avahi-client/client.c55
-rw-r--r--avahi-client/client.h3
2 files changed, 58 insertions, 0 deletions
diff --git a/avahi-client/client.c b/avahi-client/client.c
index 0913847..825e88f 100644
--- a/avahi-client/client.c
+++ b/avahi-client/client.c
@@ -875,3 +875,58 @@ int avahi_client_is_connected(AvahiClient *client) {
dbus_connection_get_is_connected(client->bus) &&
(client->state == AVAHI_CLIENT_S_RUNNING || client->state == AVAHI_CLIENT_S_REGISTERING || client->state == AVAHI_CLIENT_S_COLLISION);
}
+
+int avahi_client_set_host_name(AvahiClient* client, const char *name) {
+ DBusMessage *message = NULL, *reply = NULL;
+ DBusError error;
+
+ assert(client);
+
+ if (!avahi_client_is_connected(client))
+ return avahi_client_set_errno(client, AVAHI_ERR_BAD_STATE);
+
+ dbus_error_init (&error);
+
+ if (!(message = dbus_message_new_method_call (AVAHI_DBUS_NAME, AVAHI_DBUS_PATH_SERVER, AVAHI_DBUS_INTERFACE_SERVER, "SetHostName"))) {
+ avahi_client_set_errno(client, AVAHI_ERR_NO_MEMORY);
+ goto fail;
+ }
+
+ if (!dbus_message_append_args (message, DBUS_TYPE_STRING, &name, DBUS_TYPE_INVALID)) {
+ avahi_client_set_errno (client, AVAHI_ERR_NO_MEMORY);
+ goto fail;
+ }
+
+ reply = dbus_connection_send_with_reply_and_block(client->bus, message, -1, &error);
+
+ if (!reply || dbus_error_is_set (&error))
+ goto fail;
+
+ if (!dbus_message_get_args(reply, &error, DBUS_TYPE_INVALID) ||
+ dbus_error_is_set (&error))
+ goto fail;
+
+ dbus_message_unref(message);
+ dbus_message_unref(reply);
+
+ avahi_free(client->host_name);
+ client->host_name = NULL;
+ avahi_free(client->host_name_fqdn);
+ client->host_name_fqdn = NULL;
+
+ return 0;
+
+fail:
+
+ if (message)
+ dbus_message_unref(message);
+ if (reply)
+ dbus_message_unref(reply);
+
+ if (dbus_error_is_set(&error)) {
+ avahi_client_set_dbus_error(client, &error);
+ dbus_error_free(&error);
+ }
+
+ return client->error;
+}
diff --git a/avahi-client/client.h b/avahi-client/client.h
index e15c130..f102f05 100644
--- a/avahi-client/client.h
+++ b/avahi-client/client.h
@@ -77,6 +77,9 @@ const char* avahi_client_get_version_string (AvahiClient*);
/** Get host name */
const char* avahi_client_get_host_name (AvahiClient*);
+/** Set host name. \since 0.6.13 */
+int avahi_client_set_host_name(AvahiClient*, const char *name);
+
/** Get domain name */
const char* avahi_client_get_domain_name (AvahiClient*);