码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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
  • 相关阅读:
    什么样的点可以称为三维点云的关键点?
    以人为本是AI大模型的最终落脚点——读《大模型时代:ChatGPT开启通用人工智能浪潮》
    代码随想录——栈与队列
    OpenSea爬取Nft详情全部数据实战
    手把手教你如何自制目标检测框架(从理论到实现)
    【原创】基于SSM的体育场地预约管理系统(毕业设计源码)
    算法——顺序表(1)
    浅拷贝和深拷贝
    OData基础
    针对个体的精准神经影像—当前的方法和未来方向
  • 原文地址:https://blog.csdn.net/www_dong/article/details/133953944
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号