Commit Graph

381 Commits

Author SHA1 Message Date
Cthulhu-throwaway 54f06c55f5
(Netplay) More removal of older unused code (#14314) 2022-08-12 01:36:55 +02:00
Cthulhu-throwaway 908667d97a
(Netplay) Removal of older unused code (#14312) 2022-08-11 23:17:33 +02:00
Cthulhu-throwaway c030e1c5dc
(Netplay) Support for customizing chat colors (#14305) 2022-08-08 20:09:06 +02:00
Cthulhu-throwaway 3aa1811ca9
(Network) Add getnameinfo_retro (#14278) 2022-08-04 13:22:49 +02:00
Cthulhu-throwaway 8105688a99
(Netplay) Show client slowdown information (#14272) 2022-08-02 13:31:55 +02:00
Cthulhu-throwaway 20c4407928
Add HAVE_IFINFO macro (#14265) 2022-08-01 07:51:02 +02:00
Cthulhu-throwaway 9b10579a54
(Network) Fix getaddrinfo_retro (#14261) 2022-07-31 11:22:28 +02:00
Cthulhu-throwaway 83ac65d855
(Vita) Silence warnings (#14226) 2022-07-26 09:03:23 -07:00
Cthulhu-throwaway 29f0ba2e71
(Network/Vita) Add net_ifinfo support (#14225) 2022-07-26 16:10:23 +01:00
Cthulhu-throwaway acfe990ec6
(Netplay/Vita) Enable partial LAN discovery (#14222) 2022-07-26 12:16:53 +02:00
Cthulhu-throwaway e083c46d6e
(Netplay/Vita) Change default port (#14223) 2022-07-26 12:15:42 +02:00
Cthulhu-throwaway cc7c310aa1
(Netplay) Refactor fork arguments (#14208) 2022-07-24 04:26:50 +02:00
Cthulhu-throwaway eb36c35ebf
(Netplay) Fix content reload deadlocks on static core platforms #2 (#14202) 2022-07-23 03:08:26 +02:00
Cthulhu-throwaway ee9cb6cb1b
(Netplay) Fix NAT traversal announce for HAVE_SOCKET_LEGACY platforms (#14191) 2022-07-21 01:30:38 +02:00
libretroadmin 62fd667f41 (netplay_frontend.c) Remove unused variable 2022-07-19 10:35:38 +02:00
libretroadmin 0a12062e1c Remove unnecessary content_crc in bsv_movie_init_playback 2022-07-17 04:26:49 +02:00
Cthulhu-throwaway af71dcb893
(Netplay) Memory leak fix (#14154) 2022-07-07 21:14:38 +02:00
Cthulhu-throwaway a87e95ad8f
(Netplay) Fix input for some cores when hosting (#14153) 2022-07-07 20:59:12 +02:00
Cthulhu-throwaway c6e0e7e198
(Netplay) Support for banning clients (#14146) 2022-07-07 13:40:38 +02:00
Cthulhu-throwaway 0b2be028ca
(Netplay) Fix client info devices index (#14142) 2022-07-04 04:00:55 +02:00
Cthulhu-throwaway b55fa28896
(Netplay/Menu) Localize relay servers (#14136) 2022-07-03 13:45:13 +02:00
Cthulhu-throwaway 42f75e7f72
(Netplay/Menu) Add client devices info to the kick sub-menu (#14138) 2022-07-03 13:44:46 +02:00
Cthulhu-throwaway 58fc77850c
(Netplay/Lobby) Hide older (incompatible) rooms (#14118) 2022-07-01 01:01:24 +02:00
barbudreadmon e9d67f2bbe
savestates: implement an api call for context awareness (#14101) 2022-06-30 10:45:59 +02:00
Cthulhu-throwaway a5ebfc442a
(Netplay) Disallow clients from loading states and resetting (#14114) 2022-06-30 09:48:51 +02:00
Cthulhu-throwaway 6aa16442db
(Network/Wii) Enable net_ifinfo for some features (#14106) 2022-06-26 16:37:05 +02:00
Cthulhu-throwaway a7dc57f68f
(Network) Move the addr_6to4 function to a proper place (#14100) 2022-06-25 09:18:32 +02:00
Cthulhu-throwaway 8c6c399a01
(Network) Move the HAVE_INET6 macro to a proper place (#14096) 2022-06-25 00:54:39 +01:00
Cthulhu-throwaway 2a0fce77d3
(Wii) Silence some warnings (#14092) 2022-06-23 14:46:53 +02:00
libretroadmin e954a69708 Truncation is intentional - see if using the return value and storing it
in a local var can work around the warning
2022-06-19 19:20:19 +02:00
libretroadmin a06f3b98ce For Griffin builds it is important this define does not get redefined
Note to Cthulhu: We should probably put this in a header file somewhere
2022-06-19 18:43:25 +02:00
libretroadmin 01eab0fba5 (3DS/CTR) Take out HAVE_SOCKET_LEGACY for 3DS as per Cthulhu recommendation
and instead put in the extra conditional for natt.c and netplay_frontend.c
2022-06-19 18:32:26 +02:00
libretroadmin e0c7e78e27 netplay_frontend.c - show_chat() - prevent warning 'format truncation' -
snprintf output between 3 and 129 bytes into a destination of size 96
2022-06-19 18:19:47 +02:00
libretroadmin f0e340fd23 (3DS/CTR) Now that 3DS/CTR defines HAVE_SOCKET_LEGACY, we don't need
this conditional anymore
2022-06-19 17:57:50 +02:00
Cthulhu-throwaway dabd9cb996
(Netplay/LAN Discovery) Task refactor (#14070) 2022-06-19 03:41:04 +02:00
Cthulhu-throwaway e6e5e46be3 (Netplay) Buildfix for some "dumber" compilers 2022-06-18 12:10:01 -03:00
Cthulhu-throwaway 7e798d04ba (Netplay) Some refactoring and fixes 2022-06-17 18:00:48 -03:00
Cthulhu-throwaway 43ad2b64b2 (Network) Replace socket_select calls 2022-06-12 02:13:34 -03:00
LibretroAdmin 9ea46f34fb
Merge pull request #13997 from Cthulhu-throwaway/lan-discovery-ipv4-tunneling
(Netplay/LAN Discovery) Support for IPv4 tunneling (6to4)
2022-06-02 08:43:24 +01:00
Cthulhu-throwaway bcc31be6da (Netplay/LAN Discovery) Support for IPv4 tunneling (6to4) 2022-06-01 06:34:43 -03:00
LibretroAdmin a92a37e3f4
Merge pull request #13996 from Cthulhu-throwaway/netplay-cleanup-2
(Netplay) Some cleaning
2022-06-01 10:00:09 +01:00
Cthulhu-throwaway 9fab981317 (Netplay) Some cleaning 2022-06-01 04:31:33 -03:00
radius 109cd28a6f fix previous PR 2022-06-01 01:00:28 -05:00
Andrés cf2ecf506c
Fix lan rooms on android
This simple change makes lan discovery work on android again.
The is_lan_address function was meant to filter out duplicate rooms only anyway and this change shouldn't harm anything

The responses on android are seen as IPv6 mapped IPv4 addresses so this is needed for this to work anyway

I/RetroArch: [Discovery] Responnse received on LAN interface ::ffff:192.168.1.241.
I/RetroArch: [Netplay]: Connecting to ::ffff:192.168.1.241|55435 (deferred)
2022-05-31 22:39:10 -05:00
Cthulhu-throwaway 8f7b5a1050 (Networking) Define isinprogress function 2022-05-31 05:07:23 -03:00
Cthulhu-throwaway 17b7b1322e (Netplay) Some cleaning 2022-05-30 22:02:24 -03:00
Cthulhu-throwaway de30f212bc (Netplay) Enforce a timeout during connection 2022-05-30 05:23:39 -03:00
Cthulhu-throwaway e4f8b531d5 (Netplay) Some refactoring and cleaning 2022-05-27 17:21:34 -03:00
Cthulhu-throwaway 82c9773e0d (Netplay) Chat supported info for the host kick submenu 2022-05-15 19:38:44 -03:00
Cthulhu-throwaway cb2d6b3d8e (Netplay) Free client_info when it's no longer in use 2022-05-14 12:06:57 -03:00
twinaphex a577d7d224 (netplay_frontend) Small style nits/cleanups 2022-05-14 04:34:11 +02:00
Cthulhu-throwaway 6d96df0e49 (Netplay) Support for gathering client info and kicking
Client info and kicking (by the host) is now implemented through netplay_driver_ctl and can be used by future features.
2022-05-13 22:42:08 -03:00
Cthulhu-throwaway f29256bb0d (Netplay) More cleaning and organization 2022-05-13 10:22:55 -03:00
Cthulhu-throwaway 99e517d2a9 (Netplay) Fixes and cleanup
(Netplay) Buildfix and warnings
2022-05-12 14:26:53 -03:00
Cthulhu-throwaway 796bc15837
C89 buildfix (#13923)
* C89 buildfix

* More buildfixes
2022-05-10 07:37:33 +02:00
Cthulhu-throwaway b57a1b0c72
(Netplay) Fix possible deadlock (#13919) 2022-05-07 00:40:46 +02:00
Cthulhu-throwaway 9a3b8f4a0a
(Netplay) Disable netplay for unsupported cores (#13916)
With stateless mode being disabled for now, there is no reason not to include this.

Refuse to initialize netplay when the current core is not supported (no proper savestates support).
2022-05-06 04:31:37 +02:00
Cthulhu-throwaway 0a52964015
(Netplay) Disable and hide stateless mode (#13915)
Stateless mode is nonfunctional at the moment, despite my attempts to get it working.
A significant amount of work is required to get it working.

For now, force-disable stateless mode and hide it from menus and the CLI's help text.
2022-05-05 20:46:48 +02:00
Cthulhu-throwaway 4674241bf9
(Networking) Move macro to its correct place (#13904) 2022-04-30 03:39:10 +02:00
Cthulhu-throwaway 7c3dfa5e3a
(Netplay/LAN Discovery) Ensure fixed width ints on packet struct (#13901) 2022-04-29 20:26:34 +02:00
Cthulhu-throwaway a268ffe6ce
(Netplay) Replace sscanf with safer strtol and strtoul (#13897) 2022-04-28 14:14:00 +02:00
Cthulhu-throwaway 669af1d9c6
(Netplay) Initialize client's allow_pausing to true (#13873) 2022-04-22 15:37:11 +02:00
Alexander Trufanov 7f0cf651f1
Fix gamecrc parsing (#13872) 2022-04-22 14:31:37 +02:00
Mats 4a1a1e2fa7
(steam) Introduce Steam Rich Presence (#13798) 2022-04-02 08:07:40 +01:00
Autechre 4c3a4d66df
Cxx buildfixes (#13803)
* CXX_BUILD buildfixes
* (D3D11) Buildfixes for CXX_BUILD
* (Linux/qb) Disable KMS for Linux when building for C89, headers use inline which is not
available for C89
2022-03-30 17:30:20 +02:00
twinaphex a7569b5712 More CXX_BUILD buildfixes 2022-03-30 15:45:48 +02:00
Vladimir Serbinenko 4a53c6771c
Several fixes and improvements do NGC and Wii (#13698)
* Support new elf2dol path in Makefile.griffin

* Fix NULL pointer dereference when no core info is available

* Fix double include of different versions of libogc

* Move ngc and wii to Makefile.common

Resulting binary is 60K *smaller*. This is surprising but probably due to
less inlining happening

* gx_gfx: Fix hang on gfx initialization

* Remove sthread_isself on NGC/Wii

It relies on pthread_equal that is not there for either legacy pthreads
or normal pthreads on those platforms

* Wii networking

* Missing includes in split

* Network fixes

* Fix logging of non-format string as a format

* Support for gx netlogger

* Network fix

* Network fixes

* Network info

* gx: Move config files to app directory

Otherwise it clashes between wiiU and vWii version with unpredictable
effects
2022-03-04 13:43:00 +01:00
Cthulhu-throwaway b0928cd0f8
[Netplay] Disable savestates on stateless mode (#13634)
Stateless mode is currently not working correctly and still using savestates.
2022-02-18 17:08:18 +01:00
Cthulhu-throwaway cd74221d33
[Networking] GetBestRoute refactor (#13553)
Refactor to support UWP.
2022-01-27 11:38:31 +01:00
Cthulhu-throwaway b71be7efd2
(Netplay/LAN Discovery) Disable GetBestRoute for UWP (#13518) 2022-01-20 14:52:11 +01:00
Cthulhu-throwaway 0c0d19e3f1 (Netplay) Fix dummy notification
No longer shows a netplay initialization failed notification when netplay is not enabled.
2022-01-13 01:49:51 +01:00
Cthulhu-throwaway 4dda10b86d
(Netplay) Disable netplay on init failure (#13479)
* (Netplay) Disable netplay on init failure

Make sure netplay is disabled and properly deinitialized after an initialization failure.

* missing comma
2022-01-11 13:50:09 +01:00
Cthulhu-throwaway 4cf1bcf70f
(Netplay/UPnP) Delay lobby server announcing (#13473)
Delay the announcing in order to give UPnP's port forwarding more time.

Fix the remaining truncation warnings.
2022-01-11 08:48:59 +01:00
twinaphex 18dae9ce73 remove unused variables 2021-12-27 19:57:32 +01:00
Autechre 68713b46b0
Revert "Netplay clean-up (#13421)" (#13422)
This reverts commit 5efd2a64a4.
2021-12-26 16:54:19 +01:00
Cthulhu-throwaway 5efd2a64a4
Netplay clean-up (#13421) 2021-12-26 16:30:38 +01:00
Cthulhu-throwaway 9579810579
Build fix for --disable-menu (#13419) 2021-12-26 15:18:57 +01:00
Cthulhu-throwaway 26132a2330
Netplay and NAT struct improvements (#13416)
Reordered netplay and NAT structs to follow the coding guidelines more closely.

Moved part of the chat struct out of the program's image and into the heap.
2021-12-25 13:42:22 +01:00
Cthulhu-throwaway 9e208198f2
Endianness fix for netplay_is_lan_address (#13413) 2021-12-25 04:07:55 +01:00
Cthulhu-throwaway 98bed89d6f
Netplay custom relay server to use default port (#13411)
Allow the custom server to use the default port if a port was not provided.
2021-12-25 02:30:33 +01:00
Cthulhu-throwaway 6a100272a8
Netplay spectator notification fix (#13409)
Fix double notification when the host switches to spectator.
2021-12-24 16:42:16 +01:00
Cthulhu-throwaway 736ab4c964
MSVC 2005 build fix (#13408) 2021-12-24 14:58:18 +01:00
Cthulhu-throwaway b67b93ebfe
Enable GetBestRoute for MSVC 2005 (#13407) 2021-12-24 14:15:20 +01:00
Cthulhu-throwaway ec97c86756
Attempt to fix UPnP for some Windows devices (#13402)
Yet another attempt at it.
2021-12-23 23:52:01 +01:00
Cthulhu-throwaway c6369b7861
MSVC 2005 Build Fix (#13401) 2021-12-23 22:08:13 +01:00
Cthulhu-throwaway c4049b9597
NAT and netplay Fixes (#13400)
* NAT and netplay Fixes

Fix a crash when announcing your room to the internet without being in a tunnel.

Fix improper interface for UPnP for some Windows devices.

* Final edits
2021-12-23 21:28:30 +01:00
Cthulhu-throwaway c752f9b0de
Custom relay server support (#13395)
* Custom relay server support

Add support for custom user-ran relay servers.

* snprintf NULL fix
2021-12-23 13:54:52 +01:00
Cthulhu-throwaway eff6f41a38
Netplay protocol macro (#13391)
Wrap protocol checks inside of a guard macro.
2021-12-22 03:05:35 +01:00
Jamiras 3d84a9960e
(cheevos) check netplay status when unlocking achievements (#13379)
* check netplay status when unlocking achievements instead of permanently disabling them in spectate mode

* fix c89 build

* add RARCH_NETPLAY_CTL_IS_SPECTATING
2021-12-21 15:58:42 +01:00
Cthulhu-throwaway 966335e367
Smaller Netplay Changes (#13387)
Lobby Viewer: Filter out rooms that are not running RetroArch
Lobby Viewer: Display a non-connectable tag to non-connectable rooms.
Host: Display warning if we are announcing to the internet but our room isn't connectable from there.
2021-12-21 15:58:25 +01:00
Cthulhu-throwaway 568a30380b Buildfix for some platforms
Buildfix for some platforms that do not have HAVE_TRANSLATE defined aswell as platforms that define sockaddr_storage as sockaddr/sockaddr_in.
2021-12-20 14:26:50 +01:00
Cthulhu-throwaway cda66d09c3
Netplay Stuff - Addendum (#13378)
Prevents long-term pausing from clients dishonoring allow pausing.

Missing crediting.
2021-12-19 20:43:59 +01:00
Cthulhu-throwaway 690c802921
Netplay Stuff (#13375)
* Netplay Stuff

## PROTOCOL FALLBACK
In order to support older clients a protocol fallback system was introduced.
The host will no longer send its header automatically after a TCP connection is established, instead, it awaits for the client to send his before determining which protocol this connection is going to operate on.
Netplay has now two protocols, a low protocol and a high protocol; the low protocol is the minimum protocol it supports, while the high protocol is the highest protocol it can operate on.
To fully support older clients, a hack was necessary: sending the high protocol in the unused client's header salt field, while keeping the protocol field to the low protocol. Without this hack we would only be able to support older clients if a newer client was the host.
Any future system can make use of this system by checking connection->netplay_protocol, which is available for both the client and host.

## NETPLAY CHAT
Starting with protocol 6, netplay chat is available through the new NETPLAY_CMD_PLAYER_CHAT command.
Limitations of the command code, which causes a disconnection on unknown commands, makes this system not possible on protocol 5.
Protocol 5 connections can neither send nor receive chat, but other netplay operations are unaffected.
Clients send chat as a string to the server, and it's the server's sole responsability to relay chat messages.
As of now, sending chat uses RetroArch's input menu, while the display of on-screen chat uses a widget overlay and RetroArch's notifications as a fallback.
If a new overlay and/or input system is desired, no backwards compatibility changes need to be made.
Only clients in playing mode (as opposed to spectating mode) can send and receive chat.

## SETTINGS SHARING
Some settings are better used when both host and clients share the same configuration.
As of protocol 6, the following settings will be shared from host to clients (without altering a client's configuration file): input latency frames and allow pausing.

## NETPLAY TUNNEL/MITM
With the current MITM system being defunct (at least as of 1.9.X), a new system was in order to solve most if not all of the problems with the current system.
This new system uses a tunneling approach, which is similar to most VPN and tunneling services around.

Tunnel commands:
RATS[unique id] (RetroArch Tunnel Session) - 16 bytes -> When this command is sent with a zeroed unique id, the tunnel server interprets this as a netplay host wanting to create a new session, in this case, the same command is returned to the host, but now with its unique session id. When a client needs to connect to a host, this command is sent with the unique session id of the host, causing the tunnel server to send a RATL command to the host.
RATL[unique id] (RetroArch Tunnel Link) - 16 bytes -> The tunnel server sends this command to the host when a client wants to connect to the host. Once the host receives this command, it establishes a new connection to the tunnel server, sending this command together with the client's unique id through this new connection, causing the tunnel server to link this connection to the connection of the client.
RATP (RetroArch Tunnel Ping) - 4 bytes -> The tunnel server sends this command to verify that the host, whom the session belongs to, is still around. The host replies with the same command. A session is closed if the tunnel server can not verify that the host is alive.

Operations:
Host -> Instead of listening and accepting connections, it connects to the tunnel server, requests a new session and then monitor this connection for new linking requests. Once a request is received, it establishes a new connection to the tunnel server for linking with a client. The tunnel server's address and port are obtained by querying the lobby server. The host will publish its session id together with the rest of its info to the lobby server.
Client -> It connects to the tunnel server and then sends the session id of the host it wants to connect to. A host's session id is obtained from the json data sent by the lobby server.

Improvements (from current MITM system):
No longer a risk of TCP port exhaustion; we only use one port now at the tunnel server.
Very little cpu usage. About 95% net I/O bound now.
Future backwards compatible with any and all changes to netplay as it no longer runs any netplay logic at MITM servers.
No longer operates the host in client mode, which was a source of many of the current problems.
Cleaner and more maintainable system and code.

Notable functions:
netplay_mitm_query -> Grabs the tunnel's address and port from the lobby server.
init_tcp_socket -> Handles the creation and operation mode of the TCP socket based on whether it's host, host+MITM or client.
handle_mitm_connection -> Creates and completes linking connections and replies to ping commands (only 1 of each per call to not affect performance).

## MISC
Ping Limiter: If a client's estimated latency to the server is higher than this value, connection will be dropped just before finishing the netplay handshake.
Ping Counter: A ping counter (similar to the FPS one) can be shown in the bottom right corner of the screen, if you are connected to a host.
LAN Discovery: Refactored and moved to its own "Refresh Netplay LAN List" button.

## FIXES
Many minor fixes to the current netplay implementation are also included.

* Remove NETPLAY_TEST_BUILD
2021-12-19 16:58:01 +01:00
Autechre 3b1a1ac8da
Remove miniupnpc dependency (#13340)
* use custom libretro-common UPNP

* Remove miniupnpc
2021-12-09 05:52:42 +01:00
Autechre fbbe351f7d
UPnP cleanups and refactorings (#13325) 2021-12-04 21:16:34 +01:00
Autechre a44f5bbf78
Fix UPNP port mapping failed error - switch to a permanent lease time, (#13324)
but request it to be removed when we do netplay_free
2021-12-04 15:45:29 +01:00
Autechre b6695d8921
Netplay changes proposed for 1.9.14 (#13314)
* Added setting to allow/disallow players other than the host from pausing the game.
* Added a sublabel for netplay max connections.
* Fixed port override macro from not being set immediately after the port setting.
* Fixed memory leaks.
2021-12-04 02:34:21 +01:00
Jamiras b6fef13109
disallow achievement when spectating netplay (#13318) 2021-12-04 02:00:53 +01:00
twinaphex 680b631ad6 Revert "(Netplay) Cthulhu88 - Remove forced disconnection on unknown netplay command -"
This reverts commit 65a421d90f.
2021-11-12 19:08:34 +01:00
twinaphex a6ed23d031 Revert "(cthulhu88) Add netplay chat command"
This reverts commit 6a490c0383.
2021-11-12 19:01:31 +01:00