Commit Graph
100 Commits
Author SHA1 Message Date
Cameron Gutman 04dc3c52f6 Use safe string functions in C11 2020-11-30 21:45:57 -06:00
Cameron Gutman 4b4162c1a1 Fix redefinition warning for errno.h constants on Windows 2020-11-30 20:44:46 -06:00
Cameron Gutman 5f9f7ce407 Code cleanup: use stdbool.h 2020-11-30 20:38:13 -06:00
Cameron Gutman e9ee868da4 Don't enable QoS for IPv6/NAT64 either 2020-10-31 17:08:29 -05:00
Cameron Gutman dbf81dcb63 Don't enable QoS for remote IPv4 streams
Some broken routers/CPE will drop all QoS tagged packets
2020-10-28 20:35:45 -05:00
Cameron Gutman edf08d0a60 Merge pull request #51 from d3m3vilurr/fix-vita-compile
vita: Restore select call on the VITA system
2020-10-22 21:39:53 -05:00
Cameron Gutman f15582a090 Update pollSockets() fallback for Vita compatibility 2020-10-22 17:20:07 -05:00
Cameron Gutman 4f42188c1f Test for UDP MTU issues 2020-10-10 13:03:05 -05:00
Cameron Gutman 327917683a Fix platform cleanup on resolveHostName() failure 2020-10-10 12:51:31 -05:00
Cameron Gutman dbedf938d4 Don't require linking to wlanapi.dll
This is not always available on Windows Server
2020-09-08 18:26:36 -07:00
Cameron Gutman 128c1503f2 Don't perform the connection test in resolveHostName() for single addresses unless required 2020-09-06 17:11:14 -07:00
Cameron Gutman 6ca0b93809 Ignore ICMP Port Unreachable messages on our UDP sockets
These messages can falsely indicate failure in cases where the UDP socket
for audio or video hasn't opened yet when we start to send our PING packets.

It is also problematic when sending STUN requests to multiple IP addresses.
If one returns an ICMP Port Unreachable, it can cause us to fail the entire set
of requests even when other IP addresses do respond.
2020-09-06 14:04:57 -07:00
Cameron Gutman 7b024c967e Try TCP 47989 and TCP 48010 as fallbacks if 47984 doesn't work 2020-09-06 11:55:25 -07:00
Cameron Gutman 9e4651e460 Fix implicit function declaration warnings 2020-08-29 21:13:54 -07:00
Cameron Gutman 38fe65f8bd Remove unused variable 2020-08-29 21:09:35 -07:00
Cameron Gutman 1b022a0d05 Terminate the connection if we can't receive a key frame in 10 seconds 2020-08-29 21:00:05 -07:00
Cameron Gutman a89fcb8a46 Always use the test port 2020-08-29 19:14:53 -07:00
Cameron Gutman 9064d4931f Add createSocket() helper to reduce code duplication 2020-08-29 18:54:11 -07:00
Cameron Gutman feaca5b5b0 Use resolveHostName() instead of getaddrinfo() and connectTcpSocket() directly 2020-08-29 18:27:02 -07:00
Cameron Gutman e74fe2b016 Fix socket errors being clobbered by closeSocket() 2020-08-28 18:48:15 -07:00
Cameron Gutman 5ddd53e17f Enable media streaming mode for 802.11 WLAN interfaces on Windows 2020-08-11 22:12:58 -07:00
Cameron Gutman f2c1d03d8e Don't bother doing any connection testing if no ports were specified 2020-08-09 12:08:16 -07:00
Cameron Gutman b59007cdea Fix server-side log spam caused by sending unused command 0x0201 2020-08-09 11:46:49 -07:00
Cameron Gutman ae00c09cb6 Restore the 500 ms ping logic to prevent warnings in the server-side logs 2020-08-08 23:16:55 -07:00
Cameron Gutman 2fdcfb9429 Accept IPv6 addresses for network testing to support NAT64 2020-08-06 21:59:17 -07:00
Cameron Gutman 453c722fa8 Add LiGetPortFlagsFromTerminationErrorCode() 2020-08-06 21:43:18 -07:00
Cameron Gutman 6010367637 Only allow input packets to be queued between start and stop 2020-08-06 19:12:29 -07:00
Cameron Gutman f6927475cf Enable poll() in ENet for Linux/BSD 2020-07-27 00:03:22 -07:00
Cameron Gutman 6351749039 Fix TCP connection tests on Linux and BSD 2020-07-26 20:56:39 -07:00
Cameron Gutman 117a7c637f Switch to poll() to be safe against stack corruption from exceeding FD_SETSIZE
Fortunately, the fd_set definition is not prone to stack corruption on Windows,
because FD_SETSIZE is the maximum number of sockets in a fd_set, not
the maximum value socket file descriptor that can be stored in a fd_set.

https://beesbuzz.biz/code/5739-The-problem-with-select-vs-poll
2020-07-26 20:27:58 -07:00
Cameron Gutman 84f2421fbf Add support for client-side connectivity testing 2020-07-19 14:39:42 -07:00
Cameron Gutman 5c9935e11b Temporarily comment out validation of reserved field
FEC doesn't recover this field correctly with GFE 3.20.4.
2020-07-01 11:50:23 -05:00
Cameron Gutman 407d57a50a Update ENet submodule to fix QoS-related connection issues 2020-06-12 21:59:16 -07:00
Cameron Gutman bea625a13d Work around rounding error in GFE's mouse position scaling 2020-05-26 18:19:53 -07:00
Cameron Gutman 0df24c76c0 Fix incorrect behavior of modifier keys on the right side of the keyboard 2020-05-26 17:33:57 -07:00
Cameron Gutman f8ffb30e1f Don't send no-op mouse move and scroll events 2020-05-26 17:13:22 -07:00
Cameron Gutman 7b56ab755d Add batching for mouse position packets 2020-05-20 18:56:30 -07:00
Cameron Gutman b44cad6598 Fix freeing uninitialized pointer on allocation failure 2020-05-20 18:38:58 -07:00
Cameron Gutman c8faf3539b Replace version check with note for LiSendMousePosition() 2020-05-03 15:56:39 -07:00
Cameron Gutman 495b269a10 Disable FEC on Gen 4 and earlier and assert that FLAG_EXTENSION is present 2020-05-03 15:51:49 -07:00
Cameron Gutman f911d974c9 Enable FEC validation mode on debug builds 2020-05-02 16:56:13 -07:00
Cameron Gutman 719f690e56 Add an assert to catch incorrectly sized video packets 2020-05-02 16:49:51 -07:00
Cameron Gutman 5ba94e0282 Add FEC validation mode to diagnose FEC recovery failures 2020-05-02 14:24:24 -07:00
Cameron Gutman f596e80575 Improve logging of video/audio delay and errors 2020-05-01 20:23:44 -07:00
Cameron Gutman b46e06fcf1 Terminate the connection if video isn't received for 10 seconds 2020-05-01 19:25:24 -07:00
Cameron Gutman 413ea9bc8e Minor RTSP code cleanup 2020-05-01 18:32:26 -07:00
Cameron Gutman 9ffdc79b6f Add log messages to troubleshoot problems with missing video/audio 2020-04-29 20:17:55 -07:00
Cameron Gutman fcabfc37ad Dynamically allocate session ID string 2020-04-29 20:12:19 -07:00
Cameron Gutman 7d0458a16b Dynamically allocate the RTSP response buffer 2020-04-29 19:58:50 -07:00
Cameron Gutman 247b1fe0e3 Provide reference dimensions for mouse position data 2020-04-11 20:51:17 -07:00
Cameron Gutman bbbf4336cc Add additional documentation for LiSendMousePositionEvent() 2020-04-11 15:59:12 -07:00
Cameron Gutman ef7de27727 Add absolute mouse motion support 2020-04-11 15:40:50 -07:00
Cameron Gutman f0c3b57d11 Enable QoS for ENet traffic on Windows 2020-04-09 17:42:49 -07:00
Cameron Gutman 2a02569c5c Avoid 10 second delay on graceful termination with GFE 3.20.3.63 2020-04-09 17:28:34 -07:00
Cameron Gutman 0cda408d3c Warn when streaming above 4K with H.264 or 8K with HEVC 2020-04-04 12:36:09 -07:00
Cameron Gutman 4f9d45fbb5 Round down odd height values to avoid NVENC initialization failure 2020-04-04 11:51:55 -07:00
Cameron Gutman 86751d9162 Move ConnectionListener initialization prior to possible Limelog() usage 2020-04-04 11:51:20 -07:00
Cameron Gutman c2471157c0 Use EF instead of CS7 for DSCP on ENet traffic 2020-04-03 17:01:45 -07:00
Cameron Gutman 85de16b41b Add 7.1 surround sound support 2020-04-03 00:11:41 -07:00
Cameron Gutman d9d2668473 Fix audio problems caused by stale HighQualitySurroundSupported and HighQualitySurroundEnabled values 2020-04-02 18:44:13 -07:00
Cameron Gutman 99f22fa7e9 Undeprecate AUDIO_CONFIGURATION values and add a new macro for converting AUDIO_CONFIGURATION into launch/resume parameters 2020-04-02 18:41:32 -07:00
Cameron Gutman 607aaca93f Replace AUDIO_CONFIGURATION constants with MAKE_AUDIO_CONFIGURATION() macro 2020-03-31 21:33:34 -07:00
Cameron Gutman fb60ae6a4d Parse Opus parameters from RTSP DESCRIBE response 2020-03-31 20:52:38 -07:00
Cameron Gutman f489c9d725 Enable QoS marking on macOS and Linux
Using SO_NET_SERVICE_TYPE on macOS seems to make a noticeable difference
to packet latency and loss rate for some users.
2020-03-29 15:45:36 -07:00
Cameron Gutman c3ab74b8af Reduce ENet retransmission delay by sleeping for shorter periods between polls 2020-03-29 14:35:24 -07:00
Cameron Gutman c1b8aa266f Use 10 ms audio packets on low bitrate streams to balance latency and bandwidth 2020-03-18 20:03:56 -07:00
Cameron Gutman 67390dfb94 Remove deprecated listener callbacks 2020-02-24 23:57:06 -08:00
Cameron Gutman 2fc278da00 Change errorCode to int for consistency between 32-bit and 64-bit platforms
Unfortunately this requires updating all client code that uses these callbacks.
2020-02-24 23:01:22 -08:00
Cameron Gutman cfeb0ffd90 Add MODIFIER_META constant 2020-01-15 17:48:36 -08:00
Cameron Gutman 3ccacdd3be Merge pull request #48 from loki-47-6F-64/master
Correct payload-length when parsing RTSP Messages
2020-01-11 11:50:55 -08:00
Cameron Gutman e60a7ef75f Add color space and color range options 2019-12-14 14:32:47 -08:00
Cameron Gutman b0213d06a7 Always use DSCP marking for our AV traffic 2019-12-12 18:43:57 -08:00
Cameron Gutman 3dd9a9f1b1 Use RAND_bytes() instead of rand() for STUN transaction IDs 2019-12-08 14:49:28 -08:00
Cameron Gutman f5ae5df5d0 Fix logic error in low bitrate audio duration selection 2019-12-01 19:22:16 -08:00
Cameron Gutman e938d84cdb Use TCP_NOOPT to restrict MSS on BSD-based OSes 2019-12-01 15:22:18 -08:00
Cameron Gutman ceab64c46b Use IP_PMTUDISC_DONT to clamp MSS on Windows 2019-12-01 15:00:21 -08:00
Cameron Gutman e5b6a2b7a9 Bump RTSP_MAX_RESP_SIZE to 48 KB 2019-12-01 13:59:09 -08:00
Cameron Gutman c1a26618d4 Increase audio packet duration for low bandwidth connections 2019-11-30 21:59:34 -06:00
Cameron Gutman 6b42954b47 Add LiGetPendingAudioDuration() function 2019-11-30 21:31:50 -06:00
Cameron Gutman 52f489bc46 Fix RTSP handshake errors on networks with broken PMTUD 2019-11-30 21:19:56 -06:00
Cameron Gutman f4dad9ae8b Add presentation timestamp to video frame metadata 2019-11-10 18:07:11 -08:00
Cameron Gutman eceb7d3a2b Merge pull request #46 from d3m3vilurr/vita-nonblock-socket
vita: Enable nonblock TCP socket
2019-11-03 21:22:20 -08:00
Cameron Gutman 49fd1bed3f Return correct error code when RTSP receive times out 2019-11-02 21:42:08 -07:00
Cameron Gutman 25528671d2 Fix error value on control stream and RTSP handshake failure 2019-11-02 21:28:05 -07:00
Cameron Gutman dca2205ac8 Fix assert failure on control stream establishment failure 2019-11-02 21:27:35 -07:00
Cameron Gutman 197594f38c Add platform helper function to set socket non-blocking mode 2019-11-02 19:16:46 -07:00
Cameron Gutman 9bd301897a Remove unnecessary field in QDU struct 2019-10-21 17:03:01 -07:00
Cameron Gutman f988a154a3 Fix Linux build 2019-10-12 19:42:49 -07:00
Cameron Gutman ea135be05a Only test TCP ports if the hostname resolves to multiple addresses 2019-10-12 19:09:28 -07:00
Cameron Gutman 93ce13e43f Update enet submodule to 93b080b053 2019-10-12 15:14:30 -07:00
Cameron Gutman 0cc66748ea Merge pull request #45 from d3m3vilurr/vita-newlib
vita: Apply newlib changes
2019-10-05 10:51:26 -07:00
Cameron Gutman 7de68207f0 Fix control stream connection error on multi-homed hosts 2019-09-14 14:06:34 -07:00
Cameron Gutman 438b4f87d3 Rewrite STUN code to avoid requiring TCP and use multiple servers in parallel 2019-08-13 17:51:11 -07:00
Cameron Gutman 4daf496bb4 Merge pull request #42 from d3m3vilurr/vita-getaddrinfo
vita: Apply getaddrinfo
2019-08-13 17:47:03 -07:00
Cameron Gutman 6750cde2ab Test STUN server via TCP to allow fallback if it's unreachable 2019-08-07 23:13:27 -07:00
Cameron Gutman a9780361a3 Fix high-quality surround sound breaking audio when streaming over the Internet or IPv6 2019-08-04 15:05:40 -07:00
Cameron Gutman c322ed9437 Terminate with the given error code if the disconnect timeout expires instead of -1 2019-07-23 23:41:48 -04:00
Cameron Gutman 25dfbcfd41 Implement isPrivateNetworkAddress() for IPv6 2019-07-15 00:16:17 -07:00
Cameron Gutman 6245934462 Fix streaming from Gen 3 servers 2019-07-05 21:01:14 -07:00
Cameron Gutman 801aaf43d6 Fix video on GFE 3.19 2019-05-27 01:27:50 -07:00