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"