如果你在开发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协议库开发问题相关推荐

  1. 诺看看图王 (基于DUI SOUI 库开发而成)

    诺看看图王是一款方便易用的图片浏览软件.该软件操作简单,有着强大的图片引擎研发而成,兼容当前网络上主流的图片格式,让你轻轻松松浏览图片.支持上百种图片格式,如bmp, jpg, jpeg2000, p ...

  2. 基于SIP协议的IP电话增值业务实现技术

    基于SIP协议的IP电话增值业务实现技术 王瑜,乐正友 (清华大学电子工程系,北京 100084)    摘  要:讨论了SIP协议以及基于SIP协议的IP电话增值业务实现技术,并对SIP CGI.C ...

  3. 工业自动化控制通讯协议库,工业自动软件必备的基本程序,该库基于以c#自主开发

    工业自动化控制通讯协议库,工业自动软件必备的基本程序,该库基于以c#自主开发. 包括串口通信,TCP客户端,tcp服务器端,高并发物联网接收服务器端,udp通信,can总线通信,profinet,mo ...

  4. workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的)...

    workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的) 一.总结 1.下面链接里面还有一个来聊的php聊天室源码可以学习 2. ...

  5. 基于GBT28181:SIP协议组件开发-----------第四篇SIP注册流程eXosip2实现(一)

    原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3945294.html. 上章节讲解了利用自主开发的组件SIP组件l ...

  6. 基于SECS协议开发的简明教程

    很有必要把苦程序员久矣的SECS/GEM了结了,于是诞生了本系列文章八篇和开发包,不需要看近500页PDF就可以轻松完成SECS功能支持. 0.SECS SDK 开发包 这个开发包是对SEMI SEC ...

  7. php即时聊天的框架_workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的)...

    workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的) 一.总结 1.下面链接里面还有一个来聊的php聊天室源码可以学习 2. ...

  8. 《STM32库开发实战指南:基于STM32F103(第2版)》——2.1节仿真器简介

    本节书摘来自华章社区<STM32库开发实战指南:基于STM32F103(第2版)>一书中的第2章,第2.1节仿真器简介,作者刘火良 杨森,更多章节内容可以访问云栖社区"华章社区& ...

  9. 基于第三方开源库的OPC服务器开发指南(2)——LightOPC的编译及部署

    基于第三方开源库的OPC服务器开发指南(2)--LightOPC的编译及部署 前文已经说过,OPC基于微软的DCOM技术,所以开发OPC服务器我们要做的事情就是开发一个基于DCOM的EXE文件.一个代 ...

  10. java xmpp即时通讯_基于XMPP协议即时通讯工具开发总结

    一.概要 转眼毕业了,毕业设计的课题是"基于XMPP协议的通讯工具",开发平台式android,实现了基本的离线消息,文字聊天,表情聊天,文件传输,语音聊天的功能. 本文主要介绍开 ...

最新文章

  1. [转]图解APP的商业模式
  2. Google(谷歌)中国工程研究院 工程师 方坤 对学生朋友的一些建议
  3. 在ASP.NET中创建自定义控件初步(转)
  4. Jupyter Notebook 快速入门(上)
  5. 关于QTP 9.2对象库管理的一些总结
  6. Makefile中=、:=、+=、?=的区别
  7. 基于域名或URL路径进行转发
  8. 监控摄像头接入流媒体服务器的几种方式
  9. [Python] 根据提供的函数对指定序列做映射:map() 函数
  10. 高8kB计算机组成原理,计算机组成原理习题及答案
  11. 荣世达二代机器人_荣事达人工智能机器人到底有多帅?
  12. Privoxy教程使用详解
  13. RDPWrap帮助Win10家庭版开启远程桌面功能
  14. WIN7操作系统IE11的离线安装(有时间总结下)
  15. 软件测试背景目的要点概述
  16. xp计算机找不到音量调节,电脑音量图标消失无法调整声音大小的解决方案
  17. ElasticSearch三种分页方式以及各优缺点(一文知道如何抉择)
  18. 窦唯与女儿【节选】揭秘男星与女儿之间的奇闻
  19. 闰秒 mysql_闰秒导致MySQL服务器的CPU sys过高
  20. C# 开发的网络数据包抓取的的实现

热门文章

  1. TCP 实战抓包分析
  2. 中国电信天翼网关路由器后台登录useradmin用户忘记密码的解决方法默认密码管理员密码工作人员密码
  3. jQuery将json对象转为字符串,将json字符串转为对象
  4. 谷歌浏览器无法登陆禅道问题
  5. html视频透明背景怎么设置,微信透明背景图怎么设置 微信透明动态背景图设置方法...
  6. Java jdk 1.8版本安装包
  7. 王长震《非财务经理的财务管理沙盘推演课程》
  8. IntelliJ IDEA导包快捷键
  9. 支付宝、财付通、网银、百度钱包、京东钱包接口费率
  10. 航空订票系统java_航空订票系统(JAVA+SSH+MYSQL)