From 7540df5ed6b383ec93f5a4f10ab2d08f9b9869e4 Mon Sep 17 00:00:00 2001 From: Trent Lloyd Date: Mon, 8 Aug 2005 18:03:51 +0000 Subject: * Move avahi-core/llist.h to avahi-common/llist.h, not installed. * avahi-client/ - Add copyright notice - Remove glib, various cleanups - Remove alternative host/service functions (available in avahi-common) git-svn-id: file:///home/lennart/svn/public/avahi/trunk@275 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe --- avahi-client/client.c | 137 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 90 insertions(+), 47 deletions(-) (limited to 'avahi-client/client.c') diff --git a/avahi-client/client.c b/avahi-client/client.c index 290d767..f5de858 100644 --- a/avahi-client/client.c +++ b/avahi-client/client.c @@ -1,8 +1,33 @@ +/* $Id$ */ + +/*** + This file is part of avahi. + + avahi is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + avahi is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General + Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with avahi; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA. +***/ + +#ifdef HAVE_CONFIG_H +#include +#endif + #include #include +#include #include #include -#include #include #define DBUS_API_SUBJECT_TO_CHANGE @@ -11,9 +36,16 @@ #include -struct _AvahiClientPriv +struct _AvahiClient { DBusConnection *bus; + AVAHI_LLIST_HEAD(AvahiEntryGroup, groups); +}; + +struct _AvahiEntryGroup { + char *path; + AvahiClient *parent; + AVAHI_LLIST_FIELDS(AvahiEntryGroup, groups); }; static DBusHandlerResult @@ -56,28 +88,6 @@ out: return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } -static gint _dbus_add_match (DBusConnection *bus, char *type, char *interface, char *sender, char *path) -{ - DBusError error; - char *filter; - - g_assert (bus != NULL); - - dbus_error_init (&error); - filter = g_strdup_printf ("type='%s', interface='%s', sender='%s', path='%s'", type, interface, sender, path); - dbus_bus_add_match (bus, filter, &error); - g_free (filter); - - if (dbus_error_is_set (&error)) - { - fprintf (stderr, "Error adding filter match: %s\n", error.message); - dbus_error_free (&error); - return FALSE; - } - - return TRUE; -} - AvahiClient * avahi_client_new () { @@ -85,16 +95,17 @@ avahi_client_new () DBusError error; tmp = g_new (AvahiClient, 1); - tmp->priv = g_new (AvahiClientPriv, 1); - g_assert (tmp != NULL); - g_assert (tmp->priv != NULL); - + if (tmp == NULL) + goto fail; + + AVAHI_LLIST_HEAD_INIT(AvahiEntryGroup, tmp->groups); + dbus_error_init (&error); - tmp->priv->bus = dbus_bus_get (DBUS_BUS_SYSTEM, &error); + tmp->bus = dbus_bus_get (DBUS_BUS_SYSTEM, &error); - dbus_connection_setup_with_g_main (tmp->priv->bus, NULL); + dbus_connection_setup_with_g_main (tmp->bus, NULL); if (dbus_error_is_set (&error)) { fprintf(stderr, "Error getting system d-bus: %s\n", error.message); @@ -102,21 +113,47 @@ avahi_client_new () goto fail; } - dbus_connection_set_exit_on_disconnect (tmp->priv->bus, FALSE); + dbus_connection_set_exit_on_disconnect (tmp->bus, FALSE); - if (!dbus_connection_add_filter (tmp->priv->bus, filter_func, tmp, NULL)) + if (!dbus_connection_add_filter (tmp->bus, filter_func, tmp, NULL)) { fprintf (stderr, "Failed to add d-bus filter\n"); goto fail; } - if (!_dbus_add_match (tmp->priv->bus, "signal", AVAHI_DBUS_INTERFACE_SERVER, AVAHI_DBUS_NAME, AVAHI_DBUS_PATH_SERVER)) goto fail; - if (!_dbus_add_match (tmp->priv->bus, "signal", DBUS_INTERFACE_DBUS, DBUS_SERVICE_DBUS, DBUS_PATH_DBUS)) goto fail; + dbus_bus_add_match (tmp->bus, + "type='signal', " + "interface='" AVAHI_DBUS_INTERFACE_SERVER "', " + "sender='" AVAHI_DBUS_NAME "', " + "path='" AVAHI_DBUS_PATH_SERVER "'", + &error); + + if (dbus_error_is_set (&error)) + { + fprintf (stderr, "Error adding filter match: %s\n", error.message); + dbus_error_free (&error); + goto fail; + + } + + dbus_bus_add_match (tmp->bus, + "type='signal', " + "interface='" DBUS_INTERFACE_DBUS "', " + "sender='" DBUS_SERVICE_DBUS "', " + "path='" DBUS_PATH_DBUS "'", + &error); + + if (dbus_error_is_set (&error)) + { + fprintf (stderr, "Error adding filter match: %s\n", error.message); + dbus_error_free (&error); + goto fail; + + } return tmp; fail: - if (tmp->priv) free (tmp->priv); if (tmp) free (tmp); return NULL; } @@ -127,7 +164,7 @@ avahi_client_get_string_reply_and_block (AvahiClient *client, char *method, char DBusMessage *message; DBusMessage *reply; DBusError error; - char *ret; + char *ret, *new; g_assert (client != NULL); g_assert (method != NULL); @@ -135,7 +172,6 @@ avahi_client_get_string_reply_and_block (AvahiClient *client, char *method, char dbus_error_init (&error); message = dbus_message_new_method_call (AVAHI_DBUS_NAME, AVAHI_DBUS_PATH_SERVER, AVAHI_DBUS_INTERFACE_SERVER, method); - fprintf (stderr, "message = dbus_message_new_method_call (%s, %s, %s, %s)\n", AVAHI_DBUS_NAME, AVAHI_DBUS_PATH_SERVER, AVAHI_DBUS_INTERFACE_SERVER, method); if (param != NULL) { @@ -146,7 +182,7 @@ avahi_client_get_string_reply_and_block (AvahiClient *client, char *method, char } } - reply = dbus_connection_send_with_reply_and_block (client->priv->bus, message, -1, &error); + reply = dbus_connection_send_with_reply_and_block (client->bus, message, -1, &error); if (dbus_error_is_set (&error)) { @@ -172,7 +208,9 @@ avahi_client_get_string_reply_and_block (AvahiClient *client, char *method, char return NULL; } - return ret; + new = strdup (ret); + + return new; } char* @@ -199,14 +237,19 @@ avahi_client_get_host_name_fqdn (AvahiClient *client) return avahi_client_get_string_reply_and_block (client, "GetHostNameFqdn", NULL); } -char* -avahi_client_get_alternative_host_name (AvahiClient *client, char *host) +AvahiEntryGroup* +avahi_entry_group_new (AvahiClient *client) { - return avahi_client_get_string_reply_and_block (client, "GetAlternativeHostName", host); -} + AvahiEntryGroup *tmp; -char* -avahi_client_get_alternative_service_name (AvahiClient *client, char *service) -{ - return avahi_client_get_string_reply_and_block (client, "GetAlternativeServiceName", service); + tmp = malloc (sizeof (AvahiEntryGroup)); + + tmp->parent = client; + + AVAHI_LLIST_PREPEND(AvahiEntryGroup, groups, client->groups, tmp); + + return tmp; +fail: + if (tmp) free (tmp); + return NULL; } -- cgit