Analytics Tracking Code

Monday, November 3, 2014

FreeSWITCH on OpenBSD - Project Status 2014-11-02

After a long hiatus (since I have been known to get distracted from time to time) I have continued working on Freeswitch with regards to OpenBSD. Before I get into the current state of affairs, I should mention that I do have I have a semi functional Freeswitch installation (from before FS started the -stable branch) running on a pair of OpenBSD 5.1-current ultrasparc VMs but the tears and pain of trying to keep that running and up to date was way too much for a mere mortal like myself to entertain. Moreover, the fact that my (unpublished) patches refused to work on a comparable 5.2 and subsequent 5.3 install told me that way lay dragons. The SSL fiasco and the new ressl work finally made me turn the systems off and resign them to the closet of dusty bits and reinstall on some linux boxes so at least I could have access to vendor patches.

Le Sigh.

Even to this day, the out of the box upstream install scripts don't actually work on OpenBSD, and the software is absent from official OS repositories. Though I will nod to the fact that the upstream developers have made an attempt to get things working, they are doing stupid things in the process, like manually installing a magical 'Freeswitch' versions of openssl (stupid stupid stupid), curl and libedit. Honestly its like, once they cut their finger accidentally in the kitchen, and instead of cleaning and bandaging the injury, they went ahead and put their whole hand in a Garburator.

Anyway, I'll try and not be too cynical here since nestled inside the monstrosity(oops sorry, still being cynical) that is Freeswitch are the necessary bytes to have a working SIP telecom platform. I've made some decent progress in getting the software to compile and not explode in my face, and even took the time to give the @ports mailing list some updates about project status.

Stuff that works (or at least says that it works)

  • mod_callcenter
  • mod_commands
  • mod_conference
  • mod_db
  • mod_directory
  • mod_dptools
  • mod_esf
  • mod_esl/mod_hash/fs_cli
  • mod_fifo
    • Lots of manual twiddling was required here, and I still haven't turned on the c++ esl API  that lets swig bindings start working (Specifically the ESL bindings to stuff like lua, perl, Java, and C#).
    • Moral of the story is that fs_cli works, I'm possibly going to re-write it or write my own from-scratch version at some point to be less terrible, though at least it uses getopt (but not the operating system provided version of getopt).
    • By the way, fs_cli has no license?
  • mod_loopback
  • mod_sofia
    • I hope this is the most challenging module to enable and have working correctly. In total I spent several days and many dozen cups of coffee at the local Greasy Spoon, banging my head against this module trying to get it to work. The module depends (obviously?) on the sofia sip library from Nokia and has been dramatically patched since the last official release. Considering the transfer of so much Nokia IP to Microsoft I would be willing to bet that many of these changes will never be pushed to the official Nokia upstream library (not that the FS devs pushed many changes even before the Nokia/MS thing happened). Also, I flirted a bit with the changes that have arrived in the 1.4 tree of Freeswitch, and don't think much of them, (network layer violation badness).
  • mod_others_ive_forgotten
I've been hand picking the modules that I want to turn on, and aggressively deleting anything that seems stupid to me. Anyone who eventually uses this port may find that their favourite module is not included with the port. Of course this is because my goals are different than upstream Freeswitch developers, this is will sometimes result in missing features and since their design, implementation or purpose are undesirable from my point of view.

Still to do

  • Modules... many mods still need to be reviewed and enabled or deleted.
  • Devise an appropriate default minimal configuration
  • Fix hashing bugs (see my @ports mail)
  • Launcher re-write (switch.c is full of badness... damn, cynical again)
  • fs_cli re-write (how about a minimal level of security)
  • String Slinging audit, there are lots of places I've seen that could be potential overflows.
  • Memory pool draining; lets not see a repeat of stuff like heartbleed by not using memory pools.
  • Update to 1.2-stable (current tree) as far as possible

A quick note on Project Goals

A reminder that this project is a 'shallow' fork of Freeswitch. I have no intention of going feature crazy and introducing anything other than a basic installation of Freeswitch that meets MY needs (SIP over TCP/UDP with TLS and SRTP). My goals specifically are feature and platform stability and security. I will be making attempts to pull security fixes from the upstream tree but I have no intention currently of ever updating past 1.2, if you think you need web sockets in your sip stack go install linux.

No comments:

Post a Comment