/* * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #include #include #include #include #include #include namespace Swift { AvahiQuerier::AvahiQuerier(EventLoop* eventLoop) : eventLoop(eventLoop), client(NULL), threadedPoll(NULL) { } AvahiQuerier::~AvahiQuerier() { } std::shared_ptr AvahiQuerier::createBrowseQuery() { return std::make_shared(shared_from_this(), eventLoop); } std::shared_ptr AvahiQuerier::createRegisterQuery(const std::string& name, int port, const ByteArray& info) { return std::make_shared(name, port, info, shared_from_this(), eventLoop); } std::shared_ptr AvahiQuerier::createResolveServiceQuery(const DNSSDServiceID& service) { return std::make_shared(service, shared_from_this(), eventLoop); } std::shared_ptr AvahiQuerier::createResolveHostnameQuery(const std::string& hostname, int interfaceIndex) { return std::make_shared(hostname, interfaceIndex, shared_from_this(), eventLoop); } void AvahiQuerier::start() { std::cout << "Starrting querier" << std::endl; assert(!threadedPoll); threadedPoll = avahi_threaded_poll_new(); int error; assert(!client); client = avahi_client_new( avahi_threaded_poll_get(threadedPoll), static_cast(0), NULL, this, &error); // TODO if (!client) { // TODO std::cerr << "Avahi Error: " << avahi_strerror(error) << std::endl; return; } std::cout << "Starrting event loop" << std::endl; avahi_threaded_poll_start(threadedPoll); } void AvahiQuerier::stop() { assert(threadedPoll); avahi_threaded_poll_stop(threadedPoll); assert(client); avahi_client_free(client); avahi_threaded_poll_free(threadedPoll); } }