关于 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 项目。

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

  • socat 不能为你做那件事吗?
  • 您需要解析 SIP。如果 SIP 消息通过 TCP 进入,您需要知道该消息的长度。您只能通过解析 SIP 并考虑 Content-Length 标头来学习,至少对于具有正文的消息而言。对于没有正文的消息,您可能会通过寻找一对 \\\\
    \\\\

  • 是的,socat GPL 可以做到。我的老板讨厌 GPL。


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

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

  • 并添加两个协议使用不同的事实:UDP 上的 SIP 使用重新发送(具有指数退避)来提高其可靠性。
  • 是的,我用 TCP 尝试过 Linphone。除了我们无法为我们制作自己的 gui 并且不想使用”他们的”的 dot-net 应用程序找到可靠甚至可行的 Win*-64 位 SIP 解决方案外,我什至永远不会追求这个问题。 Linphone 最好的部分是它可以作为对话另一端的 Linux 机器中的守护程序运行,并且不需要 gui 或命令行。


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

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

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

  • 供以后读者注意。我使用的是 linphone 3.2.1,它早于 TCP 支持的添加。这是 apt-get 为 Ubuntu 安装的级别,所以我只能从头开始构建 3.5.2。它也是一个很好的构建。我不得不为 speex 下载几个包、几个头文件和最前沿的 rc1。但它确实有效!


来源:https://www.codenong.com/12262908/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9073.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?