#ifndef _SOCKET_INETSOCKETADDRESS_HPP_ #define _SOCKET_INETSOCKETADDRESS_HPP_ #ifndef _COMMON_WINSOCK_HPP_ #include #endif #ifndef _COMMON_STRING_HPP_ #include #endif #ifndef _SOCKET_INTERNETADDRESS_HPP_ #include #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