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
00027
00028
00029
00030
typedef unsigned ksocklen_t;
00031
00032
struct sockaddr;
00033
00034
class KExtendedSocket;
00035
00036
class KSocketAddressPrivate;
00045 class KSocketAddress:
public QObject
00046 {
00047 Q_OBJECT
00048
protected:
00052 KSocketAddress() { init(); }
00053
00059
KSocketAddress(
const sockaddr* sa, ksocklen_t size);
00060
00061
public:
00065
virtual ~KSocketAddress();
00066
00071
virtual QString pretty() const;
00072
00077 const sockaddr* address()
const
00078
{
return data; }
00079
00084 virtual ksocklen_t
size()
const
00085
{
return datasize; }
00086
00092 operator const sockaddr*()
const
00093
{
return data; }
00094
00099
int family() const;
00100
00106 inline
int ianaFamily()
const
00107
{
return ianaFamily(
family()); }
00108
00114
virtual bool isEqual(
const KSocketAddress& other)
const;
00115
bool isEqual(
const KSocketAddress* other)
const
00116
{
return isEqual(*other); }
00117
00122 bool operator==(
const KSocketAddress& other)
const
00123
{
return isEqual(other); }
00124
00135
bool isCoreEqual(
const KSocketAddress& other)
const;
00136
00147 bool isCoreEqual(
const KSocketAddress* other)
const
00148
{
return isCoreEqual(*other); }
00149
00157
virtual QString nodeName() const;
00158
00166 virtual
QString serviceName() const;
00167
00168 protected:
00169 sockaddr* data;
00170 ksocklen_t datasize;
00171
bool owndata;
00172
00173 private:
00174
void init();
00175
00176
KSocketAddress(
KSocketAddress&);
00177 KSocketAddress& operator=(KSocketAddress&);
00178
00179 public:
00187 static KSocketAddress* newAddress(const struct sockaddr *sa, ksocklen_t size);
00188
00196 static
int ianaFamily(
int af);
00197
00202 static
int fromIanaFamily(
int iana);
00203
00204 friend class
KExtendedSocket;
00205 protected:
00206 virtual
void virtual_hook(
int id,
void* data );
00207 private:
00208 KSocketAddressPrivate* d;
00209 };
00210
00211
00212
00213
00214
00215 struct sockaddr_in;
00216 struct sockaddr_in6;
00217 struct in_addr;
00218 struct in6_addr;
00219
00220 class KInetSocketAddressPrivate;
00232 class
KInetSocketAddress: public ::KSocketAddress
00233 {
00234 Q_OBJECT
00235
public:
00239
KInetSocketAddress();
00240
00244
KInetSocketAddress(
const KInetSocketAddress&);
00245
00251
KInetSocketAddress(
const sockaddr_in* sin, ksocklen_t len);
00252
00258
KInetSocketAddress(
const sockaddr_in6* sin6, ksocklen_t len);
00259
00265
KInetSocketAddress(
const in_addr& addr,
unsigned short port);
00266
00272
KInetSocketAddress(
const in6_addr& addr,
unsigned short port);
00273
00283
KInetSocketAddress(
const QString& addr,
unsigned short port,
int family = -1);
00284
00288
virtual ~
KInetSocketAddress();
00289
00295
bool setAddress(
const KInetSocketAddress& ksa);
00296
00303
bool setAddress(
const sockaddr_in* sin, ksocklen_t len);
00304
00313
bool setAddress(
const sockaddr_in6* sin6, ksocklen_t len);
00314
00321
bool setAddress(
const in_addr& addr,
unsigned short port);
00322
00329
bool setAddress(
const in6_addr& addr,
unsigned short port);
00330
00348
bool setAddress(
const QString& addr,
unsigned short port,
int family = -1);
00349
00355
bool setHost(
const in_addr& addr);
00356
00362
bool setHost(
const in6_addr& addr);
00363
00370
bool setHost(
const QString& addr,
int family = -1);
00371
00377
bool setPort(
unsigned short port);
00378
00386
bool setFamily(
int family);
00387
00393
bool setFlowinfo(Q_UINT32 flowinfo);
00394
00400
bool setScopeId(
int scopeid);
00401
00406
virtual QString pretty()
const;
00407
00412
virtual QString nodeName()
const;
00413
00414
00419
virtual QString serviceName()
const;
00420
00430
const sockaddr_in* addressV4()
const;
00431
00436
const sockaddr_in6* addressV6()
const;
00437
00443 in_addr hostV4()
const;
00444
00451 in6_addr hostV6()
const;
00452
00457
unsigned short port()
const;
00458
00463 Q_UINT32 flowinfo()
const;
00464
00469
int scopeId()
const;
00470
00476
virtual ksocklen_t
size()
const;
00477
00478
00490
static bool areEqualInet(
const KSocketAddress &s1,
const KSocketAddress &s2,
bool coreOnly);
00491
00503
static bool areEqualInet6(
const KSocketAddress &s1,
const KSocketAddress &s2,
bool coreOnly);
00504
00505
00506
00513 operator const sockaddr_in*()
const
00514
{
return addressV4(); }
00515
00521 operator const sockaddr_in6*()
const
00522
{
return addressV6(); }
00523
00527 KInetSocketAddress& operator=(
const KInetSocketAddress &other)
00528 { setAddress(other);
return *
this; }
00529
00530
private:
00531
00532
void fromV4();
00533
void fromV6();
00534
00535
public:
00543
static QString addrToString(
int family,
const void *addr);
00544
00554
static bool stringToAddr(
int family,
const char *text,
void *dest);
00555
00556
friend class KExtendedSocket;
00557
protected:
00558
virtual void virtual_hook(
int id,
void* data );
00559
private:
00560 KInetSocketAddressPrivate* d;
00561 };
00562
00563
extern const ::KInetSocketAddress addressAny, addressLoopback;
00564
00565
00566
00567
00568
struct sockaddr_un;
00569
00570
class KUnixSocketAddressPrivate;
00583 class KUnixSocketAddress:
public ::
KSocketAddress
00584 {
00585 Q_OBJECT
00586
public:
00590
KUnixSocketAddress();
00591
00597
KUnixSocketAddress(
const sockaddr_un* raw_data, ksocklen_t size);
00598
00603
KUnixSocketAddress(
QCString pathname);
00604
00608
virtual ~
KUnixSocketAddress();
00609
00616
bool setAddress(
const sockaddr_un* socket_address, ksocklen_t size);
00617
00623
bool setAddress(
QCString path);
00624
00630
QCString pathname()
const;
00631
00636
virtual QString pretty()
const;
00637
00638
00639
00640
00641
00642
00643
00644
virtual QString serviceName()
const;
00645
00650
const sockaddr_un*
address()
const;
00651
00657 operator const sockaddr_un*()
const
00658
{
return address(); }
00659
00670
static bool areEqualUnix(
const KSocketAddress &s1,
const KSocketAddress &s2,
bool coreOnly);
00671
00672
private:
00673
void init();
00674
00675
friend class KExtendedSocket;
00676
protected:
00677
virtual void virtual_hook(
int id,
void* data );
00678
private:
00679 KUnixSocketAddressPrivate* d;
00680 };
00681
00682
#endif // KSOCKADDR_H