00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
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
00030
00031
typedef unsigned ksocklen_t;
00032
00033
struct sockaddr;
00034
00035
class KExtendedSocket;
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
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
00214
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
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;
00478
00479
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
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
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
00641
00642
00643
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