00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef KRESOLVER_H
00026 #define KRESOLVER_H
00027
00029
00030 #include <QtCore/QList>
00031 #include <QtCore/QObject>
00032 #include <QtCore/QSharedDataPointer>
00033 #include "k3socketaddress.h"
00034
00035
00037
00038 struct sockaddr;
00039 class QString;
00040 class QByteArray;
00041 template<typename T> class QSet;
00042
00044
00045
00046 namespace KNetwork {
00047
00048 namespace Internal { class KResolverManager; }
00049
00050 class KResolverEntryPrivate;
00068 class KDECORE_EXPORT KResolverEntry
00069 {
00070 public:
00075 KResolverEntry();
00076
00089 KResolverEntry(const KSocketAddress& addr, int socktype, int protocol,
00090 const QString& canonName = QString(),
00091 const QByteArray& encodedName = QByteArray());
00092
00106 KResolverEntry(const struct sockaddr *sa, quint16 salen, int socktype,
00107 int protocol, const QString& canonName = QString(),
00108 const QByteArray& encodedName = QByteArray());
00109
00115 KResolverEntry(const KResolverEntry &other);
00116
00123 ~KResolverEntry();
00124
00128 KSocketAddress address() const;
00129
00133 quint16 length() const;
00134
00138 int family() const;
00139
00144 QString canonicalName() const;
00145
00156 QByteArray encodedName() const;
00157
00161 int socketType() const;
00162
00166 int protocol() const;
00167
00174 KResolverEntry& operator=(const KResolverEntry& other);
00175
00176 #ifdef MAKE_KDECORE_LIB
00177
00181 KDE_DUMMY_COMPARISON_OPERATOR(KResolverEntry)
00182 #endif
00183
00184 private:
00185 QSharedDataPointer<KResolverEntryPrivate> d;
00186 };
00187
00188 #ifdef MAKE_KDECORE_LIB
00189 KDE_DUMMY_QHASH_FUNCTION(KResolverEntry)
00190 #endif
00191
00192 class KResolverResultsPrivate;
00212 class KDECORE_EXPORT KResolverResults: public QList<KResolverEntry>
00213 {
00214 public:
00220 KResolverResults();
00221
00228 KResolverResults(const KResolverResults& other);
00229
00235 virtual ~KResolverResults();
00236
00243 KResolverResults& operator=(const KResolverResults& other);
00244
00249 int error() const;
00250
00255 int systemError() const;
00256
00263 void setError(int errorcode, int systemerror = 0);
00264
00268 QString nodeName() const;
00269
00273 QString serviceName() const;
00274
00278 void setAddress(const QString& host, const QString& service);
00279
00280 protected:
00282 virtual void virtual_hook( int id, void* data );
00283 private:
00284 QSharedDataPointer<KResolverResultsPrivate> d;
00285 };
00286
00287 class KResolverPrivate;
00312 class KDECORE_EXPORT KResolver: public QObject
00313 {
00314 Q_OBJECT
00315
00316 public:
00317
00334 enum SocketFamilies
00335 {
00336 UnknownFamily = 0x0001,
00337
00338 UnixFamily = 0x0002,
00339 LocalFamily = UnixFamily,
00340
00341 IPv4Family = 0x0004,
00342 IPv6Family = 0x0008,
00343 InternetFamily = IPv4Family | IPv6Family,
00344 InetFamily = InternetFamily,
00345
00346 KnownFamily = ~UnknownFamily,
00347 AnyFamily = KnownFamily | UnknownFamily
00348 };
00349
00367 enum Flags
00368 {
00369 Passive = 0x01,
00370 CanonName = 0x02,
00371 NoResolve = 0x04,
00372 NoSrv = 0x08,
00373 Multiport = 0x10
00374 };
00375
00397 enum ErrorCodes
00398 {
00399
00400 NoError = 0,
00401 AddrFamily = -1,
00402 TryAgain = -2,
00403 NonRecoverable = -3,
00404 BadFlags = -4,
00405 Memory = -5,
00406 NoName = -6,
00407 UnsupportedFamily = -7,
00408 UnsupportedService = -8,
00409 UnsupportedSocketType = -9,
00410 UnknownError = -10,
00411 SystemError = -11,
00412 Canceled = -100
00413 };
00414
00435 enum StatusCodes
00436 {
00437 Idle = 0,
00438 Queued = 1,
00439 InProgress = 5,
00440 PostProcessing = 6,
00441 Success = 10,
00442
00443 Failed = -101
00444 };
00445
00455 KResolver(QObject *parent = 0L);
00456
00468 explicit KResolver(const QString& nodename, const QString& servicename = QString(),
00469 QObject *parent = 0L);
00470
00478 virtual ~KResolver();
00479
00485 int status() const;
00486
00497 int error() const;
00498
00506 int systemError() const;
00507
00511 QString errorString() const;
00512
00516 bool isRunning() const;
00517
00521 QString nodeName() const;
00522
00526 QString serviceName() const;
00527
00534 void setNodeName(const QString& nodename);
00535
00542 void setServiceName(const QString& service);
00543
00551 void setAddress(const QString& node, const QString& service);
00552
00558 int flags() const;
00559
00567 int setFlags(int flags);
00568
00575 void setFamily(int families);
00576
00596 void setSocketType(int type);
00597
00622 void setProtocol(int protonum, const char *name = 0L);
00623
00642 bool start();
00643
00665 bool wait(int msec = 0);
00666
00678 void cancel(bool emitSignal = true);
00679
00690 KResolverResults results() const;
00691
00700 virtual bool event(QEvent*);
00701
00702 Q_SIGNALS:
00703
00704
00721 void finished(const KNetwork::KResolverResults& results);
00722
00723 private:
00724 void emitFinished();
00725
00726 public:
00727
00728
00737 static QString errorString(int errorcode, int syserror = 0);
00738
00762 static KResolverResults resolve(const QString& host, const QString& service,
00763 int flags = 0, int families = KResolver::InternetFamily);
00764
00799 static bool resolveAsync(QObject* userObj, const char *userSlot,
00800 const QString& host, const QString& service,
00801 int flags = 0, int families = KResolver::InternetFamily);
00802
00819 static QByteArray domainToAscii(const QString& unicodeDomain);
00820
00839 static QString domainToUnicode(const QByteArray& asciiDomain);
00840
00848 static QString domainToUnicode(const QString& asciiDomain);
00849
00873 static QString normalizeDomain(const QString& domain);
00874
00884 static QList<QByteArray> protocolName(int protonum);
00885
00893 static QList<QByteArray> protocolName(const char *protoname);
00894
00901 static int protocolNumber(const char *protoname);
00902
00910 static int servicePort(const char *servname, const char *protoname);
00911
00922 static QList<QByteArray> serviceName(const char *servname, const char *protoname);
00923
00934 static QList<QByteArray> serviceName(int port, const char *protoname);
00935
00941 static QString localHostName();
00942
00943 protected:
00944
00948 void setError(int errorcode, int systemerror = 0);
00949
00951 virtual void virtual_hook( int id, void* data );
00952 private:
00953 KResolverPrivate* const d;
00954 friend class KResolverResults;
00955 friend class ::KNetwork::Internal::KResolverManager;
00956 };
00957
00958 }
00959
00960 #endif