exsipproto - SIP 协议辅助库,提供报文解析、Digest 鉴权、SIP 请求/响应构造、SDP 与媒体协商工具。#

示例

本库主要给 exsipclient 等 SIP 信令模块复用,负责处理协议层字符串拼装与解析。
使用前需要确保固件启用了 crypto 库中的 MD5 能力。

基本用法:
local proto = require "exsipproto"

local headers = proto.parse_headers(packet_head)
local auth = proto.digest_auth({
    username = "1001",
    password = "123456",
    realm = "example.com",
    nonce = "abcdef",
    method = "REGISTER",
    uri = "sip:example.com"
})

exsipproto.parse_headers(resp)#

解析 SIP 头部字段。

参数

传入值类型

解释

string

resp SIP 报文头部字符串

返回值

返回值类型

解释

table

解析后的头字段表,键名统一转为小写

例子


exsipproto.sip_find_header_end(s)#

查找 SIP 头部结束位置。

参数

传入值类型

解释

string

s 待解析的 SIP 字符串

返回值

返回值类型

解释

number

头部结束后的起始位置,未找到时返回 nil

例子


exsipproto.pop_stream_message(stream)#

从 TCP 流缓冲区中弹出一条完整的 SIP 报文。

参数

传入值类型

解释

string

stream TCP 流式接收缓冲区

返回值

返回值类型

解释

string

完整的 SIP 头部,数据不足时返回 nil

string

SIP 消息体,未携带消息体时返回空字符串

string

剩余未消费的流数据

例子


exsipproto.split_message(msg)#

拆分单条 SIP 报文为头部和消息体。

参数

传入值类型

解释

string

msg 一条完整的 SIP 报文

返回值

返回值类型

解释

string

SIP 头部

string

SIP 消息体,不存在时返回空字符串

例子


exsipproto.parse_request_line(msg)#

解析 SIP 请求行。

参数

传入值类型

解释

string

msg SIP 报文头部或整包字符串

返回值

返回值类型

解释

string

请求方法,例如 INVITE、REGISTER

string

请求 URI,解析失败时返回 nil

例子


exsipproto.parse_status(resp)#

解析 SIP 状态行。

参数

传入值类型

解释

string

resp SIP 响应报文头部或整包字符串

返回值

返回值类型

解释

number

状态码,解析失败时返回 nil

string

原因短语,解析失败时返回 nil

例子


exsipproto.parse_www_authenticate(www)#

解析 WWW-Authenticate 或 Proxy-Authenticate 头中的 Digest 参数。

参数

传入值类型

解释

string

www Authenticate 头内容

返回值

返回值类型

解释

table

解析后的参数表,常见字段包括 realm、nonce、opaque、algorithm、qop

例子


exsipproto.pick_qop(qop)#

从 qop 字段中选择当前支持的认证模式。

参数

传入值类型

解释

string

qop 服务端返回的 qop 字段

返回值

返回值类型

解释

string

当前支持的 qop 值,目前仅返回 auth,未命中时返回 nil

例子


exsipproto.digest_auth(params)#

计算 Digest 鉴权参数。

参数

传入值类型

解释

table

params Digest 参数表,至少需要 username、password、realm、nonce、method、uri

返回值

返回值类型

解释

table

计算后的 Digest 参数表,可直接交给 build_auth_header 使用

string

失败原因,仅在不支持的算法等异常情况下返回

例子


exsipproto.build_auth_header(auth)#

构造 Authorization 或 Proxy-Authorization 头。

参数

传入值类型

解释

table

auth Digest 参数表,通常由 digest_auth 返回

返回值

返回值类型

解释

string

拼装好的认证头字符串,auth 为空时返回 nil

例子


exsipproto.build_via(params)#

构造 Via 头字段值。

参数

传入值类型

解释

table

params Via 参数表,常见字段包括 transport、local_ip、local_port、branch

返回值

返回值类型

解释

string

Via 头字段值

例子


exsipproto.build_contact(params)#

构造 Contact 头字段值。

参数

传入值类型

解释

table

params Contact 参数表,常见字段包括 user、local_ip、local_port、transport、uri_params、header_params

返回值

返回值类型

解释

string

Contact 头字段值

例子


exsipproto.build_request(ctx)#

构造 SIP 请求报文。

参数

传入值类型

解释

table

ctx 请求上下文,至少需要 method 和 uri,其余字段按需传入

返回值

返回值类型

解释

string

完整的 SIP 请求字符串

例子


exsipproto.build_response(ctx)#

构造 SIP 响应报文。

参数

传入值类型

解释

table

ctx 响应上下文,至少需要 code 和 headers,其余字段按需传入

返回值

返回值类型

解释

string

完整的 SIP 响应字符串

例子


exsipproto.normalize_codec_name(name)#

规范化单个编解码器名称。

参数

传入值类型

解释

string

name 编解码器名称

返回值

返回值类型

解释

string

规范化后的名称,例如 PCMU、PCMA;不支持时返回 nil

例子


exsipproto.normalize_codec_list(codecs)#

规范化编解码器列表并去重。

参数

传入值类型

解释

table

codecs 编解码器名称列表

返回值

返回值类型

解释

table

规范化后的编解码器列表,输入为空或无有效值时返回默认值

例子


exsipproto.pick_common_codec(local_codecs, remote_codecs)#

在本地和远端编解码器列表中选择一个共同支持的编码。

参数

传入值类型

解释

table

local_codecs 本地支持的编解码器列表

table

remote_codecs 远端支持的编解码器列表

返回值

返回值类型

解释

string

匹配到的编解码器名称,未命中时返回 nil

例子


exsipproto.codec_payload_type(codec)#

获取编解码器对应的静态 payload type。

参数

传入值类型

解释

string

codec 编解码器名称

返回值

返回值类型

解释

number

对应的 payload type,不支持时返回 nil

例子


exsipproto.build_media_session(params)#

根据本地和远端 SDP 信息整理媒体会话参数。

参数

传入值类型

解释

table

params 媒体参数表,常见字段包括 call_id、remote_ip、remote_sdp、local_rtp_port、local_codecs、ptime、source

返回值

返回值类型

解释

table

媒体会话参数表

string

失败原因,例如 no_common_codec 或 invalid_remote_port

例子


exsipproto.build_sdp(state, direction)#

构造本地 SDP 描述。

参数

传入值类型

解释

table

state SIP 状态表,需要包含 local_ip 以及 media 相关配置

string

direction 媒体方向,例如 sendrecv、sendonly、recvonly

返回值

返回值类型

解释

string

SDP 字符串

例子


exsipproto.parse_sdp(sdp)#

解析远端 SDP 描述。

参数

传入值类型

解释

string

sdp SDP 字符串

返回值

返回值类型

解释

table

解析结果,常见字段包括 conn_ip、audio_port、payloads、codecs、direction、ptime

例子