基于 gsoap 生成 onvif 服务端的基础上对接客户端私有接口

基于 gsoap 生成 onvif 服务端的基础上对接客户端私有接口

前言

基于 gsoap 生成 onvif 服务端框架代码,基本只能处理原来的 wsdl 上原有定义的接口!在实际项目里运用,很大可能还需要对接客户定制的私有接口,这个时候就需要改服务端的代码,接下来就是对修改源码做一下记录!!!

1、处理客户端的私有接口

通过调试发现,入口函数在于 soap_serve(), 客户端请求的接口在里面判断后不符合onvif标准接口就做了 close 操作!

soap_serve 的源码

SOAP_FMAC5 int SOAP_FMAC6 soap_serve(struct soap *soap)
{
#ifndef WITH_FASTCGI
	soap->keep_alive = soap->max_keep_alive + 1;
#endif
	do
	{
#ifndef WITH_FASTCGI
		if (soap->keep_alive > 0 && soap->max_keep_alive > 0)
			soap->keep_alive--;
#endif
		int value = soap_begin_serve(soap);
		//printf("soap_begin_serve = %d soap->error = %d \n", value, soap->error);
		if (value)
		{	if (soap->error >= SOAP_STOP)
				continue;
			return soap->error;
		}
		if ((soap_serve_request(soap) || (soap->fserveloop && soap->fserveloop(soap))) && soap->error && soap->error < SOAP_STOP)
		{
#ifdef WITH_FASTCGI
			soap_send_fault(soap);
#else
			return soap_send_fault(soap);
#endif
		}
#ifdef WITH_FASTCGI
		soap_destroy(soap);
		soap_end(soap);
	} while (1);
#else
	} while (soap->keep_alive);
#endif
	return SOAP_OK;
}

在 soap_begin_serve()接口里面判断,如果满足条件 soap->error < SOAP_STOP ,里面就会 soap_closesock(soap); 就会引起后面的回复异常的问题!
所以需要在里面做处理,如果判断到是 SOAP_POST 方法,而且是私有接口的,就让它按正常流程走!下面是具体修改的点(stdsoap2.c 文件里面的接口)
在这里插入图片描述

接下来修改:soapServer.c 文件的接口
soap_serve_request 接口里面上添加对应的触发接口
如下图:
在这里插入图片描述
同时需要实现相对应的方法:
在这里插入图片描述
soapStub.h 添加接口的定义
在这里插入图片描述

SOAP_FMAC5 int SOAP_FMAC6 __soap_serve_turnOnAudioAlert(struct soap*, char *);
SOAP_FMAC5 int SOAP_FMAC6 __soap_serve_turnOnPanicSwitch(struct soap*, char *);

SOAP_FMAC5 int SOAP_FMAC6 soap_serve_turnOnAudioAlert(struct soap *soap);
SOAP_FMAC5 int SOAP_FMAC6 soap_serve_turnOnPanicSwitch(struct soap *soap);

onvif_server_interface.c 外部的实现:
在这里插入图片描述
以上就是 onvif 服务器上添加私有接口的特殊处理了!!!
如果伙伴们有更好的方法,欢迎指导一下!!!

前期文章:
1、onvif 服务端的代码生成
2、实现相关接口实现出图功能

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用gSOAP生成Onvif服务端,你需要按照以下步骤操作: 1. 下载和安装gSOAP:首先,你需要从gSOAP官方网站(https://www.genivia.com/downloads.html)下载并安装gSOAP工具包。根据你的操作系统选择合适的版本,并按照官方文档进行安装步骤。 2. 定义服务接口:使用gSOAP接口定义语言(IDL)来定义你的Onvif服务接口。在IDL文件中,你可以定义服务的方法、参数和返回类型等。确保按照Onvif规范来定义你的服务接口。 3. 生成代码:使用gSOAP提供的工具来生成C/C++代码。你需要使用命令行工具 `soapcpp2` 并提供IDL文件作为输入。执行命令后,gSOAP生成相应的服务端客户端代码文件。 4. 实现服务逻辑:根据生成的代码,你需要实现Onvif服务的具体逻辑。这包括处理接收到的请求、执行相应的操作并构建响应。 5. 编译和构建:编译你的服务端代码,并链接所需的库文件。确保按照gSOAP文档提供的指导进行编译和构建步骤。 6. 运行服务端:运行生成服务端程序,并确保它能够监听和处理来自客户端的请求。 请注意,这只是一个概述性的步骤,具体的实施可能因个人需求和环境而异。在实际开发中,你还需要了解Onvif协议规范和gSOAP工具的详细用法,并根据实际情况进行适当的配置和定制。 希望这些信息对你有所帮助!如果你有进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值