Why doesn't the FacetPhone Mobile App use the SIP protocol?


Most people don't care about the underlying call control protocol that their soft phone uses.  But if they do pay attention, they know that almost every soft phone in the world uses the SIP protocol for call control.  So, why in the world didn't we use SIP in our mobile app?


To begin with, SIP is actually a poor protocol for a phone that is being controlled by a phone system that has a user interface (or any other way to control calls other than with just the phone).  SIP is a peer to peer protocol, so the SIP phone is it's own little autonomous thing and the phone system just has to deal with it.  This puts more of the functionality in the phone instead of in the PBX where it belongs.


In the early days of VoIP there was an alternative protocol, MGCP.  This was a master-slave protocol where the PBX controlled the phone and the phone did what it was told!  But those days are gone and all IP phones and soft phones are now SIP based.  Of course, we were able to deal with the SIP phone and make FacetPhone's features work with it (baring some very minor features that just weren't possible).


However, there are still some things that are awkward with SIP phones.  For example, the user can press the Do Not Disturb button on their phone and the phone never tells the PBX about it.  Instead it just rejects all calls sent to it.  So he have this situation - a user presses the DND button and forgets about it.  Then they use the user interface to pick up a parked call and when we try to get the phone to play along with this request, it refuses and the pickup fails.  With an MGCP phone, the PBX would just tell the phone to let it know when the user presses the DND key and the PBX could then act accordingly.


So we didn't see any point in using SIP for our soft phone because it isn't the best protocol for this job and we only care about the app running with FacetPhone, so we weren't forced to use SIP.


We didn't use MGCP either but we did use a master-slave protocol of our own design.  The app has the same connection to the server as the FacetPhone user interface, so we already had a rich protocol for exchanging information established.  To implement the call control we added about half a dozen commands to this protocol.  This made the app tiny compared to the size it would have been if we had stuffed an entire SIP protocol stack into it.  On the server side, the amout of code that had to be added to support this new protocol was about 5% the size of the code to support SIP.


And that's why we didn't use SIP!