码农知识堂 - 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
  • 相关阅读:
    cpu设计和实现(流水线暂停)
    【德哥说库系列】-Clickhouse集群部署(3分片2副本)
    抖音小程序开发教学系列(7)- 抖音小程序的发布与运营
    中英文说明书丨CalBioreagents艾美捷兔单克隆抗小鼠/人Id4抗体
    如何手写一个单向链表?看这里
    如何使用远程桌面软件进行远程工作
    网络诊断工具traceroute的使用
    andriod studio 手机模拟器中的文件导出方法
    电动汽车租赁平台【EV Mobility】申请875万美元纳斯达克IPO上市
    【考研数学】线性代数第六章 —— 二次型(3,正定矩阵与正定二次型)
  • 原文地址:https://blog.csdn.net/www_dong/article/details/133953944
  • 最新文章
  • C# 基础入门指南:从零开始学习 C# 编程
    前端唯一的护城河?结合 AI 将字节组件库 Headless 化后的感想~
    Lua--基础入门
    AI写代码,脑子却空了
    从零学习Kafka:幂等与事务
    别再说 AI 开发就是调接口了!5 种主流模式一次讲清
    让FastAPI Agent真正记住你:聊聊会话记忆与持久化存储的落地实践
    AI Coding Agent 时代:代码越便宜,约束越贵
    14. 别再硬写提示词了!LangChain PromptTemplate从入门到实战
    Agent出现LLM因为历史工具调用消息而误解工具调用方式的问题
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号