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

tdecore

  • tdecore
  • network
kclientsocketbase.cpp
1/*
2 * Copyright (C) 2003,2005 Thiago Macieira <thiago.macieira@kdemail.net>
3 *
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining
6 * a copy of this software and associated documentation files (the
7 * "Software"), to deal in the Software without restriction, including
8 * without limitation the rights to use, copy, modify, merge, publish,
9 * distribute, sublicense, and/or sell copies of the Software, and to
10 * permit persons to whom the Software is furnished to do so, subject to
11 * the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 */
24
25#include <config.h>
26
27#include <tqsocketnotifier.h>
28#include <tqtimer.h>
29#include <tqmutex.h>
30
31#include "tdesocketaddress.h"
32#include "kresolver.h"
33#include "tdesocketbase.h"
34#include "tdesocketdevice.h"
35#include "kclientsocketbase.h"
36
37using namespace KNetwork;
38
39class KNetwork::KClientSocketBasePrivate
40{
41public:
42 int state;
43
44 KResolver localResolver, peerResolver;
45 KResolverResults localResults, peerResults;
46
47 bool enableRead : 1, enableWrite : 1;
48};
49
50KClientSocketBase::KClientSocketBase(TQObject *parent, const char *name) :
51 TQObject(parent, name), d(new KClientSocketBasePrivate)
52{
53 d->state = Idle;
54 d->enableRead = true;
55 d->enableWrite = false;
56}
57
58KClientSocketBase::~KClientSocketBase()
59{
60 close();
61 delete d;
62}
63
64KClientSocketBase::SocketState KClientSocketBase::state() const
65{
66 return static_cast<SocketState>(d->state);
67}
68
69void KClientSocketBase::setState(SocketState state)
70{
71 d->state = state;
72 stateChanging(state);
73}
74
75bool KClientSocketBase::setSocketOptions(int opts)
76{
77 TQMutexLocker locker(mutex());
78 TDESocketBase::setSocketOptions(opts); // call parent
79
80 // don't create the device unnecessarily
81 if (hasDevice())
82 {
83 bool result = socketDevice()->setSocketOptions(opts); // and set the implementation
84 copyError();
85 return result;
86 }
87
88 return true;
89}
90
91KResolver& KClientSocketBase::peerResolver() const
92{
93 return d->peerResolver;
94}
95
96const KResolverResults& KClientSocketBase::peerResults() const
97{
98 return d->peerResults;
99}
100
101KResolver& KClientSocketBase::localResolver() const
102{
103 return d->localResolver;
104}
105
106const KResolverResults& KClientSocketBase::localResults() const
107{
108 return d->localResults;
109}
110
111void KClientSocketBase::setResolutionEnabled(bool enable)
112{
113 if (enable)
114 {
115 d->localResolver.setFlags(d->localResolver.flags() & ~KResolver::NoResolve);
116 d->peerResolver.setFlags(d->peerResolver.flags() & ~KResolver::NoResolve);
117 }
118 else
119 {
120 d->localResolver.setFlags(d->localResolver.flags() | KResolver::NoResolve);
121 d->peerResolver.setFlags(d->peerResolver.flags() | KResolver::NoResolve);
122 }
123}
124
125void KClientSocketBase::setFamily(int families)
126{
127 d->localResolver.setFamily(families);
128 d->peerResolver.setFamily(families);
129}
130
131bool KClientSocketBase::lookup()
132{
133 if (state() == HostLookup && !blocking())
134 return true; // already doing lookup
135
136 if (state() > HostLookup)
137 return true; // results are already available
138
139 if (state() < HostLookup)
140 {
141 if (d->localResolver.serviceName().isNull() &&
142 !d->localResolver.nodeName().isNull())
143 d->localResolver.setServiceName(TQString::fromLatin1(""));
144
145 // don't restart the lookups if they had succeeded and
146 // the input values weren't changed
147 TQObject::connect(&d->peerResolver, TQ_SIGNAL(finished(KResolverResults)),
148 this, TQ_SLOT(lookupFinishedSlot()));
149 TQObject::connect(&d->localResolver, TQ_SIGNAL(finished(KResolverResults)),
150 this, TQ_SLOT(lookupFinishedSlot()));
151
152 if (d->localResolver.status() <= 0)
153 d->localResolver.start();
154 if (d->peerResolver.status() <= 0)
155 d->peerResolver.start();
156
157 setState(HostLookup);
158 emit stateChanged(HostLookup);
159
160 if (!d->localResolver.isRunning() && !d->peerResolver.isRunning())
161 {
162 // if nothing is running, then the lookup results are still valid
163 // pretend we had done lookup
164 if (blocking())
165 lookupFinishedSlot();
166 else
167 TQTimer::singleShot(0, this, TQ_SLOT(lookupFinishedSlot()));
168 }
169 else
170 {
171 d->localResults = d->peerResults = KResolverResults();
172 }
173 }
174
175 if (blocking())
176 {
177 // we're in blocking mode operation
178 // wait for the results
179
180 localResolver().wait();
181 peerResolver().wait();
182
183 // lookupFinishedSlot has been called
184 }
185
186 return true;
187}
188
189bool KClientSocketBase::bind(const KResolverEntry& address)
190{
191 if (state() == HostLookup || state() > Connecting)
192 return false;
193
194 if (socketDevice()->bind(address))
195 {
196 resetError();
197
198 // don't set the state or emit signals if we are in a higher state
199 if (state() < Bound)
200 {
201 setState(Bound);
202 emit stateChanged(Bound);
203 emit bound(address);
204 }
205 return true;
206 }
207 return false;
208}
209
210bool KClientSocketBase::connect(const KResolverEntry& address)
211{
212 if (state() == Connected)
213 return true; // to be compliant with the other classes
214 if (state() == HostLookup || state() > Connecting)
215 return false;
216
217 bool ok = socketDevice()->connect(address);
218 copyError();
219
220 if (ok)
221 {
222 SocketState newstate;
223 if (error() == InProgress)
224 newstate = Connecting;
225 else
226 newstate = Connected;
227
228 if (state() < newstate)
229 {
230 setState(newstate);
231 emit stateChanged(newstate);
232 if (error() == NoError)
233 {
234 setFlags(IO_Sequential | IO_Raw | IO_ReadWrite | IO_Open | IO_Async);
235 emit connected(address);
236 }
237 }
238
239 return true;
240 }
241 return false;
242}
243
244bool KClientSocketBase::disconnect()
245{
246 if (state() != Connected)
247 return false;
248
249 bool ok = socketDevice()->disconnect();
250 copyError();
251
252 if (ok)
253 {
254 setState(Unconnected);
255 emit stateChanged(Unconnected);
256 return true;
257 }
258 return false;
259}
260
261void KClientSocketBase::close()
262{
263 if (state() == Idle)
264 return; // nothing to do
265
266 if (state() == HostLookup)
267 {
268 d->peerResolver.cancel(false);
269 d->localResolver.cancel(false);
270 }
271
272 d->localResults = d->peerResults = KResolverResults();
273
274 socketDevice()->close();
275 setState(Idle);
276 emit stateChanged(Idle);
277 emit closed();
278}
279
280// This function is unlike all the others because it is const
281TQ_LONG KClientSocketBase::bytesAvailable() const
282{
283 return socketDevice()->bytesAvailable();
284}
285
286// All the functions below look really alike
287// Should I use a macro to define them?
288
289TQ_LONG KClientSocketBase::waitForMore(int msecs, bool *timeout)
290{
291 resetError();
292 TQ_LONG retval = socketDevice()->waitForMore(msecs, timeout);
293 if (retval == -1)
294 {
295 copyError();
296 emit gotError(error());
297 }
298 return retval;
299}
300
301TQ_LONG KClientSocketBase::readBlock(char *data, TQ_ULONG maxlen)
302{
303 resetError();
304 TQ_LONG retval = socketDevice()->readBlock(data, maxlen);
305 if (retval == -1)
306 {
307 copyError();
308 emit gotError(error());
309 }
310 return retval;
311}
312
313TQ_LONG KClientSocketBase::readBlock(char *data, TQ_ULONG maxlen, TDESocketAddress& from)
314{
315 resetError();
316 TQ_LONG retval = socketDevice()->readBlock(data, maxlen, from);
317 if (retval == -1)
318 {
319 copyError();
320 emit gotError(error());
321 }
322 return retval;
323}
324
325TQ_LONG KClientSocketBase::peekBlock(char *data, TQ_ULONG maxlen)
326{
327 resetError();
328 TQ_LONG retval = socketDevice()->peekBlock(data, maxlen);
329 if (retval == -1)
330 {
331 copyError();
332 emit gotError(error());
333 }
334 return retval;
335}
336
337TQ_LONG KClientSocketBase::peekBlock(char *data, TQ_ULONG maxlen, TDESocketAddress& from)
338{
339 resetError();
340 TQ_LONG retval = socketDevice()->peekBlock(data, maxlen, from);
341 if (retval == -1)
342 {
343 copyError();
344 emit gotError(error());
345 }
346 return retval;
347}
348
349TQ_LONG KClientSocketBase::writeBlock(const char *data, TQ_ULONG len)
350{
351 resetError();
352 TQ_LONG retval = socketDevice()->writeBlock(data, len);
353 if (retval == -1)
354 {
355 copyError();
356 emit gotError(error());
357 }
358 return retval;
359}
360
361TQ_LONG KClientSocketBase::writeBlock(const char *data, TQ_ULONG len, const TDESocketAddress& to)
362{
363 resetError();
364 TQ_LONG retval = socketDevice()->writeBlock(data, len, to);
365 if (retval == -1)
366 {
367 copyError();
368 emit gotError(error());
369 }
370 return retval;
371}
372
373TDESocketAddress KClientSocketBase::localAddress() const
374{
375 return socketDevice()->localAddress();
376}
377
378TDESocketAddress KClientSocketBase::peerAddress() const
379{
380 return socketDevice()->peerAddress();
381}
382
383bool KClientSocketBase::emitsReadyRead() const
384{
385 return d->enableRead;
386}
387
388void KClientSocketBase::enableRead(bool enable)
389{
390 TQMutexLocker locker(mutex());
391
392 d->enableRead = enable;
393 TQSocketNotifier *n = socketDevice()->readNotifier();
394 if (n)
395 n->setEnabled(enable);
396}
397
398bool KClientSocketBase::emitsReadyWrite() const
399{
400 return d->enableWrite;
401}
402
403void KClientSocketBase::enableWrite(bool enable)
404{
405 TQMutexLocker locker(mutex());
406
407 d->enableWrite = enable;
408 TQSocketNotifier *n = socketDevice()->writeNotifier();
409 if (n)
410 n->setEnabled(enable);
411}
412
413void KClientSocketBase::slotReadActivity()
414{
415 if (d->enableRead)
416 emit readyRead();
417}
418
419void KClientSocketBase::slotWriteActivity()
420{
421 if (d->enableWrite)
422 emit readyWrite();
423}
424
425void KClientSocketBase::lookupFinishedSlot()
426{
427 if (d->peerResolver.isRunning() || d->localResolver.isRunning() || state() != HostLookup)
428 return;
429
430 TQObject::disconnect(&d->peerResolver, 0L, this, TQ_SLOT(lookupFinishedSlot()));
431 TQObject::disconnect(&d->localResolver, 0L, this, TQ_SLOT(lookupFinishedSlot()));
432 if (d->peerResolver.status() < 0 || d->localResolver.status() < 0)
433 {
434 setState(Idle); // backtrack
435 setError(IO_LookupError, LookupFailure);
436 emit stateChanged(Idle);
437 emit gotError(LookupFailure);
438 return;
439 }
440
441 d->localResults = d->localResolver.results();
442 d->peerResults = d->peerResolver.results();
443 setState(HostFound);
444 emit stateChanged(HostFound);
445 emit hostFound();
446}
447
448void KClientSocketBase::stateChanging(SocketState newState)
449{
450 if (newState == Connected && socketDevice())
451 {
452 TQSocketNotifier *n = socketDevice()->readNotifier();
453 if (n)
454 {
455 n->setEnabled(d->enableRead);
456 TQObject::connect(n, TQ_SIGNAL(activated(int)), this, TQ_SLOT(slotReadActivity()));
457 }
458 else
459 return;
460
461 n = socketDevice()->writeNotifier();
462 if (n)
463 {
464 n->setEnabled(d->enableWrite);
465 TQObject::connect(n, TQ_SIGNAL(activated(int)), this, TQ_SLOT(slotWriteActivity()));
466 }
467 else
468 return;
469 }
470}
471
472void KClientSocketBase::copyError()
473{
474 setError(socketDevice()->status(), socketDevice()->error());
475}
476
477#include "kclientsocketbase.moc"
KNetwork::KActiveSocketBase::setError
void setError(int status, SocketError error)
Sets the socket's error code and the I/O Device's status.
Definition: tdesocketbase.cpp:309
KNetwork::KActiveSocketBase::resetError
void resetError()
Resets the socket error code and the I/O Device's status.
Definition: tdesocketbase.cpp:315
KNetwork::KClientSocketBase::connected
void connected(const KResolverEntry &remote)
This socket is emitted when the socket successfully connects to a remote address.
KNetwork::KClientSocketBase::waitForMore
virtual TQ_LONG waitForMore(int msecs, bool *timeout=0L)
Waits for more data.
Definition: kclientsocketbase.cpp:289
KNetwork::KClientSocketBase::emitsReadyWrite
bool emitsReadyWrite() const
Returns true if the readyWrite signal is set to be emitted.
Definition: kclientsocketbase.cpp:398
KNetwork::KClientSocketBase::SocketState
SocketState
Socket states.
Definition: kclientsocketbase.h:73
KNetwork::KClientSocketBase::stateChanging
virtual void stateChanging(SocketState newState)
This function is called by setState whenever the state changes.
Definition: kclientsocketbase.cpp:448
KNetwork::KClientSocketBase::writeBlock
virtual TQ_LONG writeBlock(const char *data, TQ_ULONG len)
Writes data to the socket.
Definition: kclientsocketbase.cpp:349
KNetwork::KClientSocketBase::bytesAvailable
virtual TQ_LONG bytesAvailable() const
Returns the number of bytes available on this socket.
Definition: kclientsocketbase.cpp:281
KNetwork::KClientSocketBase::localAddress
virtual TDESocketAddress localAddress() const
Returns the local socket address.
Definition: kclientsocketbase.cpp:373
KNetwork::KClientSocketBase::enableRead
virtual void enableRead(bool enable)
Enables the emission of the readyRead signal.
Definition: kclientsocketbase.cpp:388
KNetwork::KClientSocketBase::slotReadActivity
virtual void slotReadActivity()
This slot is connected to the read notifier's signal meaning the socket can read more data.
Definition: kclientsocketbase.cpp:413
KNetwork::KClientSocketBase::localResults
const KResolverResults & localResults() const
Returns the internal list of resolved results for the local address.
Definition: kclientsocketbase.cpp:106
KNetwork::KClientSocketBase::enableWrite
virtual void enableWrite(bool enable)
Enables the emission of the readyWrite signal.
Definition: kclientsocketbase.cpp:403
KNetwork::KClientSocketBase::setState
void setState(SocketState state)
Sets the socket state to state.
Definition: kclientsocketbase.cpp:69
KNetwork::KClientSocketBase::disconnect
virtual bool disconnect()
Disconnects the socket.
Definition: kclientsocketbase.cpp:244
KNetwork::KClientSocketBase::readyRead
void readyRead()
This signal is emitted whenever the socket is ready for reading – i.e., there is data to be read in t...
KNetwork::KClientSocketBase::readBlock
virtual TQ_LONG readBlock(char *data, TQ_ULONG maxlen)
Reads data from a socket.
Definition: kclientsocketbase.cpp:301
KNetwork::KClientSocketBase::close
virtual void close()
Closes the socket.
Definition: kclientsocketbase.cpp:261
KNetwork::KClientSocketBase::closed
void closed()
This signal is emitted when the socket completes the closing/shut down process.
KNetwork::KClientSocketBase::emitsReadyRead
bool emitsReadyRead() const
Returns true if the readyRead signal is set to be emitted.
Definition: kclientsocketbase.cpp:383
KNetwork::KClientSocketBase::state
SocketState state() const
Returns the current state for this socket.
Definition: kclientsocketbase.cpp:64
KNetwork::KClientSocketBase::bound
void bound(const KResolverEntry &local)
This signal is emitted when the socket successfully binds to an address.
KNetwork::KClientSocketBase::peekBlock
virtual TQ_LONG peekBlock(char *data, TQ_ULONG maxlen)
Peeks data from the socket.
Definition: kclientsocketbase.cpp:325
KNetwork::KClientSocketBase::readyWrite
void readyWrite()
This signal is emitted whenever the socket is ready for writing – i.e., whenever there's space availa...
KNetwork::KClientSocketBase::setResolutionEnabled
void setResolutionEnabled(bool enable)
Enables or disables name resolution.
Definition: kclientsocketbase.cpp:111
KNetwork::KClientSocketBase::bind
virtual bool bind(const TQString &node=TQString::null, const TQString &service=TQString::null)=0
Binds this socket to the given nodename and service, or use the default ones if none are given.
KNetwork::KClientSocketBase::connect
virtual bool connect(const TQString &node=TQString::null, const TQString &service=TQString::null)=0
Attempts to connect to the these hostname and service, or use the default ones if none are given.
KNetwork::KClientSocketBase::gotError
void gotError(int code)
This signal is emitted when this object finds an error.
KNetwork::KClientSocketBase::lookup
virtual bool lookup()
Starts the lookup for peer and local hostnames as well as their services.
Definition: kclientsocketbase.cpp:131
KNetwork::KClientSocketBase::peerResolver
KResolver & peerResolver() const
Returns the internal KResolver object used for looking up the peer host name and service.
Definition: kclientsocketbase.cpp:91
KNetwork::KClientSocketBase::copyError
void copyError()
Convenience function to set this object's error code to match that of the socket device.
Definition: kclientsocketbase.cpp:472
KNetwork::KClientSocketBase::hostFound
void hostFound()
This signal is emitted when the lookup is successfully completed.
KNetwork::KClientSocketBase::slotWriteActivity
virtual void slotWriteActivity()
This slot is connected to the write notifier's signal meaning the socket can write more data.
Definition: kclientsocketbase.cpp:419
KNetwork::KClientSocketBase::~KClientSocketBase
virtual ~KClientSocketBase()
Destructor.
Definition: kclientsocketbase.cpp:58
KNetwork::KClientSocketBase::peerAddress
virtual TDESocketAddress peerAddress() const
Returns the peer socket address.
Definition: kclientsocketbase.cpp:378
KNetwork::KClientSocketBase::setSocketOptions
virtual bool setSocketOptions(int opts)
Sets the socket options.
Definition: kclientsocketbase.cpp:75
KNetwork::KClientSocketBase::peerResults
const KResolverResults & peerResults() const
Returns the internal list of resolved results for the peer address.
Definition: kclientsocketbase.cpp:96
KNetwork::KClientSocketBase::stateChanged
void stateChanged(int newstate)
This signal is emitted whenever the socket state changes.
KNetwork::KClientSocketBase::setFamily
void setFamily(int families)
Sets the allowed families for the resolutions.
Definition: kclientsocketbase.cpp:125
KNetwork::KClientSocketBase::localResolver
KResolver & localResolver() const
Returns the internal KResolver object used for looking up the local host name and service.
Definition: kclientsocketbase.cpp:101
KNetwork::KResolverEntry
One resolution entry.
Definition: kresolver.h:67
KNetwork::KResolverResults
Name and service resolution results.
Definition: kresolver.h:198
KNetwork::KResolver
Name and service resolution class.
Definition: kresolver.h:296
KNetwork::KResolver::wait
bool wait(int msec=0)
Waits for a request to finish resolving.
Definition: kresolver.cpp:461
KNetwork::TDESocketAddress
A generic socket address.
Definition: tdesocketaddress.h:424
KNetwork::TDESocketBase::hasDevice
bool hasDevice() const
Returns true if the socket device has been initialised in this object, either by calling socketDevice...
Definition: tdesocketbase.cpp:150
KNetwork::TDESocketBase::mutex
TQMutex * mutex() const
Returns the internal mutex for this class.
Definition: tdesocketbase.cpp:278
KNetwork::TDESocketBase::error
SocketError error() const
Retrieves the socket error code.
Definition: tdesocketbase.cpp:160
KNetwork::TDESocketBase::blocking
bool blocking() const
Retrieves this socket's blocking mode.
Definition: tdesocketbase.cpp:81
KNetwork::TDESocketBase::socketDevice
TDESocketDevice * socketDevice() const
Retrieves the socket implementation used on this socket.
Definition: tdesocketbase.cpp:116
KNetwork::TDESocketBase::setSocketOptions
virtual bool setSocketOptions(int opts)
Set the given socket options.
Definition: tdesocketbase.cpp:65
KNetwork::TDESocketDevice::disconnect
virtual bool disconnect()
Disconnects this socket.
Definition: tdesocketdevice.cpp:333
KNetwork::TDESocketDevice::peekBlock
virtual TQ_LONG peekBlock(char *data, TQ_ULONG maxlen)
Peeks data in the socket.
Definition: tdesocketdevice.cpp:459
KNetwork::TDESocketDevice::writeBlock
virtual TQ_LONG writeBlock(const char *data, TQ_ULONG len)
Writes data to the socket.
Definition: tdesocketdevice.cpp:501
KNetwork::TDESocketDevice::setSocketOptions
virtual bool setSocketOptions(int opts)
This implementation sets the options on the socket.
Definition: tdesocketdevice.cpp:110
KNetwork::TDESocketDevice::close
virtual void close()
Closes the socket.
Definition: tdesocketdevice.cpp:180
KNetwork::TDESocketDevice::readBlock
virtual TQ_LONG readBlock(char *data, TQ_ULONG maxlen)
Reads data from this socket.
Definition: tdesocketdevice.cpp:417
KNetwork::TDESocketDevice::waitForMore
virtual TQ_LONG waitForMore(int msecs, bool *timeout=0L)
Waits up to msecs for more data to be available on this socket.
Definition: tdesocketdevice.cpp:379
KNetwork::TDESocketDevice::bytesAvailable
virtual TQ_LONG bytesAvailable() const
Returns the number of bytes available for reading without blocking.
Definition: tdesocketdevice.cpp:367
KNetwork::TDESocketDevice::connect
virtual bool connect(const KResolverEntry &address)
Connect to a remote host.
Definition: tdesocketdevice.cpp:276
KNetwork::TDESocketDevice::writeNotifier
TQSocketNotifier * writeNotifier() const
Returns a socket notifier for output on this socket.
Definition: tdesocketdevice.cpp:627
KNetwork::TDESocketDevice::localAddress
virtual TDESocketAddress localAddress() const
Returns this socket's local address.
Definition: tdesocketdevice.cpp:530
KNetwork::TDESocketDevice::peerAddress
virtual TDESocketAddress peerAddress() const
Returns this socket's peer address.
Definition: tdesocketdevice.cpp:566
KNetwork::TDESocketDevice::readNotifier
TQSocketNotifier * readNotifier() const
Returns a socket notifier for input on this socket.
Definition: tdesocketdevice.cpp:609
KNetwork
A namespace to store all networking-related (socket) classes.
Definition: kbufferedsocket.h:36

tdecore

Skip menu "tdecore"
  • Main Page
  • Modules
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

tdecore

Skip menu "tdecore"
  • 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 tdecore by doxygen 1.9.4
This website is maintained by Timothy Pearson.