1. Kamailio路由脚本中的元数据格式转换实战
最近在调试一个Kamailio SIP服务器的路由脚本时,遇到了一个关于元数据格式转换的典型问题。原脚本使用JSON格式传递呼叫元数据,现在需要改为netstring格式。这个看似简单的需求,在实际操作中却遇到了类型转换的坑,值得和大家分享一下解决过程。
Kamailio作为高性能的SIP服务器,其路由脚本语言在处理数据类型时有些特殊行为。当我们需要将JSON格式的元数据转换为netstring格式时,最关键的是要正确处理字符串和整型的转换问题。netstring的标准格式是"长度:内容,",这就要求我们准确计算内容长度并与内容本身拼接。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 原始脚本分析与问题定位
2.1 初始JSON格式实现
原始脚本使用jansson模块构建JSON格式的元数据,包含callid、from、to等关键呼叫信息:
kamailio复制route[start_forwarding] {
if (is_request()) {
if(!has_totag()) {
jansson_set("string", "callid", "$ci", "$var(myjson)");
jansson_set("string", "from", "$fU", "$var(myjson)");
jansson_set("string", "to", "$tU", "$var(myjson)");
jansson_set("string", "stream", "caller", "$var(myjson)");
start_forwarding("metadata=$var(myjson) rtpp_flags=directional");
xinfo("invite start_forwarding\n");
}
} else {
if(has_body("application/sdp") && !dlg_isflagset("1")) {
janss
