mirror of
https://github.com/Shpoike/Quakespasm.git
synced 2025-02-15 16:41:22 +00:00
net_wins.c: don't assume windows implementation details in ipv6 code
This commit is contained in:
parent
5a9d2fad9e
commit
b2e2abc6da
1 changed files with 30 additions and 23 deletions
|
@ -437,6 +437,13 @@ int WINS_Write (sys_socket_t socketid, byte *buf, int len, struct qsockaddr *add
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
|
||||||
|
static unsigned short shortAtIndex(const unsigned char *bytes, int shortIndex)
|
||||||
|
{
|
||||||
|
unsigned short v;
|
||||||
|
memcpy(&v, &bytes[shortIndex * 2], 2);
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
const char *WINS_AddrToString (struct qsockaddr *addr, qboolean masked)
|
const char *WINS_AddrToString (struct qsockaddr *addr, qboolean masked)
|
||||||
{
|
{
|
||||||
static char buffer[64];
|
static char buffer[64];
|
||||||
|
@ -448,38 +455,38 @@ const char *WINS_AddrToString (struct qsockaddr *addr, qboolean masked)
|
||||||
if (masked)
|
if (masked)
|
||||||
{
|
{
|
||||||
q_snprintf(buffer, sizeof(buffer), "[%x:%x:%x:%x::]/64",
|
q_snprintf(buffer, sizeof(buffer), "[%x:%x:%x:%x::]/64",
|
||||||
ntohs(((struct sockaddr_in6 *)addr)->sin6_addr.u.Word[0]),
|
ntohs(shortAtIndex(((struct sockaddr_in6 *)addr)->sin6_addr.s6_addr, 0)),
|
||||||
ntohs(((struct sockaddr_in6 *)addr)->sin6_addr.u.Word[1]),
|
ntohs(shortAtIndex(((struct sockaddr_in6 *)addr)->sin6_addr.s6_addr, 1)),
|
||||||
ntohs(((struct sockaddr_in6 *)addr)->sin6_addr.u.Word[2]),
|
ntohs(shortAtIndex(((struct sockaddr_in6 *)addr)->sin6_addr.s6_addr, 2)),
|
||||||
ntohs(((struct sockaddr_in6 *)addr)->sin6_addr.u.Word[3]));
|
ntohs(shortAtIndex(((struct sockaddr_in6 *)addr)->sin6_addr.s6_addr, 3));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (((struct sockaddr_in6 *)addr)->sin6_scope_id)
|
if (((struct sockaddr_in6 *)addr)->sin6_scope_id)
|
||||||
{
|
{
|
||||||
q_snprintf(buffer, sizeof(buffer), "[%x:%x:%x:%x:%x:%x:%x:%x%%%i]:%d",
|
q_snprintf(buffer, sizeof(buffer), "[%x:%x:%x:%x:%x:%x:%x:%x%%%i]:%d",
|
||||||
ntohs(((struct sockaddr_in6 *)addr)->sin6_addr.u.Word[0]),
|
ntohs(shortAtIndex(((struct sockaddr_in6 *)addr)->sin6_addr.s6_addr, 0)),
|
||||||
ntohs(((struct sockaddr_in6 *)addr)->sin6_addr.u.Word[1]),
|
ntohs(shortAtIndex(((struct sockaddr_in6 *)addr)->sin6_addr.s6_addr, 1)),
|
||||||
ntohs(((struct sockaddr_in6 *)addr)->sin6_addr.u.Word[2]),
|
ntohs(shortAtIndex(((struct sockaddr_in6 *)addr)->sin6_addr.s6_addr, 2)),
|
||||||
ntohs(((struct sockaddr_in6 *)addr)->sin6_addr.u.Word[3]),
|
ntohs(shortAtIndex(((struct sockaddr_in6 *)addr)->sin6_addr.s6_addr, 3)),
|
||||||
ntohs(((struct sockaddr_in6 *)addr)->sin6_addr.u.Word[4]),
|
ntohs(shortAtIndex(((struct sockaddr_in6 *)addr)->sin6_addr.s6_addr, 4)),
|
||||||
ntohs(((struct sockaddr_in6 *)addr)->sin6_addr.u.Word[5]),
|
ntohs(shortAtIndex(((struct sockaddr_in6 *)addr)->sin6_addr.s6_addr, 5)),
|
||||||
ntohs(((struct sockaddr_in6 *)addr)->sin6_addr.u.Word[6]),
|
ntohs(shortAtIndex(((struct sockaddr_in6 *)addr)->sin6_addr.s6_addr, 6)),
|
||||||
ntohs(((struct sockaddr_in6 *)addr)->sin6_addr.u.Word[7]),
|
ntohs(shortAtIndex(((struct sockaddr_in6 *)addr)->sin6_addr.s6_addr, 7)),
|
||||||
(int)((struct sockaddr_in6 *)addr)->sin6_scope_id,
|
(int)((struct sockaddr_in6 *)addr)->sin6_scope_id,
|
||||||
ntohs(((struct sockaddr_in6 *)addr)->sin6_port));
|
ntohs(((struct sockaddr_in6 *)addr)->sin6_port));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
q_snprintf(buffer, sizeof(buffer), "[%x:%x:%x:%x:%x:%x:%x:%x]:%d",
|
q_snprintf(buffer, sizeof(buffer), "[%x:%x:%x:%x:%x:%x:%x:%x]:%d",
|
||||||
ntohs(((struct sockaddr_in6 *)addr)->sin6_addr.u.Word[0]),
|
ntohs(shortAtIndex(((struct sockaddr_in6 *)addr)->sin6_addr.s6_addr, 0)),
|
||||||
ntohs(((struct sockaddr_in6 *)addr)->sin6_addr.u.Word[1]),
|
ntohs(shortAtIndex(((struct sockaddr_in6 *)addr)->sin6_addr.s6_addr, 1)),
|
||||||
ntohs(((struct sockaddr_in6 *)addr)->sin6_addr.u.Word[2]),
|
ntohs(shortAtIndex(((struct sockaddr_in6 *)addr)->sin6_addr.s6_addr, 2)),
|
||||||
ntohs(((struct sockaddr_in6 *)addr)->sin6_addr.u.Word[3]),
|
ntohs(shortAtIndex(((struct sockaddr_in6 *)addr)->sin6_addr.s6_addr, 3)),
|
||||||
ntohs(((struct sockaddr_in6 *)addr)->sin6_addr.u.Word[4]),
|
ntohs(shortAtIndex(((struct sockaddr_in6 *)addr)->sin6_addr.s6_addr, 4)),
|
||||||
ntohs(((struct sockaddr_in6 *)addr)->sin6_addr.u.Word[5]),
|
ntohs(shortAtIndex(((struct sockaddr_in6 *)addr)->sin6_addr.s6_addr, 5)),
|
||||||
ntohs(((struct sockaddr_in6 *)addr)->sin6_addr.u.Word[6]),
|
ntohs(shortAtIndex(((struct sockaddr_in6 *)addr)->sin6_addr.s6_addr, 6)),
|
||||||
ntohs(((struct sockaddr_in6 *)addr)->sin6_addr.u.Word[7]),
|
ntohs(shortAtIndex(((struct sockaddr_in6 *)addr)->sin6_addr.s6_addr, 7)),
|
||||||
ntohs(((struct sockaddr_in6 *)addr)->sin6_port));
|
ntohs(((struct sockaddr_in6 *)addr)->sin6_port));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -781,9 +788,9 @@ sys_socket_t WINIPv6_Init (void)
|
||||||
|
|
||||||
broadcastaddrv6.sin6_family = AF_INET6;
|
broadcastaddrv6.sin6_family = AF_INET6;
|
||||||
memset(&broadcastaddrv6.sin6_addr, 0, sizeof(broadcastaddrv6.sin6_addr));
|
memset(&broadcastaddrv6.sin6_addr, 0, sizeof(broadcastaddrv6.sin6_addr));
|
||||||
broadcastaddrv6.sin6_addr.u.Byte[0] = 0xff;
|
broadcastaddrv6.sin6_addr.s6_addr[0] = 0xff;
|
||||||
broadcastaddrv6.sin6_addr.u.Byte[1] = 0x03;
|
broadcastaddrv6.sin6_addr.s6_addr[1] = 0x03;
|
||||||
broadcastaddrv6.sin6_addr.u.Byte[15] = 0x01;
|
broadcastaddrv6.sin6_addr.s6_addr[15] = 0x01;
|
||||||
broadcastaddrv6.sin6_port = htons((unsigned short)net_hostport);
|
broadcastaddrv6.sin6_port = htons((unsigned short)net_hostport);
|
||||||
|
|
||||||
Con_SafePrintf("IPv6 UDP Initialized\n");
|
Con_SafePrintf("IPv6 UDP Initialized\n");
|
||||||
|
|
Loading…
Reference in a new issue