rtphone/src/libs/ice/ICEAddress.h

103 lines
3.3 KiB
C++

/* Copyright(C) 2007-2018 VoIP objects (voipobjects.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef __ICE_ADDRESS_H
#define __ICE_ADDRESS_H
#include "ICEPlatform.h"
#include <ostream>
#include <string>
#include <vector>
namespace ice
{
class NetworkAddress
{
public:
static NetworkAddress LoopbackAddress4;
static NetworkAddress LoopbackAddress6;
static bool isSameLAN(const NetworkAddress& a1, const NetworkAddress& a2);
static bool isIp(const std::string& str);
static NetworkAddress parse(const std::string& s);
NetworkAddress();
NetworkAddress(int stunType);
NetworkAddress(const std::string& ip, unsigned short port);
NetworkAddress(const char* ip, unsigned short port);
NetworkAddress(const in6_addr& ip, unsigned short port);
NetworkAddress(const in_addr& ip, unsigned short port);
NetworkAddress(const sockaddr& addr, unsigned addrLen);
NetworkAddress(const NetworkAddress& src);
~NetworkAddress();
// Returns AF_INET or AF_INET6
int family() const;
unsigned char stunType() const;
void setStunType(unsigned char st);
sockaddr* genericsockaddr() const;
sockaddr_in* sockaddr4() const;
sockaddr_in6* sockaddr6() const;
unsigned sockaddrLen() const;
void setIp(const std::string& ip);
void setIp(unsigned long ip);
void setIp(const in_addr& ip);
void setIp(const in6_addr& ip);
void setIp(NetworkAddress ipOnly);
void setPort(unsigned short port);
std::string ip() const;
unsigned char* ipBytes() const;
unsigned short port() const;
std::string toStdString() const;
#ifdef WIN32
std::wstring toStdWString() const;
#endif
bool isLoopback() const;
bool isLAN() const;
bool isLinkLocal() const;
bool isPublic() const;
bool isEmpty() const;
bool isZero() const;
bool isV4() const;
bool isV6() const;
void clear();
void setRelayed(bool relayed);
bool relayed() const;
bool hasHost(const std::vector<NetworkAddress>& hosts);
static bool isSameHost(const NetworkAddress& a1, const NetworkAddress& a2);
static bool isSame(const NetworkAddress& a1, const NetworkAddress& a2);
NetworkAddress& operator = (const NetworkAddress& src);
bool operator == (const NetworkAddress& rhs) const;
bool operator != (const NetworkAddress& rhs) const;
bool operator < (const NetworkAddress& rhs) const;
bool operator > (const NetworkAddress& rhs) const;
protected:
union
{
sockaddr_in6 mAddr6;
sockaddr_in mAddr4;
};
bool mRelayed;
bool mInitialized;
};
}
std::ostream& operator << (std::ostream& s, const ice::NetworkAddress& addr);
#ifdef WIN32
std::wostream& operator << (std::wostream& s, const ice::NetworkAddress& addr);
#endif
#endif