• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • dnssd
 

dnssd

  • dnssd
domainbrowser.cpp
1/* This file is part of the KDE project
2 *
3 * Copyright (C) 2004 Jakub Stachowski <qbast@go2.pl>
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details.
14 *
15 * You should have received a copy of the GNU Library General Public License
16 * along with this library; see the file COPYING.LIB. If not, write to
17 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 * Boston, MA 02110-1301, USA.
19 */
20
21#include <tqstringlist.h>
22#include "domainbrowser.h"
23#include "settings.h"
24#include "sdevent.h"
25#include "responder.h"
26#include "remoteservice.h"
27#include "query.h"
28#include "servicebrowser.h"
29#include <tdeapplication.h>
30#ifdef HAVE_DNSSD
31#ifdef AVAHI_API_0_6
32#include <avahi-client/lookup.h>
33#endif
34#endif
35
36namespace DNSSD
37{
38
39#ifdef HAVE_DNSSD
40#ifdef AVAHI_API_0_6
41void domains_callback(AvahiDomainBrowser*, AvahiIfIndex, AvahiProtocol, AvahiBrowserEvent event, const char* replyDomain,
42 AvahiLookupResultFlags, void* context);
43#else
44void domains_callback(AvahiDomainBrowser*, AvahiIfIndex, AvahiProtocol, AvahiBrowserEvent event, const char* replyDomain,
45 void* context);
46#endif
47#endif
48
49
50class DomainBrowserPrivate
51{
52public:
53#ifdef HAVE_DNSSD
54 DomainBrowserPrivate(DomainBrowser* owner) : m_browseLAN(false), m_started(false), m_browser(0), m_owner(owner) {}
55#else
56 DomainBrowserPrivate(DomainBrowser* owner) : m_browseLAN(false), m_started(false) {}
57#endif
58#ifdef HAVE_DNSSD
59 ~DomainBrowserPrivate() { if (m_browser) avahi_domain_browser_free(m_browser); }
60#endif
61 TQStringList m_domains;
62 virtual void customEvent(TQCustomEvent* event);
63 bool m_browseLAN;
64 bool m_started;
65#ifdef HAVE_DNSSD
66 AvahiDomainBrowser* m_browser;
67#endif
68 DomainBrowser* m_owner;
69};
70
71void DomainBrowserPrivate::customEvent(TQCustomEvent* event)
72{
73 if (event->type()==TQEvent::User+SD_ADDREMOVE) {
74 AddRemoveEvent *aev = static_cast<AddRemoveEvent*>(event);
75 if (aev->m_op==AddRemoveEvent::Add) m_owner->gotNewDomain(aev->m_domain);
76 else m_owner->gotRemoveDomain(aev->m_domain);
77 }
78}
79
80
81DomainBrowser::DomainBrowser(TQObject *parent) : TQObject(parent)
82{
83 d = new DomainBrowserPrivate(this);
84 d->m_domains = Configuration::domainList();
85 if (Configuration::browseLocal()) {
86 d->m_domains+="local.";
87 d->m_browseLAN=true;
88 }
89 connect(tdeApp,TQ_SIGNAL(kipcMessage(int,int)),this,
90 TQ_SLOT(domainListChanged(int,int)));
91}
92
93DomainBrowser::DomainBrowser(const TQStringList& domains, bool recursive, TQObject *parent) : TQObject(parent)
94{
95 d = new DomainBrowserPrivate(this);
96 d->m_browseLAN = recursive;
97 d->m_domains=domains;
98}
99
100
101DomainBrowser::~DomainBrowser()
102{
103 delete d;
104}
105
106
107void DomainBrowser::startBrowse()
108{
109 if (d->m_started) return;
110 d->m_started=true;
111 if (ServiceBrowser::isAvailable()!=ServiceBrowser::Working) return;
112 TQStringList::const_iterator itEnd = d->m_domains.end();
113 for (TQStringList::const_iterator it=d->m_domains.begin(); it!=itEnd; ++it ) emit domainAdded(*it);
114#ifdef HAVE_DNSSD
115 if (d->m_browseLAN)
116#ifdef AVAHI_API_0_6
117 d->m_browser = avahi_domain_browser_new(Responder::self().client(), AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC,
118 "local.", AVAHI_DOMAIN_BROWSER_BROWSE, (AvahiLookupFlags)0, domains_callback, this);
119#else
120 d->m_browser = avahi_domain_browser_new(Responder::self().client(), AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC,
121 "local.", AVAHI_DOMAIN_BROWSER_BROWSE, domains_callback, this);
122#endif
123#endif
124}
125
126void DomainBrowser::gotNewDomain(const TQString& domain)
127{
128 if (d->m_domains.contains(domain)) return;
129 d->m_domains.append(domain);
130 emit domainAdded(domain);
131}
132
133void DomainBrowser::gotRemoveDomain(const TQString& domain)
134{
135 d->m_domains.remove(domain);
136 emit domainRemoved(domain);
137}
138
139void DomainBrowser::domainListChanged(int message,int)
140{
141 if (message!=KIPCDomainsChanged) return;
142
143 bool was_started = d->m_started;
144#ifdef HAVE_DNSSD
145 if (d->m_browser) {
146 avahi_domain_browser_free(d->m_browser); // LAN query
147 d->m_browser=0;
148 }
149#endif
150 d->m_started = false;
151
152 // remove all domains and resolvers
153 if (was_started) {
154 TQStringList::const_iterator itEnd = d->m_domains.end();
155 for (TQStringList::const_iterator it=d->m_domains.begin(); it!=itEnd; ++it )
156 emit domainRemoved(*it);
157 }
158 d->m_domains.clear();
159 // now reread configuration and add domains
160 Configuration::self()->readConfig();
161 d->m_browseLAN = Configuration::browseLocal();
162 d->m_domains = Configuration::domainList();
163 if (Configuration::browseLocal()) d->m_domains+="local";
164 // this will emit domainAdded() for every domain if necessary
165 if (was_started) startBrowse();
166}
167
168const TQStringList& DomainBrowser::domains() const
169{
170 return d->m_domains;
171}
172
173bool DomainBrowser::isRunning() const
174{
175 return d->m_started;
176}
177
178void DomainBrowser::virtual_hook(int, void*)
179{}
180
181#ifdef HAVE_DNSSD
182#ifdef AVAHI_API_0_6
183void domains_callback(AvahiDomainBrowser*, AvahiIfIndex, AvahiProtocol, AvahiBrowserEvent event, const char* replyDomain,
184 AvahiLookupResultFlags,void* context)
185#else
186void domains_callback(AvahiDomainBrowser*, AvahiIfIndex, AvahiProtocol, AvahiBrowserEvent event, const char* replyDomain,
187 void* context)
188#endif
189{
190 TQObject *obj = reinterpret_cast<TQObject*>(context);
191 AddRemoveEvent* arev=new AddRemoveEvent((event==AVAHI_BROWSER_NEW) ? AddRemoveEvent::Add :
192 AddRemoveEvent::Remove, TQString::null, TQString::null,
193 DNSToDomain(replyDomain));
194 TQApplication::postEvent(obj, arev);
195}
196#endif
197
198}
199#include "domainbrowser.moc"
DNSSD::DomainBrowser::startBrowse
void startBrowse()
Starts browsing.
Definition: domainbrowser.cpp:107
DNSSD::DomainBrowser::DomainBrowser
DomainBrowser(TQObject *parent=0)
Standard constructor.
Definition: domainbrowser.cpp:81
DNSSD::DomainBrowser::isRunning
bool isRunning() const
Returns true when browse has already started.
Definition: domainbrowser.cpp:173
DNSSD::DomainBrowser::domains
const TQStringList & domains() const
Current list of domains to browse.
Definition: domainbrowser.cpp:168
DNSSD::DomainBrowser::domainRemoved
void domainRemoved(const TQString &)
Emitted when domain has been removed from browsing list.
DNSSD::DomainBrowser::domainAdded
void domainAdded(const TQString &)
New domain has been discovered.
DNSSD::ServiceBrowser::isAvailable
static const State isAvailable()
Checks availability of DNS-SD services (this also covers publishing).
Definition: servicebrowser.cpp:85

dnssd

Skip menu "dnssd"
  • Main Page
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Class Members
  • Related Pages

dnssd

Skip menu "dnssd"
  • arts
  • dcop
  • dnssd
  • interfaces
  •   kspeech
  •     interface
  •     library
  •   tdetexteditor
  • kate
  • kded
  • kdoctools
  • kimgio
  • kjs
  • libtdemid
  • libtdescreensaver
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdeioslave
  •   http
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for dnssd by doxygen 1.9.4
This website is maintained by Timothy Pearson.