我的Ubuntu 12.04盒子上安装了linphone。一位同事希望测试一款Windows SIP手机,他说,这种手机使用的是SIP over TCP而不是UDP。
我认为我可以创建一个20美分的C ++程序,该程序有两个线程,一个用于UDP端,一个用于TCP端,它只接收一个协议并将其发送给另一个协议。由于UDP部分只在linux机器上,我怀疑数据报与流有什么问题,而且SIP并不是特别“流畅”。
这是否有效或是否存在一些我不知道的基本协议肮脏。通过TCP使用的SIP是否与通常通过UDP传输的SIP相同?有没有一个众所周知的C ++解决方案呢?
我一直在寻找可能的解决方案,而socat是可能的,但它是GPL,这是针对嵌入式OCO项目的。
非常欢迎任何其他建议或建议。
答案 0 :(得分:2)
答案 1 :(得分:2)
原始问题的答案是,您不能将TCP SIP数据包“管道”到UDP套接字。 SIP确实包括Via头中的传输类型,用于确定传输响应的网络路径。除了对话内传输之外,您的SIP服务器还需要生成发往TCP客户端的新SIP请求,并且需要一些设置或机制来让它将这些请求发送到您的“管道”,然后需要解析SIP请求以确定需要发送数据包的位置。
总而言之,它最多只是一个非常脆弱的解决方案,最糟糕的是一个相当破碎的解决方案。找到支持TCP的SIP服务器/客户端会更加快速和容易,因为这些日子大多数都支持TCP,事实上这似乎是你已经完成的工作。