mirror of
https://github.com/solemnwarning/ipxwrapper
synced 2024-12-30 16:45:37 +01:00
Merge remote-tracking branch 'origin/master' into llc-support
This commit is contained in:
commit
1304e84d54
10
Makefile
10
Makefile
@ -32,8 +32,8 @@ endif
|
|||||||
|
|
||||||
INCLUDE := -I./include/
|
INCLUDE := -I./include/
|
||||||
|
|
||||||
CFLAGS := -std=c99 -Wall -D_WIN32_WINNT=0x0500 -DHAVE_REMOTE $(DBG_OPT) $(INCLUDE)
|
CFLAGS := -std=c99 -mno-ms-bitfields -Wall -D_WIN32_WINNT=0x0500 -DHAVE_REMOTE $(DBG_OPT) $(INCLUDE)
|
||||||
CXXFLAGS := -std=c++0x -Wall -DHAVE_REMOTE $(DBG_OPT) $(INCLUDE)
|
CXXFLAGS := -std=c++0x -mno-ms-bitfields -Wall -DHAVE_REMOTE $(DBG_OPT) $(INCLUDE)
|
||||||
|
|
||||||
# Used by mkdeps.pl
|
# Used by mkdeps.pl
|
||||||
#
|
#
|
||||||
@ -104,13 +104,13 @@ Makefile.dep: src/*.c src/*.cpp
|
|||||||
|
|
||||||
ipxwrapper.dll: $(IPXWRAPPER_DEPS)
|
ipxwrapper.dll: $(IPXWRAPPER_DEPS)
|
||||||
echo 'const char *version_string = "$(VERSION)", *compile_time = "'`date`'";' | $(CC) -c -x c -o version.o -
|
echo 'const char *version_string = "$(VERSION)", *compile_time = "'`date`'";' | $(CC) -c -x c -o version.o -
|
||||||
$(CC) $(CFLAGS) -Wl,--enable-stdcall-fixup -shared -o ipxwrapper.dll $(IPXWRAPPER_DEPS) version.o -liphlpapi -lversion -lole32 -loleaut32
|
$(CC) $(CFLAGS) -Wl,--enable-stdcall-fixup -static-libgcc -shared -o ipxwrapper.dll $(IPXWRAPPER_DEPS) version.o -liphlpapi -lversion -lole32 -loleaut32
|
||||||
|
|
||||||
ipxconfig.exe: src/ipxconfig.cpp icons/ipxconfig.o src/addr.o src/interface.o src/common.o src/config.o src/wpcap_stubs.o
|
ipxconfig.exe: src/ipxconfig.cpp icons/ipxconfig.o src/addr.o src/interface.o src/common.o src/config.o src/wpcap_stubs.o
|
||||||
$(CXX) $(CXXFLAGS) -Wl,--enable-stdcall-fixup -static-libgcc -static-libstdc++ -D_WIN32_IE=0x0500 -mwindows -o ipxconfig.exe $^ -liphlpapi -lcomctl32 -lws2_32
|
$(CXX) $(CXXFLAGS) -Wl,--enable-stdcall-fixup -static-libgcc -static-libstdc++ -D_WIN32_IE=0x0500 -mwindows -o ipxconfig.exe $^ -liphlpapi -lcomctl32 -lws2_32
|
||||||
|
|
||||||
dpwsockx.dll: src/directplay.o src/log.o src/dpwsockx_stubs.o src/common.o src/config.o src/addr.o src/dpwsockx.def
|
dpwsockx.dll: src/directplay.o src/log.o src/dpwsockx_stubs.o src/common.o src/config.o src/addr.o src/dpwsockx.def
|
||||||
$(CC) $(CFLAGS) -Wl,--enable-stdcall-fixup -shared -o $@ $^ -lwsock32
|
$(CC) $(CFLAGS) -Wl,--enable-stdcall-fixup -static-libgcc -shared -o $@ $^ -lwsock32
|
||||||
|
|
||||||
src/ipxwrapper_stubs.s: src/ipxwrapper_stubs.txt
|
src/ipxwrapper_stubs.s: src/ipxwrapper_stubs.txt
|
||||||
perl mkstubs.pl src/ipxwrapper_stubs.txt src/ipxwrapper_stubs.s 0
|
perl mkstubs.pl src/ipxwrapper_stubs.txt src/ipxwrapper_stubs.s 0
|
||||||
@ -131,7 +131,7 @@ icons/%.o: icons/%.rc icons/%.ico
|
|||||||
$(WINDRES) $< -O coff -o $@
|
$(WINDRES) $< -O coff -o $@
|
||||||
|
|
||||||
%.dll: src/stubdll.o src/%_stubs.o src/log.o src/common.o src/config.o src/addr.o src/%.def
|
%.dll: src/stubdll.o src/%_stubs.o src/log.o src/common.o src/config.o src/addr.o src/%.def
|
||||||
$(CC) $(CFLAGS) -Wl,--enable-stdcall-fixup -shared -o $@ $^
|
$(CC) $(CFLAGS) -Wl,--enable-stdcall-fixup -static-libgcc -shared -o $@ $^
|
||||||
|
|
||||||
src/%_stubs.o: src/%_stubs.s
|
src/%_stubs.o: src/%_stubs.s
|
||||||
nasm -f win32 -o $@ $<
|
nasm -f win32 -o $@ $<
|
||||||
|
@ -722,15 +722,25 @@ HRESULT WINAPI SPInit(LPSPINITDATA data) {
|
|||||||
return DPERR_UNAVAILABLE;
|
return DPERR_UNAVAILABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL WINAPI DllMain(HINSTANCE me, DWORD why, LPVOID res) {
|
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
|
||||||
if(why == DLL_PROCESS_ATTACH)
|
if(fdwReason == DLL_PROCESS_ATTACH)
|
||||||
{
|
{
|
||||||
log_open("ipxwrapper.log");
|
log_open("ipxwrapper.log");
|
||||||
|
|
||||||
min_log_level = get_main_config().log_level;
|
min_log_level = get_main_config().log_level;
|
||||||
}
|
}
|
||||||
else if(why == DLL_PROCESS_DETACH)
|
else if(fdwReason == DLL_PROCESS_DETACH)
|
||||||
{
|
{
|
||||||
|
/* When the "lpvReserved" parameter is non-NULL, the process is terminating rather
|
||||||
|
* than the DLL being unloaded dynamically and any threads will have been terminated
|
||||||
|
* at unknown points, meaning any global data may be in an inconsistent state and we
|
||||||
|
* cannot (safely) clean up. MSDN states we should do nothing.
|
||||||
|
*/
|
||||||
|
if(lpvReserved != NULL)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
unload_dlls();
|
unload_dlls();
|
||||||
log_close();
|
log_close();
|
||||||
}
|
}
|
||||||
|
@ -706,7 +706,8 @@ int ipx_interface_count(void)
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define PCAP_NAME_PREFIX "rpcap://\\Device\\NPF_"
|
#define PCAP_NAME_PREFIX_OLD "rpcap://\\Device\\NPF_"
|
||||||
|
#define PCAP_NAME_PREFIX_NEW "rpcap://"
|
||||||
|
|
||||||
ipx_pcap_interface_t *ipx_get_pcap_interfaces(void)
|
ipx_pcap_interface_t *ipx_get_pcap_interfaces(void)
|
||||||
{
|
{
|
||||||
@ -726,10 +727,23 @@ ipx_pcap_interface_t *ipx_get_pcap_interfaces(void)
|
|||||||
|
|
||||||
for(pcap_if_t *pcap_if = pcap_interfaces; pcap_if; pcap_if = pcap_if->next)
|
for(pcap_if_t *pcap_if = pcap_interfaces; pcap_if; pcap_if = pcap_if->next)
|
||||||
{
|
{
|
||||||
if(strncmp(pcap_if->name, PCAP_NAME_PREFIX, strlen(PCAP_NAME_PREFIX)) == 0)
|
const char *ifname = NULL;
|
||||||
|
|
||||||
|
if(strncmp(pcap_if->name, PCAP_NAME_PREFIX_OLD, strlen(PCAP_NAME_PREFIX_OLD)) == 0)
|
||||||
|
{
|
||||||
|
ifname = pcap_if->name + strlen(PCAP_NAME_PREFIX_OLD);
|
||||||
|
}
|
||||||
|
else if(strncmp(pcap_if->name, PCAP_NAME_PREFIX_NEW, strlen(PCAP_NAME_PREFIX_NEW)) == 0)
|
||||||
|
{
|
||||||
|
ifname = pcap_if->name + strlen(PCAP_NAME_PREFIX_NEW);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
log_printf(LOG_WARNING, "WinPcap interface with unexpected name format: '%s'", pcap_if->name);
|
||||||
|
log_printf(LOG_WARNING, "This interface will not be available for IPX use");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ifname != NULL)
|
||||||
{
|
{
|
||||||
char *ifname = pcap_if->name + strlen(PCAP_NAME_PREFIX);
|
|
||||||
|
|
||||||
IP_ADAPTER_INFO *ip_if = ip_interfaces;
|
IP_ADAPTER_INFO *ip_if = ip_interfaces;
|
||||||
while(ip_if && strcmp(ip_if->AdapterName, ifname))
|
while(ip_if && strcmp(ip_if->AdapterName, ifname))
|
||||||
{
|
{
|
||||||
@ -769,10 +783,6 @@ ipx_pcap_interface_t *ipx_get_pcap_interfaces(void)
|
|||||||
log_printf(LOG_WARNING, "This interface will not be available for IPX use");
|
log_printf(LOG_WARNING, "This interface will not be available for IPX use");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{
|
|
||||||
log_printf(LOG_WARNING, "WinPcap interface with unexpected name format: '%s'", pcap_if->name);
|
|
||||||
log_printf(LOG_WARNING, "This interface will not be available for IPX use");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pcap_freealldevs(pcap_interfaces);
|
pcap_freealldevs(pcap_interfaces);
|
||||||
|
@ -59,9 +59,9 @@ static void init_cs(CRITICAL_SECTION *cs)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL WINAPI DllMain(HINSTANCE me, DWORD why, LPVOID res)
|
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
|
||||||
{
|
{
|
||||||
if(why == DLL_PROCESS_ATTACH)
|
if(fdwReason == DLL_PROCESS_ATTACH)
|
||||||
{
|
{
|
||||||
log_open("ipxwrapper.log");
|
log_open("ipxwrapper.log");
|
||||||
|
|
||||||
@ -105,8 +105,18 @@ BOOL WINAPI DllMain(HINSTANCE me, DWORD why, LPVOID res)
|
|||||||
|
|
||||||
router_init();
|
router_init();
|
||||||
}
|
}
|
||||||
else if(why == DLL_PROCESS_DETACH)
|
else if(fdwReason == DLL_PROCESS_DETACH)
|
||||||
{
|
{
|
||||||
|
/* When the "lpvReserved" parameter is non-NULL, the process is terminating rather
|
||||||
|
* than the DLL being unloaded dynamically and any threads will have been terminated
|
||||||
|
* at unknown points, meaning any global data may be in an inconsistent state and we
|
||||||
|
* cannot (safely) clean up. MSDN states we should do nothing.
|
||||||
|
*/
|
||||||
|
if(lpvReserved != NULL)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
router_cleanup();
|
router_cleanup();
|
||||||
|
|
||||||
WSACleanup();
|
WSACleanup();
|
||||||
|
@ -22,15 +22,25 @@
|
|||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
BOOL WINAPI DllMain(HINSTANCE me, DWORD why, LPVOID res) {
|
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
|
||||||
if(why == DLL_PROCESS_ATTACH)
|
if(fdwReason == DLL_PROCESS_ATTACH)
|
||||||
{
|
{
|
||||||
log_open("ipxwrapper.log");
|
log_open("ipxwrapper.log");
|
||||||
|
|
||||||
min_log_level = get_main_config().log_level;
|
min_log_level = get_main_config().log_level;
|
||||||
}
|
}
|
||||||
else if(why == DLL_PROCESS_DETACH)
|
else if(fdwReason == DLL_PROCESS_DETACH)
|
||||||
{
|
{
|
||||||
|
/* When the "lpvReserved" parameter is non-NULL, the process is terminating rather
|
||||||
|
* than the DLL being unloaded dynamically and any threads will have been terminated
|
||||||
|
* at unknown points, meaning any global data may be in an inconsistent state and we
|
||||||
|
* cannot (safely) clean up. MSDN states we should do nothing.
|
||||||
|
*/
|
||||||
|
if(lpvReserved != NULL)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
unload_dlls();
|
unload_dlls();
|
||||||
log_close();
|
log_close();
|
||||||
}
|
}
|
||||||
|
@ -88,7 +88,9 @@ describe "A single DirectPlay client" => sub
|
|||||||
{
|
{
|
||||||
my ($host, $client) = $single_client_common_init->();
|
my ($host, $client) = $single_client_common_init->();
|
||||||
|
|
||||||
my $host_player = $host->create_player("host");
|
my $host_player = $host->create_player("host");
|
||||||
|
sleep(PROP_TIME);
|
||||||
|
|
||||||
my %client_players = $client->list_players();
|
my %client_players = $client->list_players();
|
||||||
|
|
||||||
cmp_deeply(\%client_players, {
|
cmp_deeply(\%client_players, {
|
||||||
@ -101,7 +103,9 @@ describe "A single DirectPlay client" => sub
|
|||||||
my ($host, $client) = $single_client_common_init->();
|
my ($host, $client) = $single_client_common_init->();
|
||||||
|
|
||||||
my $client_player = $client->create_player("client");
|
my $client_player = $client->create_player("client");
|
||||||
my %host_players = $host->list_players();
|
sleep(PROP_TIME);
|
||||||
|
|
||||||
|
my %host_players = $host->list_players();
|
||||||
|
|
||||||
cmp_deeply(\%host_players, {
|
cmp_deeply(\%host_players, {
|
||||||
$client_player => "client",
|
$client_player => "client",
|
||||||
@ -114,6 +118,7 @@ describe "A single DirectPlay client" => sub
|
|||||||
|
|
||||||
my $host_player = $host->create_player("host");
|
my $host_player = $host->create_player("host");
|
||||||
my $client_player = $client->create_player("client");
|
my $client_player = $client->create_player("client");
|
||||||
|
sleep(PROP_TIME);
|
||||||
|
|
||||||
$host->send_message($host_player, $client_player, "foreordainment");
|
$host->send_message($host_player, $client_player, "foreordainment");
|
||||||
|
|
||||||
@ -142,6 +147,7 @@ describe "A single DirectPlay client" => sub
|
|||||||
|
|
||||||
my $host_player = $host->create_player("host");
|
my $host_player = $host->create_player("host");
|
||||||
my $client_player = $client->create_player("client");
|
my $client_player = $client->create_player("client");
|
||||||
|
sleep(PROP_TIME);
|
||||||
|
|
||||||
$client->send_message($client_player, $host_player, "iskenderun");
|
$client->send_message($client_player, $host_player, "iskenderun");
|
||||||
|
|
||||||
@ -250,6 +256,7 @@ describe "Concurrent DirectPlay clients" => sub
|
|||||||
my $host_player = $host->create_player("host");
|
my $host_player = $host->create_player("host");
|
||||||
my $ca_player = $client_a->create_player("client_a");
|
my $ca_player = $client_a->create_player("client_a");
|
||||||
my $cb_player = $client_b->create_player("client_b");
|
my $cb_player = $client_b->create_player("client_b");
|
||||||
|
sleep(PROP_TIME);
|
||||||
|
|
||||||
$host->send_message($host_player, $ca_player, "myrmecophilous");
|
$host->send_message($host_player, $ca_player, "myrmecophilous");
|
||||||
$host->send_message($host_player, $cb_player, "indigestibly");
|
$host->send_message($host_player, $cb_player, "indigestibly");
|
||||||
@ -289,10 +296,9 @@ describe "Concurrent DirectPlay clients" => sub
|
|||||||
my $host_player = $host->create_player("host");
|
my $host_player = $host->create_player("host");
|
||||||
my $ca_player = $client_a->create_player("client_a");
|
my $ca_player = $client_a->create_player("client_a");
|
||||||
my $cb_player = $client_b->create_player("client_b");
|
my $cb_player = $client_b->create_player("client_b");
|
||||||
|
|
||||||
$client_a->send_message($ca_player, $host_player, "unvivid");
|
|
||||||
sleep(PROP_TIME);
|
sleep(PROP_TIME);
|
||||||
|
|
||||||
|
$client_a->send_message($ca_player, $host_player, "unvivid");
|
||||||
$client_b->send_message($cb_player, $host_player, "matrilateral");
|
$client_b->send_message($cb_player, $host_player, "matrilateral");
|
||||||
sleep(PROP_TIME);
|
sleep(PROP_TIME);
|
||||||
|
|
||||||
@ -328,6 +334,7 @@ describe "Concurrent DirectPlay clients" => sub
|
|||||||
my $host_player = $host->create_player("host");
|
my $host_player = $host->create_player("host");
|
||||||
my $ca_player = $client_a->create_player("client_a");
|
my $ca_player = $client_a->create_player("client_a");
|
||||||
my $cb_player = $client_b->create_player("client_b");
|
my $cb_player = $client_b->create_player("client_b");
|
||||||
|
sleep(PROP_TIME);
|
||||||
|
|
||||||
$client_a->send_message($ca_player, $cb_player, "postpuberty");
|
$client_a->send_message($ca_player, $cb_player, "postpuberty");
|
||||||
$client_b->send_message($cb_player, $ca_player, "veridic");
|
$client_b->send_message($cb_player, $ca_player, "veridic");
|
||||||
@ -367,10 +374,9 @@ describe "Concurrent DirectPlay clients" => sub
|
|||||||
my $host_player = $host->create_player("host");
|
my $host_player = $host->create_player("host");
|
||||||
my $ca_player = $client_a->create_player("client_a");
|
my $ca_player = $client_a->create_player("client_a");
|
||||||
my $cb_player = $client_b->create_player("client_b");
|
my $cb_player = $client_b->create_player("client_b");
|
||||||
|
|
||||||
$client_a->send_message($ca_player, DPID_ALLPLAYERS, "kendrew");
|
|
||||||
sleep(PROP_TIME);
|
sleep(PROP_TIME);
|
||||||
|
|
||||||
|
$client_a->send_message($ca_player, DPID_ALLPLAYERS, "kendrew");
|
||||||
$client_b->send_message($cb_player, DPID_ALLPLAYERS, "derivation");
|
$client_b->send_message($cb_player, DPID_ALLPLAYERS, "derivation");
|
||||||
sleep(PROP_TIME);
|
sleep(PROP_TIME);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user