日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GB28181协议--设备注册和注销

發布時間:2023/12/9 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GB28181协议--设备注册和注销 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、基本要求

根據《GB/T 28181 —2016》第9章關于注冊和注銷的描述,GB28181的注冊和注銷應滿足下面這些要求:

  • 注冊和注銷時應進行認證, 認證方式應支持數字摘要認證方式;
  • SIP 代理在注冊過期時間到來之前, 應向注冊服務器進行刷新注冊,系統、設備注冊過期時間應可配置, 缺省值為86400s , 應在注冊過期時間到來之前發送刷新注冊消息, 為SIP 服務器預留適當刷新注冊處理時間, 注冊過期時間不應短于3600s。
  • SIP 代理注冊成功則認為SIP 服務器為在線狀態, 注冊失敗則認為SIP 服務器為離線狀態;SIP 服務器在SIP 代理注冊成功后認為其為在線狀態,SIP 代理注冊過期則認為其為離線狀態。

2、基本流程

SIP設備的基本注冊流程如下圖所示:

注冊流程描述如下:

  • SIP 代理向SIP 服務器發送 Register 請求;
  • SIP 服務器向 SIP 代理發送響應401, 并在響應的消息頭 WWW_Authenticate 字段中給出適合SIP 代理的認證體制和參數;
  • SIP 代理重新向SIP 服務器發送 Register 請求, 在請求的 Authorization 字段給出信任書,包含認證信息;
  • SIP 服務器對請求進行驗證, 如果檢查出 SIP 代理身份合法, 向 SIP 代理發送成功響應200 OK, 如果身份不合法則發送拒絕服務應答。

基于數字證書的雙向認證注冊說明:
SIP 代理和SIP 服務器進行雙向認證。 對IETF RFC 3261 中定義的方法 Register 進行如下頭域擴展:

  • Authorization 的值增加 Capability 項用來描述編碼器的安全能力。 當 Authorization 的值為Capability 時, 只攜帶一個參數algorithm, 參數algorithm 的值分為三部分, 中間以逗號分割。第一部分為非對稱算法描述, 取值為 RSA; 第二部分為摘要算法描述, 取值為 MD5/SHA-1/SHA-256 中的一個或者多個; 第三部分為對稱算法的描述, 取值為 DES/3DES/SM1 中的一個或者多個。
  • WWW-Authenticate 的 值 增 加 Asymmetric 項 用 來 攜 帶 驗 證 SIP 服 務 器 身 份 的 數 據。 當
    WWW-Authenticate 的值為 Asymmetric 時, 只攜帶參數 nonce 和algorithm 。 algorithm 的
    值取安全能力中指明的算法。
  • Authorization 的值增加 Asymmetric 項用來攜帶驗證編碼器的數據。 當 Authorization 的值
    為 Asymmetric 時, 攜帶nonce、response、algorithm 三個參數。

注銷流程如下所示:

注銷流程描述如下:

  • SIP 代理向SIP 服務器發送 Register 請求,Expires 字段的值為0, 表示SIP 代理要注銷;
  • SIP 服務器向 SIP 代理發送響應401, 并在響應的消息頭 WWW_Authenticate 字段中給出適合SIP 代理的認證體制和參數;
  • SIP 代理重新向SIP 服務器發送 Register 請求, 在請求的 Authorization 字段給出信任書,包含認證信息,Expires 字段的值為0;
  • SIP 服務器對請求進行驗證, 如果檢查出 SIP 代理身份合法, 向 SIP 代理發送成功響應200 OK, 如果身份不合法則發送拒絕服務應答。

注意:
從上面兩張圖片可以看出,SIP協議的注冊和注銷的差異在于Expires字段的值,當為0時,設備是注銷,當大于0時(Expires最小值為3600),設備是注冊。

3、基于SIP庫的注冊和注銷

在這里,我們開發基于libosip和libexsip庫進行開發。下面是設備注冊的步驟:

(1)初始化SIP協議

先初始化sip,初始化sip,主要包括開啟sip的打印、初始化eXosip_init和監聽端口,具體代碼如下:

int SipInit(int debugEnable, int transport, int port) {if (debugEnable){osip_trace_initialize(debugEnable, NULL);}int ret = eXosip_init ();if (ret != OSIP_SUCCESS ){return -1;}ret = eXosip_listen_addr (transport, NULL, port, AF_INET, 0);if ( ret != OSIP_SUCCESS ){eXosip_quit();return -1;}GB_PrintDebug("eXosip_init successfully!\n");return 0; }

(2)設備的注冊和注銷:
設備的注冊和注銷使用同一個接口SipReg,isReg為1代表注冊,為0代表注銷。

int SipReg(GB28181Param_t *pGB28181Param, int isReg) {int ret = 0;int expires = 0 ;int unAuthorized = 0;eXosip_event_t *je = NULL;osip_message_t *reg = NULL;if (!pGB28181Param){return -1;}if (isReg){expires = atoi(pGB28181Param->userParam.sipExpires);}while(1){if (0 == unAuthorized){ret = SipRegisterUnauthorized(pGB28181Param, expires);if (ret < 0){if(je){eXosip_event_free(je);}return -1;}else {unAuthorized = 1;}}je = eXosip_event_wait(0, 100); if(NULL == je){eXosip_automatic_action();osip_usleep(100*1000);continue;}if(EXOSIP_REGISTRATION_FAILURE == je->type){if((je->response!=NULL) && (401==je->response->status_code)){ret = SipRegisterAuthorized(pGB28181Param, je->rid, expires);eXosip_event_free(je);if(ret != OSIP_SUCCESS){return -1;}}else {eXosip_event_free(je);unAuthorized = 0; sleep(GB28181_REG_INTERVAL);return -1;}}else if (EXOSIP_REGISTRATION_SUCCESS == je->type){g_SipState.registerID = je->rid;eXosip_execute();eXosip_automatic_action();eXosip_event_free(je);break;}else{eXosip_event_free(je);}}if (isReg){g_SipState.sipRegStatus = 1;}else {g_SipState.sipRegStatus = 0;}return 0; }

下面的函數是不帶認證注冊和帶認證注冊的兩個函數

static int SipRegisterUnauthorized(GB28181Param_t *pGB28181Param, int expires) {int ret;char from[128] = {0, };char proxy[128] = {0, };eXosip_event_t *je = NULL;osip_message_t *reg = NULL;if (!pGB28181Param){return -1;}snprintf(from, sizeof(from), "sip:%s@%s:%s", pGB28181Param->userParam.devSipID, pGB28181Param->userParam.devSipIP,pGB28181Param->userParam.devSipPort);snprintf(proxy, sizeof(proxy), "sip:%s@%s:%s", pGB28181Param->userParam.sipServerID, pGB28181Param->userParam.sipServerIP,pGB28181Param->userParam.sipServerPort);eXosip_masquerade_contact(pGB28181Param->userParam.devSipIP, atoi(pGB28181Param->userParam.devSipPort)); eXosip_set_user_agent(pGB28181Param->productParam.manufacturer); eXosip_lock();g_SipState.registerID = eXosip_register_build_initial_register( from, proxy, NULL, expires, &reg);if(g_SipState.registerID < 0){eXosip_unlock();return -1;}ret = eXosip_register_send_register(g_SipState.registerID, reg);if(ret != OSIP_SUCCESS){eXosip_unlock();return -1;}// osip_message_free(reg);eXosip_unlock();return 0; }static int SipRegisterAuthorized(GB28181Param_t *pGB28181Param, int rid, int expires) {int ret = 0;osip_message_t *reg = NULL;if (!pGB28181Param){return -1;}eXosip_lock();eXosip_clear_authentication_info();eXosip_add_authentication_info( pGB28181Param->userParam.devSipID,pGB28181Param->userParam.devSipID,pGB28181Param->userParam.devSipPasswd, "MD5", NULL);eXosip_register_build_register( rid, expires, &reg);ret = eXosip_register_send_register(rid, reg);eXosip_unlock();return ret; }

通過上述接口就可以進行GB28181的初始化了。

參考資料:
《GBT 28181-2016 公共安全視頻監控聯網系統信息傳輸、交換、控制技術要求》

總結

以上是生活随笔為你收集整理的GB28181协议--设备注册和注销的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。