• Skip to content
  • Skip to link menu
KDE 3.5 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

KDECore

ksockaddr.h

Go to the documentation of this file.
00001 /*
00002  *  This file is part of the KDE libraries
00003  *  Copyright (C) 2000-2003 Thiago Macieira <thiago.macieira@kdemail.net>
00004  *
00005  *  This library is free software; you can redistribute it and/or
00006  *  modify it under the terms of the GNU Library General Public
00007  *  License as published by the Free Software Foundation; either
00008  *  version 2 of the License, or (at your option) any later version.
00009  *
00010  *  This library is distributed in the hope that it will be useful,
00011  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013  *  Library General Public License for more details.
00014  *
00015  *  You should have received a copy of the GNU Library General Public License
00016  *  along with this library; see the file COPYING.LIB.  If not, write to
00017  *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00018  *  Boston, MA 02110-1301, USA.
00019  */
00020 #ifndef KSOCKADDR_H
00021 #define KSOCKADDR_H
00022 
00023 #include <qobject.h>
00024 #include <qcstring.h>
00025 #include <qstring.h>
00026 #include "kdelibs_export.h"
00027 
00028 /*
00029  * This file defines a class that envelopes most, if not all, socket addresses
00030  */
00031 typedef unsigned ksocklen_t;
00032 
00033 struct sockaddr;
00034 
00035 class KExtendedSocket;      // No need to define it fully
00036 
00037 class KSocketAddressPrivate;
00046 class KDECORE_EXPORT KSocketAddress: public QObject
00047 {
00048   Q_OBJECT
00049 protected:
00053   KSocketAddress() { init(); }
00054 
00060   KSocketAddress(const sockaddr* sa, ksocklen_t size);
00061 
00062 public:
00066   virtual ~KSocketAddress();
00067 
00072   virtual QString pretty() const;
00073 
00078   const sockaddr* address() const
00079   { return data; }
00080 
00085   virtual ksocklen_t size() const
00086   { return datasize; }
00087 
00093   operator const sockaddr*() const
00094   { return data; }
00095 
00100   int family() const;
00101 
00107   inline int ianaFamily() const
00108   { return ianaFamily(family()); }
00109 
00115   virtual bool isEqual(const KSocketAddress& other) const;
00116   bool isEqual(const KSocketAddress* other) const
00117   { return isEqual(*other); }
00118 
00123   bool operator==(const KSocketAddress& other) const
00124   { return isEqual(other); }
00125 
00136   bool isCoreEqual(const KSocketAddress& other) const;
00137 
00148   bool isCoreEqual(const KSocketAddress* other) const
00149   { return isCoreEqual(*other); }
00150 
00158   virtual QString nodeName() const;
00159 
00167   virtual QString serviceName() const;
00168 
00169 protected:
00170   sockaddr* data;
00171   ksocklen_t    datasize;
00172   bool      owndata;
00173 
00174 private:
00175   void init();
00176   /* No copy constructor */
00177   KSocketAddress(KSocketAddress&);
00178   KSocketAddress& operator=(KSocketAddress&);
00179 
00180 public:
00188   static KSocketAddress* newAddress(const struct sockaddr *sa, ksocklen_t size);
00189 
00197   static int ianaFamily(int af);
00198 
00203   static int fromIanaFamily(int iana);
00204 
00205   friend class KExtendedSocket;
00206 protected:
00207   virtual void virtual_hook( int id, void* data );
00208 private:
00209   KSocketAddressPrivate* d;
00210 };
00211 
00212 /*
00213  * External definitions
00214  * We need these for KInetSocketAddress
00215  */
00216 struct sockaddr_in;
00217 struct sockaddr_in6;
00218 struct in_addr;
00219 struct in6_addr;
00220 
00221 class KInetSocketAddressPrivate;
00233 class KDECORE_EXPORT KInetSocketAddress: public ::KSocketAddress
00234 {
00235   Q_OBJECT
00236 public:
00240   KInetSocketAddress();
00241 
00245   KInetSocketAddress(const KInetSocketAddress&);
00246 
00252   KInetSocketAddress(const sockaddr_in* sin, ksocklen_t len);
00253 
00259   KInetSocketAddress(const sockaddr_in6* sin6, ksocklen_t len);
00260 
00266   KInetSocketAddress(const in_addr& addr, unsigned short port);
00267 
00273   KInetSocketAddress(const in6_addr& addr, unsigned short port);
00274 
00284   KInetSocketAddress(const QString& addr, unsigned short port, int family = -1);
00285 
00289   virtual ~KInetSocketAddress();
00290 
00296   bool setAddress(const KInetSocketAddress& ksa);
00297 
00304   bool setAddress(const sockaddr_in* sin, ksocklen_t len);
00305 
00314   bool setAddress(const sockaddr_in6* sin6, ksocklen_t len);
00315 
00322   bool setAddress(const in_addr& addr, unsigned short port);
00323 
00330   bool setAddress(const in6_addr& addr, unsigned short port);
00331 
00349   bool setAddress(const QString& addr, unsigned short port, int family = -1);
00350 
00356   bool setHost(const in_addr& addr);
00357 
00363   bool setHost(const in6_addr& addr);
00364 
00371   bool setHost(const QString& addr, int family = -1);
00372 
00378   bool setPort(unsigned short port);
00379 
00387   bool setFamily(int family);
00388 
00394   bool setFlowinfo(Q_UINT32 flowinfo);
00395 
00401   bool setScopeId(int scopeid);
00402 
00407   virtual QString pretty() const;
00408 
00413   virtual QString nodeName() const;
00414   //  QString prettyHost() const;
00415 
00420   virtual QString serviceName() const;
00421 
00431   const sockaddr_in* addressV4() const;
00432 
00437   const sockaddr_in6* addressV6() const;
00438 
00444   in_addr hostV4() const;
00445 
00452   in6_addr hostV6() const;
00453 
00458   unsigned short port() const;
00459 
00464   Q_UINT32 flowinfo() const;
00465 
00470   int scopeId() const;
00471 
00477   virtual ksocklen_t size() const; // should be socklen_t
00478 
00479   /* comparation */
00491   static bool areEqualInet(const KSocketAddress &s1, const KSocketAddress &s2, bool coreOnly);
00492 
00504   static bool areEqualInet6(const KSocketAddress &s1, const KSocketAddress &s2, bool coreOnly);
00505 
00506   /* operators */
00507 
00514   operator const sockaddr_in*() const
00515   { return addressV4(); }
00516 
00522   operator const sockaddr_in6*() const
00523   { return addressV6(); }
00524 
00528   KInetSocketAddress& operator=(const KInetSocketAddress &other)
00529   { setAddress(other); return *this; }
00530 
00531 private:
00532 
00533   void fromV4();
00534   void fromV6();
00535 
00536 public:
00544   static QString addrToString(int family, const void *addr);
00545 
00555   static bool stringToAddr(int family, const char *text, void *dest);
00556 
00557   friend class KExtendedSocket;
00558 protected:
00559   virtual void virtual_hook( int id, void* data );
00560 private:
00561   KInetSocketAddressPrivate* d;
00562 };
00563 
00564 extern const ::KInetSocketAddress addressAny, addressLoopback;
00565 
00566 /*
00567  * External definition KUnixSocketAddress
00568  */
00569 struct sockaddr_un;
00570 
00571 class KUnixSocketAddressPrivate;
00584 class KDECORE_EXPORT KUnixSocketAddress: public ::KSocketAddress
00585 {
00586   Q_OBJECT
00587 public:
00591   KUnixSocketAddress();
00592 
00598   KUnixSocketAddress(const sockaddr_un* raw_data, ksocklen_t size);
00599 
00604   KUnixSocketAddress(QCString pathname);
00605 
00609   virtual ~KUnixSocketAddress();
00610 
00617   bool setAddress(const sockaddr_un* socket_address, ksocklen_t size);
00618 
00624   bool setAddress(QCString path);
00625 
00631   QCString pathname() const;
00632 
00637   virtual QString pretty() const;
00638 
00639   /*
00640    * Returns the path in the form of a QString.
00641    * This can be fed into KExtendedSocket.
00642    * @return the path (can be QString::null).
00643    * @see pathname()
00644    */
00645   virtual QString serviceName() const;
00646 
00651   const sockaddr_un* address() const;
00652 
00658   operator const sockaddr_un*() const
00659   { return address(); }
00660 
00671   static bool areEqualUnix(const KSocketAddress &s1, const KSocketAddress &s2, bool coreOnly);
00672 
00673 private:
00674   void init();
00675 
00676   friend class KExtendedSocket;
00677 protected:
00678   virtual void virtual_hook( int id, void* data );
00679 private:
00680   KUnixSocketAddressPrivate* d;
00681 };
00682 
00683 #endif // KSOCKADDR_H

KDECore

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

API Reference

Skip menu "API Reference"
  • dcop
  • DNSSD
  • interfaces
  • Kate
  • kconf_update
  • KDECore
  • KDED
  • kdefx
  • KDEsu
  • kdeui
  • KDocTools
  • KHTML
  • KImgIO
  • KInit
  • kio
  • kioslave
  • KJS
  • KNewStuff
  • KParts
  • KUtils
Generated for API Reference by doxygen 1.5.9
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal