由于工作,需要自己开发一个SIP软交换。严格意义上已不是什么sip proxy、sip registar、sip redirect、B2BUA的哪一个了。其实国内做这个的,大家都差不多是一个server,搞定了注册、路由、认证、计费的功能。
认证、计费、路由这些都是自定义业务,每个项目的需求都不太一样,需要自己基于数据库来做。这部分的代码也比较容易搞定,就是些sql语句罢了。
比较麻烦的是sip本身的一些处理,如SIP消息解析、事务状态机、会话管理等,严格参照RFC3261来实现不太可取,工作量太大。
在当下开源项目这么多的情况下,选择一个开源的协议栈作为开发的基础,应该是个不错的选择。未来降低复杂性,优先选择仅支持SIP的协议栈,方便对代码的掌握。
当下比较纯粹的sip协议栈,当属osip。但osip本身看上去效率不高是事实,代码看上去非常的简单,虽然没有什么文档支持,但很容易看懂。估计实际用起来会有不少地方需要优化的,搞到最后和自己写一个也差不多了。
根据我个人开发softphone的经验,发现pjsip非常不错。系统设计优良、效率很高,对标准的支持也很完善。根据2年来的跟踪情况看,社区开发也一直都很活跃,但由于系统的结构化做的非常好,主设计一直都很稳定。而且pjsip社区一直都注重文档工作,相关文档和代码里的注释也是非常的多。
个人倾向基于pjsip里的sip协议部分来开发sip软交换,不过在开发softphone的过程中发现,pjsip从头到尾都是为softphone而设计。担心作为服务器的协议栈,会有意想不到的限制。已经发现代码里有很多XX_MAX宏定义,定义了诸如最大transaction、最大dialog等。
借此宝地发文,寄望于我辈同道中人,能有幸一起讨论分析。