void zeroconf_deregister(void) { #if defined (HAVE_MDNS) LOG(log_debug, logtype_afpd, "Attempting to de-register mDNS using mDNSResponder"); md_zeroconf_unregister(); #elif defined (HAVE_AVAHI) LOG(log_debug, logtype_afpd, "Attempting to de-register mDNS using Avahi"); av_zeroconf_unregister(); #endif }
/* * Tries to setup the Zeroconf thread and any * neccessary config setting. */ void av_zeroconf_register(const AFPObj *obj) { int error; /* initialize the struct that holds our config settings. */ if (ctx) { LOG(log_debug, logtype_afpd, "Resetting zeroconf records"); avahi_entry_group_reset(ctx->group); } else { ctx = calloc(1, sizeof(struct context)); ctx->obj = obj; assert(ctx); } /* first of all we need to initialize our threading env */ if (!(ctx->threaded_poll = avahi_threaded_poll_new())) { goto fail; } /* now we need to acquire a client */ if (!(ctx->client = avahi_client_new(avahi_threaded_poll_get(ctx->threaded_poll), AVAHI_CLIENT_NO_FAIL, client_callback, NULL, &error))) { LOG(log_error, logtype_afpd, "Failed to create client object: %s", avahi_strerror(error)); goto fail; } if (avahi_threaded_poll_start(ctx->threaded_poll) < 0) { LOG(log_error, logtype_afpd, "Failed to create thread: %s", avahi_strerror(avahi_client_errno(ctx->client))); goto fail; } else { LOG(log_info, logtype_afpd, "Successfully started avahi loop."); } ctx->thread_running = 1; return; fail: av_zeroconf_unregister(); return; }