使用gsoap工具生成onvif框架过程; Linux 环境下生成 Linux C。
在上gsoap-2.8.31生成 onvif.h
(0) 使用工具:wsdl2h
-c 产生c语言的代码,否则产生C++(默认)
-s 不使用STL代码
-t 指定typemap.dat文件
-o 指定生成的头文件名
(1) 编译 wsdl2h 工具
./configure --prefix=/path/to/install
make -j2 && make install
(2) 联网生成 onvif.h
./wsdl2h -c -s -t typemap.dat -o onvif.h \
http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl \
http://www.onvif.org/ver10/events/wsdl/event.wsdl \
http://www.onvif.org/onvif/ver10/display.wsdl \
http://www.onvif.org/onvif/ver10/deviceio.wsdl \
http://www.onvif.org/onvif/ver20/imaging/wsdl/imaging.wsdl \
http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl \
http://www.onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl \
http://www.onvif.org/onvif/ver10/receiver.wsdl \
http://www.onvif.org/onvif/ver10/recording.wsdl \
http://www.onvif.org/onvif/ver10/search.wsdl \
http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl \
http://www.onvif.org/onvif/ver10/replay.wsdl \
http://www.onvif.org/onvif/ver20/analytics/wsdl/analytics.wsdl \
http://www.onvif.org/onvif/ver10/analyticsdevice.wsdl
typemap.data
在 gsoap 源内,如果想离线生成,需要下载所有的wsdl文件到同目录下,运行如下命令:
./wsdl2h -c -s -t typemap.dat -o onvif.h \
devicemgmt.wsdl \
event.wsdl \
display.wsdl \
deviceio.wsdl \
imaging/wsdl/imaging.wsdl \
media/wsdl/media.wsdl \
ptz/wsdl/ptz.wsdl \
receiver.wsdl \
recording.wsdl \
search.wsdl \
emotediscovery.wsdl \
replay.wsdl \
analytics.wsdl \
analyticsdevice.wsdl
使用 onvif.h
生成框架代码
在使用命令通过onvif.h生成代码之前,得先确认下是否需要做安全验证,也就是所谓的鉴权。
在 onvif.h 文件上添加如下代码:
import "wsse.h" //安全验证
使用工具 soapcpp2
,命令的相关命令参数如下:
-2 //采用SOAP1.2,和SOAP1.0版本不同,会导致搜索工具搜索不到
-x //不产生xml文件(可用可不用,xml有一定帮助,但是太多)
-I //为引入路径
-C //只产生客户端代码(注意:C是大写,不推荐有次命令)
生成代码命令:
soapcpp2 -2 -c onvif.h -x -I ./gsoap-2.8/gsoap/import -I ./gsoap-2.8/gsoap/
修改wsdd.nsmap为wsdd.h. 删除nsmap 文件,复制./gsoap-2.8/gsoap/下的
stdsoap2.c
和 stdsoap2.h
到当前目录下:
$ ll *.c *.h
-rw-r--r-- 1 juson juson 4.2M May 26 14:04 onvif.h
-rw-r--r-- 1 juson juson 12M May 26 14:05 soapC.c
-rw-r--r-- 1 juson juson 937K May 26 14:05 soapClient.c
-rw-r--r-- 1 juson juson 964 May 26 14:05 soapClientLib.c
-rw-r--r-- 1 juson juson 4.5M May 26 14:05 soapH.h
-rw-r--r-- 1 juson juson 815K May 26 14:05 soapServer.c
-rw-r--r-- 1 juson juson 964 May 26 14:05 soapServerLib.c
-rw-r--r-- 1 juson juson 2.0M May 26 14:05 soapStub.h
-rw-r--r-- 1 juson juson 539K May 26 15:14 stdsoap2.c
-rw-r--r-- 1 juson juson 140K May 26 15:14 stdsoap2.h
-rw-r--r-- 1 juson juson 3.0K May 26 14:07 wsdd.h
框架搭建完成。