Open Source SIP stacks compared
Martin van den Berg, August 2004.
I've spend some time looking at open-source SIP stacks. There are more open-source SIP stacks on the net than described here! I was only looking at those having a LGPL alike license and written in C or C++.
The information presented on this page are my personal findings, syntisized from the resp. websites, mailing lists and sources. If you find an error or have comments or additions, please let me know: firstname.lastname@example.org
The candidate stacks, documented in following subsections are:
* OPAL As a dual stack SIP and OpenH323, OPAL is the successor of OpenH323.
* VOCAL A stack primary used in servers - has a relationship with Cisco.
* sipX Pingtel its SIP stack, contributed to the SIPfoundry.
* reSIProcate A object oriented SIP library, written in C++. Spin-off of the VOCAL project.
* oSIP An ANSI C library, leaves control to the application.
OPAL is the Open Phone Abstraction Library, and is the successor to OpenH323. There were a couple of architectural issues in OpenH323, especially in the area of the codecs and media channels, that required a major rewrite. OPAL is designed to be an infrastructure for any protocol, not just H.323. It enables normalized interfaces so an application can quickly use a range of "call protocols", be it H.323, SIP, PSTN hardware, PC sound cards, MGCP or whatever proprietary protocol might exist. They all look the same to the application. OPAL and OpenH323 under Mozilla Public License (MPL). A prototype SIP implementation is also included.
The long-term goal is to use OPAL instead of openH323 as primary development library. A release with verified working SIP and OpenH323 was planned in mid June 2004. At this point OPAL is in an experimental phase.
OpenH323 is big in footprint and code. A lot of functionality is covered, especially for H.323 but codecs, RTP and SDP are also included. OPAL is planned to better support re-use or removal of sub-components. The community that uses and supports OpenH323 is large. The mailing list shows a lot of activity but has its focus primarily at H.323 instead of SIP.
The whole project relies on a platform abstraction layer: the PWLIB. This library is ported (and supported) onto many platforms including VxWorks, Linux, Win32 etc...
Although the structure of the library is complex, the quality of the code looks good. It is coded in C++ and depends mainly on class hierarchies. The OPAL library is designed to realize either User Agents (endpoints), proxies (gateways) or registrars, any other than that will result in modifications.
VOCAL is an open-source VoIP project, hosted en contributed by Vovida.org. Vovida.org is a communications community site dedicated to providing a forum for open source software used in datacom and telecom environments. Vovida.org is a unit of Cisco.
VOCAL is not just a stack; it provides the building blocks for a VoIP system. The focus is mainly on servers such as proxy servers, redirect servers, H323-SIP translators etc... Supported platforms are Lunix and Solaris. The SIP stack however is available as a C++ object oriented library. At this moment, the stack is only partially RFC3261 compliant. The latest VOCAL version (v.1.5.0) dates from April 2003. Although not up to date, a little bit of documentation is available.
Support is available via mailing lists, which is moderated and low volume. Questions like "what features does the stack support" are unfortunately blocked. Therefore, not all facts of this stack are known.
SipX is a family of SIP related projects, hosted by SIPFoundry. SipX is completely separate from reSIProcate (also hosted by the SIPfoundry). Pingtel contributed SipX to the SIPFoundry (Feb 2004). Actually, Pingtel formed the SIPfoundry nonprofit organization to shepherd efforts to create open-source IP telephony, messaging, presence and collaboration software. Pingtel is a commercial company that makes VOIP softphones and PBX software.
The sipXtacklib is a C++ object oriented SIP stack library, licensed under LGPL. Stable releases are available.
The SipX stack is small but functional and is being used in commercial products. The stack is also designed to function in an embedded environment. The open source software however, does not include the VxWorks port. Within the SipX family a registrar, proxy and softphone are available that use the sipXtacklib. The total footprint size is approx. 4Mb, excluding features can reduce this and stripping libraries like glib.
SipX is likely to be more portable than reSIProcate since it doesn't use advanced C++ features. Like other open source projects, the libraries looked at (sipXtacklib and sipXportLib) are poorly documented. Help however is available via the mail list.
Around 2 years ago, some people got together to write a C++ SIP stack that was supposed to be a clean slate 3261-based design. This lead to vocal2, hosted within the VOCAL project (but it has never shared any core design with the VOCAL code-base). One thing led to another and the project left the VOVIDA SCM umbrella and was reborn at www.resiprocate.org using sourceforge's project tools, but independent SCM (CVS). Time passed and PingTel announced their Open Source initiative, inviting other VoIP (and specifically SIP) related projects to participate. The reSIProcate team decided, in favour of visibility to be a part of the SipFoundry - as a separate project under the SipFoundry umbrella.
reSIProcate is a high performance, object-oriented, C++ sip stack that is compliant with RFC 3261. It includes support for a wide variety of operating systems, including Windows and Linux. It has full support for UDP, TCP, and TLS transports on both IPv4 and IPv6. It also implements the full set of specifications for DNS usage in SIP, including NAPTR and SRV lookups (RFCs: 3263, 2915, 2782) using an asynchronous DNS library (ares).
The reSIProcate project (at this time) is really mostly a stack and not a set of applications & stack like some other SIP projects. reSIProcate is currently used in commercial products and is quite stable. reSIProcate is suitable for implementing one of the following SIP applications:
* Phones (e.g. embedded);
* Softphones (any platform);
* B2buas, or;
* IM / Presence Servers or Clients.
Commercial deployments are:
* PurpleComm ( www.purplecomm.com)
o SipDragon: Proxy, Registrar, Voicemail, Presence Server
o Windows Softphone ( http://meet2talk.com)
* Jasomi Networks ( www.jasomi.com)
o PeerPoint * CSP - Italy ( www.csp.it)
o IM/Audio/Video UA for Windows
o Conference Server and h.323 gateway in development
* Computer Talk Technology ( www.computer-talk.com)
o Evaluating use of resiprocate for Contact Center product
A reSIProcate VxWorks port is not available. It is possible to port the library under the condition that a modern compiler is used that complies with the "ANSI 2000 C++" standard since not all compilers (fully) support the partial specializations and template operations used. E.g. it is reported to be build by gcc-2.95 and VC7.0 but cannot be build by VC6.0.
The library relies of two other open source initiatives: Ares (DNS resolver) and openssl (TLS). ReSIProcate is poorly documented but has a relatively active mail list. At first glance, the library does not seem to be designed for embedded systems.
The oSIP project has started in July 2000. The first official and public release was published in May 2001.
The oSIP library is at first a free software project. In the context of the third generation network, more and more telecom operators will use IP technology, the favorite land of Linux. One aspect of this evolution is that the future of Linux is highly dependent on the multimedia tools that will be available. oSIP, as a SIP implementation, will allow building interoperable registrar, user-agent (software phones), and proxy thus giving more chance to Linux to be part of the next generation telephony products.
But oSIP is not only targeted towards PC applications. oSIP is enough flexible and tiny to be used on small OS with low requirements. From the 0.7.0 release, the thread support is now optional and the design of the application is entirely chosen by the end-developer. oSIP will fit embedded systems. oSIP is known to run on the real time OS VxWorks and other ports should be simple.
The oSIP stack is a flat ANSI-C library. Its footprint is less than 400kb for a win32 compile. The oSIP stack doesn't offer a full-blown SIP solution. Instead it provides a message parser and API only. It has no OS dependencies. Creation of threads, sockets etc... are left to the application. In other words, oSIP doesn't force a specific architecture, threading- or socket usage.
oSIP, in fact, is made up out of three separate libraries. First, there is the parser, capable of reading and writing SIP and SDP messages. The second is a transaction/session manager, which provides state machines. The API of the latter is low-level so a third library is provided that provides a higher-level API but has a GPL license.
Open-source implementations based upon oSIP are:
* linphone - a linux softphone
* partysip - SIP proxy/registrar/redirect server
* siproxd - simple linux SIP proxy
從最後的comparision看來，他是推薦osip: 又小，功能又齊，u又os independent.