Add NetworkAddress.
This commit is contained in:
@@ -92,7 +92,7 @@ int32 NetworkBase::ReadSocket(NetworkSocket socket, byte* buffer, uint32 bufferS
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NetworkBase::CreateEndPoint(String* address, String* port, NetworkIPVersion ipv, NetworkEndPoint& endPoint, bool bindable)
|
bool NetworkBase::CreateEndPoint(NetworkAddress& address, NetworkIPVersion ipv, NetworkEndPoint& endPoint, bool bindable)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,11 +36,15 @@ struct FLAXENGINE_API NetworkSocket
|
|||||||
byte Data[8] = {};
|
byte Data[8] = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct FLAXENGINE_API NetworkAddress
|
||||||
|
{
|
||||||
|
String Address;
|
||||||
|
String Port;
|
||||||
|
};
|
||||||
|
|
||||||
struct FLAXENGINE_API NetworkEndPoint
|
struct FLAXENGINE_API NetworkEndPoint
|
||||||
{
|
{
|
||||||
NetworkIPVersion IPVersion = NetworkIPVersion::Undefined;
|
NetworkIPVersion IPVersion = NetworkIPVersion::Undefined;
|
||||||
String Address;
|
|
||||||
String Port;
|
|
||||||
byte Data[28] = {};
|
byte Data[28] = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -250,13 +254,12 @@ public:
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates an end point.
|
/// Creates an end point.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="address">The address (hostname, IPv4 or IPv6).</param>
|
/// <param name="address">The address.</param>
|
||||||
/// <param name="port">The port.</param>
|
|
||||||
/// <param name="ipv">The ip version.</param>
|
/// <param name="ipv">The ip version.</param>
|
||||||
/// <param name="endPoint">The created end point.</param>
|
/// <param name="endPoint">The created end point.</param>
|
||||||
/// <param name="bindable">True if the end point will be connected or binded.</param>
|
/// <param name="bindable">True if the end point will be connected or binded.</param>
|
||||||
/// <returns>Returns true on error, otherwise false.</returns>
|
/// <returns>Returns true on error, otherwise false.</returns>
|
||||||
static bool CreateEndPoint(String* address, String* port, NetworkIPVersion ipv, NetworkEndPoint& endPoint, bool bindable = false);
|
static bool CreateEndPoint(NetworkAddress& address, NetworkIPVersion ipv, NetworkEndPoint& endPoint, bool bindable = false);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Remaps an ipv4 end point to an ipv6 one.
|
/// Remaps an ipv4 end point to an ipv6 one.
|
||||||
|
|||||||
@@ -81,10 +81,8 @@ static bool CreateEndPointFromAddr(sockaddr* addr, NetworkEndPoint& endPoint)
|
|||||||
LOG(Error, "Unable to extract address from sockaddr! Error : {0}", GetLastErrorMessage());
|
LOG(Error, "Unable to extract address from sockaddr! Error : {0}", GetLastErrorMessage());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
endPoint.Address = String(ip);
|
|
||||||
char strPort[6];
|
char strPort[6];
|
||||||
_itoa(port, strPort, 10);
|
_itoa(port, strPort, 10);
|
||||||
endPoint.Port = String(strPort);
|
|
||||||
endPoint.IPVersion = GetIPVersionFromAddr(*addr);
|
endPoint.IPVersion = GetIPVersionFromAddr(*addr);
|
||||||
memcpy(endPoint.Data, addr, size);
|
memcpy(endPoint.Data, addr, size);
|
||||||
return false;
|
return false;
|
||||||
@@ -225,7 +223,7 @@ bool Win32Network::ConnectSocket(NetworkSocket& socket, NetworkEndPoint& endPoin
|
|||||||
int error = WSAGetLastError();
|
int error = WSAGetLastError();
|
||||||
if (error == WSAEWOULDBLOCK)
|
if (error == WSAEWOULDBLOCK)
|
||||||
return false;
|
return false;
|
||||||
LOG(Error, "Unable to connect socket to address! Socket : {0} Address : {1} Port : {2} Error : {3}", *(SOCKET*)socket.Data, endPoint.Address, endPoint.Port, GetErrorMessage(error));
|
LOG(Error, "Unable to connect socket to address! Socket : {0} Error : {1}", *(SOCKET*)socket.Data, GetErrorMessage(error));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -242,7 +240,7 @@ bool Win32Network::BindSocket(NetworkSocket& socket, NetworkEndPoint& endPoint)
|
|||||||
const uint16 size = endPoint.IPVersion == NetworkIPVersion::IPv6 ? sizeof sockaddr_in6 : sizeof sockaddr_in;
|
const uint16 size = endPoint.IPVersion == NetworkIPVersion::IPv6 ? sizeof sockaddr_in6 : sizeof sockaddr_in;
|
||||||
if (bind(*(SOCKET*)socket.Data, (const sockaddr*)endPoint.Data, size) == SOCKET_ERROR)
|
if (bind(*(SOCKET*)socket.Data, (const sockaddr*)endPoint.Data, size) == SOCKET_ERROR)
|
||||||
{
|
{
|
||||||
LOG(Error, "Unable to bind socket! Socket : {0} Address : {1} Port : {2} Error : {3}", *(SOCKET*)socket.Data, endPoint.Address, endPoint.Port, GetLastErrorMessage());
|
LOG(Error, "Unable to bind socket! Socket : {0} Error : {1}", *(SOCKET*)socket.Data, GetLastErrorMessage());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -385,7 +383,7 @@ int32 Win32Network::WriteSocket(NetworkSocket socket, byte* data, uint32 length,
|
|||||||
{
|
{
|
||||||
if ((size = sendto(*(SOCKET*)socket.Data, (const char*)data, length, 0, (const sockaddr*)endPoint->Data, GetAddrSizeFromEP(*endPoint))) == SOCKET_ERROR)
|
if ((size = sendto(*(SOCKET*)socket.Data, (const char*)data, length, 0, (const sockaddr*)endPoint->Data, GetAddrSizeFromEP(*endPoint))) == SOCKET_ERROR)
|
||||||
{
|
{
|
||||||
LOG(Error, "Unable to send data! Socket : {0} Address : {1} Port : {2} Data Length : {3} Error : {4}", *(SOCKET*)socket.Data, endPoint->Address, endPoint->Port, length, GetLastErrorMessage());
|
LOG(Error, "Unable to send data! Socket : {0} Data Length : {1} Error : {2}", *(SOCKET*)socket.Data, length, GetLastErrorMessage());
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -427,7 +425,7 @@ int32 Win32Network::ReadSocket(NetworkSocket socket, byte* buffer, uint32 buffer
|
|||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Win32Network::CreateEndPoint(String* address, String* port, NetworkIPVersion ipv, NetworkEndPoint& endPoint, bool bindable)
|
bool Win32Network::CreateEndPoint(NetworkAddress& address, NetworkIPVersion ipv, NetworkEndPoint& endPoint, bool bindable)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
addrinfoW hints;
|
addrinfoW hints;
|
||||||
@@ -440,15 +438,15 @@ bool Win32Network::CreateEndPoint(String* address, String* port, NetworkIPVersio
|
|||||||
hints.ai_flags = AI_PASSIVE;
|
hints.ai_flags = AI_PASSIVE;
|
||||||
|
|
||||||
// consider using NUMERICHOST/NUMERICSERV if address is a valid Ipv4 or IPv6 so we can skip some look up ( potentially slow when resolving host names )
|
// consider using NUMERICHOST/NUMERICSERV if address is a valid Ipv4 or IPv6 so we can skip some look up ( potentially slow when resolving host names )
|
||||||
if ((status = GetAddrInfoW(address == nullptr ? nullptr : address->Get(), port->Get(), &hints, &info)) != 0)
|
if ((status = GetAddrInfoW(address.Address == String::Empty ? nullptr : address.Address.Get(), address.Address == String::Empty ? nullptr : address.Port.Get(), &hints, &info)) != 0)
|
||||||
{
|
{
|
||||||
LOG(Error, "Unable to query info for address : {0} Error : {1}", address ? address->Get() : String("ANY"), gai_strerror(status));
|
LOG(Error, "Unable to query info for address : {0} Error : {1}", address.Address != String::Empty ? address.Address.Get() : String("ANY"), gai_strerror(status));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info == nullptr)
|
if (info == nullptr)
|
||||||
{
|
{
|
||||||
LOG(Error, "Unable to resolve address! Address : {0}", address ? address->Get() : String("ANY"));
|
LOG(Error, "Unable to resolve address! Address : {0}", address.Address != String::Empty ? address.Address.Get() : String("ANY"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -483,7 +481,6 @@ NetworkEndPoint Win32Network::RemapEndPointToIPv6(NetworkEndPoint endPoint)
|
|||||||
addr6->sin6_port = addr4->sin_port;
|
addr6->sin6_port = addr4->sin_port;
|
||||||
memcpy(&addr6->sin6_addr.u.Byte[12], &addr4->sin_addr, 4); // :::::FFFF:XXXX:XXXX X=IPv4
|
memcpy(&addr6->sin6_addr.u.Byte[12], &addr4->sin_addr, 4); // :::::FFFF:XXXX:XXXX X=IPv4
|
||||||
pv6.IPVersion = NetworkIPVersion::IPv6;
|
pv6.IPVersion = NetworkIPVersion::IPv6;
|
||||||
pv6.Port = endPoint.Port;
|
|
||||||
|
|
||||||
return pv6;
|
return pv6;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ public:
|
|||||||
static void ClearGroup(NetworkSocketGroup& group);
|
static void ClearGroup(NetworkSocketGroup& group);
|
||||||
static int32 WriteSocket(NetworkSocket socket, byte* data, uint32 length, NetworkEndPoint* endPoint = nullptr);
|
static int32 WriteSocket(NetworkSocket socket, byte* data, uint32 length, NetworkEndPoint* endPoint = nullptr);
|
||||||
static int32 ReadSocket(NetworkSocket socket, byte* buffer, uint32 bufferSize, NetworkEndPoint* endPoint = nullptr);
|
static int32 ReadSocket(NetworkSocket socket, byte* buffer, uint32 bufferSize, NetworkEndPoint* endPoint = nullptr);
|
||||||
static bool CreateEndPoint(String* address, String* port, NetworkIPVersion ipv, NetworkEndPoint& endPoint, bool bindable = false);
|
static bool CreateEndPoint(NetworkAddress& address, NetworkIPVersion ipv, NetworkEndPoint& endPoint, bool bindable = false);
|
||||||
static NetworkEndPoint RemapEndPointToIPv6(NetworkEndPoint endPoint);
|
static NetworkEndPoint RemapEndPointToIPv6(NetworkEndPoint endPoint);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user