[refactor] fix build warnings in avahi binding

This commit is contained in:
Julian Sparber
2017-09-29 18:21:40 +02:00
parent 67fbdccf62
commit 3246eb9c2d
4 changed files with 148 additions and 171 deletions

View File

@@ -35,41 +35,41 @@ static void resolve_callback(
AvahiStringList *txt, AvahiStringList *txt,
AvahiLookupResultFlags flags, AvahiLookupResultFlags flags,
AVAHI_GCC_UNUSED void* userdata) { AVAHI_GCC_UNUSED void* userdata) {
assert(r); assert(r);
/* Called whenever a service has been resolved successfully or timed out */ /* Called whenever a service has been resolved successfully or timed out */
switch (event) { switch (event) {
case AVAHI_RESOLVER_FAILURE: 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)))); 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; break;
case AVAHI_RESOLVER_FOUND: { case AVAHI_RESOLVER_FOUND: {
char a[AVAHI_ADDRESS_STR_MAX], *t; char a[AVAHI_ADDRESS_STR_MAX], *t;
fprintf(stderr, "Service '%s' of type '%s' in domain '%s':\n", name, type, domain); fprintf(stderr, "Service '%s' of type '%s' in domain '%s':\n", name, type, domain);
avahi_address_snprint(a, sizeof(a), address); avahi_address_snprint(a, sizeof(a), address);
t = avahi_string_list_to_string(txt); t = avahi_string_list_to_string(txt);
teleport_peer_add_peer(peerList, g_strdup(name), g_strdup(a), port); teleport_peer_add_peer(peerList, g_strdup(name), g_strdup(a), port);
//teleport_app_add_peer(name, port, a); //teleport_app_add_peer(name, port, a);
/*fprintf(stderr, /*fprintf(stderr,
"\t%s:%u (%s)\n" "\t%s:%u (%s)\n"
"\tTXT=%s\n" "\tTXT=%s\n"
"\tcookie is %u\n" "\tcookie is %u\n"
"\tis_local: %i\n" "\tis_local: %i\n"
"\tour_own: %i\n" "\tour_own: %i\n"
"\twide_area: %i\n" "\twide_area: %i\n"
"\tmulticast: %i\n" "\tmulticast: %i\n"
"\tcached: %i\n", "\tcached: %i\n",
host_name, port, a, host_name, port, a,
t, t,
avahi_string_list_get_service_cookie(txt), avahi_string_list_get_service_cookie(txt),
!!(flags & AVAHI_LOOKUP_RESULT_LOCAL), !!(flags & AVAHI_LOOKUP_RESULT_LOCAL),
!!(flags & AVAHI_LOOKUP_RESULT_OUR_OWN), !!(flags & AVAHI_LOOKUP_RESULT_OUR_OWN),
!!(flags & AVAHI_LOOKUP_RESULT_WIDE_AREA), !!(flags & AVAHI_LOOKUP_RESULT_WIDE_AREA),
!!(flags & AVAHI_LOOKUP_RESULT_MULTICAST), !!(flags & AVAHI_LOOKUP_RESULT_MULTICAST),
!!(flags & AVAHI_LOOKUP_RESULT_CACHED)); !!(flags & AVAHI_LOOKUP_RESULT_CACHED));
*/ */
avahi_free(t); avahi_free(t);
} }
} }
avahi_service_resolver_free(r); avahi_service_resolver_free(r);
} }
static void browse_callback( static void browse_callback(
AvahiServiceBrowser *b, AvahiServiceBrowser *b,
@@ -81,121 +81,121 @@ static void browse_callback(
const char *domain, const char *domain,
AVAHI_GCC_UNUSED AvahiLookupResultFlags flags, AVAHI_GCC_UNUSED AvahiLookupResultFlags flags,
void* userdata) { void* userdata) {
AvahiClient *c = userdata; AvahiClient *c = userdata;
assert(b); assert(b);
/* Called whenever a new services becomes available on the LAN or is removed from the LAN */ /* Called whenever a new services becomes available on the LAN or is removed from the LAN */
switch (event) { switch (event) {
case AVAHI_BROWSER_FAILURE: case AVAHI_BROWSER_FAILURE:
fprintf(stderr, "(Browser) %s\n", avahi_strerror(avahi_client_errno(avahi_service_browser_get_client(b)))); fprintf(stderr, "(Browser) %s\n", avahi_strerror(avahi_client_errno(avahi_service_browser_get_client(b))));
avahi_shutdown(); avahi_shutdown();
//avahi_simple_poll_quit(simple_poll); //avahi_simple_poll_quit(simple_poll);
return; return;
case AVAHI_BROWSER_NEW: case AVAHI_BROWSER_NEW:
fprintf(stderr, "(Browser) NEW: service '%s' of type '%s' in domain '%s'\n", name, type, domain); fprintf(stderr, "(Browser) NEW: service '%s' of type '%s' in domain '%s'\n", name, type, domain);
if (flags & AVAHI_LOOKUP_RESULT_LOCAL) if (flags & AVAHI_LOOKUP_RESULT_LOCAL)
break; break;
/* We ignore the returned resolver object. In the callback /* We ignore the returned resolver object. In the callback
function we free it. If the server is terminated before function we free it. If the server is terminated before
the callback function is called the server will free the callback function is called the server will free
the resolver for us. */ 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_UNSPEC, 0, resolve_callback, c)))
//if (!(avahi_service_resolver_new(c, interface, protocol, name, type, domain, AVAHI_PROTO_INET, 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))); fprintf(stderr, "Failed to resolve service '%s': %s\n", name, avahi_strerror(avahi_client_errno(c)));
break; break;
case AVAHI_BROWSER_REMOVE: case AVAHI_BROWSER_REMOVE:
fprintf(stderr, "(Browser) REMOVE: service '%s' of type '%s' in domain '%s'\n", name, type, domain); fprintf(stderr, "(Browser) REMOVE: service '%s' of type '%s' in domain '%s'\n", name, type, domain);
//teleport_app_remove_peer(name); //teleport_app_remove_peer(name);
teleport_peer_remove_peer_by_name(peerList, g_strdup(name)); teleport_peer_remove_peer_by_name(peerList, g_strdup(name));
break; break;
case AVAHI_BROWSER_ALL_FOR_NOW: case AVAHI_BROWSER_ALL_FOR_NOW:
case AVAHI_BROWSER_CACHE_EXHAUSTED: case AVAHI_BROWSER_CACHE_EXHAUSTED:
fprintf(stderr, "(Browser) %s\n", event == AVAHI_BROWSER_CACHE_EXHAUSTED ? "CACHE_EXHAUSTED" : "ALL_FOR_NOW"); fprintf(stderr, "(Browser) %s\n", event == AVAHI_BROWSER_CACHE_EXHAUSTED ? "CACHE_EXHAUSTED" : "ALL_FOR_NOW");
break; break;
} }
} }
static void client_callback(AvahiClient *c, AvahiClientState state, AVAHI_GCC_UNUSED void * userdata) { static void client_callback(AvahiClient *c, AvahiClientState state, AVAHI_GCC_UNUSED void * userdata) {
assert(c); assert(c);
/* Called whenever the client or server state changes */ /* Called whenever the client or server state changes */
if (state == AVAHI_CLIENT_FAILURE) { if (state == AVAHI_CLIENT_FAILURE) {
fprintf(stderr, "Server connection failure: %s\n", avahi_strerror(avahi_client_errno(c))); fprintf(stderr, "Server connection failure: %s\n", avahi_strerror(avahi_client_errno(c)));
avahi_shutdown(); avahi_shutdown();
//avahi_simple_poll_quit(simple_poll); //avahi_simple_poll_quit(simple_poll);
} }
} }
/*int run_avahi_service() { /*int run_avahi_service() {
AvahiClient *client = NULL; AvahiClient *client = NULL;
AvahiServiceBrowser *sb = NULL; AvahiServiceBrowser *sb = NULL;
int error; int error;
int ret = 1; int ret = 1;
*/ */
/* Allocate main loop object */ /* Allocate main loop object */
/*if (!(simple_poll = avahi_simple_poll_new())) { /*if (!(simple_poll = avahi_simple_poll_new())) {
fprintf(stderr, "Failed to create simple poll object.\n"); fprintf(stderr, "Failed to create simple poll object.\n");
goto fail; goto fail;
} }
*/ */
/* Allocate a new client */ /* Allocate a new client */
//client = avahi_client_new(avahi_simple_poll_get(simple_poll), 0, client_callback, NULL, &error); //client = avahi_client_new(avahi_simple_poll_get(simple_poll), 0, client_callback, NULL, &error);
/* Check wether creating the client object succeeded */ /* Check wether creating the client object succeeded */
/*if (!client) { /*if (!client) {
fprintf(stderr, "Failed to create client: %s\n", avahi_strerror(error)); fprintf(stderr, "Failed to create client: %s\n", avahi_strerror(error));
goto fail; goto fail;
} }
*//* Create the service browser */ *//* Create the service browser */
/*if (!(sb = avahi_service_browser_new(client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_http._tcp", NULL, 0, browse_callback, client))) { /*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))); fprintf(stderr, "Failed to create service browser: %s\n", avahi_strerror(avahi_client_errno(client)));
goto fail; goto fail;
} }
*/ */
/* Run the main loop */ /* Run the main loop */
/* /*
avahi_simple_poll_loop(simple_poll); avahi_simple_poll_loop(simple_poll);
ret = 0; ret = 0;
fail: fail:
*/ */
/* Cleanup things */ /* Cleanup things */
/* /*
if (sb) if (sb)
avahi_service_browser_free(sb); avahi_service_browser_free(sb);
if (client) if (client)
avahi_client_free(client); avahi_client_free(client);
if (simple_poll) if (simple_poll)
avahi_simple_poll_free(simple_poll); avahi_simple_poll_free(simple_poll);
return ret; return ret;
} }
*/ */
int run_avahi_service(TeleportPeer* peers) { int run_avahi_service(TeleportPeer *peers) {
int error;
peerList = peers; peerList = peers;
/* Call this when the application starts up. */ /* Call this when the application starts up. */
int error;
if (!(threaded_poll = avahi_threaded_poll_new())) { if (!(threaded_poll = avahi_threaded_poll_new())) {
/* do something bad */ /* do something bad */
return 1; return 1;
} }
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)); fprintf(stderr, "Failed to create client: %s\n", avahi_strerror(error));
/* do something bad */ /* do something bad */
return 1; return 1;
} }
/* create some browsers on the client object here, if you wish */ /* 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_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))) { if (!(avahi_service_browser_new(client, AVAHI_IF_UNSPEC, AVAHI_PROTO_INET, "_http._tcp", NULL, 0, browse_callback, client))) {
/* so something bad */ /* so something bad */
return 1; return 1;
} }
/* Finally, start the event loop thread */ /* Finally, start the event loop thread */
if (avahi_threaded_poll_start(threaded_poll) < 0) { if (avahi_threaded_poll_start(threaded_poll) < 0) {
/* do something bad */ /* do something bad */
return 1; return 1;
} }
return 0; return 0;
} }
void avahi_shutdown(void) { void avahi_shutdown(void) {

View File

@@ -1,8 +1,7 @@
#ifndef __BROWSER_H #ifndef __BROWSER_H
#define __BROWSER_H #define __BROWSER_H
extern int run_avahi_service(TeleportPeer *);
extern int run_avahi_service(); void avahi_shutdown(void);
void avahi_shutdown();
#endif /* __BROWSER_H */ #endif /* __BROWSER_H */

View File

@@ -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 #ifdef HAVE_CONFIG_H
#include <config.h> #include <config.h>
#endif #endif
@@ -38,7 +19,7 @@
#include "teleportapp.h" #include "teleportapp.h"
#include "teleportpeer.h" #include "teleportpeer.h"
#include "browser.h" #include "publish.h"
static AvahiThreadedPoll *threaded_poll = NULL; static AvahiThreadedPoll *threaded_poll = NULL;
static AvahiEntryGroup *group = 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 */ /* Some kind of failure happened while we were registering our services */
//avahi_simple_poll_quit(simple_poll); //avahi_simple_poll_quit(simple_poll);
avahi_shutdown(); shutdown_avahi_publish_service();
break; break;
case AVAHI_ENTRY_GROUP_UNCOMMITED: case AVAHI_ENTRY_GROUP_UNCOMMITED:
@@ -156,7 +137,7 @@ collision:
fail: fail:
//avahi_simple_poll_quit(simple_poll); //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) { 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))); fprintf(stderr, "Client failure: %s\n", avahi_strerror(avahi_client_errno(c)));
//avahi_simple_poll_quit(simple_poll); //avahi_simple_poll_quit(simple_poll);
avahi_shutdown(); shutdown_avahi_publish_service();
break; 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); avahi_free(name);
name = avahi_strdup(service_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 run_avahi_publish_service(char * service_name) {
int error; 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"); fprintf(stderr, "Failed to create threaded poll object.\n");
return 1; return 1;
} }
@@ -234,23 +213,21 @@ int run_avahi_publish_service(char * service_name) {
/* Allocate a new client */ /* 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)); fprintf(stderr, "Failed to create client: %s\n", avahi_strerror(error));
return 1; return 1;
} }
if (avahi_threaded_poll_start(threaded_poll) < 0) { if (avahi_threaded_poll_start(threaded_poll) < 0) {
return 1; return 1;
} }
return 0; return 0;
} }
void shutdown_avahi_publish_service(void) { void shutdown_avahi_publish_service(void) {
/* Call this when the app shuts down */ /* Call this when the app shuts down */
//fprintf(stderr, "Some error\n");
avahi_threaded_poll_stop(threaded_poll); avahi_threaded_poll_stop(threaded_poll);
avahi_client_free(client); avahi_client_free(client);
avahi_threaded_poll_free(threaded_poll); avahi_threaded_poll_free(threaded_poll);

View File

@@ -2,7 +2,8 @@
#define __PUBLISH_H #define __PUBLISH_H
extern int run_avahi_publish_service(char *); extern int run_avahi_publish_service(char *);
extern void shutdown_avahi_publish_service(); extern void shutdown_avahi_publish_service(void);
extern void update_service(char *);
#endif /* __PUBLISH_H */ #endif /* __PUBLISH_H */