</pre><p>ONVIF 用户校验实现</p><p><span style="white-space:pre"> </span>ONVIF 开发使用C/C++的话,使用 gsoap 这个工具是好用的。直接生成代码框架。以下是使用 gSOAP 自己修改框架完成用户认证的方法,</p><p><ol><li>gSOAP 生成的代码框架,在stdsoap2.c 文件的 struct SOAP_STD_API soap { ... } 结构体里面添加一个结构体 struct WS_UsernameToken SUsernameToken; 用来保存每条指令传过来的用户名,密码校验等信息。</li></ol></p><p></p><pre name="code" class="cpp">#define AUTHENTICATION_NAME_LEN 64
struct WS_UsernameToken
{
char m_acSoapUsername[AUTHENTICATION_NAME_LEN];
char m_acSoapPassword[AUTHENTICATION_NAME_LEN];
char m_acSoapPasswordType[AUTHENTICATION_NAME_LEN*2];
char m_acSoapNonce[AUTHENTICATION_NAME_LEN];
char m_acSoapCreated[AUTHENTICATION_NAME_LEN];
};
因为gSOAP生成的代码框架,每条请求都携带一个 struct soap * 指针,所以把结构体存在这个 结构很合理。回调函数指针也应该存储在这个结构体。
2. 从请求指令里获取客户端传过来的用户名密码等信息
soapC.c 文件的 soap_in_SOAP_ENV__Header() 这个函数 (这个函数是gSOAP生成),是请求消息头域分析函数,从这里可以得到ONVIF定义的SOAP头域的所有字段。
仿照 soap_in_SOAP_ENV__Hea