1
0
mirror of https://github.com/solemnwarning/ipxwrapper synced 2024-12-30 16:45:37 +01:00

297 Commits

Author SHA1 Message Date
Daniel Collins
493bc9358b Properly handle IPX socket descriptors used in select() writefds.
If any IPX sockets are passed to select() in the writefds set, substitute them
for the private UDP socket before calling the real select(), if it remains in
writefds upon return, remove it and restore the previously removed IPX sockets.

In short: Allow detecting when an IPX socket is ready to send.
2016-02-13 23:53:30 +00:00
Daniel Collins
d7c9e10349 Implement quick 'n dirty script to generate charts from benchmarks 2015-12-15 22:54:57 +00:00
Daniel Collins
67acb100a3 Implement crude benchmarking tools
These tools can be used to measure RTT, packet loss, and sendto()/recv() call
duration on one end with a specified minimum delay between sendto() calls to
emulate some different loads.
2015-12-15 22:22:06 +00:00
Daniel Collins
1e8f89f655 Add DirectPlay test suite code to source manifest.
Missed in previous commit.
2015-12-02 00:07:26 +00:00
Daniel Collins
e5085ba1d9 Implemented basic DirectPlay test suite. 2015-11-26 00:10:49 +00:00
Daniel Collins
91c39a769f Update readme/changelog. 2015-08-23 19:36:31 +01:00
Daniel Collins
0e3713f26f DirectPlay: Increase API_HEADER_SIZE.
We don't need any memory reserved for writing out packet headers, but
DirectPlay seems to corrupt itself internally and do funky things if this goes
below a certain threshold. Value taken from the DX5 service provider.
2015-08-21 22:58:55 +01:00
Daniel Collins
c6b505fee9 DirectPlay: Move initialisation of discovery socket.
Initialise the discovery socket when SP_CreatePlayer() is called with the
CREATEPLAYER_NS flag and do nothing in SP_Open, as per the DX5 implementation.

This will correctly handle the name server moving between nodes in a session.
2015-08-21 22:58:55 +01:00
Daniel Collins
dbfdae63d2 DirectPlay: Move initialisation/destruction of main socket.
Initialise the socket when SP_Open or SP_EnumSessions is called and close it
when SP_CloseEx is called, per the DX5 implementation.
2015-08-21 22:58:55 +01:00
Daniel Collins
8ded8da35a DirectPlay: Refactor worker loop.
Hold the lock while reading to ensure the socket isn't closed during the
recvfrom() call, allow either socket to be closed and close either socket if
the recvfrom() call fails.
2015-08-21 22:58:55 +01:00
Daniel Collins
a89948c2f9 DirectPlay: Remove addr field from sp_data structure.
Resolve the address of the main socket at each use rather than holding a copy
in the sp_data structure, one less thing to become desync'd.
2015-08-21 22:58:51 +01:00
Daniel Collins
95e492f653 DirectPlay: Remove already-initialised check in SPInit()
I have no idea why I implemented this check in the first place, the Microsoft
implementation doesn't do it and I think it might cause problems.
2015-08-21 22:36:13 +01:00
Daniel Collins
a0b4abd53e DirectPlay: Initialise sp_data on stack.
SetSPData() takes a copy of the given data, so there is no need to allocate it
on the heap ourselves.
2015-08-21 22:35:03 +01:00
Daniel Collins
59a9f090d5 DirectPlay: Improve SP_Reply() diagnostics 2015-08-21 22:32:02 +01:00
Daniel Collins
384542defe DirectPlay: Store addresses in shared player data.
When there are more than two players in a session (including the host), the
message that triggers SP_CreatePlayer() may not be from the host that actually
has that player on it, copy the behaviour of the DX5 SP and make each player be
responsible for sharing their own address via the shared data.
2015-08-21 22:32:02 +01:00
Daniel Collins
a108ae80b5 DirectPlay: Remove SP_SendEx() and clean up SP_Send()
Implementing this method isn't mandatory and the Microsoft implementation
doesn't provide it. It doesn't appear to get used either, so ditching it to
reduce the number of things that can go wrong.

WIP: SP_Send cleanup
2015-08-21 22:09:10 +01:00
Daniel Collins
d582e27e3e Added missing initialisations of ipx_socket.addr.sa_family.
Field not used internally, but returned by getsockname() which can lead to
whatever we're wrapping trying to use an invalid family later.
2015-07-11 17:00:10 +01:00
Daniel Collins
3b99400f4a Updated changelog and readme 2014-10-11 20:23:37 +01:00
Daniel Collins
bc02824a8e Updated source manifest. 2014-10-04 18:46:56 +01:00
Daniel Collins
a808c52d3a Wrote some notes for developers. 2014-10-04 18:22:03 +01:00
Daniel Collins
5ff0855485 Replace test suite.
Dump most of the old "unit" tests which were more system tests and only tested
a small amount of functionality against the host.

The new test suite is a lot more thorough and tests an arbitrary Windows version
over the network rather than testing within the host's WinSock environment.

More documentation detailing how to run this will follow.
2014-10-04 14:46:11 +01:00
Daniel Collins
dcd484702e Build with newer toolchain.
Various fixups to build under win-builds.org toolchain rather than MinGW. No
longer builds under MinGW as I have removed headers/definitions that it lacks.
2014-06-26 13:22:10 +01:00
Daniel Collins
d9a82081da Fix use of sockets in address cache. 2014-06-19 19:42:09 +01:00
Daniel Collins
043ce1495e Refactor address conflict detection.
Detect multiple sockets bound to the same address within a session by creating
a named mutex. Multiple handles to a mutex may exist and closing the last one
destroys it.
2014-06-19 19:42:09 +01:00
Daniel Collins
3c13aab8e5 Accept IPX packets with a destination network of 00:00:00:00.
Unless configured otherwise, the Windows IPX driver defaults to misusing this on
the wire until it sees a packet with a different network number, at which point
it switches to using that until reboot.
2014-05-29 23:35:25 +01:00
Daniel Collins
098cb76ff4 Fix dropping of broadcast packets in some situations.
...by which I mean make it drop the packets depending on the socket options of
the receiving socket.
2014-05-29 23:32:24 +01:00
Daniel Collins
4694ce8850 Use correct WinPcap timeout value.
A timeout of zero is infinite, so was blocking for traffic on interfaces that
didn't have any in the router main loop.
2014-04-20 17:26:23 +01:00
Daniel Collins
ecda2ba0a4 Fix testing of source address in UDP-encapsulated unicast packets. 2014-04-20 17:26:23 +01:00
Daniel Collins
79d41c0001 Don't open unnecessary UDP sockets when using Ethernet encapsulation.
Don't need the shared UDP socket at all and the private is only used for sending
packets to the local emulated sockets.
2014-04-20 17:24:51 +01:00
Daniel Collins
5d9a3cb143 Allocate the UDP socket recv buffer on the stack.
Default (per-thread) stack limit on Windows is 1MB, this buffer may shrink in
the future but will never grow.
2014-04-20 14:05:21 +01:00
Daniel Collins
7c19414c37 Use appropriate MTU for packet size limits. 2014-04-18 14:45:11 +01:00
Daniel Collins
c69aac3586 Don't allow creating SPX sockets when using Ethernet encapsulation. 2014-04-18 14:45:09 +01:00
Daniel Collins
4fd24354a5 Refactored ipxconfig, allow enabling Ethernet encapsulation. 2014-04-18 14:45:09 +01:00
Daniel Collins
35d853ae54 Implemented support for receiving real (Ethernet II) IPX frames. 2014-04-18 14:45:07 +01:00
Daniel Collins
41637269fb Refactored IPX packet delivery. 2014-04-18 14:45:06 +01:00
Daniel Collins
ab62a68187 Implemented support for sending real (Ethernet II) IPX frames. 2014-04-18 14:44:59 +01:00
Daniel Collins
4cf1ec88aa Implemented support for loading interfaces from WinPcap. 2014-04-18 00:31:59 +01:00
Daniel Collins
3974a2337c Added stub calls for WinPcap. 2014-04-14 23:19:36 +01:00
Daniel Collins
fdc1204426 Updated changelog. 2014-03-11 21:44:19 +00:00
Daniel Collins
fa8d0479ea Updated readme. 2014-01-26 14:27:40 +00:00
Daniel Collins
377c208af9 Fix and extend SPX connect tests. 2014-01-26 00:10:42 +00:00
Daniel Collins
e5315890fd Use GetTickCount64() for connect timeouts where available. 2014-01-25 23:34:33 +00:00
Daniel Collins
b5a92e00ad Updated changelog. 2014-01-25 23:17:15 +00:00
Daniel Collins
880024b8c8 Added workarounds for Jane's Combat Simulations: WWWII Fighters 2014-01-25 23:16:47 +00:00
Daniel Collins
85edba72c4 Add extra debug output in setsockopt and closesocket. 2014-01-25 23:14:46 +00:00
Daniel Collins
3be40b6e63 Bodge asynchronous connects to almost work as they should. 2014-01-25 23:14:46 +00:00
Daniel Collins
a930a972df Log entry and target of stub calls. 2014-01-25 23:14:29 +00:00
Daniel Collins
7c83726b14 Refactored EnumProtocols and added SPX protocols. 2014-01-25 23:12:48 +00:00
Daniel Collins
09aacc71f9 Wrote unit tests for connecting to SPX sockets. 2014-01-25 22:32:28 +00:00
Daniel Collins
390f83ddc0 Wrote unit tests for sending/receiving IPX packets. 2014-01-25 22:32:28 +00:00