X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-client%2Fbrowser.c;h=f92ed0d8b65c76a19c9b70671453f97a0a2493d5;hb=ed11c6a4d4da379ff9ebccb7a0340e64232efabb;hp=a8a823ebe1c719224e203550c9068f7806bb7edc;hpb=9e4237ebed07d00bf1176178d1358b475d749b27;p=catta diff --git a/avahi-client/browser.c b/avahi-client/browser.c index a8a823e..f92ed0d 100644 --- a/avahi-client/browser.c +++ b/avahi-client/browser.c @@ -1,18 +1,16 @@ -/* $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 @@ -44,7 +42,7 @@ static void parse_environment(AvahiDomainBrowser *b) { char buf[AVAHI_DOMAIN_NAME_MAX*3], *e, *t, *p; assert(b); - + if (!(e = getenv("AVAHI_BROWSE_DOMAINS"))) return; @@ -60,17 +58,17 @@ static void parse_environment(AvahiDomainBrowser *b) { static void parse_domain_file(AvahiDomainBrowser *b) { FILE *f; char buf[AVAHI_DOMAIN_NAME_MAX]; - + assert(b); if (!(f = avahi_xdg_config_open("avahi/browse-domains"))) return; - - + + while (fgets(buf, sizeof(buf)-1, f)) { char domain[AVAHI_DOMAIN_NAME_MAX]; buf[strcspn(buf, "\n\r")] = 0; - + if (avahi_normalize_name(buf, domain, sizeof(domain))) b->static_browse_domains = avahi_string_list_add(b->static_browse_domains, domain); } @@ -112,7 +110,7 @@ AvahiDomainBrowser* avahi_domain_browser_new( AvahiLookupFlags flags, AvahiDomainBrowserCallback callback, void *userdata) { - + AvahiDomainBrowser *db = NULL; DBusMessage *message = NULL, *reply = NULL; DBusError error; @@ -156,7 +154,7 @@ AvahiDomainBrowser* avahi_domain_browser_new( } db->static_browse_domains = avahi_string_list_reverse(db->static_browse_domains); - + if (!(message = dbus_message_new_method_call (AVAHI_DBUS_NAME, AVAHI_DBUS_PATH_SERVER, AVAHI_DBUS_INTERFACE_SERVER, "DomainBrowserNew"))) { avahi_client_set_errno(client, AVAHI_ERR_NO_MEMORY); goto fail; @@ -200,7 +198,7 @@ AvahiDomainBrowser* avahi_domain_browser_new( goto fail; } - if (db->static_browse_domains) { + if (db->static_browse_domains && btype == AVAHI_DOMAIN_BROWSER_BROWSE) { struct timeval tv = { 0, 0 }; if (!(db->defer_timeout = client->poll_api->timeout_new(client->poll_api, &tv, defer_timeout_callback, db))) { @@ -208,10 +206,10 @@ AvahiDomainBrowser* avahi_domain_browser_new( goto fail; } } - + dbus_message_unref(message); dbus_message_unref(reply); - + return db; fail: @@ -223,7 +221,7 @@ fail: if (db) avahi_domain_browser_free(db); - + if (message) dbus_message_unref(message); @@ -241,13 +239,13 @@ AvahiClient* avahi_domain_browser_get_client (AvahiDomainBrowser *b) { int avahi_domain_browser_free (AvahiDomainBrowser *b) { AvahiClient *client; int r = AVAHI_OK; - + assert(b); assert(b->ref >= 1); if (--(b->ref) >= 1) return AVAHI_OK; - + client = b->client; if (b->path && avahi_client_is_connected(b->client)) @@ -257,7 +255,7 @@ int avahi_domain_browser_free (AvahiDomainBrowser *b) { if (b->defer_timeout) b->client->poll_api->timeout_free(b->defer_timeout); - + avahi_string_list_free(b->static_browse_domains); avahi_free(b->path); avahi_free(b); @@ -276,7 +274,7 @@ DBusHandlerResult avahi_domain_browser_event (AvahiClient *client, AvahiBrowserE assert(client); assert(message); - + dbus_error_init (&error); if (!(path = dbus_message_get_path(message))) @@ -295,7 +293,7 @@ DBusHandlerResult avahi_domain_browser_event (AvahiClient *client, AvahiBrowserE switch (event) { case AVAHI_BROWSER_NEW: case AVAHI_BROWSER_REMOVE: - + if (!dbus_message_get_args( message, &error, DBUS_TYPE_INT32, &interface, @@ -309,14 +307,14 @@ DBusHandlerResult avahi_domain_browser_event (AvahiClient *client, AvahiBrowserE } break; - + case AVAHI_BROWSER_CACHE_EXHAUSTED: case AVAHI_BROWSER_ALL_FOR_NOW: break; case AVAHI_BROWSER_FAILURE: { char *etxt; - + if (!dbus_message_get_args( message, &error, DBUS_TYPE_STRING, &etxt, @@ -325,7 +323,7 @@ DBusHandlerResult avahi_domain_browser_event (AvahiClient *client, AvahiBrowserE fprintf(stderr, "Failed to parse browser event.\n"); goto fail; } - + avahi_client_set_errno(db->client, avahi_error_dbus_to_number(etxt)); break; } @@ -337,7 +335,7 @@ DBusHandlerResult avahi_domain_browser_event (AvahiClient *client, AvahiBrowserE /* We had this entry already in the static entries */ return DBUS_HANDLER_RESULT_HANDLED; } - + db->callback(db, (AvahiIfIndex) interface, (AvahiProtocol) protocol, event, domain, (AvahiLookupResultFlags) flags, db->userdata); return DBUS_HANDLER_RESULT_HANDLED; @@ -354,10 +352,10 @@ AvahiServiceTypeBrowser* avahi_service_type_browser_new( AvahiIfIndex interface, AvahiProtocol protocol, const char *domain, - AvahiLookupFlags flags, + AvahiLookupFlags flags, AvahiServiceTypeBrowserCallback callback, void *userdata) { - + AvahiServiceTypeBrowser *b = NULL; DBusMessage *message = NULL, *reply = NULL; DBusError error; @@ -398,12 +396,12 @@ AvahiServiceTypeBrowser* avahi_service_type_browser_new( avahi_client_set_errno(client, AVAHI_ERR_NO_MEMORY); goto fail; } - + if (!(message = dbus_message_new_method_call (AVAHI_DBUS_NAME, AVAHI_DBUS_PATH_SERVER, AVAHI_DBUS_INTERFACE_SERVER, "ServiceTypeBrowserNew"))) { avahi_client_set_errno(client, AVAHI_ERR_NO_MEMORY); goto fail; } - + i_interface = (int32_t) interface; i_protocol = (int32_t) protocol; u_flags = (uint32_t) flags; @@ -446,7 +444,7 @@ AvahiServiceTypeBrowser* avahi_service_type_browser_new( return b; fail: - + if (dbus_error_is_set(&error)) { avahi_client_set_dbus_error(client, &error); dbus_error_free(&error); @@ -454,7 +452,7 @@ fail: if (b) avahi_service_type_browser_free(b); - + if (message) dbus_message_unref(message); @@ -497,7 +495,7 @@ DBusHandlerResult avahi_service_type_browser_event (AvahiClient *client, AvahiBr assert(client); assert(message); - + dbus_error_init (&error); if (!(path = dbus_message_get_path(message))) @@ -513,7 +511,7 @@ DBusHandlerResult avahi_service_type_browser_event (AvahiClient *client, AvahiBr domain = b->domain; interface = b->interface; protocol = b->protocol; - + switch (event) { case AVAHI_BROWSER_NEW: case AVAHI_BROWSER_REMOVE: @@ -530,14 +528,14 @@ DBusHandlerResult avahi_service_type_browser_event (AvahiClient *client, AvahiBr goto fail; } break; - + case AVAHI_BROWSER_CACHE_EXHAUSTED: case AVAHI_BROWSER_ALL_FOR_NOW: break; case AVAHI_BROWSER_FAILURE: { char *etxt; - + if (!dbus_message_get_args( message, &error, DBUS_TYPE_STRING, &etxt, @@ -546,7 +544,7 @@ DBusHandlerResult avahi_service_type_browser_event (AvahiClient *client, AvahiBr fprintf(stderr, "Failed to parse browser event.\n"); goto fail; } - + avahi_client_set_errno(b->client, avahi_error_dbus_to_number(etxt)); break; } @@ -569,10 +567,10 @@ AvahiServiceBrowser* avahi_service_browser_new( AvahiProtocol protocol, const char *type, const char *domain, - AvahiLookupFlags flags, + AvahiLookupFlags flags, AvahiServiceBrowserCallback callback, void *userdata) { - + AvahiServiceBrowser *b = NULL; DBusMessage *message = NULL, *reply = NULL; DBusError error; @@ -598,7 +596,7 @@ AvahiServiceBrowser* avahi_service_browser_new( avahi_client_set_errno(client, AVAHI_ERR_NO_MEMORY); goto fail; } - + b->client = client; b->callback = callback; b->userdata = userdata; @@ -613,13 +611,13 @@ AvahiServiceBrowser* avahi_service_browser_new( avahi_client_set_errno(client, AVAHI_ERR_NO_MEMORY); goto fail; } - + if (domain && domain[0]) if (!(b->domain = avahi_strdup(domain))) { avahi_client_set_errno(client, AVAHI_ERR_NO_MEMORY); goto fail; } - + if (!(message = dbus_message_new_method_call (AVAHI_DBUS_NAME, AVAHI_DBUS_PATH_SERVER, AVAHI_DBUS_INTERFACE_SERVER, "ServiceBrowserNew"))) { avahi_client_set_errno(client, AVAHI_ERR_NO_MEMORY); goto fail; @@ -664,7 +662,7 @@ AvahiServiceBrowser* avahi_service_browser_new( dbus_message_unref(message); dbus_message_unref(reply); - + return b; fail: @@ -675,7 +673,7 @@ fail: if (b) avahi_service_browser_free(b); - + if (message) dbus_message_unref(message); @@ -737,7 +735,7 @@ DBusHandlerResult avahi_service_browser_event(AvahiClient *client, AvahiBrowserE switch (event) { case AVAHI_BROWSER_NEW: case AVAHI_BROWSER_REMOVE: - + if (!dbus_message_get_args ( message, &error, DBUS_TYPE_INT32, &interface, @@ -759,7 +757,7 @@ DBusHandlerResult avahi_service_browser_event(AvahiClient *client, AvahiBrowserE case AVAHI_BROWSER_FAILURE: { char *etxt; - + if (!dbus_message_get_args( message, &error, DBUS_TYPE_STRING, &etxt, @@ -768,7 +766,7 @@ DBusHandlerResult avahi_service_browser_event(AvahiClient *client, AvahiBrowserE fprintf(stderr, "Failed to parse browser event.\n"); goto fail; } - + avahi_client_set_errno(b->client, avahi_error_dbus_to_number(etxt)); break; } @@ -795,7 +793,7 @@ AvahiRecordBrowser* avahi_record_browser_new( AvahiLookupFlags flags, AvahiRecordBrowserCallback callback, void *userdata) { - + AvahiRecordBrowser *b = NULL; DBusMessage *message = NULL, *reply = NULL; DBusError error; @@ -818,7 +816,7 @@ AvahiRecordBrowser* avahi_record_browser_new( avahi_client_set_errno(client, AVAHI_ERR_NO_MEMORY); goto fail; } - + b->client = client; b->callback = callback; b->userdata = userdata; @@ -835,7 +833,7 @@ AvahiRecordBrowser* avahi_record_browser_new( avahi_client_set_errno(client, AVAHI_ERR_NO_MEMORY); goto fail; } - + if (!(message = dbus_message_new_method_call(AVAHI_DBUS_NAME, AVAHI_DBUS_PATH_SERVER, AVAHI_DBUS_INTERFACE_SERVER, "RecordBrowserNew"))) { avahi_client_set_errno(client, AVAHI_ERR_NO_MEMORY); goto fail; @@ -881,7 +879,7 @@ AvahiRecordBrowser* avahi_record_browser_new( dbus_message_unref(message); dbus_message_unref(reply); - + return b; fail: @@ -892,7 +890,7 @@ fail: if (b) avahi_record_browser_free(b); - + if (message) dbus_message_unref(message); @@ -978,7 +976,7 @@ DBusHandlerResult avahi_record_browser_event(AvahiClient *client, AvahiBrowserEv for (j = 0; j < 5; j++) dbus_message_iter_next(&iter); - + if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY || dbus_message_iter_get_element_type(&iter) != DBUS_TYPE_BYTE) goto fail; @@ -987,12 +985,12 @@ DBusHandlerResult avahi_record_browser_event(AvahiClient *client, AvahiBrowserEv dbus_message_iter_get_fixed_array(&sub, &rdata, &rdata_size); dbus_message_iter_next(&iter); - + if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_UINT32) goto fail; dbus_message_iter_get_basic(&iter, &flags); - + break; } @@ -1002,7 +1000,7 @@ DBusHandlerResult avahi_record_browser_event(AvahiClient *client, AvahiBrowserEv case AVAHI_BROWSER_FAILURE: { char *etxt; - + if (!dbus_message_get_args( message, &error, DBUS_TYPE_STRING, &etxt, @@ -1011,7 +1009,7 @@ DBusHandlerResult avahi_record_browser_event(AvahiClient *client, AvahiBrowserEv fprintf(stderr, "Failed to parse browser event.\n"); goto fail; } - + avahi_client_set_errno(b->client, avahi_error_dbus_to_number(etxt)); break; }