当前位置: 首页 > 工具软件 > oSIP > 使用案例 >

oSIP协议栈的使用

仰翰采
2023-12-01
说明:
本文的开发环境是—— Windows XP SP2+ VC++6.0 。文中使用的 oSIP 协议栈是 libosip2-3.0.3 libeXosip2-3.0.3 。本文将依次对 osipparser2 osip2 exosip2 的编译方法进行介绍。
一、          osipparser2 的编译
1 动态库
osipparser2 为工程名,创建空的动态库工程, File-> New-> Projects-> Win32 Dynamic-Link Library Project Name 输入 osipparser2 ,点击 OK 即可。
libosip2-3.0.3/src/osipparser2 文件夹下的文件全部复制到我们刚创建的工程的根目录下,并在 VC++6.0 下将所有的源文件和头文件都加入到工程内, Project-> Add To Project-> Files :在打开的对话框中选择全部 *.c *.h 文件,点击 OK 即可。
libosip2-3.0.3 中的 INCLUDE 文件夹导入到创建的工程中, Tools-> Options-> Directories :新建 - 选择浏览 - 确定。
保存工程,编译,成功!在 Debug 文件夹中生成 osipparser2.dll
2 静态库
osipparser2 为工程名,创建空的静态库工程, File-> New-> Projects-> Win32 Static Library Project Name 输入 osipparser2 ,点击 OK 即可。
导入 libosip2-3.0.3/src/osipparser2 文件夹下的所有源文件和头文件至工程。
导入 libosip2-3.0.3 中的 INCLUDE 文件夹。
保存工程,编译,成功!在 Debug 文件夹中生成 osipparser2.lib
二、          osip2 的编译
1 动态库
基本方法同 osipparser2 ,相似处不再赘述。
osip2 为工程名,创建空的动态库工程。
导入 libosip2-3.0.3/src/osip2 文件夹下的所有源文件和头文件至工程。
导入 libosip2-3.0.3 中的 INCLUDE 文件夹。
导入刚才编译成功的 osipparser2.lib Project-> Settings-> Link Object/library modules 填入 osipparser2.lib /NODEFAULTLIB:LIBCD.lib (避免 Warning LNK4098 )。
增加 OSIP_MT 宏,以启用线程库, Project-> Settings-> C/C++ Preprocessor definitions 填入 OSIP_MT
选择 run-time library Debug Multithreaded DLL, Project-> Settings-> C/C++ Category 选择 Code Generation ,在 Use run-time library 中调整。
鉴于 exosip2 需要使用 PSDK exosip2 又是基于 osip2 的,故这里提前用到 PSDK 。使用 PSDK 的原因是需要用到其中的库,升级系统的 Platform SDK VC++6.0 能使用的最新 SDK 下载地址如下: http://www.microsoft.com/msdownl ... PSP2FULLInstall.htm (VC6的支持已经停止,这是VC6能使用的最新SDK)。
安装完毕之后,进行下面操作。
导入 Microsoft Platform SDK INCLUDE 文件夹,移至最上。
导入 Microsoft Platform SDK LIB 文件夹, Tools-> Options-> Directories :选择 LIB FILES 后,新建 - 选择浏览 - 确定,移至最上。
保存工程,编译,成功!在 Debug 文件夹中生成 osip2.dll
2 静态库
osip2 为工程名,创建空的静态库工程。
导入 libosip2-3.0.3/src/osip2 文件夹下的所有源文件和头文件至工程。
导入 libosip2-3.0.3 中的 INCLUDE 文件夹。
加入 OSIP_MT 宏,以启用线程库。
导入 Microsoft Platform SDK INCLUDE 文件夹,移至最上。
导入 Microsoft Platform SDK LIB 文件夹,移至最上。
保存工程,编译,成功!在 Debug 文件夹中生成 osip2.lib
三、          exosip2 的编译
1 动态库
exosip2 为工程名,创建空的动态库工程。
导入 libeXosip2-3.0.3/src 文件夹下的所有源文件和头文件至工程。
加入 OSIP_MT 宏,以启用线程库。
选择 run-time library Debug Multithreaded DLL, Project-> Settings-> C/C++ Category 选择 Code Generation ,在 Use run-time library 中调整。
导入刚才编译成功的 osipparser2.lib osip2.lib /NODEFAULTLIB: LIBCD.lib
导入 WSock32.Lib IPHlpApi.Lib WS2_32.Lib Microsoft Platform SDK LIB 文件夹中的文件)。
导入 libosip2-3.0.3 中的 INCLUDE 文件夹。
导入 libeXosip2-3.0.3 中的 INCLUDE 文件夹。
导入 Microsoft Platform SDK INCLUDE 文件夹,移至最上。
保存工程,编译,成功!在 Debug 文件夹中生成 exosip2.dll
2 静态库
osip2 为工程名,创建空的静态库工程。
导入 libosip2-3.0.3/src/osip2 文件夹下的所有源文件和头文件至工程。
导入 libosip2-3.0.3 中的 INCLUDE 文件夹。
加入 OSIP_MT 宏,以启用线程库。
选择 run-time library Debug Multithreaded, Project-> Settings-> C/C++ Category 选择 Code Generation ,在 Use run-time library 中调整。
导入 Microsoft Platform SDK INCLUDE 文件夹,移至最上。
导入 Microsoft Platform SDK LIB 文件夹,移至最上。
保存工程,编译,成功!在 Debug 文件夹中生成 exosip2.lib
 
NAT TRAVERSAL Reference Collection

1) NAT Traversal 技术
NATTraversal的解决方案提出的和实现的都不少,方案包括最开始看到的STUN(不支持很常用的对称NAT),TURN,ICE。ICE是一个基于STUN和TURN的框架,目前还是草案,没有找到相关的实现项目。刚刚看到了一个NAT Traversal BestPractices的文档,里面对TURN的评价是实现困难,而ICE也不是100%有效。根据这个文档中提到的两个目前较好的解决方案是开源的OpenSER和MediaProxy(分别针对SIP中的signal和media流)。
2) 相关资源
VOCAL——无NAT Traversal相关内容,但其网站上有STUND的源码,可用。http://www.vovida.org/
OpenSER——用于SIP signal穿越NAT,http://openser.org
MediaProxy——用于SIP media穿越NAT,http://mediaproxy.ag-projects.com/,http://www.ag-projects.com/MediaProxy.html
在查资料的时候,有个意外的发现,就是看到了YATE( Yet Another Telephony Engine)作者写的文章,里面提到了他们这个项目如何穿越NAT,SKYPE如何穿越NAT。http://freshmeat.net/articles/view/2079/

NAT BestPractices是MediaProxy项目的人写的,有一定参考价值;另外那个文档没有什么新鲜的内容,但是里面对STUN介绍比较多,推荐在需要了解STUN RFC中提到的4类防火墙的时候和STUN技术的时候参考这个文档,因为它配有示意图,容易理解。

 
 类似资料: