Skip to content

v1.4.4

Compare
Choose a tag to compare
@maxsharabayko maxsharabayko released this 04 Oct 12:28
· 530 commits to master since this release
8b32f37

Release Notes

API/ABI/Integration Changes

API/ABI version: 1.4.​

  • PR #2088: Monotonic/steady clock is enabled by default.
    • On Windows: C++11 steady clock is used by default (-DENABLE_STDCXX_SYNC=ON).
    • On Linux: CLOCK_MONOTONIC is used by default if supported by the platform (-DENABLE_MONOTONIC_CLOCK=ON).
  • PR #2069: Changed the default value of SRTO_RETRANSMITALGO socket option to 1. This activates the efficient retransmission algorithm on the sender side which optimizes the bandwidth usage by producing fewer retransmissions per lost packet. The algorithm is available since v1.4.2. Intensive retransmission algorithm (the former default) can be activated by setting SRTO_RETRANSMITALGO=0.

Improvements

  • PR #1997: Improved random integer retrieval, which is mainly used for initial socket ID and Initial Sequence Number (ISN) generation.
  • PR #1965: Improved clock drift compensation algorithm. RTT samples are now taken into account when estimating clock drift.
  • PR #1957: Improved round-trip time (RTT) estimation.
    • On the receiver side, smoothed RTT (SRTT) is set to the first RTT measurement obtained from the first ACK/ACKACK pair. When a subsequent RTT measurement is made, an exponentially weighted moving average (EWMA) is used to update smoothed RTT. Before the very first RTT sample is available, SRTT is initialized as 100 ms or taken from the cache if one exists.
    • On the sender side, in the case of unidirectional transmission, the values of smoothed RTT and RTT variance are now extracted from ACK packets. In the case of bidirectional transmission, an EWMA is still applied to be consistent with the previous behavior.
  • PR #1909: Improved 'No room to store incoming packet' warning with additional hints to identify a possible reason.
  • PR #1863: Added support for atomic types.

Experimental SRT Connection Bonding

  • PR #1857: Improved the logic of switching between main and backup links, extended the list of member link states as well as defined events resulting in state transition for Main/Backup mode of Connection Bonding.
  • PR #1989: Documented Main/Backup mode of Connection Bonding. See here.
  • PR #2026: Fixed group read-readiness update on the receiver side.
  • PR #2094: Added missing lock when checking for read-readiness of a group member and fixed the resulting crash.
  • PR #2139: Fixed base time and drift synchronization in a group, which caused insufficient packet loss recovery and end-to-end latency maintenance by a group receiver.
  • PR #2142: Fixed validation of the packet sequence number when reading from a group member, which was causing an incorrect decision to break a member connection.

Fixed Issues Highlights

  • PR #2075: Fixed crash on dereferencing null CryptoControl instance in handshake reply.
  • PR #2012: Placed some of the SRT classes under the 'srt' namespace.
  • PR #1517: Fixed possible incorrect outcome of cookie contest function (rendezvous connection mode) under certain compiler optimizations.
  • PR #2073: Fixed uninitialized destination socket ID in Shutdown control message.
  • PR #2062: Set CLOEXEC for epoll on Linux.
  • PR #2060: Added missing receiver buffer lock into CUDT::receiveBuffer(..) and CUDT::recvfile(..) functions.
  • PR #2028: Added a check for null unit when passing to CRendezvousQueue::updateConnStatus(..).
  • PR #2005: Make sure TTL will not drop packets over the last block.
  • PR #2003: Fixed the value of the Last Packet Sequence Number field in Drop Request control message on TTL packet drop.
  • PR #2011: Fixed the content of the Drop Request control message. If a loss of packets already missing in the sender buffer was reported, the very first packet present in the sender buffer was incorrectly included in the range of packets to be dropped.
  • PR #2010: Fixed version rejection for handshake v4 caller (SRT prior to v1.3.0).
  • PR #1919: Fixed the crash when referencing a resource already freed in CRendezvousQueue class.
  • PR #1588: Fixed detection of reusable bindings and binding conflicts.

Build

  • PR #2117: Updated Windows installer for alternate platform names.
  • PR #2136: Added iOS build to GitHub Actions CI.

Docs

  • PR #2134: Updated SRTO_RETRANSMITALGO socket option description.
  • PR #2119: Improved Access Control general syntax description.

Changelog

Click to expand/collapse

Core Functionality

167b8e5 Fixed group drift synchronization (#2139)
60891f3 Fixed 'atomic' linking for iOS target (#2137)
add4058 Fixed 'undef' warning with gcc and clang (#2131)
ad84c38 Fixed FileCC random decrease
b147d5e Fix Solaris build. (#2115)
e98146a Avoid using strlen in ThreadName class
2243388 Removed ThreadName(const char*). (#2113)
df95ecb Fix atomic for MacOS, FreeBSD, GCC<4.7, Clang<6 (#2104)
5e75c32 Placed ThreadName class inside srt namespace
409a40d Detect pthread_getname* availability
cbdd676 Added missing lock for isRcvDataReady()
ae11c18 CUDTSocket now owns a member CUDT class (composition).
b214122 Fixed int64_t to long type cast
f1c96d9 Check Win QPC frequency is non-zero
7728b70 Prefer the endian.h header file from glibc if available
d7dcf0c Check if socket is still open before replying to HS
252337c Moved congestion control into the srt namespace
f0aa009 Renamed congestion control event handling functions
747f288 Check if CryptoControl exists in createSrtHandshake(..). If it does not, it will lead to a crash, reported in #1979.
896cc92 Fixed uninitialized DST socket ID in SHUTDOWN ctrl message
adba7af Use ThreadName::BUFSIZE in CreateLogLinePrefix()
d6f93a1 Update srtcore/threadname.h
73cad8d Refactor ThreadName implementation
1a85c02 Annotating CUDT::m_pCryptoControl locking behavior (#2070)
8f169a9 Changed the default SRTO_RETRANSMITALGO to 1 (#2069)
158f35d Fix FTBFS on Debian kfreebsd
ea4edff Moved compiler attribute definitions
127c85c Put CSrtConfigSetter into anonymous namespace
589f103 Move CSrtConfigSetter templates to cpp file
2ca5313 Added Clang TSA attributes. (#2000)
a34aa08 Set CLOEXEC for epoll on Linux
1df29db use sizeof(uint32_t) in SRTDATA_MAXSIZE
ec24e15 Replace hacky static_assert by SRT_STATIC_ASSERT
65ae257 Added missing RCV buffer lock in CUDT::receiveBuffer(..).
96a41db CSndUList::update: reschedule if earlier time
e9c550b Refactor CSndUList: pop CUDT, not a packet
e8d890c Moved mutex from CSndQueue to CSndUList
94322d4 Fix unused-variable warning
e932e8f Fixed getTsbPdTimeBase: carryover within 2 wrapping periods (#2043)
acf38a7 Fixed skip non-empty data (#2033)
d6e8e21 Fix build error when -DSRT_DEBUG_TRACE_DRIFT=1
28a7006 use seq larger than m_RcvBaseSeqNo to update group readablity (#2026)
0f0caf9 Added atomic support and marked atomic key fields detected by thread sanitizer (#1863)
1751bab FIX: Added check for NULL unit when passing to updateConnStatus (#2028)
17fee15 make sure TTL will not drop packets over last block (#2005)
e2a00aa Detect reusable bindings and binding conflicts correctly (#1588).
22cc924 Applied clang-format on channel.h and cpp
445a60c Refax: placing SRT classes inside 'srt' namespace. CUDT, CUDTUnited, CUDTSocket, CUDTGroup, etc.
4ddb68e Applied clang-format on queue.h and cpp
117f831 Fixed DROPREQ on NAK behind SndLastDataAck (#2011)
393a6c7 Added srt::sync::genRandomInt(..) for a uniform way to get a random integer from the range. If C++11 is enabled, uniform_int_distribution and random_device are used.
d9150ea Fixed DROPREQ by TTL packet drop (#2003)
345bab7 Fixed version rejection for HSv4 caller
0921da6 Fix DriftTracer: take RTT into account
917a715 Added CRendezvousQueue::qualifyToHandle. Now TTL of a socket pending for connection is checked on every update iteration -> more precise connection timeout.
36f8995 CRendezvousQueue: added doxygen comments. Renamed m_RIDVectorLock to m_RIDListLock.
34e14ab Fix use-after-free in rendezvous queue (#1919)
2559797 Main/backup: improved switching rules (#1857)
8830943 Improved 'no room to store' log message (#1909)
514f61e Fix comments
97445fc Minor strerror_array_sizes refactoring
d9eefd8 Fixed cookie contest (#1517)
9848d68 TSBPD logic extracted from CRcvBuffer. (#1968)
782a27f Renamed m_iRTT variable to m_iSRTT (#1971)
d898f1c Improved RTT estimation (#1957)

Unit Tests

399e8bf Test FileUpload: find unused UDP port (#2086)
bc5a642 Fixed range loop construct warning
6ca1e0d Fixed possible TestIPv6 hangups if connection fails
0fca874 Fixed build warning: unused parameter
5ac27a3 Tests for socket options API (#1929)
3c1c490 Fix -Wsign-compare
e761745 Added fixes for FEC test occasional failure (#2037)
8774645 ConnectionTimeout.Nonblocking 500ms -> 300ms. Previously TTL was checked only every 250 ms, which resulted in a poor timeout precision.

Build Scripts (CMake, etc.)

cdec114 Fix build Android with NDK <17. Need to link against libatomic when compiling statically
6fda502 Added iOS build to GitHub Actions CI (#2136)
d8127a8 Fixed CMake warning about string
1d862c4 Fixed a typo 'availabe'
f9a54a0 Build but do not install test-srt
4d0fe61 Fixes build with CMake <3.0.2. (#2123)
2e09a16 Update Windows installer for alternate platform names (#2117)
e8f4057 Automatically link libatomic if needed. (#2116)
4fc0f31 Use lowercase CMAKE_SYSTEM_NAME on Android
fb09875 Fix build for Linux GLIBC-2.8 and earlier. (#2103)
da70624 Fix Build for Android. (#2100)
8b1be61 Fixed ENABLE_MONOTONIC_CLOCK=ON when target is Android
6dcbaf0 Cross-compile android from macOS host (#2071)
b4a5887 Added compile_commands.json to .gitignore (#2031)
e37f4ab Set OpenSSL vars explicitly; Support mbedTLS Android build (#2030)
44eb6ce Improved Windows installer
189b171 Fixed MINGW32 macro usage. Previously a custom __MINGW__ preprocessor definition was used. It was defined in udt.h, and not included everywhere.
a32e975 Update for Android build scripts (#2009)
930d346 Added script to build the Windows installer for SRT libraries (#1995).
9a09b53 Windows Build Script improvements (#1994).

Sample Applications

8c4f288 Refactored app support components to make them more reusable (#2042)
e63b358 Output JSON stats values as numbers
41348e8 Replace functions in UDT namespace by functions in srt namespace
631d0fc Removed trailing comma in JSON stats (#1976)
61dda69 Fixed nonblocking client example (#1973)

Documentation

224042a Updated SRTO_RETRANSMITALGO socket option description
34ba951 Improved Access Control general syntax description
ab9e69b Removed a reference to YAML syntax
877adfa Removed unused SRTO_FC from config function
d5d4b18 Fixed a link in Configuration Guidelines
16eca6b Wrong error code for srt_accept_bond when timed out (#2040)
5205c3c Edits of the requirements in ReadMe.md (#2035)
7e5b3ee Added buffer configuration guide (#1951)
de68ae9 Corrections to the main backup doc
1422572 Added Main/Backup mode overview (#1989)
e33f0d3 Added missing with-srt-name build opt description (#1982)
d43b836 Fixed SRTO_RCVLATENCY description