X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Fdiscovery.c;h=b50aea8d80f689991355db5dac9269eb292fa06e;hb=b70895cf367100792263f04d97a7533b26c5ece3;hp=e196825ac5d378f94359897d384a3f20a0282962;hpb=ae1d95cee66f3e5c6475f03b441d455e436e9ee8;p=meshlink diff --git a/src/discovery.c b/src/discovery.c index e196825a..b50aea8d 100644 --- a/src/discovery.c +++ b/src/discovery.c @@ -2,12 +2,14 @@ #include "meshlink_internal.h" #include "discovery.h" #include "sockaddr.h" +#include "logger.h" #include #include #include #include +#include #include #include #include @@ -280,7 +282,7 @@ static void discovery_resolve_callback(AvahiSServiceResolver *resolver, AvahiIfI case AVAHI_PROTO_INET: { naddress.in.sin_family = AF_INET; - naddress.in.sin_port = port; + naddress.in.sin_port = htons(port); naddress.in.sin_addr.s_addr = address->data.ipv4.address; } break; @@ -288,7 +290,7 @@ static void discovery_resolve_callback(AvahiSServiceResolver *resolver, AvahiIfI case AVAHI_PROTO_INET6: { naddress.in6.sin6_family = AF_INET6; - naddress.in6.sin6_port = port; + naddress.in6.sin6_port = htons(port); memcpy(naddress.in6.sin6_addr.s6_addr, address->data.ipv6.address, sizeof(naddress.in6.sin6_addr.s6_addr)); } break; @@ -399,6 +401,33 @@ static void *discovery_loop(void *userdata) return NULL; } +static void discovery_log_cb(AvahiLogLevel level, const char *txt) +{ + meshlink_log_level_t mlevel = MESHLINK_CRITICAL; + + switch(level) + { + case AVAHI_LOG_ERROR: + mlevel = MESHLINK_ERROR; + break; + + case AVAHI_LOG_WARN: + mlevel = MESHLINK_WARNING; + break; + + case AVAHI_LOG_NOTICE: + case AVAHI_LOG_INFO: + mlevel = MESHLINK_INFO; + break; + + case AVAHI_LOG_DEBUG: + mlevel = MESHLINK_DEBUG; + break; + } + + logger(NULL, mlevel, "%s\n", txt); +} + bool discovery_start(meshlink_handle_t *mesh) { logger(mesh, MESHLINK_DEBUG, "discovery_start called\n"); @@ -411,6 +440,9 @@ bool discovery_start(meshlink_handle_t *mesh) assert(mesh->discovery_threadstarted == false); assert(mesh->avahi_servicetype == NULL); + // handle avahi logs + avahi_set_log_function(discovery_log_cb); + // create service type string size_t servicetype_strlen = sizeof(MESHLINK_MDNS_SERVICE_TYPE) + strlen(mesh->appname) + 1; mesh->avahi_servicetype = malloc(servicetype_strlen); @@ -535,6 +567,13 @@ void discovery_stop(meshlink_handle_t *mesh) mesh->avahi_browser = NULL; } + if(mesh->avahi_group) + { + avahi_s_entry_group_reset(mesh->avahi_group); + avahi_s_entry_group_free(mesh->avahi_group); + mesh->avahi_group = NULL; + } + if(mesh->avahi_server != NULL) { avahi_server_free(mesh->avahi_server);