Philipp Schafft
2018-Sep-28 08:07 UTC
[Icecast-dev] About current Icecast development -- developer edition
Good afternoon, earlier today I wrote a mail to the user mailing list about current status of the current development. As pointed out by Mr. Rücker, it seems to be good to also write to this list with a bit more technical details. Please note that this mail represents current master branch ("2.5.x"). We do recommend to use current stable branch ("2.4.x") for production. However we welcome every tester and are happy to hear your feedback. I would like to start with the items I wrote about in my other mail: TLS Support TLS support as been improved over the years within Icecast. Icecast currently allows to reloading certificates and allows them to be in a different file than the key. All the basic functionality is there. But there is a little bit more we would like to add. E.g. per listen socket certificates and better integration with the authentication system. OPTIONS Support The HTTP method OPTIONS has recently be added to Icecast. It is supported on web-type and admin-type requests as well as supporting "*"-requests. This is a big step for CORS. However CORS support still has some room for improvements. POST Support We added support for the HTTP method POST. This is mostly important for the admin interface and API. Old admin interface and API is now accepting both, GET and POST. However we want to move away from GET for all endpoints that change the server state as per HTTP specs. Exact path for this transition is still open. Machine readable error codes We added an internal representation to Icecast that allows machine readable error states and codes. When a request fails a response is sent back to the client depending on the Accept:-header (as per HTTP specs). I plan on sending some more complete info when we did a little bit more of cleanup and structuring. At that point I will also include hints on how to implement things. Listen socket improvements Listen socket handling has been completely rewritten. This already allows a nice set of new features: complete listen socket reconfiguration on the fly, virtual/on-behalf-of listen sockets that can be useful with many times of gateways, and per listen socket authentication. This will also allow new features. Such features include per-listen-socket TLS certificates. Relay improvements We added support for multiple upstream servers per relay. This can be used to have fallbacks and provide a higher availability. We also changed the configuration syntax to be more readable. This includes support for defining the relay section within the mount section. Fixes, fixes, fixes There has been many. Please bear with me that I do not list all of them here. However, here is a little and incomplete list of fixes since v2.5.0-beta.2 (2018-05-07): * Corrected TLS socket shutdown * Fixed segfault when using htpasswd auth without a password file. * Fixed several memory leaks. * Fixed several header includes to match standards. * Clear XSLT cache on reload. * Fixed object leak when URL auth is configured with listener remove URL. * Fixes several locking related bugs. This also fixes progress termination by illegal CPU instruction on some specific CPUs with some specific versions of pthreads. What else has happened that is not (yet) relevant for the users? Admin interface / API We made a lot improvements on the admin interface and API. Here we worked on all levels: The code that routes requests to the individual endpoints got rewritten and is now much more universal. It has been updated keeping in mind that we want to move on to a new API at some point. The new code supports old and new API at the same time for maximal compatibility. The XSLT code has been updated. It is now much more streamlined. Also the error pages are updated to use the new machine readable error code. Build system We updated the build system. This provides a new foundation for our future work on the meta structure of our code base. Tests Our limited tests have been improved and a number of unit tests has been added. This helps us improving the quality of Icecast with future releases. refobject We unified the API for several types (and more to come) with the new refobject metatype. This also allowed us to start migrating away from old refbuf to new buffer API. Module support We added a basic module support to Icecast. Currently there is no public module that uses it, yet. Yet it will allow future development of optional components. Got curious? Feel free to try it yourself: * wiki.xiph.org/Icecast_Server/Getting_Started * wiki.xiph.org/Icecast_Server/Git_workflow Also feel free to join us on IRC at #icecast on Freenode. For more details see: icecast.org/contact/#contact-info With best regards, -- Philipp Schafft (CEO/Geschäftsführer) Telephon: +49.3535 490 17 92 Löwenfelsen UG (haftungsbeschränkt) Registration number: Bickinger Straße 21 HRB 12308 CB 04916 Herzberg (Elster) VATIN/USt-ID: Germany DE305133015 -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 490 bytes Desc: This is a digitally signed message part URL: <lists.xiph.org/pipermail/icecast-dev/attachments/20180928/61537c7f/attachment.sig>