mirror of
https://github.com/libretro/RetroArch
synced 2025-03-29 13:20:30 +00:00
Start adding Windows implementation for net_ifinfo.c - will
need to link against iphlpapi for mingw
This commit is contained in:
parent
966f267285
commit
4d630189a2
@ -947,7 +947,7 @@ ifeq ($(HAVE_NETWORKING), 1)
|
||||
endif
|
||||
|
||||
ifneq ($(findstring Win32,$(OS)),)
|
||||
LIBS += -lws2_32
|
||||
LIBS += -lws2_32 -liphlpapi
|
||||
endif
|
||||
|
||||
# Netplay
|
||||
|
@ -24,7 +24,13 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#ifndef _WIN32
|
||||
#include <retro_miscellaneous.h>
|
||||
|
||||
#if defined(_WIN32) && !defined(_XBOX)
|
||||
#include <winsock2.h>
|
||||
#include <IPHlpApi.h>
|
||||
#include <WS2tcpip.h>
|
||||
#else
|
||||
#include <arpa/inet.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netdb.h>
|
||||
@ -67,10 +73,55 @@ void net_ifinfo_free(net_ifinfo_t *list)
|
||||
|
||||
bool net_ifinfo_new(net_ifinfo_t *list)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
return false;
|
||||
unsigned k = 0;
|
||||
#if defined(_WIN32) && !defined(_XBOX)
|
||||
DWORD size;
|
||||
PIP_ADAPTER_ADDRESSES adapter_addresses, aa;
|
||||
PIP_ADAPTER_UNICAST_ADDRESS ua;
|
||||
DWORD rv = GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, NULL, NULL, &size);
|
||||
|
||||
if (rv != ERROR_SUCCESS)
|
||||
goto error;
|
||||
|
||||
adapter_addresses = (PIP_ADAPTER_ADDRESSES)malloc(size);
|
||||
|
||||
rv = GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, NULL, adapter_addresses, &size);
|
||||
|
||||
if (rv != ERROR_SUCCESS)
|
||||
goto error;
|
||||
|
||||
for (aa = adapter_addresses; aa != NULL; aa = aa->Next)
|
||||
{
|
||||
struct net_ifinfo_entry *ptr = NULL;
|
||||
|
||||
for (ua = aa->FirstUnicastAddress; ua != NULL; ua = ua->Next)
|
||||
{
|
||||
char host[PATH_MAX_LENGTH], name[PATH_MAX_LENGTH];
|
||||
ptr = (struct net_ifinfo_entry*)
|
||||
realloc(list->entries, (k+1) * sizeof(struct net_ifinfo_entry));
|
||||
|
||||
if (!ptr)
|
||||
goto error;
|
||||
|
||||
list->entries = ptr;
|
||||
|
||||
memset(host, 0, PATH_MAX_LENGTH);
|
||||
memset(name, 0, PATH_MAX_LENGTH);
|
||||
getnameinfo(ua->Address.lpSockaddr, ua->Address.iSockaddrLength,
|
||||
host, sizeof(host), NULL, 0, NI_NUMERICHOST);
|
||||
WideCharToMultiByte(CP_ACP, 0, aa->FriendlyName, wcslen(aa->FriendlyName),
|
||||
name, PATH_MAX_LENGTH, NULL, NULL);
|
||||
|
||||
list->entries[k].name = strdup(name);
|
||||
list->entries[k].host = strdup(host);
|
||||
list->size = k + 1;
|
||||
|
||||
k++;
|
||||
}
|
||||
}
|
||||
|
||||
free(adapter_addresses);
|
||||
#else
|
||||
unsigned k = 0;
|
||||
struct ifaddrs *ifa = NULL;
|
||||
struct ifaddrs *ifaddr = NULL;
|
||||
|
||||
@ -111,10 +162,14 @@ bool net_ifinfo_new(net_ifinfo_t *list)
|
||||
}
|
||||
|
||||
freeifaddrs(ifaddr);
|
||||
|
||||
#endif
|
||||
return true;
|
||||
|
||||
error:
|
||||
#ifdef _WIN32
|
||||
if (adapter_addresses)
|
||||
free(adapter_addresses);
|
||||
#else
|
||||
freeifaddrs(ifaddr);
|
||||
net_ifinfo_free(list);
|
||||
#endif
|
||||
|
@ -110,7 +110,7 @@
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>winmm.lib;Dinput8.lib;dxguid.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>winmm.lib;Dinput8.lib;dxguid.lib;Iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>$(CG_LIB_PATH)</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
@ -130,7 +130,7 @@
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>winmm.lib;Dinput8.lib;dxguid.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>winmm.lib;Dinput8.lib;dxguid.lib;Iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>$(CG_LIB64_PATH)</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
@ -155,7 +155,7 @@
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalDependencies>winmm.lib;Dinput8.lib;dxguid.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>winmm.lib;Dinput8.lib;dxguid.lib;Iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>$(CG_LIB_PATH)</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
@ -180,7 +180,7 @@
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalDependencies>winmm.lib;Dinput8.lib;dxguid.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>winmm.lib;Dinput8.lib;dxguid.lib;Iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>$(CG_LIB64_PATH)</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
@ -194,4 +194,4 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
</Project>
|
Loading…
x
Reference in New Issue
Block a user