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"