onvif 笔记五(discovery client)
来源:互联网 发布:关于淘宝的书籍 编辑:程序博客网 时间:2024/05/20 17:39
onvif discovery 客户端
其他部分源码参见之前的博文。
#include <sys/time.h>#include <stdio.h>#include <stdlib.h>#include <pthread.h>#include <string.h>#include "soapH.h"#include "soapStub.h"static char uuid[128] = {0};static char probeType[128] = {0};static char wsaTo[128] = {0};static char wsaAction[128] = {0};SOAP_FMAC5 int SOAP_FMAC6 soap_discovery_start(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct d__ProbeType *d__Probe){ struct __dndl__Probe soap_tmp___dndl__Probe; if (!soap_action) soap_action = "http://www.onvif.org/ver10/network/wsdl/Probe"; soap->encodingStyle = NULL; soap_tmp___dndl__Probe.d__Probe = d__Probe; soap_begin(soap); soap_serializeheader(soap); soap_serialize___dndl__Probe(soap, &soap_tmp___dndl__Probe); if (soap_begin_count(soap)) return soap->error; if (soap->mode & SOAP_IO_LENGTH) { if (soap_envelope_begin_out(soap) || soap_putheader(soap) || soap_body_begin_out(soap) || soap_put___dndl__Probe(soap, &soap_tmp___dndl__Probe, "-dndl:Probe", NULL) || soap_body_end_out(soap) || soap_envelope_end_out(soap)) return soap->error; } if (soap_end_count(soap)) return soap->error; if (soap_connect(soap, soap_endpoint, soap_action) || soap_envelope_begin_out(soap) || soap_putheader(soap) || soap_body_begin_out(soap) || soap_put___dndl__Probe(soap, &soap_tmp___dndl__Probe, "-dndl:Probe", NULL) || soap_body_end_out(soap) || soap_envelope_end_out(soap) || soap_end_send(soap)) return soap_closesock(soap); return SOAP_OK;}SOAP_FMAC5 int SOAP_FMAC6 soap_discovery_recv(struct soap *soap, struct d__ProbeMatchesType *d__ProbeMatches){ if (!d__ProbeMatches) { soap_closesock(soap); return -1; } soap_default_d__ProbeMatchesType(soap, d__ProbeMatches); if (soap_begin_recv(soap) || soap_envelope_begin_in(soap) || soap_recv_header(soap) || soap_body_begin_in(soap)) return soap_closesock(soap); soap_get_d__ProbeMatchesType(soap, d__ProbeMatches, "d:ProbeMatches", "d:ProbeMatchesType"); if (soap->error) { soap_recv_fault(soap, 0); return -1; } if (soap_body_end_in(soap) || soap_envelope_end_in(soap) || soap_end_recv(soap)) { soap_closesock(soap); return -1; } return SOAP_OK;}SOAP_FMAC5 int SOAP_FMAC6 soap_discovery_stop(struct soap *soap){ return soap_closesock(soap);}int main(){ struct soap *soap; int result = 0; struct d__ProbeType req; struct d__ProbeMatchesType resp; struct d__ScopesType sScope; struct SOAP_ENV__Header header; int count = 0; soap = soap_new(); if(soap == NULL) { printf("sopa new error\r\n"); return -1; } soap_set_namespaces(soap, namespaces); soap->recv_timeout = 10; soap_default_SOAP_ENV__Header(soap, &header); getMyUuid(uuid); sprintf(wsaTo, "urn:schemas-xmlsoap-org:ws:2005:04:discovery"); sprintf(wsaAction, "http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe"); header.wsa__MessageID = uuid; header.wsa__To = wsaTo; header.wsa__Action = wsaAction; soap->header = &header; soap_default_d__ScopesType(soap, &sScope); sScope.__item = ""; soap_default_d__ProbeType(soap, &req); req.Scopes = &sScope; req.Types = "";//"dn:NetworkVideoTransmitter"; int i = 0; result = soap_discovery_start(soap, "soap.udp://239.255.255.250:3702", NULL, &req); while(result == SOAP_OK) { result = soap_discovery_recv(soap, &resp); if(result == SOAP_OK) { if(soap->error) { printf("soap error 1: %d, %s, %s\n", soap->error, *soap_faultcode(soap), *soap_faultstring(soap)); result = soap->error; } else { printf("====================================================================\r\n"); if(soap->header->wsa__MessageID) { printf("MessageID : %s\r\n", soap->header->wsa__MessageID); } if(soap->header->wsa__RelatesTo && soap->header->wsa__RelatesTo->__item) { printf("RelatesTo : %s\r\n", soap->header->wsa__RelatesTo->__item); } if(soap->header->wsa__To) { printf("To : %s\r\n", soap->header->wsa__To); } if(soap->header->wsa__Action) { printf("Action : %s\r\n", soap->header->wsa__Action); } for(i = 0; i < resp.__sizeProbeMatch; i++) { printf("__sizeProbeMatch : %d\r\n", resp.__sizeProbeMatch); printf("Target EP Address : %p\r\n", resp.ProbeMatch[i].wsa__EndpointReference); printf("Target EP Address : %s\r\n", resp.ProbeMatch[i].wsa__EndpointReference.Address); printf("Target Type : %s\r\n", resp.ProbeMatch[i].Types); printf("Target Service Address : %s\r\n", resp.ProbeMatch[i].XAddrs); printf("Target Metadata Version : %d\r\n", resp.ProbeMatch[i].MetadataVersion); if(resp.ProbeMatch[i].Scopes) { printf("Target Scopes Address : %s\r\n", resp.ProbeMatch[i].Scopes->__item); } } } } else if (soap->error) { printf("soap error 2: %d, %s, %s\n", soap->error, *soap_faultcode(soap), *soap_faultstring(soap)); result = soap->error; } } soap_discovery_stop(soap); soap_destroy(soap); // remove deserialized class instances (C++ only) soap_end(soap); // clean up and remove deserialized data soap_free(soap);//detach and free runtime context soap_done(soap); // detach context (last use and no longer in scope) return result;}
- onvif 笔记五(discovery client)
- onvif 笔记二(discovery server)
- onvif 客户端discovery
- onvif开发之二:discovery
- ONVIF学习之实现discovery
- onvif 笔记一(gsoap)
- onvif 笔记四(小结)
- onvif笔记
- onvif 笔记
- Onvif开发server和client
- onvif 笔记三(User management)
- 基于Gsoap 集成多个ONVIF服务(ws-discovery)
- ONVIF 客户端简单实现Discovery,实现设备搜索.
- win7下vs中实现onvif discovery(客户端、服务端)
- onvif学习3-自发现功能实现(Discovery)
- onvif server端Discovery实现,通过OnvifTestTool12.06测试【转】
- 基于gsoap的onvif discovery服务端程序主要流程
- ONVIF协议实现1:Server端Discovery的实现详解
- linux做单臂路由实现trunk 使vlan之间通信
- 网页防篡改系统原理
- java excel 导出
- java解析json
- Sybase SQL Server索引的使用和优化
- onvif 笔记五(discovery client)
- linux中wget的使用
- 在Android上使用LocalSocket实现上层Java和底层C++的通信
- Smarty总结
- Smart Citroen/Peugeot HU83 2-in-1 Auto Pick and Decoder
- Python 开发者应该知道的 7 个开发库
- 谈谈Tempdb在数据库系统中的作用
- 获取 Android 4.2 的 ROOT 权限(越狱)
- C#仿QQ皮肤-TabControl控件实现