forked from metin2/client
107 lines
1.7 KiB
C++
107 lines
1.7 KiB
C++
#include "StdAfx.h"
|
|
#include "NetAddress.h"
|
|
|
|
#ifndef VC_EXTRALEAN
|
|
|
|
bool CNetworkAddress::GetHostName(char* szName, int size)
|
|
{
|
|
if (gethostname(szName, size)==SOCKET_ERROR)
|
|
return false;
|
|
return true;
|
|
}
|
|
|
|
CNetworkAddress::CNetworkAddress()
|
|
{
|
|
Clear();
|
|
}
|
|
|
|
CNetworkAddress::~CNetworkAddress()
|
|
{
|
|
}
|
|
|
|
CNetworkAddress::operator const SOCKADDR_IN&() const
|
|
{
|
|
return m_sockAddrIn;
|
|
}
|
|
|
|
void CNetworkAddress::Clear()
|
|
{
|
|
memset(&m_sockAddrIn, 0, sizeof(m_sockAddrIn));
|
|
m_sockAddrIn.sin_family=AF_INET;
|
|
}
|
|
|
|
bool CNetworkAddress::IsIP(const char* c_szAddr)
|
|
{
|
|
if (c_szAddr[0]<'0' || c_szAddr[0]>'9')
|
|
return false;
|
|
return true;
|
|
}
|
|
|
|
bool CNetworkAddress::Set(const char* c_szAddr, int port)
|
|
{
|
|
if (IsIP(c_szAddr))
|
|
{
|
|
SetIP(c_szAddr);
|
|
}
|
|
else
|
|
{
|
|
if (!SetDNS(c_szAddr))
|
|
return false;
|
|
}
|
|
|
|
SetPort(port);
|
|
return true;
|
|
}
|
|
|
|
void CNetworkAddress::SetLocalIP()
|
|
{
|
|
SetIP(INADDR_ANY);
|
|
}
|
|
|
|
void CNetworkAddress::SetIP(DWORD ip)
|
|
{
|
|
m_sockAddrIn.sin_addr.s_addr=htonl(ip);
|
|
}
|
|
|
|
void CNetworkAddress::SetIP(const char* c_szIP)
|
|
{
|
|
m_sockAddrIn.sin_addr.s_addr=inet_addr(c_szIP);
|
|
}
|
|
|
|
bool CNetworkAddress::SetDNS(const char* c_szDNS)
|
|
{
|
|
HOSTENT* pHostent=gethostbyname(c_szDNS);
|
|
if (!pHostent) return false;
|
|
memcpy(&m_sockAddrIn.sin_addr, pHostent->h_addr, sizeof(m_sockAddrIn.sin_addr));
|
|
return true;
|
|
}
|
|
|
|
void CNetworkAddress::SetPort(int port)
|
|
{
|
|
m_sockAddrIn.sin_port = htons(port);
|
|
}
|
|
|
|
int CNetworkAddress::GetSize()
|
|
{
|
|
return sizeof(m_sockAddrIn);
|
|
}
|
|
|
|
DWORD CNetworkAddress::GetIP()
|
|
{
|
|
return ntohl(m_sockAddrIn.sin_addr.s_addr);
|
|
}
|
|
|
|
void CNetworkAddress::GetIP(char* szIP, int len)
|
|
{
|
|
BYTE IPs[4];
|
|
*((DWORD*)IPs)=m_sockAddrIn.sin_addr.s_addr;
|
|
|
|
_snprintf(szIP, len, "%d.%d.%d.%d", IPs[0], IPs[1], IPs[2], IPs[3]);
|
|
}
|
|
|
|
int CNetworkAddress::GetPort()
|
|
{
|
|
return ntohs(m_sockAddrIn.sin_port);
|
|
}
|
|
|
|
#endif |