• 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 
36 namespace DNSSD
37 {
38 
39 #ifdef HAVE_DNSSD
40 #ifdef AVAHI_API_0_6
41 void domains_callback(AvahiDomainBrowser*, AvahiIfIndex, AvahiProtocol, AvahiBrowserEvent event, const char* replyDomain,
42  AvahiLookupResultFlags, void* context);
43 #else
44 void domains_callback(AvahiDomainBrowser*, AvahiIfIndex, AvahiProtocol, AvahiBrowserEvent event, const char* replyDomain,
45  void* context);
46 #endif
47 #endif
48 
49 
50 class DomainBrowserPrivate
51 {
52 public:
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 
71 void 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 
81 DomainBrowser::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(TDEApplication::kApplication(),TQT_SIGNAL(kipcMessage(int,int)),this,
90  TQT_SLOT(domainListChanged(int,int)));
91 }
92 
93 DomainBrowser::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 
101 DomainBrowser::~DomainBrowser()
102 {
103  delete d;
104 }
105 
106 
107 void 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 
126 void 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 
133 void DomainBrowser::gotRemoveDomain(const TQString& domain)
134 {
135  d->m_domains.remove(domain);
136  emit domainRemoved(domain);
137 }
138 
139 void 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 
168 const TQStringList& DomainBrowser::domains() const
169 {
170  return d->m_domains;
171 }
172 
173 bool DomainBrowser::isRunning() const
174 {
175  return d->m_started;
176 }
177 
178 void DomainBrowser::virtual_hook(int, void*)
179 {}
180 
181 #ifdef HAVE_DNSSD
182 #ifdef AVAHI_API_0_6
183 void domains_callback(AvahiDomainBrowser*, AvahiIfIndex, AvahiProtocol, AvahiBrowserEvent event, const char* replyDomain,
184  AvahiLookupResultFlags,void* context)
185 #else
186 void 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::ServiceBrowser::isAvailable
static const State isAvailable()
Checks availability of DNS-SD services (this also covers publishing).
Definition: servicebrowser.cpp:85
DNSSD::DomainBrowser::domainRemoved
void domainRemoved(const TQString &)
Emitted when domain has been removed from browsing list.
DNSSD::DomainBrowser::startBrowse
void startBrowse()
Starts browsing.
Definition: domainbrowser.cpp:107
DNSSD::DomainBrowser::domains
const TQStringList & domains() const
Current list of domains to browse.
Definition: domainbrowser.cpp:168
DNSSD::DomainBrowser::domainAdded
void domainAdded(const TQString &)
New domain has been discovered.
DNSSD
Definition: domainbrowser.cpp:36
DNSSD::DomainBrowser::isRunning
bool isRunning() const
Returns true when browse has already started.
Definition: domainbrowser.cpp:173
DNSSD::DomainBrowser::DomainBrowser
DomainBrowser(TQObject *parent=0)
Standard constructor.
Definition: domainbrowser.cpp:81

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
  •     tdecore
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  • tdeioslave
  •   http
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for dnssd by doxygen 1.8.8
This website is maintained by Timothy Pearson.