mirror of
https://github.com/celisej567/mcpe.git
synced 2026-09-11 20:11:18 +03:00
* Initial commit.
:)
This commit is contained in:
121
thirdparty/raknet/RakNetSocket2_Windows_Linux.cpp
vendored
Normal file
121
thirdparty/raknet/RakNetSocket2_Windows_Linux.cpp
vendored
Normal file
@@ -0,0 +1,121 @@
|
||||
/*
|
||||
* Copyright (c) 2014, Oculus VR, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "EmptyHeader.h"
|
||||
|
||||
#ifdef RAKNET_SOCKET_2_INLINE_FUNCTIONS
|
||||
|
||||
#ifndef RAKNETSOCKET2_WINDOWS_LINUX_CPP
|
||||
#define RAKNETSOCKET2_WINDOWS_LINUX_CPP
|
||||
|
||||
#if !defined(WINDOWS_STORE_RT) && !defined(__native_client__)
|
||||
|
||||
#if RAKNET_SUPPORT_IPV6==1
|
||||
|
||||
void PrepareAddrInfoHints2(addrinfo *hints)
|
||||
{
|
||||
memset(hints, 0, sizeof (addrinfo)); // make sure the struct is empty
|
||||
hints->ai_socktype = SOCK_DGRAM; // UDP sockets
|
||||
hints->ai_flags = AI_PASSIVE; // fill in my IP for me
|
||||
}
|
||||
|
||||
void GetMyIP_Windows_Linux_IPV4And6( SystemAddress addresses[MAXIMUM_NUMBER_OF_INTERNAL_IDS] )
|
||||
{
|
||||
int idx=0;
|
||||
char ac[ 80 ];
|
||||
int err = gethostname( ac, sizeof( ac ) );
|
||||
RakAssert(err != -1);
|
||||
|
||||
struct addrinfo hints;
|
||||
struct addrinfo *servinfo=0, *aip; // will point to the results
|
||||
PrepareAddrInfoHints2(&hints);
|
||||
getaddrinfo(ac, "", &hints, &servinfo);
|
||||
|
||||
for (idx=0, aip = servinfo; aip != NULL && idx < MAXIMUM_NUMBER_OF_INTERNAL_IDS; aip = aip->ai_next, idx++)
|
||||
{
|
||||
if (aip->ai_family == AF_INET)
|
||||
{
|
||||
struct sockaddr_in *ipv4 = (struct sockaddr_in *)aip->ai_addr;
|
||||
memcpy(&addresses[idx].address.addr4,ipv4,sizeof(sockaddr_in));
|
||||
}
|
||||
else
|
||||
{
|
||||
struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)aip->ai_addr;
|
||||
memcpy(&addresses[idx].address.addr4,ipv6,sizeof(sockaddr_in6));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
freeaddrinfo(servinfo); // free the linked-list
|
||||
|
||||
while (idx < MAXIMUM_NUMBER_OF_INTERNAL_IDS)
|
||||
{
|
||||
addresses[idx]=UNASSIGNED_SYSTEM_ADDRESS;
|
||||
idx++;
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#if (defined(__GNUC__) || defined(__GCCXML__)) && !defined(__WIN32__)
|
||||
#include <netdb.h>
|
||||
#endif
|
||||
void GetMyIP_Windows_Linux_IPV4( SystemAddress addresses[MAXIMUM_NUMBER_OF_INTERNAL_IDS] )
|
||||
{
|
||||
|
||||
|
||||
|
||||
int idx=0;
|
||||
char ac[ 80 ];
|
||||
int err = gethostname( ac, sizeof( ac ) );
|
||||
(void) err;
|
||||
RakAssert(err != -1);
|
||||
|
||||
struct hostent *phe = gethostbyname( ac );
|
||||
|
||||
if ( phe == 0 )
|
||||
{
|
||||
RakAssert(phe!=0);
|
||||
return ;
|
||||
}
|
||||
for ( idx = 0; idx < MAXIMUM_NUMBER_OF_INTERNAL_IDS; ++idx )
|
||||
{
|
||||
if (phe->h_addr_list[ idx ] == 0)
|
||||
break;
|
||||
|
||||
memcpy(&addresses[idx].address.addr4.sin_addr,phe->h_addr_list[ idx ],sizeof(struct in_addr));
|
||||
}
|
||||
|
||||
while (idx < MAXIMUM_NUMBER_OF_INTERNAL_IDS)
|
||||
{
|
||||
addresses[idx]=UNASSIGNED_SYSTEM_ADDRESS;
|
||||
idx++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif // RAKNET_SUPPORT_IPV6==1
|
||||
|
||||
|
||||
void GetMyIP_Windows_Linux( SystemAddress addresses[MAXIMUM_NUMBER_OF_INTERNAL_IDS] )
|
||||
{
|
||||
#if RAKNET_SUPPORT_IPV6==1
|
||||
GetMyIP_Windows_Linux_IPV4And6(addresses);
|
||||
#else
|
||||
GetMyIP_Windows_Linux_IPV4(addresses);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#endif // Windows and Linux
|
||||
|
||||
#endif // file header
|
||||
|
||||
#endif // #ifdef RAKNET_SOCKET_2_INLINE_FUNCTIONS
|
||||
Reference in New Issue
Block a user