diff --git a/src/browser.c b/src/browser.c index d2a622a..01658e5 100644 --- a/src/browser.c +++ b/src/browser.c @@ -35,41 +35,41 @@ static void resolve_callback( AvahiStringList *txt, AvahiLookupResultFlags flags, AVAHI_GCC_UNUSED void* userdata) { - assert(r); - /* Called whenever a service has been resolved successfully or timed out */ - switch (event) { - case AVAHI_RESOLVER_FAILURE: - fprintf(stderr, "(Resolver) Failed to resolve service '%s' of type '%s' in domain '%s': %s\n", name, type, domain, avahi_strerror(avahi_client_errno(avahi_service_resolver_get_client(r)))); - break; - case AVAHI_RESOLVER_FOUND: { - char a[AVAHI_ADDRESS_STR_MAX], *t; - fprintf(stderr, "Service '%s' of type '%s' in domain '%s':\n", name, type, domain); - avahi_address_snprint(a, sizeof(a), address); - t = avahi_string_list_to_string(txt); - teleport_peer_add_peer(peerList, g_strdup(name), g_strdup(a), port); - //teleport_app_add_peer(name, port, a); - /*fprintf(stderr, - "\t%s:%u (%s)\n" - "\tTXT=%s\n" - "\tcookie is %u\n" - "\tis_local: %i\n" - "\tour_own: %i\n" - "\twide_area: %i\n" - "\tmulticast: %i\n" - "\tcached: %i\n", - host_name, port, a, - t, - avahi_string_list_get_service_cookie(txt), - !!(flags & AVAHI_LOOKUP_RESULT_LOCAL), - !!(flags & AVAHI_LOOKUP_RESULT_OUR_OWN), - !!(flags & AVAHI_LOOKUP_RESULT_WIDE_AREA), - !!(flags & AVAHI_LOOKUP_RESULT_MULTICAST), - !!(flags & AVAHI_LOOKUP_RESULT_CACHED)); - */ - avahi_free(t); - } - } - avahi_service_resolver_free(r); + assert(r); + /* Called whenever a service has been resolved successfully or timed out */ + switch (event) { + case AVAHI_RESOLVER_FAILURE: + fprintf(stderr, "(Resolver) Failed to resolve service '%s' of type '%s' in domain '%s': %s\n", name, type, domain, avahi_strerror(avahi_client_errno(avahi_service_resolver_get_client(r)))); + break; + case AVAHI_RESOLVER_FOUND: { + char a[AVAHI_ADDRESS_STR_MAX], *t; + fprintf(stderr, "Service '%s' of type '%s' in domain '%s':\n", name, type, domain); + avahi_address_snprint(a, sizeof(a), address); + t = avahi_string_list_to_string(txt); + teleport_peer_add_peer(peerList, g_strdup(name), g_strdup(a), port); + //teleport_app_add_peer(name, port, a); + /*fprintf(stderr, + "\t%s:%u (%s)\n" + "\tTXT=%s\n" + "\tcookie is %u\n" + "\tis_local: %i\n" + "\tour_own: %i\n" + "\twide_area: %i\n" + "\tmulticast: %i\n" + "\tcached: %i\n", + host_name, port, a, + t, + avahi_string_list_get_service_cookie(txt), + !!(flags & AVAHI_LOOKUP_RESULT_LOCAL), + !!(flags & AVAHI_LOOKUP_RESULT_OUR_OWN), + !!(flags & AVAHI_LOOKUP_RESULT_WIDE_AREA), + !!(flags & AVAHI_LOOKUP_RESULT_MULTICAST), + !!(flags & AVAHI_LOOKUP_RESULT_CACHED)); + */ + avahi_free(t); + } + } + avahi_service_resolver_free(r); } static void browse_callback( AvahiServiceBrowser *b, @@ -81,121 +81,121 @@ static void browse_callback( const char *domain, AVAHI_GCC_UNUSED AvahiLookupResultFlags flags, void* userdata) { - AvahiClient *c = userdata; - assert(b); - /* Called whenever a new services becomes available on the LAN or is removed from the LAN */ - switch (event) { - case AVAHI_BROWSER_FAILURE: - fprintf(stderr, "(Browser) %s\n", avahi_strerror(avahi_client_errno(avahi_service_browser_get_client(b)))); - avahi_shutdown(); - //avahi_simple_poll_quit(simple_poll); - return; - case AVAHI_BROWSER_NEW: - fprintf(stderr, "(Browser) NEW: service '%s' of type '%s' in domain '%s'\n", name, type, domain); - if (flags & AVAHI_LOOKUP_RESULT_LOCAL) - break; - /* We ignore the returned resolver object. In the callback - function we free it. If the server is terminated before - the callback function is called the server will free - the resolver for us. */ - if (!(avahi_service_resolver_new(c, interface, protocol, name, type, domain, AVAHI_PROTO_UNSPEC, 0, resolve_callback, c))) - //if (!(avahi_service_resolver_new(c, interface, protocol, name, type, domain, AVAHI_PROTO_INET, 0, resolve_callback, c))) - fprintf(stderr, "Failed to resolve service '%s': %s\n", name, avahi_strerror(avahi_client_errno(c))); - break; - case AVAHI_BROWSER_REMOVE: - fprintf(stderr, "(Browser) REMOVE: service '%s' of type '%s' in domain '%s'\n", name, type, domain); - //teleport_app_remove_peer(name); - teleport_peer_remove_peer_by_name(peerList, g_strdup(name)); - break; - case AVAHI_BROWSER_ALL_FOR_NOW: - case AVAHI_BROWSER_CACHE_EXHAUSTED: - fprintf(stderr, "(Browser) %s\n", event == AVAHI_BROWSER_CACHE_EXHAUSTED ? "CACHE_EXHAUSTED" : "ALL_FOR_NOW"); - break; - } + AvahiClient *c = userdata; + assert(b); + /* Called whenever a new services becomes available on the LAN or is removed from the LAN */ + switch (event) { + case AVAHI_BROWSER_FAILURE: + fprintf(stderr, "(Browser) %s\n", avahi_strerror(avahi_client_errno(avahi_service_browser_get_client(b)))); + avahi_shutdown(); + //avahi_simple_poll_quit(simple_poll); + return; + case AVAHI_BROWSER_NEW: + fprintf(stderr, "(Browser) NEW: service '%s' of type '%s' in domain '%s'\n", name, type, domain); + if (flags & AVAHI_LOOKUP_RESULT_LOCAL) + break; + /* We ignore the returned resolver object. In the callback + function we free it. If the server is terminated before + the callback function is called the server will free + the resolver for us. */ + if (!(avahi_service_resolver_new(c, interface, protocol, name, type, domain, AVAHI_PROTO_UNSPEC, 0, resolve_callback, c))) + //if (!(avahi_service_resolver_new(c, interface, protocol, name, type, domain, AVAHI_PROTO_INET, 0, resolve_callback, c))) + fprintf(stderr, "Failed to resolve service '%s': %s\n", name, avahi_strerror(avahi_client_errno(c))); + break; + case AVAHI_BROWSER_REMOVE: + fprintf(stderr, "(Browser) REMOVE: service '%s' of type '%s' in domain '%s'\n", name, type, domain); + //teleport_app_remove_peer(name); + teleport_peer_remove_peer_by_name(peerList, g_strdup(name)); + break; + case AVAHI_BROWSER_ALL_FOR_NOW: + case AVAHI_BROWSER_CACHE_EXHAUSTED: + fprintf(stderr, "(Browser) %s\n", event == AVAHI_BROWSER_CACHE_EXHAUSTED ? "CACHE_EXHAUSTED" : "ALL_FOR_NOW"); + break; + } } static void client_callback(AvahiClient *c, AvahiClientState state, AVAHI_GCC_UNUSED void * userdata) { - assert(c); - /* Called whenever the client or server state changes */ - if (state == AVAHI_CLIENT_FAILURE) { - fprintf(stderr, "Server connection failure: %s\n", avahi_strerror(avahi_client_errno(c))); - avahi_shutdown(); - //avahi_simple_poll_quit(simple_poll); - } + assert(c); + /* Called whenever the client or server state changes */ + if (state == AVAHI_CLIENT_FAILURE) { + fprintf(stderr, "Server connection failure: %s\n", avahi_strerror(avahi_client_errno(c))); + avahi_shutdown(); + //avahi_simple_poll_quit(simple_poll); + } } /*int run_avahi_service() { - AvahiClient *client = NULL; - AvahiServiceBrowser *sb = NULL; - int error; - int ret = 1; - */ - /* Allocate main loop object */ - /*if (!(simple_poll = avahi_simple_poll_new())) { - fprintf(stderr, "Failed to create simple poll object.\n"); - goto fail; - } - */ - /* Allocate a new client */ - //client = avahi_client_new(avahi_simple_poll_get(simple_poll), 0, client_callback, NULL, &error); - /* Check wether creating the client object succeeded */ - /*if (!client) { - fprintf(stderr, "Failed to create client: %s\n", avahi_strerror(error)); - goto fail; - } - *//* Create the service browser */ - /*if (!(sb = avahi_service_browser_new(client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_http._tcp", NULL, 0, browse_callback, client))) { - fprintf(stderr, "Failed to create service browser: %s\n", avahi_strerror(avahi_client_errno(client))); - goto fail; - } - */ - /* Run the main loop */ + AvahiClient *client = NULL; + AvahiServiceBrowser *sb = NULL; + int error; + int ret = 1; + */ +/* Allocate main loop object */ +/*if (!(simple_poll = avahi_simple_poll_new())) { + fprintf(stderr, "Failed to create simple poll object.\n"); + goto fail; + } + */ +/* Allocate a new client */ +//client = avahi_client_new(avahi_simple_poll_get(simple_poll), 0, client_callback, NULL, &error); +/* Check wether creating the client object succeeded */ +/*if (!client) { + fprintf(stderr, "Failed to create client: %s\n", avahi_strerror(error)); + goto fail; + } + *//* Create the service browser */ +/*if (!(sb = avahi_service_browser_new(client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_http._tcp", NULL, 0, browse_callback, client))) { + fprintf(stderr, "Failed to create service browser: %s\n", avahi_strerror(avahi_client_errno(client))); + goto fail; + } + */ +/* Run the main loop */ /* - avahi_simple_poll_loop(simple_poll); - ret = 0; + avahi_simple_poll_loop(simple_poll); + ret = 0; fail: */ - /* Cleanup things */ +/* Cleanup things */ /* - if (sb) - avahi_service_browser_free(sb); - if (client) - avahi_client_free(client); - if (simple_poll) - avahi_simple_poll_free(simple_poll); - return ret; -} -*/ + if (sb) + avahi_service_browser_free(sb); + if (client) + avahi_client_free(client); + if (simple_poll) + avahi_simple_poll_free(simple_poll); + return ret; + } + */ -int run_avahi_service(TeleportPeer* peers) { +int run_avahi_service(TeleportPeer *peers) { + int error; peerList = peers; - /* Call this when the application starts up. */ - int error; + /* Call this when the application starts up. */ - if (!(threaded_poll = avahi_threaded_poll_new())) { - /* do something bad */ - return 1; - } + if (!(threaded_poll = avahi_threaded_poll_new())) { + /* do something bad */ + return 1; + } - if (!(client = avahi_client_new(avahi_threaded_poll_get(threaded_poll), 0, client_callback, NULL, &error))) { - fprintf(stderr, "Failed to create client: %s\n", avahi_strerror(error)); - /* do something bad */ - return 1; - } + if (!(client = avahi_client_new(avahi_threaded_poll_get(threaded_poll), 0, client_callback, NULL, &error))) { + fprintf(stderr, "Failed to create client: %s\n", avahi_strerror(error)); + /* do something bad */ + return 1; + } - /* create some browsers on the client object here, if you wish */ - //if (!(avahi_service_browser_new(client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_http._tcp", NULL, 0, browse_callback, client))) { - if (!(avahi_service_browser_new(client, AVAHI_IF_UNSPEC, AVAHI_PROTO_INET, "_http._tcp", NULL, 0, browse_callback, client))) { - /* so something bad */ - return 1; - } + /* create some browsers on the client object here, if you wish */ + //if (!(avahi_service_browser_new(client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_http._tcp", NULL, 0, browse_callback, client))) { + if (!(avahi_service_browser_new(client, AVAHI_IF_UNSPEC, AVAHI_PROTO_INET, "_http._tcp", NULL, 0, browse_callback, client))) { + /* so something bad */ + return 1; + } - /* Finally, start the event loop thread */ - if (avahi_threaded_poll_start(threaded_poll) < 0) { - /* do something bad */ - return 1; - } - return 0; + /* Finally, start the event loop thread */ + if (avahi_threaded_poll_start(threaded_poll) < 0) { + /* do something bad */ + return 1; + } + return 0; } void avahi_shutdown(void) { diff --git a/src/browser.h b/src/browser.h index 968e1d5..c344645 100644 --- a/src/browser.h +++ b/src/browser.h @@ -1,8 +1,7 @@ #ifndef __BROWSER_H #define __BROWSER_H - -extern int run_avahi_service(); -void avahi_shutdown(); +extern int run_avahi_service(TeleportPeer *); +void avahi_shutdown(void); #endif /* __BROWSER_H */ diff --git a/src/publish.c b/src/publish.c index 969de70..5d2abef 100644 --- a/src/publish.c +++ b/src/publish.c @@ -1,22 +1,3 @@ -/*** - 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 @@ -38,7 +19,7 @@ #include "teleportapp.h" #include "teleportpeer.h" -#include "browser.h" +#include "publish.h" static AvahiThreadedPoll *threaded_poll = NULL; static AvahiEntryGroup *group = NULL; @@ -83,7 +64,7 @@ static void entry_group_callback(AvahiEntryGroup *g, AvahiEntryGroupState state, /* Some kind of failure happened while we were registering our services */ //avahi_simple_poll_quit(simple_poll); - avahi_shutdown(); + shutdown_avahi_publish_service(); break; case AVAHI_ENTRY_GROUP_UNCOMMITED: @@ -156,7 +137,7 @@ collision: fail: //avahi_simple_poll_quit(simple_poll); - avahi_shutdown(); + shutdown_avahi_publish_service(); } static void client_callback(AvahiClient *c, AvahiClientState state, AVAHI_GCC_UNUSED void * userdata) { @@ -176,7 +157,7 @@ static void client_callback(AvahiClient *c, AvahiClientState state, AVAHI_GCC_UN fprintf(stderr, "Client failure: %s\n", avahi_strerror(avahi_client_errno(c))); //avahi_simple_poll_quit(simple_poll); - avahi_shutdown(); + shutdown_avahi_publish_service(); break; @@ -203,7 +184,7 @@ static void client_callback(AvahiClient *c, AvahiClientState state, AVAHI_GCC_UN } } -static void update_service(char * service_name) { +extern void update_service(char * service_name) { avahi_free(name); name = avahi_strdup(service_name); @@ -222,10 +203,8 @@ static void update_service(char * service_name) { int run_avahi_publish_service(char * service_name) { int error; - int ret = 1; - struct timeval tv; - if (!(threaded_poll = avahi_threaded_poll_new())) { + if (!(threaded_poll = avahi_threaded_poll_new())) { fprintf(stderr, "Failed to create threaded poll object.\n"); return 1; } @@ -234,23 +213,21 @@ int run_avahi_publish_service(char * service_name) { /* Allocate a new client */ - if (!(client = avahi_client_new(avahi_threaded_poll_get(threaded_poll), 0, client_callback, NULL, &error))) { + if (!(client = avahi_client_new(avahi_threaded_poll_get(threaded_poll), 0, client_callback, NULL, &error))) { fprintf(stderr, "Failed to create client: %s\n", avahi_strerror(error)); return 1; } - if (avahi_threaded_poll_start(threaded_poll) < 0) { + if (avahi_threaded_poll_start(threaded_poll) < 0) { return 1; - } + } return 0; } - void shutdown_avahi_publish_service(void) { /* Call this when the app shuts down */ - //fprintf(stderr, "Some error\n"); avahi_threaded_poll_stop(threaded_poll); avahi_client_free(client); avahi_threaded_poll_free(threaded_poll); diff --git a/src/publish.h b/src/publish.h index b917f72..238ff07 100644 --- a/src/publish.h +++ b/src/publish.h @@ -2,7 +2,8 @@ #define __PUBLISH_H -extern int run_avahi_publish_service(char *); -extern void shutdown_avahi_publish_service(); +extern int run_avahi_publish_service(char *); +extern void shutdown_avahi_publish_service(void); +extern void update_service(char *); #endif /* __PUBLISH_H */