关于 c :SIP over TCP 转换为 UDP 与 SIP 电话通话

SIP over TCP + convert to UDP to talk to SIP Phone

我的 Ubuntu 12.04 机器上安装了 linphone。一位同事想测试一个使用 SIP over TCP 而不是 UDP 的 Windows SIP 电话。

我想到我可以创建一个 20 美分的 C 程序,它有两个线程,一个用于 UDP 端,一个用于 TCP 端,它只是接收一个协议并将其发送到另一个。由于 UDP 部分仅在 linux 机器上,我怀疑数据报与流之间存在任何问题,而且 SIP 并不是特别"流式"。

这是否可行,或者是否存在一些我不知道的底层协议问题。通过 TCP 使用的 SIP 是否与通常通过 UDP 传输的 SIP 相同?是否有一个众所周知的 C 解决方案?

我已经四处寻找可能的解决方案,socat 是一种可能,但它是 GPL,它适用于嵌入式 OCO 项目。

非常欢迎任何其他建议或建议。


您最初的问题的答案是,不,您不能只将 TCP SIP 数据包"管道"到您的 UDP 套接字。 SIP 确实在 Via 标头中包含传输类型,该标头用于确定传输响应的网络路径。除了对话中传输之外,您的 SIP 服务器还需要生成发往 TCP 客户端的新 SIP 请求,并且需要一些设置或机制才能将这些请求发送到您的"管道",然后需要解析 SIP 请求以确定数据包需要发送到哪里。

总而言之,这充其量是一个非常脆弱的解决方案,最坏的情况是一个非常破碎的解决方案。找到支持 TCP 的 SIP 服务器/客户端会更快、更容易,就像现在大多数人所做的那样,事实上,这似乎是您已经完成的工作。


看起来 linphone 支持基于 TCP 的 SIP(??由 RFC 3261 强制执行)。

http://www.linphone.org/eng/features/

是的,它是通过网络传输的相同 SIP 消息。