7 年前我经历了类似的任务,但正在寻找嵌入式 C 版本。我查看了oSIP库。它完成了将 SIP 数据包转换为结构并返回的所有工作。
但是,文档中有一点让我印象深刻。作者建议您非常熟悉 SIP 规范 ( RFC 3261 ) 以有效地使用该库。多次阅读规范后,我最终编写了自己的解析器和呼叫控制应用程序。
请记住,SIP 仍然是一个不断发展的标准。有一个活跃的SIPForum小组目前正在开发SIPConnect 1.1,以标准化 SIP 服务提供商(例如 Vonage)和 SIP-PBX 之间的接口。还有一个名为BLISS的活动,用于定义“最佳实践”以在用户代理之间实现 SIP 功能。
互操作性很困难。有数百个与 SIP 相关的 RFC。不同的端点使用不同的端点,并且对规范的解释并不总是兼容的。有几个不同的互操作性“测试事件(如SIPit)来确保您的实现与其他人一起工作。
无论您选择什么,请确保您对要实现的功能的规范有很好的了解。此外,规范和库将有助于数据包方面,但您仍然需要一个“呼叫控制”库(更高级别的“大脑”来决定如何处理 SIP 请求/响应)。除非您的应用程序纯粹是 SIP 代理,否则您还需要一个媒体层来处理音频。
说了这么多,几家互联网电话服务提供商 (ITSP) 已将SIP Express 路由器用作其服务的前端代理。它是非常可配置的,并且具有很高的兼容性成功率。