00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
#ifndef KSOCKADDR_H
00023
#define KSOCKADDR_H
00024
00025
#include <qobject.h>
00026
#include <qcstring.h>
00027
#include <qstring.h>
00028
00029
00030
00031
00032
typedef unsigned ksocklen_t;
00033
00034
struct sockaddr;
00035
00036
class KExtendedSocket;
00037
00038
class KSocketAddressPrivate;
00048 class KSocketAddress:
public QObject
00049 {
00050 Q_OBJECT
00051
protected:
00055 KSocketAddress() { init(); }
00056
00062
KSocketAddress(
const sockaddr* sa, ksocklen_t size);
00063
00064
public:
00068
virtual ~KSocketAddress();
00069
00074
virtual QString pretty() const;
00075
00080 const sockaddr* address()
const
00081
{
return data; }
00082
00087 virtual ksocklen_t
size()
const
00088
{
return datasize; }
00089
00095 operator const sockaddr*()
const
00096
{
return data; }
00097
00102
int family() const;
00103
00109 inline
int ianaFamily()
const
00110
{
return ianaFamily(
family()); }
00111
00117
virtual bool isEqual(
const KSocketAddress& other)
const;
00118
bool isEqual(
const KSocketAddress* other)
const
00119
{
return isEqual(*other); }
00120
00125 bool operator==(
const KSocketAddress& other)
const
00126
{
return isEqual(other); }
00127
00138
bool isCoreEqual(
const KSocketAddress& other)
const;
00139
00150 bool isCoreEqual(
const KSocketAddress* other)
const
00151
{
return isCoreEqual(*other); }
00152
00160
virtual QString nodeName() const;
00161
00169 virtual
QString serviceName() const;
00170
00171 protected:
00172 sockaddr* data;
00173 ksocklen_t datasize;
00174
bool owndata;
00175
00176 private:
00177
void init();
00178
00179
KSocketAddress(
KSocketAddress&);
00180 KSocketAddress& operator=(KSocketAddress&);
00181
00182 public:
00190 static KSocketAddress* newAddress(const struct sockaddr *sa, ksocklen_t size);
00191
00199 static
int ianaFamily(
int af);
00200
00205 static
int fromIanaFamily(
int iana);
00206
00207 friend class
KExtendedSocket;
00208 protected:
00209 virtual
void virtual_hook(
int id,
void* data );
00210 private:
00211 KSocketAddressPrivate* d;
00212 };
00213
00214
00215
00216
00217
00218 struct sockaddr_in;
00219 struct sockaddr_in6;
00220 struct in_addr;
00221 struct in6_addr;
00222
00223 class KInetSocketAddressPrivate;
00236 class
KInetSocketAddress: public KSocketAddress
00237 {
00238 Q_OBJECT
00239
public:
00243
KInetSocketAddress();
00244
00248
KInetSocketAddress(
const KInetSocketAddress&);
00249
00255
KInetSocketAddress(
const sockaddr_in* sin, ksocklen_t len);
00256
00262
KInetSocketAddress(
const sockaddr_in6* sin6, ksocklen_t len);
00263
00269
KInetSocketAddress(
const in_addr& addr,
unsigned short port);
00270
00276
KInetSocketAddress(
const in6_addr& addr,
unsigned short port);
00277
00287
KInetSocketAddress(
const QString& addr,
unsigned short port,
int family = -1);
00288
00292
virtual ~
KInetSocketAddress();
00293
00299
bool setAddress(
const KInetSocketAddress& ksa);
00300
00307
bool setAddress(
const sockaddr_in* sin, ksocklen_t len);
00308
00317
bool setAddress(
const sockaddr_in6* sin6, ksocklen_t len);
00318
00325
bool setAddress(
const in_addr& addr,
unsigned short port);
00326
00333
bool setAddress(
const in6_addr& addr,
unsigned short port);
00334
00352
bool setAddress(
const QString& addr,
unsigned short port,
int family = -1);
00353
00359
bool setHost(
const in_addr& addr);
00360
00366
bool setHost(
const in6_addr& addr);
00367
00374
bool setHost(
const QString& addr,
int family = -1);
00375
00381
bool setPort(
unsigned short port);
00382
00390
bool setFamily(
int family);
00391
00397
bool setFlowinfo(Q_UINT32 flowinfo);
00398
00404
bool setScopeId(
int scopeid);
00405
00410
virtual QString pretty()
const;
00411
00416
virtual QString nodeName()
const;
00417
00418
00423
virtual QString serviceName()
const;
00424
00434
const sockaddr_in* addressV4()
const;
00435
00440
const sockaddr_in6* addressV6()
const;
00441
00447 in_addr hostV4()
const;
00448
00455 in6_addr hostV6()
const;
00456
00461
unsigned short port()
const;
00462
00467 Q_UINT32 flowinfo()
const;
00468
00473
int scopeId()
const;
00474
00480
virtual ksocklen_t
size()
const;
00481
00482
00494
static bool areEqualInet(
const KSocketAddress &s1,
const KSocketAddress &s2,
bool coreOnly);
00495
00507
static bool areEqualInet6(
const KSocketAddress &s1,
const KSocketAddress &s2,
bool coreOnly);
00508
00509
00510
00517 operator const sockaddr_in*()
const
00518
{
return addressV4(); }
00519
00525 operator const sockaddr_in6*()
const
00526
{
return addressV6(); }
00527
00531 KInetSocketAddress& operator=(
const KInetSocketAddress &other)
00532 { setAddress(other);
return *
this; }
00533
00534
private:
00535
00536
void fromV4();
00537
void fromV6();
00538
00539
public:
00547
static QString addrToString(
int family,
const void *addr);
00548
00558
static bool stringToAddr(
int family,
const char *text,
void *dest);
00559
00560
friend class KExtendedSocket;
00561
protected:
00562
virtual void virtual_hook(
int id,
void* data );
00563
private:
00564 KInetSocketAddressPrivate* d;
00565 };
00566
00567
extern const KInetSocketAddress addressAny, addressLoopback;
00568
00569
00570
00571
00572
struct sockaddr_un;
00573
00574
class KUnixSocketAddressPrivate;
00588 class KUnixSocketAddress:
public KSocketAddress
00589 {
00590 Q_OBJECT
00591
public:
00595
KUnixSocketAddress();
00596
00602
KUnixSocketAddress(
const sockaddr_un* raw_data, ksocklen_t size);
00603
00608
KUnixSocketAddress(
QCString pathname);
00609
00613
virtual ~
KUnixSocketAddress();
00614
00621
bool setAddress(
const sockaddr_un* socket_address, ksocklen_t size);
00622
00628
bool setAddress(
QCString path);
00629
00635
QCString pathname()
const;
00636
00641
virtual QString pretty()
const;
00642
00643
00644
00645
00646
00647
00648
00649
virtual QString serviceName()
const;
00650
00655
const sockaddr_un*
address()
const;
00656
00662 operator const sockaddr_un*()
const
00663
{
return address(); }
00664
00675
static bool areEqualUnix(
const KSocketAddress &s1,
const KSocketAddress &s2,
bool coreOnly);
00676
00677
private:
00678
void init();
00679
00680
friend class KExtendedSocket;
00681
protected:
00682
virtual void virtual_hook(
int id,
void* data );
00683
private:
00684 KUnixSocketAddressPrivate* d;
00685 };
00686
00687
#endif // KSOCKADDR_H