[Windows] Remove redundant DirectSound error codes
[xbmc.git] / xbmc / platform / android / network / ZeroconfAndroid.cpp
blob1731b9e33c0aa34d19706689389bf338f7388d66
1 /*
2 * Copyright (C) 2017 Christian Browet
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
9 #include "ZeroconfAndroid.h"
11 #include "utils/log.h"
13 #include <mutex>
15 #include <androidjni/Context.h>
17 CZeroconfAndroid::CZeroconfAndroid()
18 : m_manager(CJNIContext::getSystemService(CJNIContext::NSD_SERVICE))
22 CZeroconfAndroid::~CZeroconfAndroid()
24 doStop();
27 bool CZeroconfAndroid::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)
29 CLog::Log(LOGDEBUG, "ZeroconfAndroid: identifier: {} type: {} name:{} port:{}", fcr_identifier,
30 fcr_type, fcr_name, f_port);
32 struct tServiceRef newService;
34 newService.serviceInfo.setServiceName(fcr_name);
35 newService.serviceInfo.setServiceType(fcr_type);
36 newService.serviceInfo.setHost(CJNIInetAddress::getLocalHost());
37 newService.serviceInfo.setPort(f_port);
39 for (const auto& it : txt)
41 // CLog::Log(LOGDEBUG, "ZeroconfAndroid: key:{}, value:{}", it.first,it.second);
42 newService.serviceInfo.setAttribute(it.first, it.second);
45 m_manager.registerService(newService.serviceInfo, 1 /* PROTOCOL_DNS_SD */, newService.registrationListener);
47 std::unique_lock<CCriticalSection> lock(m_data_guard);
48 newService.updateNumber = 0;
49 m_services.insert(make_pair(fcr_identifier, newService));
51 return true;
54 bool CZeroconfAndroid::doForceReAnnounceService(const std::string& fcr_identifier)
56 bool ret = false;
57 std::unique_lock<CCriticalSection> lock(m_data_guard);
58 tServiceMap::iterator it = m_services.find(fcr_identifier);
59 if(it != m_services.end())
61 // for force announcing a service with mdns we need
62 // to change a txt record - so we diddle between
63 // even and odd dummy records here
64 if ( (it->second.updateNumber % 2) == 0)
65 it->second.serviceInfo.setAttribute("xbmcdummy", "evendummy");
66 else
67 it->second.serviceInfo.setAttribute("xbmcdummy", "odddummy");
68 it->second.updateNumber++;
70 m_manager.unregisterService(it->second.registrationListener);
71 it->second.registrationListener = jni::CJNIXBMCNsdManagerRegistrationListener();
72 m_manager.registerService(it->second.serviceInfo, 1 /* PROTOCOL_DNS_SD */, it->second.registrationListener);
74 return ret;
77 bool CZeroconfAndroid::doRemoveService(const std::string& fcr_ident)
79 std::unique_lock<CCriticalSection> lock(m_data_guard);
80 tServiceMap::iterator it = m_services.find(fcr_ident);
81 if(it != m_services.end())
83 m_manager.unregisterService(it->second.registrationListener);
84 m_services.erase(it);
85 CLog::Log(LOGDEBUG, "CZeroconfAndroid: Removed service {}", fcr_ident);
86 return true;
88 else
89 return false;
92 void CZeroconfAndroid::doStop()
95 std::unique_lock<CCriticalSection> lock(m_data_guard);
96 CLog::Log(LOGDEBUG, "ZeroconfAndroid: Shutdown services");
97 for (const auto& it : m_services)
99 m_manager.unregisterService(it.second.registrationListener);
100 CLog::Log(LOGDEBUG, "CZeroconfAndroid: Removed service {}", it.first);
102 m_services.clear();