通过TCP的SIP+转换为UDP以与SIP电话通话
SIP over TCP + convert to UDP to talk to SIP Phone
我在Ubuntu 12.04盒子上安装了linphone。一位同事想测试一款Windows SIP手机,他说,该手机使用TCP上的SIP而不是UDP。
我突然想到,我可以创建一个20美分的C++程序,该程序有两个线程,一个用于UDP端,另一个用于TCP端,它只需接收一个协议并将其发送给另一个。由于UDP部分将只在linux盒子上,我怀疑数据报与流之间是否存在任何问题,而且SIP无论如何都不是特别"流"
这行得通吗?还是有一些我不知道的潜在协议肮脏。通过TCP使用的SIP是否与通常通过UDP传输的SIP相同?有没有一个众所周知的C++解决方案?
我四处寻找可能的解决方案,socat是一种可能性,但它是GPL,这是为嵌入式OCO项目设计的。
欢迎提出任何其他意见或建议。
看起来linphone支持TCP上的SIP(这是RFC 3261强制要求的)。
http://www.linphone.org/eng/features/
是的,这是相同的SIP消息通过电线。
您最初问题的答案是,不,您不能将TCP SIP数据包"管道"传输到UDP套接字。SIP确实在Via报头中包括传输类型,该报头用于确定在其上传输响应的网络路径。除此之外,对于对话传输,您的SIP服务器还需要生成新的SIP请求,目的地是TCP客户端,它需要一些设置或机制来将这些请求发送到您的"管道",然后需要解析SIP请求以确定数据包需要发送到哪里。
总而言之,往好了说,这是一个非常脆弱的解决方案,往坏了说,它是一个相当破碎的解决方案。找到一个支持TCP的SIP服务器/客户端会更快、更容易,就像现在大多数服务器/客户端所做的那样,事实上,这似乎就是你所做的。
- 如何以与 API 兼容的方式重命名类成员?
- 访问类对象以与全局变量进行比较
- 如何使 printf 以与 NSLog 相同的方式打印字符缓冲区?
- 在Windows中构建GSL(GNU科学库)以与VS2015一起使用
- 如何实现自己的生成器以与 std 发行版一起使用
- 配置 Visual Studio 以与 Boost.Python 和 Python 3 配合使用
- 对象的序列化向量为STD :: String,以与MPI一起使用
- 我如何配置我的cmake文件以与Google Test和CTEST一起使用
- 如何在 conda 虚拟环境中安装 c++ 构建工具以与 cython/setproctitle 一起使用
- 是否可以重载模板函数以与 std::vector 的元素一起使用
- 过滤关键/致命例外,以与AddVectoredExceptionHandler一起使用
- 尝试实现通过引用传递的向量以与二叉树一起使用,我错过了什么
- 生成代码以与不需要重新编译的正在运行的 cpp 应用程序交互的好方法是什么?
- Visual Studio:热键/自动对.h中的函数进行排序以与.cpp保持一致的方式
- 在 Python 中以与 C++ 相同的精度乘以双倍
- 如何获取float地址以与memcpy一起使用
- 创建自定义迭代器结构以与CSTDIO一起使用
- 蓝牙可以接收数据,但不能传输数据(用C++进行套接字编程以与Matlab通信)
- 通过TCP的SIP+转换为UDP以与SIP电话通话
- 在 ubuntu 12.04 上设置 Xerces 以与 cmake 和 clang 一起使用