kdecore Library API Documentation

ksockaddr.h

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., 59 Temple Place - Suite 330, 00018 * Boston, MA 02111-1307, 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
KDE Logo
This file is part of the documentation for kdecore Library Version 3.4.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Apr 12 22:47:39 2005 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003