153 lines
3.2 KiB
C++
153 lines
3.2 KiB
C++
#ifndef _SOCKET_INETSOCKETADDRESS_HPP_
|
|
#define _SOCKET_INETSOCKETADDRESS_HPP_
|
|
#ifndef _COMMON_WINSOCK_HPP_
|
|
#include <common/winsock.hpp>
|
|
#endif
|
|
#ifndef _COMMON_STRING_HPP_
|
|
#include <common/string.hpp>
|
|
#endif
|
|
#ifndef _SOCKET_INTERNETADDRESS_HPP_
|
|
#include <socket/inaddr.hpp>
|
|
#endif
|
|
|
|
class INETSocketAddress : private sockaddr_in
|
|
{
|
|
public:
|
|
INETSocketAddress(void);
|
|
INETSocketAddress(const INETSocketAddress &someINETSocketAddress);
|
|
virtual ~INETSocketAddress();
|
|
INETSocketAddress &operator=(const INETSocketAddress &someINETSocketAddress);
|
|
WORD operator==(const INETSocketAddress &someINETSocketAddress);
|
|
operator sockaddr_in&(void);
|
|
short family(void)const;
|
|
void family(short family);
|
|
short port(void)const;
|
|
void port(short port);
|
|
InternetAddress internetAddress(void)const;
|
|
void internetAddress(const InternetAddress &someInternetAddress);
|
|
sockaddr_in &getsockaddr(void);
|
|
String toString(void)const;
|
|
static int length(void);
|
|
private:
|
|
short purePort(void)const;
|
|
void purePort(short purePort);
|
|
void setZero(void);
|
|
};
|
|
|
|
inline
|
|
INETSocketAddress::INETSocketAddress(void)
|
|
{
|
|
setZero();
|
|
}
|
|
|
|
inline
|
|
INETSocketAddress::INETSocketAddress(const INETSocketAddress &someINETSocketAddress)
|
|
{
|
|
*this=someINETSocketAddress;
|
|
}
|
|
|
|
inline
|
|
INETSocketAddress::~INETSocketAddress()
|
|
{
|
|
}
|
|
|
|
inline
|
|
INETSocketAddress &INETSocketAddress::operator=(const INETSocketAddress &someINETSocketAddress)
|
|
{
|
|
family(someINETSocketAddress.family());
|
|
purePort(someINETSocketAddress.purePort());
|
|
internetAddress(someINETSocketAddress.internetAddress());
|
|
return *this;
|
|
}
|
|
|
|
inline
|
|
WORD INETSocketAddress::operator==(const INETSocketAddress &someINETSocketAddress)
|
|
{
|
|
return (family()==someINETSocketAddress.family()&&
|
|
purePort()==someINETSocketAddress.purePort()&&
|
|
internetAddress()==someINETSocketAddress.internetAddress());
|
|
}
|
|
|
|
inline
|
|
INETSocketAddress::operator sockaddr_in&(void)
|
|
{
|
|
return *this;
|
|
}
|
|
|
|
inline
|
|
short INETSocketAddress::family(void)const
|
|
{
|
|
return sockaddr_in::sin_family;
|
|
}
|
|
|
|
inline
|
|
void INETSocketAddress::family(short family)
|
|
{
|
|
sockaddr_in::sin_family=family;
|
|
}
|
|
|
|
inline
|
|
short INETSocketAddress::port(void)const
|
|
{
|
|
return ntohs(sockaddr_in::sin_port);
|
|
}
|
|
|
|
inline
|
|
void INETSocketAddress::port(short port)
|
|
{
|
|
sockaddr_in::sin_port=htons(port);
|
|
}
|
|
|
|
inline
|
|
short INETSocketAddress::purePort(void)const
|
|
{
|
|
return sockaddr_in::sin_port;
|
|
}
|
|
|
|
inline
|
|
void INETSocketAddress::purePort(short purePort)
|
|
{
|
|
sockaddr_in::sin_port=purePort;
|
|
}
|
|
|
|
inline
|
|
InternetAddress INETSocketAddress::internetAddress(void)const
|
|
{
|
|
return InternetAddress(sockaddr_in::sin_addr);
|
|
}
|
|
|
|
inline
|
|
void INETSocketAddress::internetAddress(const InternetAddress &someInternetAddress)
|
|
{
|
|
::memcpy((char*)&(((sockaddr_in&)*this).sin_addr),(char*)&((in_addr&)someInternetAddress),sizeof(in_addr));
|
|
}
|
|
|
|
inline
|
|
sockaddr_in &INETSocketAddress::getsockaddr(void)
|
|
{
|
|
return *this;
|
|
}
|
|
|
|
inline
|
|
void INETSocketAddress::setZero(void)
|
|
{
|
|
::memset((char*)&((sockaddr_in&)*this),0,sizeof(sockaddr_in));
|
|
}
|
|
|
|
inline
|
|
String INETSocketAddress::toString(void)const
|
|
{
|
|
String str=internetAddress().toString()+String(":")+String().fromInt(port())+String(":");
|
|
if(PF_INET==family())str+="PF_INET";
|
|
else str+=String("Family:")+String().fromInt(family());
|
|
return str;
|
|
}
|
|
|
|
inline
|
|
int INETSocketAddress::length(void)
|
|
{
|
|
return sizeof(sockaddr_in);
|
|
}
|
|
#endif
|
|
|