diff options
Diffstat (limited to 'xbmc/network/mdns/ZeroconfMDNS.h')
-rw-r--r-- | xbmc/network/mdns/ZeroconfMDNS.h | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/xbmc/network/mdns/ZeroconfMDNS.h b/xbmc/network/mdns/ZeroconfMDNS.h new file mode 100644 index 0000000..95959a1 --- /dev/null +++ b/xbmc/network/mdns/ZeroconfMDNS.h @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2005-2018 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#pragma once + +#include "network/Zeroconf.h" +#include "threads/CriticalSection.h" +#include "threads/Thread.h" + +#include <memory> +#include <string> +#include <utility> +#include <vector> + +#include <dns_sd.h> + +class CZeroconfMDNS : public CZeroconf,public CThread +{ +public: + CZeroconfMDNS(); + ~CZeroconfMDNS(); + +protected: + + //CThread interface + void Process(); + + //implement base CZeroConf interface + bool doPublishService(const std::string& fcr_identifier, + const std::string& fcr_type, + const std::string& fcr_name, + unsigned int f_port, + const std::vector<std::pair<std::string, std::string> >& txt); + + bool doForceReAnnounceService(const std::string& fcr_identifier); + bool doRemoveService(const std::string& fcr_ident); + + virtual void doStop(); + + bool IsZCdaemonRunning(); + + void ProcessResults(); + +private: + + static void DNSSD_API registerCallback(DNSServiceRef sdref, + const DNSServiceFlags flags, + DNSServiceErrorType errorCode, + const char *name, + const char *regtype, + const char *domain, + void *context); + + + //lock + data (accessed from runloop(main thread) + the rest) + CCriticalSection m_data_guard; + struct tServiceRef + { + DNSServiceRef serviceRef; + TXTRecordRef txtRecordRef; + int updateNumber; + }; + typedef std::map<std::string, struct tServiceRef> tServiceMap; + tServiceMap m_services; + DNSServiceRef m_service; +}; |