gSOAP onvif初探(二) onvif鑑權

2021-08-04 11:51:26 字數 2558 閱讀 5635

onvif開發乙個重要的部分就是鑑權,這點在前面第一篇生成soap框架**時就有提到。在標頭檔案裡加入鑑權的包含檔案:

#import 

"wsse.h"

onvif要實現鑑權功能,有兩種方式:

直接使用gsoap自帶的源**檔案+openssl庫;

剪下部分上述檔案裡的必需**,自實現鑑權功能。

在window端就一般採用第一種方式了,比較方便,需要的函式直接呼叫就可以了,其實主要是乙個函式:

soap_wsse_add_usernametokendigest(struct soap *soap, const

char *id, const

char *username, const

char *password)

如果採用第一種方式,直接呼叫上面的函式,就實現了鑑權功能。

但是在嵌入式端,一般儲存空間有限,占用空間少的方案2當然是首選。

dom.c wsseapi.c smdevp.c mecevp.c threads.c wsaapi.c

還有對應的標頭檔案。這些檔案一般在\gsoap-2.8\gsoap\plugin\,把這些檔案單獨拷貝到編譯目錄中,無關的檔案一概不拷貝;

呼叫過程:

soap_p2f = soap_new();//soap初始化

soap_set_namespaces(soap_p2f, namespaces);//命名空間,用到前面生成soap框架時生成的.namespace檔案

struct _tptz__absolutemove absolutemove;//ptz控球需要用到的結構體,後面會講到

struct _tptz__absolutemoveresponse absolutemoveresponse;//ptz控球返回的結構體

soap_wsse_add_usernametokendigest(soap_p2f, null, "admin", "admin123456");//wsse表示是鑑權功能函式

soap_default__tptz__absolutemove(soap_p2f, &absolutemove);//defualt函式的作用其實就是將後面的結構體清空

soap_default__tptz__absolutemoveresponse(soap_p2f, &absolutemoveresponse);

...//填充absolutemove結構體

soap_call___tptz__absolutemove(soap_p2f, ball_onvifserver, null, &absolutemove, &absolutemoveresponse);//傳送soap呼叫命令

這裡就需要自己實現上面說的那個函式soap_wsse_add_usernametokendigest了。嵌入式裝置就是用的這種方法。其實就是把原始碼部分**直接拷貝到自己的工程源**中,需要實現的函式有:

soap_wsse_add_usernametokendigest(struct soap *soap, const

char *id, const

char *username, const

char *password)

soap_wsse_add_usernametokentext(struct soap *soap, const

char *id, const

char *username, const

char *password) ;

soap_wsse_add_security(struct soap *soap) ;

calc_digest(struct soap *soap, const

char *created, const

char *nonce, int noncelen, const

char *password, char hash[soap_smd_sha1_size]);

calc_nonce(struct soap *soap, char nonce[soap_wsse_noncelen])

sha1padmessage(sha1context *context)

sha1processmessageblock(sha1context *context)

sha1reset(sha1context *context)

sha1input(sha1context *context,const

char *message_array, unsigned length)

sha1reset(sha1context *context)

一般全景相機(嵌入式裝置)向球機傳送onvif控球命令時,鑑權就是用這種方式。

要注意的是,每次鑑權後,其包含驗證資訊的頭部就會被置空,所以每次操作前都需要加上鑑權操作。推薦的做法是:將鑑權語句加入到每個需要鑑權的命令前,並封裝起來成為自己的命令。

gsoap onvif編譯過程

編譯命令 第一步生成 onvif.h 檔案 wsdl2h o onvif.h t typemap.dat remotediscovery.wsdl devicemgmt.wsdl analytics.wsdl analyticsdevice.wsdl media.wsdl deviceio.wsdl...

網路初探(二)

路由定義 路由的定義 沿物理路徑進行通訊,必須獲得有關資料鏈路標識和資料封裝的資訊,並 且這些資訊要儲存在資料庫中,如 arp高速緩衝。同樣,傳輸層 網路層也需要獲取和儲存所涉及到的相關資訊。有區別的是,這些資訊被儲存在路由表中,路 由表又叫路由選擇資訊庫 rib 路由表 目標位址和下一跳位址 如果...

索引初探(二)

在sqlserver中分為兩種索引,一是聚集索引 一是費聚集索引。下面我就分別對兩種索引進行介紹並分析其區別和各自的特點。1.聚集索引 之前看過乙個比方,我覺得非常恰當這裡也用這個例子來說明兩種索引。我們的字典本身就像是乙個聚集索引,我們根據拼音查詢目錄,然後直接可以找到查詢字的頁,而字典正文就是按...