1

我的 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 项目。

任何额外的意见或建议都将非常受欢迎。

4

2 回答 2

2

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

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

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

于 2012-09-04T12:49:00.803 回答
2

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

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

于 2012-09-04T22:27:20.380 回答