• GB28181学习(九)——校时


    要求

    • 联网内设备支持基于SIP方式或NTP方式的网络校时功能,标准时间为北京时间;
    • 系统运行时可根据配置使用具体校时方式;

    流程

    • SIP校时在注册过程中完成,流程同注册和注销流程;
    • 在注册成功情况下,注册流程的最后一个SIP应答消息200 OK中的Date头域中携带时间信息,格式为"Date:yyyy-MM-ddTHH:mm:ss.SSS";
    • 当SIP代理通过注册方式校时,其注册过期时间宜设置为小于SIP代理与SIP服务器之间出现1s误差所经过的运行时间;

    抓包

    # 1.请求注册
    REGISTER sip:xxx@192.168.0.107:5060 SIP/2.0
    ...
    
    # 2.返回401未认证
    SIP/2.0 401 Unauthorized
    ...
    
    # 3.携带认证信息再次请求注册
    REGISTER sip:xxx@192.168.0.107:5060 SIP/2.0
    Authorization: Digest username="xxx", realm="xxx", nonce="xx", uri="sip:xxx@192.168.0.107:5060", response="xxx", algorithm=MD5, opaque="xx"
    ...
    
    # 返回注册成功 携带“Date: 2023-10-19T10:23:03”
    SIP/2.0 200 OK
    ...
    Date: 2023-10-19T10:23:03 
    Content-Length:  0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    代码

    void CMySipContext::Response(pjsip_rx_data* rdata, int st_code, int headType)
    {
    	pjsip_tx_data* tdata = nullptr;
    	pj_status_t status = pjsip_endpt_create_response(m_endPoint, rdata, st_code, nullptr, &tdata);
    	if (PJ_SUCCESS != status)
    		return;
    	
    	std::string date = "";
    	pj_str_t c;
    	pj_str_t key;
    	pjsip_hdr* hdr = nullptr;
    	std::stringstream ss;
    	time_t t;
    	switch (headType)
    	{
    	case DateHead:
    		key = pj_str((char*)"Date");
    		t = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
    		ss << std::put_time(std::localtime(&t), "%FT%T");
    		date = ss.str();
    		hdr = reinterpret_cast(pjsip_date_hdr_create(m_pool, &key, pj_cstr(&c, date.c_str())));
    		pjsip_msg_add_hdr(tdata->msg, hdr);
    		break;
         // ... 
         default:
    		break;
        }
        
        // ...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
  • 相关阅读:
    Android12开发之窗口模糊功能的实现
    svn log 高级命令解释
    软考高项(已通过,E类人才)-学习笔记材料梳理汇总
    socket开发步骤及相关API介绍
    ArrayList、HashMap、HashSet扩容机制
    进程(fork()详解)
    websocket php教程
    MySQL集群:双主模式
    企业数字化转型,为何大部分数据中台项目都最终烂尾?
    这把联网智能门锁体验感A+
  • 原文地址:https://blog.csdn.net/www_dong/article/details/133953944