Commit Graph

877 Commits

Author SHA1 Message Date
twinaphex f481924f1e (Menu) Update menu code 2018-04-11 03:04:58 +02:00
twinaphex ff9aebedca Some more Clang warning fixes 2018-04-09 17:48:11 +02:00
twinaphex 8e7b1ede7f Silence Clang warnings 2018-04-09 17:35:27 +02:00
Twinaphex 08a54e45f2 Get rid of a lot of implicit conversions 2018-04-09 15:56:45 +02:00
Gregor Richards 06b402bc14 Fix a bug in remembering device availability for netplay
Really silly bug had netplay forgetting to unset device availability
when a client goes to spectator mode. As a consequence, in certain
configurations, later joins would automatically choose the wrong device,
and you'd have to manually specify a device to get the right one. This
fixes that.
2018-03-21 19:24:58 -04:00
radius c52fdc469f remove task_push_http_transfer_raw, encode before sending data to the task 2018-03-16 22:38:21 -05:00
Gregor Richards a39bff6e03 Remove an incorrect double-check
Netplay sync incorrectly checked whether the replay pointer was behind
the unread pointer twice, when in the second check it should only have
been checking if it was behind the current execution pointer. Because of
how resimulation works with device sharing, I THINK this could affect
sync. Even if it can't, it's wrong.
2018-03-03 23:03:35 -05:00
Gregor Richards 8cf4127695 Fix bug in string length in strlcpy. 2018-02-16 19:31:00 -05:00
aliaspider 5549b136c2 (msvc) CXX_BUILD + griffin fixes. 2018-02-05 00:25:03 +01:00
Twinaphex 5483f5fc39
Merge pull request #6234 from aliaspider/master
various fixes for CXX_BUILD.
2018-02-04 20:08:43 +01:00
aliaspider 700fce3bd2 various fixes for CXX_BUILD. 2018-02-04 20:03:27 +01:00
Brad Parker 6fc0cc4645 send selected MITM server to the lobby 2018-02-02 15:48:45 -05:00
Brad Parker df27e704a5 add menu option to select different MITM server locations 2018-02-02 15:37:02 -05:00
Twinaphex 8bc1d9965d Fix unused variables/etc. 2018-01-23 07:29:04 +01:00
twinaphex 54726aa668 Remove snprintf_p for now 2018-01-23 06:10:21 +01:00
twinaphex 6437e4b4a9 remove tons of unreferenced local variables 2018-01-23 05:49:03 +01:00
Twinaphex 4a6a97be60
Merge pull request #5429 from GregorR/netplay-input-upgrades-1
Netplay input upgrades 1
2018-01-23 05:01:45 +01:00
twinaphex a80fb7c969 Add some safeguards here 2018-01-22 21:48:28 +01:00
twinaphex 61ff51be2f Start using string_is_equal predominantly 2018-01-16 22:53:38 +01:00
Gregor Richards 84baf5db1f Wrong branch index! 2018-01-05 14:27:02 -05:00
Gregor Richards 73bd969ac9 Fixes for slave mode with multiple input devices 2018-01-05 14:27:02 -05:00
Gregor Richards 984f763d75 Only do our careful resimulation with joypads 2018-01-05 14:27:02 -05:00
Gregor Richards 50de28b1a1 Netplay keyboard hack for keydown/keyup support
An unfortunate hack for cores that translate the keyboard input device
into keydown/keyup events without saving that in the savestate. We
simply replay the previous frame's input before loading the rewound
frame's state, to assure that both the state and the keyup/down state
are correct.

Ideally, cores would save this as part of the state, but it's a bit
proximal and a fairly significant change for those that use it, so it's
easier to fix in netplay.
2018-01-05 14:27:02 -05:00
Gregor Richards a96eb24247 Support for keyboards over netplay. 2018-01-05 14:27:02 -05:00
Gregor Richards c01a199493 Netplay input device abstraction, support for mice
This abstracts away the details of particular input devices for netplay,
and adds support for mice and (similar) lightguns. Unfortunately, in
practice, no core handles mice or lightguns in a savestate-safe way, so
they need to be used in stateless mode to be reliable, but they do work.
2018-01-05 14:27:02 -05:00
Gregor Richards ab669a2db8 Fix a bug that could segfault with fast dis/reconnection. 2018-01-05 14:27:02 -05:00
Gregor Richards 8d5a79fc69 Removing long-obsolete now-disfunctional "netplay flip players" feature 2018-01-05 14:27:02 -05:00
Gregor Richards c2923f5504 Netplay message for input devices not available. 2018-01-05 14:26:19 -05:00
Gregor Richards fff95facc7 New netplay failure messages. 2018-01-05 14:26:19 -05:00
Gregor Richards e4ad16fc1b Document MODE change in netplay README 2018-01-05 14:26:19 -05:00
Gregor Richards dc9ee8c6bc Don't 0-index device numbers! 2018-01-05 14:26:19 -05:00
Gregor Richards f7dba84c67 Netplay mode change improvements
(1) All mode change code unified, so server mode changes and client mode
changes and announcements go through the same functions

(2) New messages which are translateable and work with multiple input
devices
2018-01-05 14:26:19 -05:00
Gregor Richards 2104ac44d9 Fixed server mode changes. 2018-01-05 14:24:43 -05:00
Gregor Richards 6eaaaef995 Minor bugfixes in input resolution. 2018-01-05 14:24:43 -05:00
Gregor Richards 2794031d12 Improved reemulation to not replay unread frames if they haven't changed. 2018-01-05 14:24:43 -05:00
Gregor Richards 74901e6161 Whoops, missed one refactor rename. 2018-01-05 14:24:43 -05:00
Gregor Richards 6946ea1bd3 Netplay support for multiple local devices. 2018-01-05 14:24:43 -05:00
Gregor Richards 95bbd914f1 Fixed >2-player issues with multi-input. 2018-01-05 14:24:43 -05:00
Gregor Richards ed320fd914 Adding and removing players
The new input handling makes adding and removing players more
complicated, since data can be present that's not expected from the
connected clients list, or absent that's expected in the list but
actually shouldn't be there.
2018-01-05 14:24:43 -05:00
Gregor Richards 39243a8d40 Configurable sharing mode. 2018-01-05 14:24:43 -05:00
Gregor Richards abf045ef0e Made device requests (badly) configurable. 2018-01-05 14:24:43 -05:00
Gregor Richards 7af7616d3d New initial connection header and support for inter-version connections. 2018-01-05 14:24:43 -05:00
Gregor Richards fe80c4ce2c Added real pad sharing modes. 2018-01-05 14:24:43 -05:00
Gregor Richards e4029b72c1 Rename things back after renaming for refactoring. 2018-01-05 14:24:42 -05:00
Gregor Richards b897ba4e30 Re-fixed input simulation. 2018-01-05 14:24:42 -05:00
Gregor Richards 8c551f3990 Fixing some counters. 2018-01-05 14:24:42 -05:00
Gregor Richards d1ca90e136 Get rid of this FIXME. 2018-01-05 14:24:42 -05:00
Gregor Richards ed69916e59 First cut of input changes (not yet working) 2018-01-05 14:24:42 -05:00
Gregor Richards 6d4119690d First step (not yet compiling) of changing around Netplay input. 2018-01-05 14:24:42 -05:00
radius 7bdd8e945a show the frontend name and CPU architecture on netplay rooms 2017-12-17 11:51:50 -05:00
gblues 6904101c44 Clean up trailing whitespace
== DETAILS

Really simple code cleanup, because my editor flags trailing whitespaces
and it's pretty annoying.
2017-12-12 00:24:18 -08:00
Alcaro 485ad9f6f7
add missing %s 2017-11-27 17:15:21 +01:00
Alcaro 0f695f074f
#5802
aren't most of the memdesc fields size_t aka uintptr_t rather than uint64_t? whatever, good enough
2017-11-27 17:07:31 +01:00
twinaphex 311b786279 Silence Coverity warning 2017-11-27 04:34:45 +01:00
twinaphex 493d442f8c Silence some warnings 2017-11-26 22:43:58 +01:00
radius 3991f9b316 add frontend name to netplay announce 2017-11-26 13:40:08 -05:00
twinaphex 9875bbbd7d Silence some Coverity warnings 2017-11-26 01:06:48 +01:00
radius e10aee3f1d get a proper error 2017-11-19 21:04:58 -05:00
radius 34934b169c silence coverity warning 2017-11-19 17:34:15 -05:00
radius b32a69889e console buildfix 2017-11-19 16:21:26 -05:00
radius 8dfc585c59 fix another leak 2017-11-19 13:07:51 -05:00
radius c5dfa314ad fix leak 2017-11-19 12:43:13 -05:00
radius 11611acbe4 use correct size here 2017-11-19 09:43:51 -05:00
radius 9b673152f7 fix C89 errors 2017-11-19 09:41:36 -05:00
radius 149469515f Fix lan rooms
Squashed commit of the following:

commit 6e1fea3b16bb330ed2862eb00d2e911221c48a34
Author: radius <andres.430@gmail.com>
Date:   Sat Nov 18 22:16:02 2017 -0500

    use the baked in address instead of sockaddr

commit 84f2d389fd6352b3037f48c18d133d2f1063d461
Author: radius <andres.430@gmail.com>
Date:   Sat Nov 18 22:05:57 2017 -0500

    send replies

commit c6733009cc5a25e58391c5fc693b277ea27404b3
Author: radius <andres.430@gmail.com>
Date:   Sat Nov 18 21:53:12 2017 -0500

    send replies

commit a6816c9481f7ea89a3c97597233e54c6354716e7
Author: radius <andres.430@gmail.com>
Date:   Sat Nov 18 21:46:55 2017 -0500

    send replies

commit c2453b73ccafbd53192507affbc11d5f279c2e7c
Author: radius <andres.430@gmail.com>
Date:   Sat Nov 18 21:26:34 2017 -0500

    look for common interfaces

commit fb42e6470242689f5e6160149ef91f0f0abf068d
Author: radius <andres.430@gmail.com>
Date:   Sat Nov 18 20:06:50 2017 -0500

    send broadcasts in all interfaces

commit b7730596df9775fb815007689e9c7cc06b317b03
Author: radius <andres.430@gmail.com>
Date:   Sat Nov 18 20:00:17 2017 -0500

    send broadcasts in all interfaces

commit b620a78052d1b95e81d346f3e5efb233e0547793
Author: radius <andres.430@gmail.com>
Date:   Sat Nov 18 14:30:31 2017 -0500

    add more logging

commit c016c7d559cd631172a58f99cd3e1a1365965b8e
Author: radius <andres.430@gmail.com>
Date:   Sat Nov 18 14:12:03 2017 -0500

    update log messages

commit 0a49ba61f56f2ca483fa76c7a04f0709c68b95ad
Author: radius <andres.430@gmail.com>
Date:   Sat Nov 18 13:50:47 2017 -0500

    fix lan room listing for rooms > 1, allow connecting in arbitrary ports
2017-11-18 22:43:47 -05:00
Brad Parker bbf6f2f451 fix "may be used uninitialized in this function" warning 2017-10-28 16:01:29 -04:00
Alcaro b97853a536 Rename STRING_REP_ULONG to STRING_REP_USIZE 2017-10-02 22:51:51 +02:00
twinaphex 1e37aab49b Cleanup 2017-09-30 16:59:14 +02:00
Brad Parker 0a1b3fedc0 VC6 support (targets NT 3.51) 2017-09-06 23:03:02 -04:00
twinaphex e16371b8a5 Merge input_config.c and input_driver.c 2017-08-31 02:25:04 +02:00
Gregor Richards 584e12ed37 Fix disconnection not fully deinitializing Netplay. 2017-08-18 14:13:39 -04:00
twinaphex e56250c84f C89_BUILD fix 2017-08-17 01:41:30 +02:00
radius 6804432fa7 log address family, fix inet_ntop_compat 2017-08-15 21:03:59 -05:00
Brad Parker c072894a93 netplay: show country next to lobby nickname 2017-07-29 02:24:11 +00:00
radius 84e0251a86 add retroarch version to lan announcement 2017-07-24 21:13:28 -05:00
radius 32525ea0d3 rename MITM with Relay 2017-07-24 20:54:33 -05:00
radius f7f613a244 android buildfix 2017-07-24 20:13:53 -05:00
radius e09075dc25 Add RetroArch version and use different icons for different room types 2017-07-24 20:13:52 -05:00
radius 6804540635 improve logging 2017-07-24 20:13:52 -05:00
radius dcd71b403f add RetroArch version to the netplay announcement 2017-07-24 06:14:34 +02:00
twinaphex b11620e1eb Add retro_timers.h/retro_math.h 2017-06-28 04:41:38 +02:00
Twinaphex e2be9e659d Silence some warnings 2017-06-08 02:44:38 +02:00
Gregor Richards fb3c35dc9f Handle forwarding of netplay state demotions correctly.
Netplay state demotions, i.e. changes from playing to spectating or
disconnected states, could cause chain disconnections of all other
clients. This was due to a bug in when MODE change messages were sent.
Clients rely on the server sending all messages in its own order, and as
a consequence, the server typically holds messages for retransmission
until they can be retransmitted at the correct time. MODE messages were
not held, so could be sent early. When they were sent early, this caused
other clients to panic and disconnect.

A smaller but much stupider secondary bug was also fixed, in which the
first connection could be dropped due simply to writing connections[0]
instead of connections[i] somewhere.
2017-06-06 21:35:09 -04:00
twinaphex 449483206f Revert "New attempt to fix memory leaks of struct retro_system_info"
This reverts commit a1d3dd69dd.
2017-05-30 01:44:49 +02:00
twinaphex a1d3dd69dd New attempt to fix memory leaks of struct retro_system_info
char variables
2017-05-29 22:24:10 +02:00
twinaphex d2bc5e0454 Fix more ASAN errors 2017-05-29 02:21:56 +02:00
twinaphex d8f1cf7b5a Style nits 2017-05-28 18:03:11 +02:00
twinaphex 57273a545f Be more careful here 2017-05-28 18:00:47 +02:00
aliaspider b49d2a87ab getaddrinfo error codes can also be positive. 2017-05-28 12:46:39 +01:00
aliaspider 934f7c58ba (WiiU) enable networking. 2017-05-23 10:24:23 +01:00
Gregor Richards 2681352d53 Make sure we flush a netplay pause message, so it isn't forgotten. 2017-05-22 16:27:22 -04:00
Andrés abd6dcd57f Merge pull request #4952 from fr500/fixes
fix delimiter for mitm connect
2017-05-21 12:13:02 -05:00
radius a09a1030c0 fix delimiter for mitm connect 2017-05-21 12:04:50 -05:00
twinaphex aeddb18e31 Rewrite netplay checks 2017-05-21 14:18:10 +02:00
twinaphex 0bb1de9561 Cleanups 2017-05-21 09:16:45 +02:00
twinaphex f51aa6e4ec Add TODO/FIXME note 2017-05-17 09:10:58 +02:00
twinaphex 0aeb683444 Style nits/cleanups 2017-05-16 20:33:14 +02:00
twinaphex 944eff06b8 Cleanup 2017-05-16 20:25:54 +02:00
twinaphex 2562391167 Split up runloop message queue code from netplay_log_connection 2017-05-16 20:24:08 +02:00
twinaphex eb409328ec Style nits 2017-05-16 20:15:57 +02:00
radius 1de95c6413 further refinement of the netplay workflow 2017-05-16 00:18:29 -05:00
twinaphex 61a4e94649 Use string_is_equal_fast 2017-05-16 04:04:21 +02:00
Twinaphex c035f9597a Merge pull request #4921 from fr500/master
NETPLAY menu improvements
2017-05-16 03:00:19 +02:00
radius c783dbff28 remove some more code duplication, lan rooms now show up correctly on left-right 2017-05-15 19:45:23 -05:00
radius a98033f375 make the --start netplay host-- entry context sensitive 2017-05-15 18:58:46 -05:00
twinaphex bf3188eac4 Combine runloop_ctl and rarch_ctl 2017-05-15 05:06:23 +02:00
twinaphex e2c7671e9f Create rarch_menu_running/rarch_menu_running_finished 2017-05-15 04:31:40 +02:00
twinaphex 42ebe7a7ad Merge runloop.c and retroarch.c 2017-05-11 09:11:46 +02:00
Andre Leiradella 78efeb6ae2 Fix griffin and HTTP server builds 2017-05-07 19:52:22 +01:00
twinaphex de80671658 Simplify content_get_crc 2017-05-06 16:41:22 +02:00
twinaphex 33f2fe8029 Move cheevos.c to tasks/task_cheevos.c and add TODO/FIXME note 2017-05-06 05:50:46 +02:00
Jean-André Santoni a2542590ef Fix the truncated game name in LAN rooms 2017-04-29 23:41:02 +02:00
twinaphex e6ab06a701 Move path variables 2017-04-29 00:39:29 +02:00
twinaphex 05e4ec733e Move uint variables 2017-04-28 21:03:04 +02:00
twinaphex 7bbd20b31d Move int settings 2017-04-28 19:12:48 +02:00
twinaphex ed53be7c81 Move all bool settings 2017-04-28 14:11:34 +02:00
twinaphex e1e83b17b7 Wrap settings->input.libretro_device 2017-04-25 17:14:46 +02:00
twinaphex 3ec5816259 Rewrite RUNLOOP_CTL_SYSTEM_INFO_GET 2017-04-23 16:41:26 +02:00
twinaphex aea00f1e00 Use memcmp instead of string_is_equal for more instances 2017-04-23 12:17:51 +02:00
Gregor Richards fbb508ab5e Make rewind compatible with netplay.
This commit adds support for temporary desync in netplay. When frontend
features that can't be truly synced, in particular rewind, are used,
netplay is momentarily disabled. As soon as the feature finished, e.g. a
rewind ending, netplay resumes with a state load. For rewind, netplay
peers won't actually experience the effect of rewind, but they will load
the rewound state.
2017-04-18 15:25:58 -04:00
Brad Parker c12cc8e5be netplay: change lobby reannounce period to 600 frames 2017-03-07 12:29:51 -05:00
Brad Parker bb362f307d netplay: don't advertise over LAN or try to open a port with UPnP if we're using a MITM server 2017-03-06 21:39:03 -05:00
bparker06 ced1dc10c1 Merge pull request #4732 from GregorR/netplay-server-spectator-fix-2-electric-boogaloo
Yet another server-is-spectator bug. Don't ever ignore stalls if we're a client
2017-03-06 21:25:18 -05:00
Brad Parker 4f02450bf9 forgot extra storage for NULL byte 2017-03-06 21:10:27 -05:00
Gregor Richards 2f21a3e370 Yet another server-is-spectator bug. Don't ever ignore stalls if we're a
client
2017-03-06 20:13:26 -05:00
Brad Parker d9c78c75f0 fix setting of netplay has_password in lobby announcement 2017-03-06 16:01:45 -05:00
Twinaphex 4b796ae740 Silence warnings 2017-03-06 12:12:00 +01:00
Brad Parker 6a68a01eb9 msvc2005 buildfix 2017-03-05 22:02:55 -05:00
Brad Parker 12a208f75e merge reannounce bugfix from radius 2017-03-05 15:49:07 -05:00
Twinaphex c343a88c10 Silence unused variable warnings 2017-03-05 20:30:14 +01:00
Brad Parker c6b1a4bb48 join MITM server when host starts game, if the announcement requested MITM 2017-03-05 14:19:39 -05:00
Brad Parker bf553fe65c netplay: connect to MITM server instead of host IP if one is specified in lobby listing 2017-03-05 14:19:38 -05:00
Brad Parker 8a01dda5d6 send force MITM setting with lobby announcement 2017-03-05 14:19:38 -05:00
Brad Parker c7c0e1351a send CRC as hex string 2017-03-05 14:19:37 -05:00
Brad Parker 4f2cdf3a84 populate system info before reading it 2017-03-05 14:19:36 -05:00
Brad Parker ad6733b519 add full urlencoder and encode lobby announcement POST data 2017-03-05 14:19:36 -05:00
Brad Parker 9c19f16539 remove debug stuff 2017-03-05 14:19:36 -05:00
Brad Parker 0d81b2005f parse new lobby room listing with JSON 2017-03-05 14:19:35 -05:00
Brad Parker c31823aa94 add HTTP POST support 2017-03-05 14:19:34 -05:00
twinaphex c99d83f15c Update 2017-03-05 20:14:01 +01:00
Brad Parker 96650e14ea break early if server frame count is ahead of NOINPUT 2017-02-28 21:46:57 -05:00
Brad Parker fea8a0f780 Don't stall for spectator data when we're not in spectator mode, thanks @GregorR 2017-02-28 11:31:59 -05:00
twinaphex 05b760d0f8 Fix C89_BUILD/CXX_BUILD 2017-02-28 09:52:33 +01:00
twinaphex 5bf5388759 Cleanups 2017-02-28 09:44:44 +01:00
Twinaphex 59f5c596d6 Merge pull request #4707 from fr500/master
LAN scanning into rooms
2017-02-28 05:47:49 +01:00
radius 0c456c2235 comment this out for now 2017-02-27 23:47:04 -05:00
Gregor Richards 8fb1f6a647 Support empty INFO packet for undifferentiated servers. 2017-02-27 22:06:20 -05:00
radius e50ea80dfa integrate the rest of the lan scan parameters 2017-02-27 21:24:34 -05:00
Twinaphex fdbdcfee65 Merge pull request #4691 from GregorR/netplay-slave-mode
Netplay slave mode
2017-02-26 21:49:21 +01:00
Twinaphex b7b3b2cb5f Try to prevent truckload of warnings on iOS 2017-02-26 10:33:03 +01:00
Gregor Richards 07cfd90dc6 Actually USE the new slave options in config. 2017-02-23 21:49:22 -05:00
Gregor Richards 3ff9a43b7d Spectator and slave mode are rewind-free
This commit makes spectator mode and slave mode in netplay always stay
ahead of the input, thereby avoiding rewinds, which is sort of the
point. This also changes catch-up detection to be a bit less eager, so
that they hopefully don't flap between stalling for server input and
catching up with that input.
2017-02-23 19:05:43 -05:00
Gregor Richards e495671563 In spectator mode, we should never be ahead of our peer. 2017-02-22 23:19:22 -05:00
Gregor Richards 3e0bc5acdc Don't flush so eagerly... 2017-02-22 23:19:02 -05:00
Gregor Richards d1ab288d73 Fix update_unread_ptr to handle the case of only slaves connected 2017-02-22 21:10:02 -05:00
Gregor Richards e70ee045bf Initial implementation of Netplay master/slave mode. 2017-02-22 20:34:17 -05:00
Gregor Richards 972b41f803 Fix race condition in NAT traversal task. 2017-02-20 20:16:53 -05:00
Gregor Richards 5f723d1bda Moving NAT traversal into a task to avoid blocking the UI. 2017-02-20 19:08:31 -05:00
Gregor Richards 816d7786ac Re-adding the option to start in spectator mode
This used to be a configuration option because spectator mode and "net"
mode were incompatible. When the ability to switch between player and
spectator was added, the configuration option was removed, since it was
no longer a mode toggle. This re-adds it, mainly so that I can use it to
implement regression tests.
2017-02-16 19:17:06 -05:00
Gregor Richards 4c1abfaa71 Support for reset in netplay
This patch transfers core_reset across netplay. Resets effectively
worked before thanks to check_frames, but this makes resets work even
without check_frames, and in particular should allow resets to force
sync in savestateless cores, bringing them one step closer to actually
being usable by non-experts.
2017-02-15 14:40:37 -05:00
Brad Parker 6d821132f5 msvc buildfix 2017-02-14 02:37:25 +00:00
Gregor Richards aa77d688ec Make announcing netplay on the public lobby optional. 2017-02-06 13:45:58 -05:00
twinaphex e3a1b1859d Fix ./configure --disable-rgui 2017-02-04 09:20:41 +01:00
Andre Leiradella 0c8ee93e3e Moved cheevos files to their own folder in preparation for the changes to support leaderboards 2017-02-03 10:03:57 +00:00
Gregor Richards 1148b8230c Fixes to stateless+input latency. 2017-02-01 22:54:03 -05:00
Gregor Richards 2ea3936d16 Renaming input_ptr/input_frame_count back to self_. 2017-02-01 22:54:03 -05:00
Gregor Richards 55157e934d input_latency_frames is now configurable and has a range 2017-02-01 22:54:03 -05:00
Gregor Richards 5f5a8dc6d7 CRC searching should really start from run_ptr, not input_ptr 2017-02-01 22:54:03 -05:00
Gregor Richards 561eb42c84 Don't enable input latency if we're not connected 2017-02-01 22:54:03 -05:00
Gregor Richards c4cb94db19 New approach to input latency 2017-02-01 22:54:03 -05:00
Twinaphex 2596de53ec Merge pull request #4523 from fr500/master
add support for no content cores
2017-01-29 04:51:50 +01:00
Gregor Richards 3d24e844a4 We're in client mode if either server OR direct_host is set 2017-01-28 22:39:17 -05:00
radius cfb882f4fc add support for no content cores 2017-01-28 22:12:34 -05:00
Gregor Richards 12e8deedb4 Only disable netplay in deinit_netplay if it was actually on 2017-01-25 22:08:05 -05:00
Gregor Richards 263470a66c Set netplay_enabled to false during deinit_netplay
This simply prevents the odd behavior of netplay automatically
restarting, or trying to restart, when you load a new game.
2017-01-25 21:23:55 -05:00
fr500 29a1d504d7 allow different server ports again 2017-01-25 17:48:43 -05:00
fr500 af14da93d5 fix whitespace 2017-01-25 17:43:56 -05:00
fr500 c097c2062e fix when port is 0 2017-01-25 17:43:17 -05:00
twinaphex 178d959cad Fix C89_BUILD 2017-01-22 21:24:57 +01:00
twinaphex 36b2c48cb5 Fix CXX_BUILD 2017-01-22 21:19:39 +01:00
Twinaphex 3ff158b907 Merge pull request #4436 from fr500/lobby
Basic lobby system (don't merge, just for tracking)
2017-01-22 21:08:43 +01:00
radius a0e6a24f38 use deferred netplay init 2017-01-22 13:07:30 -05:00
radius 33cc168eb9 allow connecting to lobby port instead of the port in settings 2017-01-22 12:29:29 -05:00
Gregor Richards addcbb896a Fixing an incompatibility between stateless mode and the password prompt
Previously, the host would time out waiting for the guest to enter a
password, as the timeout was not conditionalized on whether the guest
was actually playing. This fixes that.
2017-01-22 10:43:09 -05:00
twinaphex 96c8ca5a09 Header update #1 2017-01-22 13:40:32 +01:00
twinaphex 768ce0854c Make driver_set_nonblock_state a public function 2017-01-22 12:47:17 +01:00
Gregor Richards 8c304dfda7 Make the client send an INFO even if it's wrong
This simply gives the server a reason why the client disconnected,
rather than a generic, unexplained disconnection.
2017-01-21 13:18:31 -05:00
radius 0de43b954e can now connect when starting a game too 2017-01-20 16:04:10 -05:00
radius dcca2f8131 only announce if host 2017-01-20 14:33:57 -05:00
radius 8a1fb24fe9 update url 2017-01-19 23:21:22 -05:00
radius 930cde21a2 crc is announced now (for cores that don't have needs_fullpath set) 2017-01-19 21:43:46 -05:00
radius 3dd6c91493 start populating the list 2017-01-19 08:56:56 -05:00
radius 95a2da81e4 start adding ui elements to insert room list into 2017-01-18 22:46:48 -05:00
radius 72cdb390cb reannounce roughly every minute 2017-01-18 21:31:02 -05:00
radius ca2c2a8ce7 separate this 2017-01-18 21:12:01 -05:00
twinaphex 9a87bada55 Style nit 2017-01-17 19:05:33 +01:00
radius f2beb49fd8 Announce netplay games to lobby.libretro.com 2017-01-16 22:24:35 -05:00
Gregor Richards a0f236a83f Use autosave_lock and autosave_unlock during SRAM negotiation
The SRAM transfer in netplay handshake now uses autosave_lock and
autosave_unlock. Will possibly fix a hang/crash bug on Android with
netplay and autosave conflicting.
2017-01-15 18:10:24 -05:00
Gregor Richards e9e7878b5c netplay_buf should use O_NOSIGNAL to avoid SIGPIPE 2017-01-15 10:59:25 -05:00
twinaphex 80bc91477a Remove header include 2017-01-09 02:19:16 +01:00
Gregor Richards 20c0de352c Fix to the netplay_is_alive function when server isn't playing
Fixes a bug by which very strange things would happen if the server went
to spectator mode with exactly one connected client.
2017-01-02 20:03:00 -05:00
Gregor Richards ee55e2d783 LOAD_SAVESTATE can't use player frame timing from a server that's not playing 2017-01-02 18:56:08 -05:00
Gregor Richards cd281d5757 Reverse catch-up, i.e., server-demanded stalling
Previously, if two clients were connected to the same server and one of
them was ahead of the server, the only way to rectify that situation was
for the client to get so far ahead that it stalled, as the server could
only catch up with an ahead client if all clients were ahead. That's
unrealistic. This gives the server the alternate option of demanding
that a client stall. This keeps things nicely in line even with >2
players.
2016-12-24 15:25:03 -05:00
twinaphex 70a1a5f38e Buildfixes 2016-12-24 01:48:36 +01:00
twinaphex 64dc7daeca (MSVC) MSVC build fixes 2016-12-24 01:45:37 +01:00
twinaphex 77e5cdbfde Revert "Rename runloop_msg_queue_push to video_driver_msg_queue_push"
This reverts commit ad7386913c.
2016-12-22 23:36:11 +01:00
twinaphex ad7386913c Rename runloop_msg_queue_push to video_driver_msg_queue_push
and move code to video_driver.c
2016-12-22 13:15:02 +01:00
Gregor Richards 3df38fa40e Silence two compiler warnings 2016-12-21 10:13:31 -05:00
Gregor Richards f0bb0a77f8 Make netplay no longer cache passwords
Netplay now always loads passwords from the configuration, so that
passwords can be changed mid-session.
2016-12-21 09:51:50 -05:00
Gregor Richards c780e7db43 Accept the variable size quirk
Since the quirks protocol was that a core could report variable
savestate size, but the host then tells it "no", we should actually
accept the variable size quirk in netplay, since RetroArch refuses to
allow cores to actually produce variable-size states.
2016-12-20 22:17:15 -05:00
Gregor Richards 7bb26eb5c5 Fix some minor checked-return bugs
Should resolve Coverity reports 158862, 158861, 158860.

158863 is spurious but I have no idea how to convince Coverity of that.
2016-12-20 19:16:31 -05:00
Gregor Richards 8f35de9da0 Adding blocks in the empty-RECV case to (hopefully) suppress warnings 2016-12-19 17:31:24 -05:00
Twinaphex 1d36c5effa Silence warnings - remove unused variables 2016-12-19 23:19:59 +01:00
Alcaro fc1c83d8c0 Shut up false positive warning 2016-12-19 16:38:55 +01:00
Gregor Richards 11a3063fc6 Forgot the other half of that last bugfix 2016-12-18 20:08:21 -05:00
Gregor Richards 8f8e6dfc5f Unset the netplay callbacks when we deinit netplay
This is a bugfix to master that hadn't migrated to my branch.
2016-12-18 19:54:01 -05:00
Gregor Richards dcd4b3046b Making negative check_frames be "check only" mode 2016-12-18 19:28:44 -05:00
Gregor Richards 677ffa9ebd Support different forms of compression from different clients. 2016-12-18 19:28:44 -05:00
Gregor Richards 84c33634a6 Communicate paused-ness during initial connection SYNC. 2016-12-18 19:28:44 -05:00
Gregor Richards 60b81e3a51 Nominal support for server sending blank INFO 2016-12-18 19:28:44 -05:00
Gregor Richards e79f30604f Better stall timing
We now stall not until we've reached parity (which makes no sense since
we expect latency), but only until we're not likely to stall again.
2016-12-18 19:28:44 -05:00
Gregor Richards 8195a5bcee Try to catch up if we're falling behind our peer, not anyone
In the previous catch-up system, we would only try to catch up if we
were falling behind the farthest-behind peer. However, as they would
also only try to catch up to us, everyone basically agreed to the
worst-case latency. It makes more sense to try to be in parity with your
direct peer than with indirect connections.
2016-12-18 19:28:44 -05:00
Gregor Richards b535412914 Adding nick-changing
This is just to disambiguate multiple connections with the same nick
(usually Anonymous), which will now become e.g. Anonymous (2).
2016-12-18 19:28:44 -05:00
Gregor Richards 7c2f12fbd9 Removign some leftover debug code 2016-12-18 19:28:44 -05:00
Gregor Richards 04266cf4f7 Run synchronization even when stalled
Previously, we could be stalled by one player but still reading data
from another, which would wedge the client because we would never act
upon the newly-read data. Now we act upon data even if we're stalled.
Fixes bugs in initial connection with high latency.
2016-12-18 19:28:44 -05:00
Gregor Richards d6d96704fd Don't panic about delta frames not being ready if we're not even fully
connected yet.
2016-12-18 19:28:43 -05:00
Gregor Richards 8b21014d07 Improvements to handshake protocol
Making the netplay handshake protocol send the core and content as an
explicit command, so that the other side can (notionally) choose to load
it. That isn't implemented, of course.
2016-12-18 19:28:43 -05:00
Gregor Richards 1fa60b396f Improvements to the communication of netplay pausing. 2016-12-18 19:28:43 -05:00
Gregor Richards db2c8de44c Slightly changing how catch-up works to avoid spamming the console 2016-12-18 19:28:43 -05:00
Gregor Richards 1141825605 Documenting (somewhat) the new sync system. 2016-12-18 19:28:43 -05:00
Gregor Richards a20e79bbb5 Server needs double the buffer frames since two connected clients could
be ahead and behind by the max frames
2016-12-18 19:28:43 -05:00
Gregor Richards f7f6590156 Goodbye delay_frames! stateless_mode is the new delay_frames=0 2016-12-18 19:28:43 -05:00
Gregor Richards 45d732a014 New sync system
The idea:
   * Use a fixed number of delay_frames (eventually to be fixed at 120,
     currently still uses the config variable, 0 will still be an option)
   * Determine how long it takes to simulate a frame.
   * Stall only if resimulating the intervening frames would be
     sufficiently annoying (currently fixed at three frames worth of
     time)

Because clients always try to catch up, the actual frame delay works out
automatically to be minimally zero and maximally the latency. If one
client is underpowered but the other is fine, the powerful one will
automatically take up the slack. Seems like the most reasonable system.
2016-12-18 19:28:43 -05:00
Gregor Richards 6890456ac0 Updated error messages and fixed some stall-related disconnected-client
bugs.
2016-12-18 19:28:43 -05:00
Gregor Richards 6658826759 CRC validity checking. Ignore CRCs if they don't work. 2016-12-18 19:28:43 -05:00
Gregor Richards a6cd8c3aa1 Error reporting when a password is refused, plus a bugfix so that
socket_receive_all_nonblocking actually reports disconnects.
2016-12-18 19:28:43 -05:00
Gregor Richards df2600fbf4 Added error reporting when a player is not allowed to play. 2016-12-18 19:28:43 -05:00
Gregor Richards bade067d9a Support for catching up if the netplay peer is ahead of us. 2016-12-18 19:28:43 -05:00
Gregor Richards 4e01481b39 Only allow clients to load state if there's no further synchronization 2016-12-18 19:28:43 -05:00
Gregor Richards 70d04ec6a5 Apparently the frontend gets really pissy if it can't check the flip state 2016-12-18 19:28:43 -05:00
Gregor Richards da7efcb939 Cleaning up netplay headers. 2016-12-18 19:28:43 -05:00
Gregor Richards 9c6ac2b934 Only the server can flip users. 2016-12-18 19:28:43 -05:00
Gregor Richards 03415c261d Added netplay spectator password separate from play password 2016-12-18 19:28:43 -05:00
Gregor Richards 694b7a9723 Don't allow more players to join than are actually being polled 2016-12-18 19:28:43 -05:00
Gregor Richards 7ad4e3f115 Per-connection stalling 2016-12-18 19:28:43 -05:00
Gregor Richards 1b22191869 Deduplicating some code. 2016-12-18 19:28:43 -05:00
Gregor Richards f619789e48 Refactoring: netplay_common.c -> netplay_handshake.c/netplay_delta.c
Refactoring netplay_common into its two actual components, the handshake
and delta-frame related functions.
2016-12-18 19:28:43 -05:00
Gregor Richards 4e905bf524 Refactoring: netplay_sync.c
Renamed netplay_net.c to netplay_sync.c, as all that remains in that
file is synchronization-related functions.
2016-12-18 19:28:43 -05:00
Gregor Richards 257c5d3188 Refactoring netplay_init.c/netplay_net.c
Split the remainder of netplay.c into netplay_init.c and netplay_net.c
(which will soon be netplay_sync.c)
2016-12-18 19:28:43 -05:00
Gregor Richards 7e2465ef1f Refactoring: Moving I/O functionality into netplay_io.c 2016-12-18 19:28:43 -05:00
Gregor Richards 8c59c7dd77 Starting to refactor: Separating frontend stuff into netplay_frontend.c 2016-12-18 19:28:43 -05:00
Gregor Richards ab989d7f41 More careful disconnection. 2016-12-18 19:28:43 -05:00
Gregor Richards c8bba9a981 Simplistic builtin randomizer. 2016-12-18 19:28:43 -05:00
Gregor Richards 28e331b5fd Remove some magic numbers 2016-12-18 19:28:43 -05:00
Gregor Richards 6e6f2bfdbe Use a proper password hash across the line. 2016-12-18 19:28:42 -05:00
Gregor Richards 763a657f82 Terrible first cut at password (sent in plain text D-8) 2016-12-18 19:28:42 -05:00
Gregor Richards 5a0328dc09 Transfer pad configuration over netplay. 2016-12-18 19:28:42 -05:00
Gregor Richards 888e45c88b Updates to allow the server to toggle game/watch 2016-12-18 19:28:42 -05:00
Gregor Richards 3631ff74ff Very, very partial support for the server spectating 2016-12-18 19:28:42 -05:00
Gregor Richards 3d7f1f6575 Updating Netplay README to be more true 2016-12-18 19:28:42 -05:00
Gregor Richards f6f9905ae3 Made remote pausing connection-specific 2016-12-18 19:28:42 -05:00
Gregor Richards 6556af1100 force_send_savestate is global again
We cannot send a savestate to only one player, as sending a savestate is
a synchronization event invalidating all prior input.
2016-12-18 19:28:42 -05:00
Gregor Richards 3d34c0222f Added simple (cheesy) announcements on join/leave 2016-12-18 19:28:42 -05:00
Gregor Richards 727743aa7b Fixing a couple FIXMEs/TODOs 2016-12-18 19:28:42 -05:00
Gregor Richards 2130fd81a5 Fixed simulation for >2 players 2016-12-18 19:28:42 -05:00
Gregor Richards 262d77546b Adding game/watch key
Adding a key to toggle between playing and spectating. This key takes
the place of the previous flip key, although player flipping does
continue to work (and must be rebound if you still want it)
2016-12-18 19:28:42 -05:00
Gregor Richards 90c15fc7a6 Still need to flush input data. 2016-12-18 19:28:42 -05:00
Gregor Richards e7ce01ad3b More renaming
Now that remote_input_state isn't always remote, it should just be
called real_input_state (and is).
2016-12-18 19:28:42 -05:00
Gregor Richards f6630ad85a More fixups for >2 player mode. Mostly was just sending packets that
shouldn't have been sent.
2016-12-18 19:28:42 -05:00
Gregor Richards 479955a085 More 3-player support. The initial connection is wonky with
delay_frames>0
2016-12-18 19:28:42 -05:00
Gregor Richards d373684bd5 Off-by-one 2016-12-18 19:28:42 -05:00
Gregor Richards b51cf8be2b Real, actual (almost) >2-player support. 2016-12-18 19:28:42 -05:00
Gregor Richards 2cc8c5c467 Removing silly foo_ names used to help migration. 2016-12-18 19:28:42 -05:00
Gregor Richards 53c46530aa Very first tidbits of true multiplayer support (minus actual multiple
players so far)
2016-12-18 19:28:42 -05:00
Gregor Richards b5cd187077 Since there's now only one mode, removing netplay_callbacks entirely. 2016-12-18 19:28:42 -05:00
Gregor Richards 9b2270f5d4 Say goodbye to spectator mode (for now) 2016-12-18 19:28:42 -05:00
Gregor Richards 4768970d52 Moving force_send_savestate from netplay to connection. 2016-12-18 19:28:42 -05:00
Gregor Richards ea722b49c8 Move other_addr from netplay to connection. 2016-12-18 19:28:42 -05:00
Gregor Richards d1d29143b2 Move nickname field to connections. Spectate mode officially broken. 2016-12-18 19:28:42 -05:00
Gregor Richards 189cc6e5d6 Moving socket buffers to per-connection (currently breaks
delay_frames=0)
2016-12-18 19:28:42 -05:00
Gregor Richards b334f04bd5 Removing RARCH_ from Netplay stall reasons. 2016-12-18 19:28:42 -05:00
Gregor Richards 1e1abf6951 First step of multiple connections. Still only one connection actually
works.
2016-12-18 19:28:42 -05:00
Gregor Richards 3908e25895 Separating local mode from remote mode. 2016-12-18 19:28:42 -05:00
Gregor Richards 775584cdac Adding more README info. 2016-12-18 19:28:42 -05:00
Gregor Richards 170b590bdb Client now starts one frame after finishing connection, for easier sync. 2016-12-18 19:28:42 -05:00
Gregor Richards 80be19a7da Renames for readability, merging frame and sram into sync packet. 2016-12-18 19:28:42 -05:00
Gregor Richards f89e54fcb7 Now that we don't have to start at frame 0, use the server frame count 2016-12-18 19:28:42 -05:00
Gregor Richards b3092f6fde Moving things that shouldn't have been public into netplay_private.h 2016-12-18 19:28:41 -05:00
Gregor Richards 9054b51f0e Finally, bringing back the first frame (in nonblocking mode) 2016-12-18 19:28:41 -05:00
Gregor Richards ce7686104d Removing dead code 2016-12-18 19:28:41 -05:00
Gregor Richards 71e5cb756a Support for delay_frames=0 in nonblocking mode. 2016-12-18 19:28:41 -05:00
Gregor Richards 1c8f056239 Nonblocking initial connection. Haven't tested with delay_frames=0 yet 2016-12-18 19:28:41 -05:00
Gregor Richards 3f8f9761f6 Fixes particularly affecting delay_frames=0 mode 2016-12-18 19:28:41 -05:00
Gregor Richards 91e7db3eca This semicolon broke everything! 2016-12-18 19:28:40 -05:00
Gregor Richards ba76528b8f A more sophisticated status variable for later making the initial
connection nonblocking.
2016-12-18 19:28:39 -05:00
Gregor Richards 0f5eec9987 Use zbuffer_size instead of state_size for the packet buffer 2016-12-18 19:28:39 -05:00
Gregor Richards 1214541410 Added packet buffer resizing to cope with initialization quirks. 2016-12-18 19:28:38 -05:00
Gregor Richards 36a93e5697 Fix a few bits broken by merging. 2016-12-18 19:28:38 -05:00
Gregor Richards 900e5a79ec Use nonblocking sockets for Netplay to avoid some stalls. 2016-12-18 19:28:38 -05:00
Twinaphex d604441cea Merge pull request #4266 from GregorR/netplay-better-simulation
Better netplay input simulation
2016-12-18 07:13:52 +01:00
Gregor Richards 1245d1b5dd Better netplay input simulation
In resimulation mode, we only copy the buttons. The reason for this
is nonobvious:

If we resimulated nothing, then the /duration/ with which any input
was pressed would be approximately correct, since the original
simulation came in as the input came in, but the /number of times/
the input was pressed would be wrong, as there would be an
advancing wavefront of real data overtaking the simulated data
(which is really just real data offset by some frames).

That's acceptable for arrows in most situations, since the amount
you move is tied to the duration, but unacceptable for buttons,
which will seem to jerkily be pressed numerous times with those
wavefronts.
2016-12-18 00:46:02 -05:00
Gregor Richards 17e08c7a28 When we disconnect netplay, fully deinit it
In particular, we need to disentangle the interceding netplay callbacks.
In previous versions, if you disconnected netplay but were using a core
that made netplay stall for connections (i.e., one that has no
savestates), netplay would continue to stall because it still
interceded, even though it was supposed to be off. This fixes that.
2016-12-17 23:08:59 -05:00
Gregor Richards 8c08a5399d Fix a possible NULL dereference in load_savestate
In the unlikely situation that serial_info wasn't provided and the delta
frame wasn't ready (possibly an impossible situation) it previously
would have segfaulted. This fixes that.
2016-12-15 16:19:54 -05:00
twinaphex b4c1927e27 (MSVC 2003) Buildfixes 2006-05-18 13:31:43 +02:00
Gregor Richards 9a4b28735b HAVE_SOCKET_LEGACY -> no IPv6
I had previously assumed that if AF_INET6 is defined, IPv6 support was
present. Some psychopathic console SDKs which shall not be named
actually define AF_INET6 but none of the IPv6 structures. As there is
therefore no way to determine whether IPv6 support is present at
preprocessor time, I'm ust assuming that HAVE_SOCKET_LEGACY implies no
IPv6. This means in effect that no consoles get IPv6 support.
2016-12-10 05:27:25 -05:00
twinaphex 4bf806ef00 (Netplay) Some build fixes for PS3 and others 2016-12-10 09:41:24 +01:00
Brad Parker d558862e21 make "Got connection from" translatable. Update JP translation. 2016-12-09 23:38:00 -05:00
Gregor Richards a70e21f328 Suppress a warning due to weird declarations on Windows. 2016-12-05 20:50:05 -05:00
Gregor Richards e7f20a3673 Bugfixes
Silence some Coverity warnings (including a real memory leak) and be
more careful about checking IPv6 mode (for backwards compatibility with
systems that don't support IPv6 but may run code compiled to expect IPv6)
2016-12-05 00:45:40 -05:00
Gregor Richards 2b437ccb8c Don't need to explicitly demand IPPROTO_TCP (and doing so breaks some
SOCKET_LEGACY builds)
2016-12-03 16:33:48 -05:00
Spec-Chum 7a6a0ee7af Fix MSVC compilation 2016-12-03 18:24:49 +00:00
Gregor Richards f725f38061 Use strlcpy 2016-12-03 09:58:16 -05:00
Gregor Richards 98f0d4d45b Better error messages when the Netplay handshake fails 2016-12-03 09:46:20 -05:00
Gregor Richards 3c7fc73735 sendto fix for MSVC 2016-12-02 23:15:53 -05:00
Twinaphex d71df5c06f Merge pull request #4138 from GregorR/netplay-port-unsigned-short
Be explicit about types
2016-12-03 05:11:02 +01:00
Gregor Richards cc664db231 Be explicit about types. 2016-12-02 23:08:34 -05:00
Twinaphex 4b2a45a276 remove unused variables 2016-12-03 05:07:27 +01:00
Gregor Richards 8993003259 C++ fixes 2016-12-02 22:56:37 -05:00
Gregor Richards 0577749fae Netplay LAN scanning is go! (sort of) 2016-12-02 22:40:26 -05:00
Gregor Richards 077d5440ee Allow Netplay to receive a struct netplay_host to connect to rather than
using the configured setting
2016-12-02 21:16:15 -05:00
Gregor Richards ba0985de37 Actually report the host port as the Netplay port, not the discovery port 2016-12-02 20:38:55 -05:00
Gregor Richards 3446cf09d6 Actually report discovered hosts back to the caller! 2016-12-02 20:28:22 -05:00
Gregor Richards 4c18cec752 Added Netplay discovery code (not yet in menu) 2016-12-02 19:49:42 -05:00
Gregor Richards addff325d0 Netplay discovery LAN scanning task (incomplete) 2016-12-02 18:56:29 -05:00
Gregor Richards a082df0027 More stripping out of NAT traversal for SOCKET_LEGACY 2016-12-02 13:18:35 -05:00
Gregor Richards 5739be5594 SOCKET_LEGACY doesn't even necessarily have inet_ntoa, so oh well, no
host for you
2016-12-01 20:40:16 -05:00
Gregor Richards 22798e26c7 delay_frames naming consistency
Unifying all of the various inconsistent names of delay_frames into a
single name: delay_frames.
2016-12-01 13:34:37 -05:00
Gregor Richards c7f8cd3c68 Adding NAT traversal announcement for SOCKET_LEGACY 2016-11-30 19:01:32 -05:00
Twinaphex bb499b70be Merge pull request #4104 from GregorR/natt
NAT traversal
2016-11-30 16:09:53 +01:00
Gregor Richards b3ababce9a Fix Netplay IPv6 support 2016-11-30 00:25:16 -05:00
Gregor Richards c342c103ae Always get numeric host/ports instead of names. 2016-11-29 23:08:26 -05:00
Gregor Richards 42da0a0184 NAT traversal in Netplay
For the time being, if NAT traversal is successful it simply announces
it as an OSD message. In the future it will be used to inform a
matchmaking server of the public port.

This patch also included minor fixes to the NAT traversal implementation
to make the select it demands actually doable.
2016-11-29 22:59:46 -05:00
twinaphex d26a213971 CXX_BUILD fixes 2016-11-27 13:30:35 +01:00
Gregor Richards 225cbb387b Updating netplay to use trans_stream for compression 2016-11-26 16:06:52 -05:00
Gregor Richards da0b958aeb Check HAVE_ZLIB and only do zlib compression if it's supported by both
sides.
2016-11-25 11:03:12 -05:00
Gregor Richards db437047f8 Don't use z_const, which is apparently not always defined. 2016-11-25 10:40:25 -05:00
Gregor Richards 679ea058a4 Properly clean up zlib. 2016-11-25 10:40:24 -05:00
Gregor Richards 3ff22c9ed6 Fixes for C++ support. 2016-11-25 10:40:24 -05:00
Gregor Richards 9f03020af8 Change the netplay protocol version since compression isn't backwards
compatible.
2016-11-25 10:40:24 -05:00
Gregor Richards 53c6223dc6 Use zlib compression for savestates sent over netplay. 2016-11-25 10:40:24 -05:00
Diego Viola cf0c60bb98 Fix Netplay fullscreen issue
Fixes #3936
2016-11-07 16:01:18 -02:00
Brad Parker d1d5584d18 update copyright 2016-10-27 11:47:10 -04:00
twinaphex 0d3752e90f More translatable strings 2016-10-22 05:23:59 +02:00
twinaphex 3334060b03 Add another translatable string 2016-10-22 04:49:04 +02:00
twinaphex 9de0ebe859 Make some more strings translatable 2016-10-22 04:47:50 +02:00
twinaphex 42053a82e1 Prevent some implicit memsets 2016-10-21 19:39:51 +02:00
twinaphex ddb4f85430 netplay_common.c - Buildfix for MSVC 2016-10-19 18:09:59 +02:00
Gregor Richards 2e432b005e Casts for C++ compatibility. 2016-10-10 11:56:43 -04:00
Gregor Richards 5c206c89f0 Add a netplay advertisement server for LAN netplay detection. 2016-10-10 11:52:54 -04:00
Gregor Richards 2c1cd0d06b Netplay should disable when it deinits, so it doesn't auto-reconnect
when loading a new game.
2016-10-09 09:42:06 -04:00
Gregor Richards 6c15c0de3d Support for architecture-dependence serialization quirks in Netplay
As well as the implementation magic, we now send a platform magic in our
connection header. If the core reports platform dependence and the
platform magic differs relevantly, the connection will be refused.

Since netplay_send_info (client handshake) and netplay_get_info (server
handshake) were practically identical, they've also been merged into a
single netplay_handshake.
2016-10-05 21:12:42 -04:00
Gregor Richards 307ba5951e A bit more care about frame=0 input, which is always 0 2016-10-05 20:45:30 -04:00
Alcaro 46ab267f40 Merge pull request #3700 from GregorR/netplay-serialization-quirks
Serialization quirks
2016-10-06 00:59:14 +02:00
Gregor Richards e65a63e5d5 Add support for debugging core nondeterminism
This adds a debug flag to netplay_net (DEBUG_NONDETERMINISTIC_CORES)
which helps determine if a core has nondeterminism.
2016-10-05 07:58:01 -04:00
Gregor Richards 60153e7035 Ignore check_frames if CRCs are utterly inconsistent
This effectively disables check_frames if frame 1's CRC differs between
host and client. This is necessary because some important cores have
nondeterminism in core_run, thus mandating check_frames, while some
important cores have nondeterminism in core_serialize, thus mandating no
check_frames.
2016-10-05 07:55:30 -04:00
Gregor Richards 49b4143687 Reviving netplay_log_connection, i.e. connection messages on the host 2016-10-05 07:52:14 -04:00
Gregor Richards 701cc5a18c Splitting endian and other platform savestate quirks. 2016-10-04 23:07:36 -04:00
Gregor Richards a636bac428 Style and clarity nits. 2016-10-04 23:07:36 -04:00
Gregor Richards 51683661e5 Changes to Netplay for the recent changes to quirks. 2016-10-04 23:07:36 -04:00
Gregor Richards 90bd741786 Switching serialization quirks to uint64_t for consistency with other
bitfields
2016-10-04 23:07:35 -04:00
Gregor Richards 3fa3fe0fcd Fixes for the other few Netplay initialization points 2016-10-04 23:07:35 -04:00
Gregor Richards 0d661ef6a2 Fix some backwards implementation in reporting serialization quirks 2016-10-04 23:07:35 -04:00
Gregor Richards 07a4ad791d Implemented Netplay initialization quirk 2016-10-04 23:07:35 -04:00
Gregor Richards 5676d0b848 Adding Netplay quirk for untransmittable savestates 2016-10-04 23:06:50 -04:00
Gregor Richards 44931586b7 Removing Netplay workarounds which will soon be replaced by quirks 2016-10-04 23:06:50 -04:00
Gregor Richards 68cee3b409 Being more careful with serialization 2016-10-04 22:24:33 -04:00
Gregor Richards 71873e8c97 Moving Netplay pre- and post-frame behavior into core_run
This (mostly) prevents other paths from accidentally side-stepping
Netplay. Netplay itself now sets an in_netplay variable to avoid
self-recursion in its own core_run calls.
2016-10-04 13:40:07 -04:00
twinaphex 19863e4174 autosave_lock/autosave_unlock - no longer require HAVE_THREADS ifdefs 2016-10-04 09:56:58 +02:00
Gregor Richards 3953018547 Clarifications to Netplay menu and removing obsolete setting
This commit:
 * Reorders the Netplay settings menu to put more useful options at the
   top.
 * Renames the swap_input setting from "Swap Netplay Input", which is
   meaningless and confusing, to "Netplay P2 Uses C1", which is oddly
   truncated but at least true.
 * Removes the is_client setting altogether, as that's no longer how
   client vs. server mode is determined (each are separate options when
   enabling Netplay)
2016-10-03 17:28:20 -04:00
Gregor Richards e41ac34561 Get rid of global->netplay
Moved settings values into settings->netplay, and global->netplay.enable
is moved into netplay itself, and is no longer a configuration value
whatsoever, as that conflicts with the behavior of the netplay menu.
2016-10-02 22:13:34 -04:00
twinaphex 243dc139d2 Revert "Create path server and add to paths.c"
This reverts commit 00a1e3716a.
2016-10-01 08:17:44 +02:00
Gregor Richards 01d379066e Removing Netplay workarounds in anticipation of quirks API 2016-09-30 16:00:49 -04:00
twinaphex 13cf804a70 Fix signed/unsigned mismatch warnings 2016-09-30 08:23:24 +02:00
twinaphex 00a1e3716a Create path server and add to paths.c 2016-09-30 06:22:56 +02:00
Gregor Richards f710303a40 Somewhat fixing support for savestateless cores
Without early saves we couldn't properly detect savestateless cores. We
still can't, really, but we can at least EVENTUALLY detect this
condition. netplay_net has been fixed to do so.
2016-09-29 20:48:39 -04:00
Gregor Richards 5b62fbb355 Fix spectator mode to work with the late-serialization workaround 2016-09-29 17:28:01 -04:00
twinaphex da5d43974a netplay_data is a void pointer no more 2016-09-29 20:11:46 +02:00
Gregor Richards 567da56048 Adding remaining netplay menu options
A couple fixes are still necessary for the client, in particular to
recover a "lost" hostname, but now it is possible to start server or
client mid-stream, and to disconnect intentionally.
2016-09-29 13:04:38 -04:00
Brad Parker 186d0d6450 fix cheevos memory leak 2016-09-28 23:05:59 -04:00
Twinaphex 9b17e4f01e Merge pull request #3680 from GregorR/netplay-sram-leniency
Make netplay lenient to differing sram sizes
2016-09-28 23:12:10 +02:00
Gregor Richards 1470b6672b Fix delay_frames=0 mode to work with the recent late-loading workaround 2016-09-28 15:45:52 -04:00
Gregor Richards ad4cec0b07 Make netplay lenient to differing sram sizes
Some cores can only determine the true size of sram after fully loading
the content, and so will report different values when the sram size is
queried. As a result, netplay cannot count on sram size as a reliable
verification technique. sram is still sent for the savestateless core
case.
2016-09-28 08:04:38 -04:00
Twinaphex f0a2159f9a remove unused variable 2016-09-28 06:50:43 +02:00
Gregor Richards f665881d6d Workarounds for cores that can't be saved early
Netplay now never serializes/unserializes cores before 60 frames have
been emulated. This is a workaround for buggy cores and documented as
such.
2016-09-27 20:49:16 -04:00
Gregor Richards bd354cd275 Making all Netplay sockets should be cloexec
All Netplay sockets should close-on-exec. There is no reason for
xdg-screensaver to keep Netplay sockets alive.
2016-09-25 23:26:32 -04:00
Gregor Richards c4eb12a583 Adding backend functionality to reconnect a Netplay client. 2016-09-24 23:48:42 -04:00
Gregor Richards 60449e8928 Checks for some netplay syscall errors and NULL deref errors 2016-09-24 18:48:55 -04:00
Gregor Richards fcd57801bd When we replay, resimulate input so that it doesn't judder between
remote states
2016-09-24 08:12:08 -04:00
Gregor Richards 6472b0ce82 Small checks to avoid needless blocking in delay_frames=0 mode 2016-09-23 23:27:07 -04:00
Gregor Richards fa5b75b635 Bugfixes in how we reset state on a late Netplay connection 2016-09-23 22:21:53 -04:00
Gregor Richards 236839e22f Reset netplay stall state upon disconnection 2016-09-23 22:20:47 -04:00
Gregor Richards ae92cfeac2 More care in check_frames code so we don't check CRCs from a previous
connection
2016-09-23 22:18:56 -04:00
Gregor Richards 65e308c92d Reset player flip state when we lose Netplay connection
This fixes a bug whereby reconnections would be out of sync due to the
flip state of the server and client being different. The server now
resets its flip state on disconnect.
2016-09-22 21:56:19 -04:00
Gregor Richards 06550ec289 Check if setting CLOEXEC fails on the Netplay server port. 2016-09-22 21:02:26 -04:00
Gregor Richards 1503b3d42f Don't serialize frame 0 in netplay, as the core may not yet be ready 2016-09-22 17:36:46 -04:00
Twinaphex 34944cac0f remove unused variables 2016-09-22 22:01:35 +02:00
Twinaphex b2240c5783 Merge pull request #3631 from GregorR/netplay-reconnect
Support for Netplay reconnection
2016-09-22 14:27:38 +02:00
Gregor Richards 4a83e6dee9 Both sides should send the same header so either can check the other 2016-09-22 07:06:26 -04:00
Gregor Richards 42f8ed4338 Support for Netplay reconnection
In net server mode, when the client disconnects, the server now returns
to listening mode, in anticipation of the client reconnecting.
2016-09-21 22:37:43 -04:00
twinaphex 017bf34d71 Prevent null pointer dereference defect 2016-09-22 03:59:02 +02:00
Gregor Richards 4b370cf55e Re-add TCP_NODELAY in host mode. 2016-09-21 17:31:19 -04:00
Gregor Richards c2d9e7a538 Support for late connection to Netplay host mode
This changes netplay host mode's behavior in net (normal) mode from
immediately blocking to waiting for a connection while allowing the game
to run, like spectator mode.
2016-09-21 17:26:02 -04:00
twinaphex b548362869 Use encoding_crc32 2016-09-21 12:31:40 +02:00
Gregor Richards 851cd0fe6e Removing now-unused BSV-related functions from Netplay 2016-09-20 22:32:23 -04:00
twinaphex d7e9c198e6 Cleanups to netplay 2016-09-17 18:21:29 +02:00
Twinaphex e21662b3e9 Merge pull request #3607 from GregorR/netplay-savestates
Netplay savestate loading frontend changes
2016-09-17 18:15:49 +02:00
Alcaro ec2fd5ebd7 Fix warning 2016-09-17 17:55:42 +02:00
Gregor Richards d53373a5cb Netplay savestate loading frontend changes
Support for the frontend to inform Netplay when a savestate has been
loaded, so Netplay can in turn inform the peer.
2016-09-17 11:24:23 -04:00
twinaphex a55feae619 CXX_BUILD fixes 2016-09-16 13:38:06 +02:00
Gregor Richards ad336df709 Reimplemented Netplay spectate mode
Spectate mode is now far more similar to net (normal) mode, and, more
importantly, it works. In addition, spectate mode will not fast-forward
to catch up with the server if it lags too far behind.
2016-09-15 23:06:32 -04:00
Gregor Richards 4076b14568 Make Netplay flipping deterministic
The receiving side of a player-flip request now does a forced rewind to
assure that any already-computed frames are computed with the players on
the right side.
2016-09-15 23:06:32 -04:00
Gregor Richards 827009d2d3 A few corrections/clarifications in the Netplay README 2016-09-15 23:06:32 -04:00
Gregor Richards 2a0202ccf5 Making Netplay check frequency configurable. 2016-09-15 23:06:32 -04:00
Gregor Richards 9a91570db8 Adding new network commands to the Netplay README. 2016-09-15 23:06:32 -04:00
Gregor Richards 7271d1c3fa Support for frame CRCing
Every frame (soon to be configurable), the server does a CRC-32 hash and
sends it to the client. If the client finds that its own hash is
different from the server's, it requests a fresh savestate.

This is a last-ditch effort to sync if all else fails, and it's a
best-effort situation. The size of the buffer should assure that we
always still have the frame around to CRC, but I imagine there are edge
cases where we don't. If you're in an edge case, the CRC is ignored.
2016-09-15 23:06:32 -04:00
Gregor Richards 79eba578ff Remote state load bugfix: Don't skip an input frame 2016-09-15 23:06:32 -04:00
Gregor Richards 5f90f072ba Documentation fixup
Fixing up some of the function documentation, and documenting the packet
formats.
2016-09-15 23:06:32 -04:00
Gregor Richards 27188e102d Support for savestate loading over netplay
Assuming the core supports saving/loading states, and (crucially)
assuming the states are portable across the architectures on both sides
of the connection, Netplay now supports the transmission of savestates.
Right now the frontend doesn't actually send any such requests, as it's
not clear exactly where the code for that should be.

This works in either direction, although I'll admit I have no idea what
happens if they both load at the same time.
2016-09-15 23:06:32 -04:00
Gregor Richards 4d11b1d674 Don't misinterpret "Netplay isn't loaded" as "must pause" :) 2016-09-15 23:06:32 -04:00
Gregor Richards c3186c57ab Don't stall if connection lost with remote paused 2016-09-15 23:06:32 -04:00
Gregor Richards 96186438ec Remote pausing
Support for remote pausing, and with it, support for Netplay pausing the
frontend correctly. With this patch alone this doesn't work, since
there's no clean way for the frontend to tell Netplay that it's paused.
2016-09-15 23:06:32 -04:00
twinaphex a71cd89379 Cleanup unused variable 2016-09-15 21:26:10 +02:00
Gregor Richards 9bc78d25a0 Minor stylistic fixes for clarity and consistency with the rest of
RetroArch.
2016-09-14 10:06:57 -04:00
Gregor Richards b1a2e096e5 Use consistent quotes in Netplay README. 2016-09-14 10:03:26 -04:00
Gregor Richards 12bf3e4824 Rather than repeating the same sample for every frame while stalled,
just pause the sound while stalled. Both options are annoying, but this
option is less annoying.
2016-09-13 21:45:06 -04:00
Gregor Richards ea0bb6f812 Just in case some systems don't have TCP_NODElAY, put that in an ifdef. 2016-09-13 21:39:10 -04:00
Gregor Richards d4e074dbed Moved the advance of self_ptr to the same place as the advance of
self_frame_count, which is much clearer.
2016-09-13 21:32:57 -04:00
Gregor Richards 99b5ed92ed other should always be <= both real AND self. Before this fix, it was
possible (albeit unlikely) for the remote to get so far ahead of us that
they actually overwrote our own current data :)
2016-09-13 21:32:57 -04:00
Gregor Richards 1267e5e867 A few clarifications regarding the buffer's have_remote and used_real
data. simulation shouldn't touch 'em.
2016-09-13 21:32:57 -04:00
Gregor Richards a0cfdb8a9c naks now cause disconnection. 2016-09-13 21:32:57 -04:00
Gregor Richards b140b16b5d Removed Netplay positive acknowledgement messages: They didn't document
their corresponding sent message, and so couldn't be used for
acknowledgement anyway. Negative acknowledgement is sufficient.
2016-09-13 21:32:57 -04:00
Gregor Richards 6829b80c6b Reimplemented disconnection based on stalls. If we stall for 10 seconds,
disconnect.
2016-09-13 21:32:57 -04:00
Gregor Richards 8aa48cd3f9 Reinstituted "standard" timeout-based disconnection, which only works
for stall_frames==0 due to the fixes to not stall the UI.
2016-09-13 21:32:57 -04:00
Gregor Richards 0ccc39769d Adding my copyright lines to files I've touched. 2016-09-13 21:32:57 -04:00
Gregor Richards ae8e695644 Fixing indentation to align with the rest of RetroArch. 2016-09-13 21:32:57 -04:00
Gregor Richards f9f4e15d33 Removing commented-out code (mostly old UDP stuff) 2016-09-13 21:32:57 -04:00
Gregor Richards c5fe0ec6be Updating the Netplay README to be true of the current implementation. 2016-09-13 21:32:57 -04:00
Gregor Richards 147d739197 Fixed stall_frames=0 mode to only block if frames are actually needed.
Rather than counting on the complexicon of used_real calculations, set
used_real when... real is used. (Problem: If the core doesn't read input
at all, used_real won't be set; todo: test with handhelds.) Minor
resilience fixes.
2016-09-13 21:32:57 -04:00
Gregor Richards c7d0bf90f6 Bugfixes to bring Netplay Nouveau from "kinda working" to "stably
working":

(1) Fixups to the stall logic to make sure it always receives frames
while stalling :)

(2) Disused the used_real field. It was misconfigured and would
frequently claim to be using real data when real data hadn't been
used... this means more replays for now, but used_real will be readded.
(TODO)

(3) Stall duration is now related to sync frames, and thus configurable.

(4) Delta frames were having the good ol' initialization problem, as
frame==0 was indistinguishable from unused. Quickfixed by adding a
"used" field, but maybe there's a better way.

(5) If serialization fails, switch immediately to blocking mode
(stall_frames = 0). Blocking mode barely works, but if serialization
fails, no mode will work!

(6) I'm not sure which bug my replaying-from-previous-frame was trying
to fix, but the correct behavior is to replay from the last frame we had
vital information, not the frame prior. Notionally this should just be
an efficiency thing, but unsigned arithmetic at 0 made this a "just
ignore all input from now on" thing.
2016-09-13 21:32:57 -04:00
Gregor Richards 07e869ccae is_simulated was confusing and poorly named. Using have_remote in its
place, which is simply true if we've received remote data. Could also
just use read_frame_crount instead, but this keeps the info frame-local.
2016-09-13 21:32:57 -04:00
Gregor Richards 4f16a19f5e Rather than stalling by blocking and becoming unresponsive, stall by
replaying the same frame. TODO: Maybe mute the audio?
2016-09-13 21:32:57 -04:00
Gregor Richards 5edfbeafb0 Switched Netplay over to TCP. A lot of the stalling logic had to change
for this, and in particular, it now sometimes stalls in a way that makes
it very difficult to actually input anything (whoops :) ). Simply
setting the sync frames higher avoids that. With supported cores, this
is incredibly risilient, but when it fails, it mostly fails to freezing,
which is less than ideal.

TODO: Stall frames should be configurable. All the UDP code is still
there but commented out, should be gutted. The original fast-forward
code is now commented out, but really both fast-forward and stalling
should be options; the only complication is that it needs to send
simulated self-input for fast-forward.
2016-09-13 21:32:57 -04:00
Gregor Richards 9a80a1bd7e Adding a bit of Netplay documentation. 2016-09-13 21:32:57 -04:00
Gregor Richards 69b7dc0d08 Multitudinous fixes and updates to Netplay. Had to be one commit since
they're mostly related:

(1) Renamed frame_count to self_frame_count to be consistent with all
other names.

(2) Previously, it was possible to overwrite data in the ring buffer
that hadn't yet been used. Now that's not possible, but that just
changes one breakage for another: It's now possible to miss the NEW
data. The final resolution for this will probably be requesting stalls.
This is accomplished simply by storing frame numbers in the ring buffer
and checking them against the 'other' head.

(3) In TCP packets, separated cmd_size from cmd. It was beyond pointless
for these to be combined, and restricted cmd_size to 16 bits, which
will probably fail when/if state loading is supported.

(4) Readahead is now allowed. In the past, if the peer got ahead of us,
we would simply ignore their data. Thus, if they got too far ahead of
us, we'd stop reading their data altogether. Fabulous. Now, we're happy
to read future input.

(5) If the peer gets too far ahead of us (currently an unconfigurable 10
frames), fast forward to catch up. This should prevent desync due to
clock drift or stutter.

(6) Used frame_count in a few places where ptr was used. Doing a
comparison of pointers on a ring buffer is a far more dangerous way to
assure we're done with a task than simply using the count, since the
ring buffer is... well, a ring.

(7) Renamed tmp_{ptr,frame_count} to replay_{ptr,frame_count} for
clarity.

(8) Slightly changed the protocol version hash, just to assure that
other clients wouldn't think they were compatible with this one.

(9) There was an off-by-one error which, under some circumstances, could
allow the replay engine to run a complete round through the ring buffer,
replaying stale data. Fixed.
2016-09-13 21:32:57 -04:00
twinaphex b0e372432f Cleanups 2016-09-12 18:18:20 +02:00
twinaphex 6f23a8ac0d Move httpserver to network/ 2016-09-12 17:21:00 +02:00
twinaphex db6171676a Use retro_assert everywhere 2016-09-08 11:59:44 +02:00
twinaphex c3ba0ba4e9 Revert "Refactor core_system_info_* functions"
This reverts commit f637805c9e.
2016-09-06 08:38:26 +02:00
twinaphex f637805c9e Refactor core_system_info_* functions 2016-09-06 07:08:38 +02:00
twinaphex 82d82110ae Merge system.h with core.h 2016-09-06 06:11:54 +02:00