GB35114---基于pjsip协议库开发问题
如果你在开发GB28181时选用了pjsip作为sip协议栈,那么在插入GB35114认证消息时惊奇的发现,我接收不到GB35114的sip消息了。
是的,pjsip将gb35114的消息进行过滤了。
既然过滤掉了我们的消息,我们就要让它对我们需要的消息放行(暴力)。
在sip_parser.c文件内有函数
static pjsip_msg *int_parse_msg( pjsip_parse_ctx *ctx,
pjsip_parser_err_report *err_list);
该函数会对接收到的消息进行格式解析,如果错误会将其插入到err list。
我们在PJ_CATCH_ANY下对gb35114认证消息进行筛选
PJ_CATCH_ANY {/* Exception was thrown during parsing. * Skip until newline, and parse next header. *///add 35114 Authorization bob 2019/10/28int i,code = 1;for(i = 0;gb_arry[i].ptr;i++){if(!memcmp(hname.ptr,gb_arry[i].ptr,gb_arry[i].len)){//printf("get 35114 msg\n");code =0;break;}}if(code){if (err_list) { pjsip_parser_err_report *err_info;printf("enter err_list\n");err_info = PJ_POOL_ALLOC_T(pool, pjsip_parser_err_report);err_info->except_code = PJ_GET_EXCEPTION();err_info->line = scanner->line;/* Scanner's column is zero based, so add 1 */err_info->col = pj_scan_get_col(scanner) + 1;if (parsing_headers)err_info->hname = hname;else if (msg && msg->type == PJSIP_REQUEST_MSG)err_info->hname = pj_str("Request Line");else if (msg && msg->type == PJSIP_RESPONSE_MSG)err_info->hname = pj_str("Status Line");elseerr_info->hname.slen = 0;pj_list_insert_before(err_list, err_info);}if (parsing_headers) {if (!pj_scan_is_eof(scanner)) {/* Skip until next line.* Watch for header continuation.*/do {pj_scan_skip_line(scanner);} while (IS_SPACE(*scanner->curptr));}/* Restore flag. Flag may be set in int_parse_sip_url() */scanner->skip_ws = PJ_SCAN_AUTOSKIP_WS_HEADER;/* Continue parse next header, if any. */if (!pj_scan_is_eof(scanner) && !IS_NEWLINE(*scanner->curptr)) {goto retry_parse;}}msg = NULL;}}
gb_arry定义
typedef struct _gb35114_auth_t
{char *ptr;int len;
}gb35114_auth_t;static gb35114_auth_t gb_arry[] =
{{"Authorization: Capability",sizeof("Authorization: Capability")-1},{"WWW-Authenticate: Unidirection",sizeof("WWW-Authenticate: Unidirection")-1},{"Authorization: Unidirection",sizeof("Authorization: Unidirection")-1},{"SecurityInfo: Unidirection",sizeof("SecurityInfo: Unidirection")-1},{"WWW-Authenticate: Bidirection",sizeof("WWW-Authenticate: Bidirection")-1},{"Authorization: Bidirection",sizeof("Authorization: Bidirection")-1},{"SecurityInfo: Bidirection",sizeof("SecurityInfo: Bidirection")-1},{NULL,0}
};
到此编译,替换掉pjsip库,就能收到gb35114的认证消息了。
https://download.csdn.net/download/xlb8224866/12243447 这是改过之后的源码。
有错误请留言,谢谢
下篇继续
GB35114---基于openssl加密库进行开发(一)
---bob 2020/3/12 11:54
GB35114---基于pjsip协议库开发问题相关推荐
- 诺看看图王 (基于DUI SOUI 库开发而成)
诺看看图王是一款方便易用的图片浏览软件.该软件操作简单,有着强大的图片引擎研发而成,兼容当前网络上主流的图片格式,让你轻轻松松浏览图片.支持上百种图片格式,如bmp, jpg, jpeg2000, p ...
- 基于SIP协议的IP电话增值业务实现技术
基于SIP协议的IP电话增值业务实现技术 王瑜,乐正友 (清华大学电子工程系,北京 100084) 摘 要:讨论了SIP协议以及基于SIP协议的IP电话增值业务实现技术,并对SIP CGI.C ...
- 工业自动化控制通讯协议库,工业自动软件必备的基本程序,该库基于以c#自主开发
工业自动化控制通讯协议库,工业自动软件必备的基本程序,该库基于以c#自主开发. 包括串口通信,TCP客户端,tcp服务器端,高并发物联网接收服务器端,udp通信,can总线通信,profinet,mo ...
- workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的)...
workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的) 一.总结 1.下面链接里面还有一个来聊的php聊天室源码可以学习 2. ...
- 基于GBT28181:SIP协议组件开发-----------第四篇SIP注册流程eXosip2实现(一)
原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3945294.html. 上章节讲解了利用自主开发的组件SIP组件l ...
- 基于SECS协议开发的简明教程
很有必要把苦程序员久矣的SECS/GEM了结了,于是诞生了本系列文章八篇和开发包,不需要看近500页PDF就可以轻松完成SECS功能支持. 0.SECS SDK 开发包 这个开发包是对SEMI SEC ...
- php即时聊天的框架_workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的)...
workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的) 一.总结 1.下面链接里面还有一个来聊的php聊天室源码可以学习 2. ...
- 《STM32库开发实战指南:基于STM32F103(第2版)》——2.1节仿真器简介
本节书摘来自华章社区<STM32库开发实战指南:基于STM32F103(第2版)>一书中的第2章,第2.1节仿真器简介,作者刘火良 杨森,更多章节内容可以访问云栖社区"华章社区& ...
- 基于第三方开源库的OPC服务器开发指南(2)——LightOPC的编译及部署
基于第三方开源库的OPC服务器开发指南(2)--LightOPC的编译及部署 前文已经说过,OPC基于微软的DCOM技术,所以开发OPC服务器我们要做的事情就是开发一个基于DCOM的EXE文件.一个代 ...
- java xmpp即时通讯_基于XMPP协议即时通讯工具开发总结
一.概要 转眼毕业了,毕业设计的课题是"基于XMPP协议的通讯工具",开发平台式android,实现了基本的离线消息,文字聊天,表情聊天,文件传输,语音聊天的功能. 本文主要介绍开 ...
最新文章
- [转]图解APP的商业模式
- Google(谷歌)中国工程研究院 工程师 方坤 对学生朋友的一些建议
- 在ASP.NET中创建自定义控件初步(转)
- Jupyter Notebook 快速入门(上)
- 关于QTP 9.2对象库管理的一些总结
- Makefile中=、:=、+=、?=的区别
- 基于域名或URL路径进行转发
- 监控摄像头接入流媒体服务器的几种方式
- [Python] 根据提供的函数对指定序列做映射:map() 函数
- 高8kB计算机组成原理,计算机组成原理习题及答案
- 荣世达二代机器人_荣事达人工智能机器人到底有多帅?
- Privoxy教程使用详解
- RDPWrap帮助Win10家庭版开启远程桌面功能
- WIN7操作系统IE11的离线安装(有时间总结下)
- 软件测试背景目的要点概述
- xp计算机找不到音量调节,电脑音量图标消失无法调整声音大小的解决方案
- ElasticSearch三种分页方式以及各优缺点(一文知道如何抉择)
- 窦唯与女儿【节选】揭秘男星与女儿之间的奇闻
- 闰秒 mysql_闰秒导致MySQL服务器的CPU sys过高
- C# 开发的网络数据包抓取的的实现
热门文章
- TCP 实战抓包分析
- 中国电信天翼网关路由器后台登录useradmin用户忘记密码的解决方法默认密码管理员密码工作人员密码
- jQuery将json对象转为字符串,将json字符串转为对象
- 谷歌浏览器无法登陆禅道问题
- html视频透明背景怎么设置,微信透明背景图怎么设置 微信透明动态背景图设置方法...
- Java jdk 1.8版本安装包
- 王长震《非财务经理的财务管理沙盘推演课程》
- IntelliJ IDEA导包快捷键
- 支付宝、财付通、网银、百度钱包、京东钱包接口费率
- 航空订票系统java_航空订票系统(JAVA+SSH+MYSQL)