13 #ifndef hifi_SockAddr_h
14 #define hifi_SockAddr_h
21 #include <QtNetwork/QHostInfo>
23 #include "SocketType.h"
26 class SockAddr :
public QObject {
30 SockAddr(
SocketType socketType,
const QHostAddress& address, quint16 port);
31 SockAddr(
const SockAddr& otherSockAddr);
32 SockAddr(
SocketType socketType,
const QString& hostname, quint16 hostOrderPort,
bool shouldBlockForLookup =
false);
34 bool isNull()
const {
return _address.isNull() && _port == 0; }
35 void clear() { _address.clear(); _port = 0;}
37 SockAddr& operator=(
const SockAddr& rhsSockAddr);
38 void swap(SockAddr& otherSockAddr);
40 bool operator==(
const SockAddr& rhsSockAddr)
const;
41 bool operator!=(
const SockAddr& rhsSockAddr)
const {
return !(*
this == rhsSockAddr); }
43 SocketType getType()
const {
return _socketType; }
44 SocketType* getSocketTypePointer() {
return &_socketType; }
45 void setType(
const SocketType socketType) { _socketType = socketType; }
47 const QHostAddress& getAddress()
const {
return _address; }
48 QHostAddress* getAddressPointer() {
return &_address; }
49 void setAddress(
const QHostAddress& address) { _address = address; }
51 quint16 getPort()
const {
return _port; }
52 quint16* getPortPointer() {
return &_port; }
53 void setPort(quint16 port) { _port = port; }
55 static int packSockAddr(
unsigned char* packetData,
const SockAddr& packSockAddr);
56 static int unpackSockAddr(
const unsigned char* packetData, SockAddr& unpackDestSockAddr);
58 QString toString()
const;
59 QString toShortString()
const;
61 bool hasPrivateAddress()
const;
63 friend QDebug operator<<(QDebug debug,
const SockAddr& sockAddr);
64 friend QDataStream& operator<<(QDataStream& dataStream,
const SockAddr& sockAddr);
65 friend QDataStream& operator>>(QDataStream& dataStream, SockAddr& sockAddr);
68 void handleLookupResult(
const QHostInfo& hostInfo);
70 void lookupCompleted();
74 QHostAddress _address;
78 uint qHash(
const SockAddr& key, uint seed);
82 struct hash<SockAddr> {
85 size_t operator()(
const SockAddr& sockAddr)
const {
89 if (sockAddr.getAddress().protocol() == QAbstractSocket::IPv4Protocol) {
90 return hash<uint32_t>()((uint32_t) sockAddr.getAddress().toIPv4Address())
91 ^ hash<uint16_t>()((uint16_t) sockAddr.getPort());
95 return hash<string>()(sockAddr.getAddress().toString().toStdString())
96 ^ hash<uint16_t>()((uint16_t) sockAddr.getPort());
102 Q_DECLARE_METATYPE(SockAddr);
SocketType
The types of network socket.
Definition: SocketType.h:22
@ Unknown
Socket type unknown or not set.