File indexing completed on 2024-05-12 04:58:53
0001 /** 0002 * SPDX-FileCopyrightText: 2023 Albert Vaca <albertvaka@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include "mdnsdiscovery.h" 0008 0009 #include "core_debug.h" 0010 #include "kdeconnectconfig.h" 0011 #include "lanlinkprovider.h" 0012 0013 #include "mdns_wrapper.h" 0014 0015 const QString kServiceType = QStringLiteral("_kdeconnect._udp.local"); 0016 0017 MdnsDiscovery::MdnsDiscovery(LanLinkProvider *lanLinkProvider) 0018 : mdnsAnnouncer(KdeConnectConfig::instance().deviceId(), kServiceType, LanLinkProvider::UDP_PORT) 0019 { 0020 KdeConnectConfig &config = KdeConnectConfig::instance(); 0021 mdnsAnnouncer.putTxtRecord(QStringLiteral("id"), config.deviceId()); 0022 mdnsAnnouncer.putTxtRecord(QStringLiteral("name"), config.name()); 0023 mdnsAnnouncer.putTxtRecord(QStringLiteral("type"), config.deviceType().toString()); 0024 mdnsAnnouncer.putTxtRecord(QStringLiteral("protocol"), QString::number(NetworkPacket::s_protocolVersion)); 0025 0026 connect(&mdnsDiscoverer, &MdnsWrapper::Discoverer::serviceFound, this, [lanLinkProvider](const MdnsWrapper::Discoverer::MdnsService &service) { 0027 if (KdeConnectConfig::instance().deviceId() == service.name) { 0028 qCDebug(KDECONNECT_CORE) << "Discovered myself, ignoring"; 0029 return; 0030 } 0031 lanLinkProvider->sendUdpIdentityPacket(QList<QHostAddress>{service.address}); 0032 qCDebug(KDECONNECT_CORE) << "Discovered" << service.name << "at" << service.address; 0033 }); 0034 } 0035 0036 MdnsDiscovery::~MdnsDiscovery() 0037 { 0038 onStop(); 0039 } 0040 0041 void MdnsDiscovery::onStart() 0042 { 0043 mdnsAnnouncer.startAnnouncing(); 0044 mdnsDiscoverer.startDiscovering(kServiceType); 0045 } 0046 0047 void MdnsDiscovery::onStop() 0048 { 0049 mdnsAnnouncer.stopAnnouncing(); 0050 mdnsDiscoverer.stopDiscovering(); 0051 } 0052 0053 void MdnsDiscovery::onNetworkChange() 0054 { 0055 mdnsAnnouncer.onNetworkChange(); 0056 mdnsDiscoverer.stopDiscovering(); 0057 mdnsDiscoverer.startDiscovering(kServiceType); 0058 } 0059 0060 #include "moc_mdnsdiscovery.cpp"