Bug Fixes / High priority enhancements:
-
Go through the code and where we left a "TODO" comment (65 of them), either delete it, solve it or move the comment to a task item in the proper list (bugs or enhancements).
-
Make dead peer object reusable.
-
Implement API that forces the config address not be parsed.
-
Fix advanced profile mode.
-
Fix advanced profile sequence wrap-around bug (10 x 65536).
-
Implement internal fragmentation on sender when incoming packet size is larger than the configured size
-
On receiver side. Add API to mark a rist data buffer read by application (the equivalent of free). With this API we can either perform a free or reuse the original buffer if the FIFO has not expired yet. This has to be used ONLY when the app decides to take on the responsibility of freeing the buffer (do we need another input parameter on the read API or do we make this the default behavior?)
-
Add support for true rtp input and output. Currently, the library is payload agnostic but only when you go from librist to librist. When you go to/from librist to someone else, we are assuming mpegts payload and we either adding an mpegts header or removing it depending on whether we are the sender or the receiver. Let me elaborate. Sender of other implementation to librist receiver: librist outputs only the payload of the rtp stream coming in. That works will for mpegts as it is self contained, but what about other packets that rely on the header like rtp/264? Librist sender to other implementation's receiver: librist will append an MPEGTS RTP header the payload handed to it and send it to the other side. If the payload handed to rist was not pure MPEGTS, the other side will not be able to do anything with it.
Code defense:
-
Cppcheck running & passing (jgh-)
-
Unit testing framework and a few passing tests - possibly Cmocka or maybe just C with asserts. (jgh-)
-
Run sanitizers against unit tests
-
Fuzzing (maybe, needs discussion)
-
Refactor rist.c and udp.c into smaller topical files with functions that do less and easier to test and maintain.
-
Eliminate/clarify TODOs (see above).
Enhancements:
-
On ristreceiver, make the incoming original rtp header avaiable to the application so it can rebuild the stream as is instead of us having to rebuild the header.
-
Add API for retrieving version number and add a version file that will be auto-populated with the git version as well:
From Kuldeep Singh Dhaka: int rist_version_get(const struct rist_version **ver); https://gitlab.com/madresistor/libbox0/-/blob/master/libbox0/config.h.in Generate a config.h file at compile time that uses information from the build system file so that you dont have to enter values manually. Using this, you can generate a value of version that you can compare to get a number that always increase when version goes up. https://gitlab.com/madresistor/libbox0/-/blob/master/libbox0/config.h.in#L42 https://gitlab.com/madresistor/libbox0/-/blob/master/libbox0/config.h.in#L49 https://gitlab.com/madresistor/libbox0/-/blob/master/libbox0/basic.c#L75 So, if you are looking if the library is above a certain version (which is most likely). then you just compare if (rist_version_get() < RIST_VERSION_CODE) { fprintf(stderr, "oops, library below certain expectation"); } or if (rist_version_get() < RIST_VERSION(1,2,0)) { fprintf(stderr, "oops, library below certain expectation"); } This allows you to get version but allows quick compile time and runtime version checking.
-
Add API that will allow selection of buffer timing. Current method is offset based on first packet received. We want also one based on real time clocks (assumes they are both synchronized) and one that ignores rtt and uses time from packet arrival.
-
Add functionality for measuring RTT and using this dynamic value. There is a new RTCP packet designed just for this. !22 (merged)
-
Add support for extended sequence number (not going to happen).
-
Add support for null packet suppression.
-
Move the FIFO functionality to a separate file and make it reusable. Currently, we have similar FIFOS on sender buffer data, sender retry data and receiver output data,
-
Add a FIFO to OBB data (sender and receiver) and implement the POLL method.
-
Move data callbacks to a new thread (OBB + DATA on receiver and OBB on sender) to protect the library from apps that take a long time processing callbacks.
-
Refactor message logging. Remove printout to stderr and make it configurable instead. Perhaps we add a callback or poll method to retrieve errors.
-
Make printout of stats optional and add API to retrieve them.
-
Add missing error checks.
-
Add support for EAPOL-TLS-SRP authentication based on spec (section 7.5).
-
Add support for packet fragmentation.
-
Add API or peer config option to disable packet recovery. Perhaps this can also be used to signal FEC, RIST or a combination of the two.
-
Add support for FEC.
-
Add support for one way communication.
-
Verify that our simple profile multicast mode (sender and receiver) are indeed following the spec. --> Technically we aren't since rtcp back from receiver is also supposed to be on multicast, however others implement the same way.
-
Add an API to specify total max bitrate per context on sender/receiver so we can use the peer configured one at the peer level instead.
-
Add a field to the stats that reports the remote cname.
-
Enhance the code to allow for a cname of length zero.
-
Move this wiki page into Issues + Boards