如何从PJSIP头文件读取SIP信息请求及Android pjsua2呼叫相关日志内容
问题1解答:从PJSIP中读取SIP INFO请求指定内容的方法
你可以通过PJSIP底层的请求数据结构体直接读取对应内容,步骤如下:
- 首先拿到收到的请求对应的
pjsip_rx_data结构体实例,所有收到的SIP消息的原始数据都存在这个结构体内。 - 读取指定头域:调用
pjsip_msg_find_hdr()接口,传入消息指针和头域类型(如PJSIP_H_ALLOW、PJSIP_H_CONTENT_TYPE),即可获取对应头域的实例。如果是自定义非标准头域,传入头域名字符串,将返回结果转为pjsip_generic_string_hdr类型后,读取value字段即可拿到头域值。 - 读取请求体内容:访问
pjsip_rx_data中msg结构体的body字段,根据Content-Type类型解析对应载荷,文本类内容可以直接读取body的数据指针获取。
问题2解答:Android pjsua2场景下解析INFO请求消息的方案
你提供的日志是对端发送的会话内INFO请求未被应用层处理,pjsip默认返回500错误,你可以通过重载pjsua2的回调接口处理这类消息:
- 继承pjsua2的
Call类,重载onCallRxRequest方法,所有会话内收到的SIP请求都会先触发这个回调。 - 在回调中通过
OnCallRxRequestParam参数的rxRequest字段判断请求方法,如果是INFO类型就进入自定义解析逻辑。 - 解析头域和载荷:通过
rxRequest.info可以拿到所有头域信息,rxRequest.info.body字段存储的就是请求体内容,你日志中的Connection established就是这个INFO请求的text/plain类型载荷,直接读取即可获取该内容。 - 处理完成后调用
sendResponse方法返回200 OK响应,即可避免pjsip默认返回500错误的问题。
内容的提问来源于stack exchange,提问作者tomtom
相关产品推荐
相关产品推荐

