File indexing completed on 2024-04-28 15:22:06

0001 /*
0002     This file is part of the KDE project
0003 
0004     SPDX-FileCopyrightText: 2004 Jakub Stachowski <qbast@go2.pl>
0005 
0006     SPDX-License-Identifier: LGPL-2.0-or-later
0007 */
0008 
0009 #include "mdnsd-responder.h"
0010 #include "servicebase.h"
0011 #include <QCoreApplication>
0012 #include <QUrl>
0013 
0014 namespace KDNSSD
0015 {
0016 Responder::Responder(DNSServiceRef ref, QObject *parent)
0017     : QObject(parent)
0018     , m_ref(0)
0019     , m_socket(0)
0020 {
0021     setRef(ref);
0022 }
0023 
0024 void Responder::setRef(DNSServiceRef ref)
0025 {
0026     if (m_socket || m_ref) {
0027         stop();
0028     }
0029     m_running = false;
0030     m_ref = ref;
0031     if (m_ref == 0) {
0032         return;
0033     }
0034     int fd = DNSServiceRefSockFD(ref);
0035     if (fd == -1) {
0036         return;
0037     }
0038     m_socket = new QSocketNotifier(fd, QSocketNotifier::Read, this);
0039     connect(m_socket, SIGNAL(activated(int)), this, SLOT(process()));
0040     m_running = true;
0041 }
0042 Responder::~Responder()
0043 {
0044     stop();
0045 }
0046 
0047 void Responder::stop()
0048 {
0049     delete m_socket;
0050     m_socket = 0;
0051     if (m_ref) {
0052         DNSServiceRefDeallocate(m_ref);
0053     }
0054     m_ref = 0;
0055     m_running = false;
0056 }
0057 
0058 void Responder::process()
0059 {
0060     if (DNSServiceProcessResult(m_ref) != kDNSServiceErr_NoError) {
0061         stop();
0062     }
0063 }
0064 
0065 bool Responder::isRunning() const
0066 {
0067     return m_running;
0068 }
0069 
0070 QByteArray domainToDNS(const QString &domain)
0071 {
0072     if (domainIsLocal(domain)) {
0073         return domain.toUtf8();
0074     } else {
0075         return QUrl::toAce(domain);
0076     }
0077 }
0078 
0079 QString DNSToDomain(const char *domain)
0080 {
0081     if (domainIsLocal(domain)) {
0082         return QString::fromUtf8(domain);
0083     } else {
0084         return QUrl::fromAce(domain);
0085     }
0086 }
0087 
0088 }
0089 
0090 #include "moc_mdnsd-responder.cpp"