oSIP 是遵循 IETF 标准,使用 ANSI C 编写,源代码开放的 SIP 协议栈。

oSIP 开发库是第一个自由软件项目。在第三代网络体系中,越来越多的电信运营商将要使用 IP 电话(Linux 也成为支撑平台的幸运儿)。发展的一个侧面是在不久 的将来,Linux 将更多支持多媒体工具。oSIP,作为 SIP 开发库,将允许建造互操作的注册服务器、用户代理(软件电话)和代理服务器。所有的这些都 平添了 Linux 将作为下一代电话产品的机会。

但 oSIP 的目标并非仅仅在 PC 应用。OSIP 具有足够的灵活和微小,以便在小的操作系统(例如手持设备)满足其特定要求。从 0.7.0 版本发布,线程的支持作为可 选项。作为开发者的我们,可以在应用程序设计时进行选择。OSIP 在将来会完美的适用于蜂窝设备和嵌入式系统当中。oSIP 被众所周知应用于实时操作系统 VxWorks 当中,并且其他支持将是简单的事情。

描述:

GNU oSIP 库是 SIP - rfc3261 的实现。

电子邮件:jack@atosc.org 许可证:LGPL(http://www.gnu.org) 主页:http://www.gnu.org/software/osip/osip.html 下载:ftp://ftp.gnu.org/gnu/osip

“GNU oSIP 库” 是 “GNU 项目” 的一部分。 您可以查看 www.gnu.org 获取有关成为 “GNU 项目” 的一部分的更多信息。

有关信息,请查看: INSTALL HISTORY FEATURES

链接:

最新版本:ftp://ftp.gnu.org/gnu/osip 主页:http://www.gnu.org/software/osip/osip.html 在线文档:http://www.gnu.org/software/osip/

支持的平台:

该库已知可以在各种平台上编译:

  • GNU/Linux
  • MacOSX(Darwin)
  • OpenBsd 3.1/3.2 // (FreeBSD&NetBSD 应该也可以工作)
  • Windows NT/95/2000(VC++6.0 或 cygwin)
  • Solaris
  • HP-Unix。
  • VxWorks。
  • 一些嵌入式 Linux 系统。
  • WinCE(据说可能)

有关编译的更多信息,请查看 ./help 目录。

测试程序:

该库包含一些用于解析器的内置测试。要快速测试解析器,请键入:(请注意,某些测试必须失败!)

$> make check

请注意 ./src/test/CHECK 文件以获取更多信息。

联系信息:

有关 SIP 栈或任何贡献的更多信息, 您可以联系作者 jack@atosc.org

提供支持的邮件列表可供使用:osip@atosc.org。 您可以通过发送邮件到:osip-request@atosc.org, 并将主题设置为 “subscribe” 来订阅。

历史:

oSIP 栈项目始于 2000 年 9 月,即 SIP 协议的早期阶段。

最初版本在功能上与实际版本非常接近。已经提供了 SIP 解析器和 SIP 状态机。从这一点开始直到版本 0.9.7,API 并不十分清晰,但 osip 已经稳定、可移植、灵活且符合 SIP。

在发布 rfc2543 后,进行了大量开发以跟随在 rfc3261 最终发布之前产生的草案(大约在版本 0.8.X)。

许多用户要求帮助使用 API,并报告了他们使用它时遇到的困难。我决定将 osip 优化成一个新的 osip2 版本,该版本将提供一个更简单、更友好的 API。除了极少数例外之外,从 0.9.7 版本到 2.0.0 版本,只有 API 发生了变化。从这个版本开始,osip 变得更易读。

然而,oSIP 仍然很难使用。这其中有原因。oSIP 被设计为灵活的(这使得 API 相当庞大)。oSIP 是无架构的(但您需要了解它的工作原理才能正确使用它)。oSIP 只实现了 SIP 的低层(因此您仍然可以构建格式不正确的消息或不符合规范的消息)。oSIP 不会警告您可能发生的大多数错误。

请注意,如果您使用 osip,仍然需要仔细阅读 rfc。oSIP 不容易使用,但我相信在灵活性方面有好处。如果您发现 osip 使用过于复杂,请寻找其他合适的解决方案。

特性:

oSIP 不是一个完整的 SIP 栈,永远也不会实现所有的规范。相反,目标是提供一组对任何类型的 SIP 代理通用的有限功能。因此,oSIP 不针对任何特定的实现,可以用于实现 SIP 端点、代理或任何更特定的 SIP 代理,如 B2BUA。

由 osip 提供的任何 SIP 代理所需的最小常见功能如下所述。

然而,提供了一些面向 SIP 端点的额外功能。其中一些被认为是有用的和稳定的,例如对话管理 API。某些功能特别不灵活,例如 SDP 协商功能,您应该考虑实现您自己的功能。如果您仍然希望

SIP 解析器:

oSIP 中实现的初始特性是一个 SIP 解析器。关于它并没有太多可说的:它能够解析和重新格式化 SIP 请求和应答。

可用的解析工具的详细信息如下:

1 SIP 请求/应答 2 SIP URI 3 特定头部 4 Via 5 CSeq 6 Call-ID 7 To、From、Route、Record-Route 等 8 与认证相关的头部 9 与内容相关的头部 10 接受相关的头部 11 … 12 通用头部 13 附件解析器(应支持 mime) 14 SDP 解析器

SIP 事务状态机:

oSIP 实现的一个有趣且稍微复杂的特性是适用于 SIP rfc 定义的不同事务的 4 个状态机。

SIP 定义了以下 4 个状态机,oSIP 中使用的缩写如下:

  • ICT : 邀请客户端事务(第 17.1.1 节)
  • NICT: 非邀请客户端事务(第 17.1.2 节)
  • IST : 邀请服务器事务(第 17.2.1 节)
  • NIST: 非邀请服务器事务(第 17.2.2 节)

如果您已经阅读了 rfc(请做!),您会注意到这四个状态机在 SIP rfc3261.txt 中提供了图示(第 17.1 和 17.2 节)。

作为您在 rfc3261 中将找到的示例,以下是适用于 “邀请客户端事务” 的图示(第 127 页)

(这里插入了一张关于 “邀请客户端事务” 的图示,展示了事务的状态转换)

正如您可以预期的那样,使用 osip,邀请客户端事务可能处于 CALLING、PROCEEDING、COMPLETED 或 TERMINATED 状态。为了 “执行” 状态机,您将构建事件,将它们提供给正确的事务上下文,如果事件在当前状态中允许,则事务的状态将更新。

事件分为三类:

  • SIP 消息
  • 计时器
  • 传输错误

其他特性:

为了简化 SIP 可移植应用程序的开发,osip 提供了线程、信号量和互斥量的抽象方法。

您仍然可以选择在一些嵌入式平台上不带线程支持地编译 osip,这可能是必要的。

请向邮件列表 osip@atosc.org 报告任何移植问题(首先订阅!)或直接向我报告 jack@atosc.org

如果您正在构建一个新的端口,我肯定会考虑将其合并。

其他设施:

oSIP 还提供了一些完全可选的小工具。

其中,对话设施(osip_dialog.h),主要供 SIP 端点使用,是一个稳定的额外特性。它将允许您构建一个在 rfc3261 中描述的结构(第 12 节:对话)。构建完成后,您可以重用此信息将接收到的请求与特定的 SIP 呼叫匹配,或在特定的 SIP 呼叫中构建新请求。

在 osip 中实现了一个旧的特性:SDP 协商器。我建议您不要使用这个旧的设施,它不够强大,经常不符合规范,也不够灵活。它也相当难以阅读和编写(由我编写!)。无论如何,我将在 osip 的将来版本中删除它。我已经警告过你了…

然而,我正在构建一个新的 SDP 协商器(osip_rfc3264.h)。虽然还没有完全准备好,但我希望到 2004 年底能完成它。这是一个有希望的工作,我希望它足够灵活,适用于任何应用程序。时间会证明一切。

oSIP 最后还包含了一个 MD5 实现(osip_md5.h),当您实现 SIP 摘要认证时会发现它很有用。