当前位置: 首页 > news >正文

kamailio的伪变量

伪变量

版本: Kamailio SIP 服务器 v6.0.x (稳定版)

简介

伪变量(Pseudo-Variables)是指可在脚本函数中作为参数使用的特殊标记,这些标记在函数执行前会被替换为实际值。伪变量的起始标记为字符 $。若需在字符串中表示 $ 本身,需使用双写形式 $$

伪变量由多个模块实现,大部分由 pv 模块提供(若无特殊说明,默认由 pv 模块提供)。

伪变量的用途

伪变量可用于以下模块:

  • acc
  • avpops
  • htable
  • http_async_client
  • textops
  • uac
  • xlog

伪变量列表(按字母顺序)

$$

表示字符 $

$_s(format)

动态格式化字符串。
示例:

$var(x) = "sip:" + $rU + "@" + $fd;  
# 等价于:  
$var(x) = $_s(sip:$rU@$fd);  
$ai

引用请求头 P-Asserted-Identity 中的 URI(参见 RFC 3325)。

$adu

授权或代理授权头中的 URI,用于 HTTP Digest 响应计算。

$aa

授权或代理授权头中的算法。

$ar

授权或代理授权头中的 realm。

$au

授权或代理授权头中的用户名部分。

$ad

授权或代理授权头中的域名部分。

$aU

授权或代理授权头中的完整用户名。

$Au

计费用户名(来自 acc 模块),格式为 $au@$ar(若存在)或 $fu

$AU

计费用户名(来自 acc 模块),格式为 $au(若存在)或 $fU

$branch(name)

分支属性(仅限附加分支,主分支使用 $ru$du)。

  • uri: 分支 URI
  • dst_uri: 目标 URI
  • path: 路径向量
  • q: Q 值(整数)
  • send_socket: 发送套接字
  • count: 分支总数
  • flags: 分支标志
  • ruid: 分支的唯一 ID

示例:

$var(i)=0;  
while($var(i)<$branch(count)) {  
   xlog("$(branch(uri)[$var(i)])\n");  
   $var(i) = $var(i) + 1;  
}  
$br

请求的第一个分支(可读写)。

$bR

请求的所有分支。

$bf

分支标志(十进制,可读写)。

$bF

分支标志(十六进制,可读写)。

$bs

消息体大小。

$ci

Call-Id 头的值。

$cl

Content-Length 头的值。

$cnt(pv)

统计伪变量数量。
示例:

xlog("$$avp(x) 出现次数:$cnt($avp(x))\n");  
$conid

TCP 连接 ID(UDP/SCTP 为 $null)。

$cs

CSeq 头的序列号。

$csb

CSeq 头的完整内容。

$ct

Contact 头的值。

$cts

Contact 头是否为 *(1 表示存在值,0 表示 *)。

$ctu

Contact 头的 URI 部分。

$cT

Content-Type 头的值。

$dd

目标 URI 的域名(不含端口)。

$def(name)

返回定义的值。
示例:

#!define ABC xyz  
xlog("FLT_ACC: $def(ABC)\n");  
$defn(name)

返回定义的数值。
示例:

#!define FLT_ACC 1  
xlog("FLT_ACC: $defn(FLT_ACC)\n");  
$di

Diversion 头的 URI。

$dip

Diversion 头的 privacy 参数。

$dir

Diversion 头的 reason 参数。

$dic

Diversion 头的 counter 参数。

$dp

目标 URI 的端口。

$dP

目标 URI 的传输协议。

$ds

目标集合。

$du

目标 URI(可读写)。
示例:

$du = "sip:kamailio.org;transport=tls";  
转义字符
  • $Eb: \
  • $En: \n
  • $Er: \r
  • $Et: \t
  • $Es: 空格
  • $Ec: ,
  • $Eq: "
  • $Ek: '
  • $Ei: :
  • $Ej: ;
  • $Ev: `
$fd

From 头的域名(可读写,但实际值不变)。

$fn

From 头的显示名称(可读写,但实际值不变)。

$fs

强制发送套接字(格式 proto:ip:port,可读写)。

$fsn

强制发送套接字名称(可读写)。

$ft

From 头的标签。

$fti

初始请求中的 From 标签(需启用 append_fromtag)。

$fu

From 头的 URI(可读写,但实际值不变)。

$fU

From 头的用户名(可读写,但实际值不变)。

$fUl

From 用户名的长度。

$mb

SIP 消息缓冲区。

$mbu

更新后的 SIP 消息缓冲区。

$mf

消息/事务标志(十进制,可读写)。

$mF

消息/事务标志(十六进制,可读写)。

$mi

SIP 消息 ID。

$ml

SIP 消息长度。

$mt

消息类型(1 为请求,2 为响应)。

$od

原始请求 URI 的域名。

$op

原始请求 URI 的端口。

$oP

原始请求 URI 的传输协议。

$ou

原始请求 URI。

$oU

原始请求 URI 的用户名。

$oUl

原始请求 URI 用户名的长度。

$pd

P-Preferred-Identity 头的域名。

$pn

P-Preferred-Identity 头的显示名称。

$pp

进程 ID。

$pr$proto

接收消息的协议(如 udp, tcp)。

$prid

协议 ID(如 UDP=1, TCP=2)。

$pU

P-Preferred-Identity 头的用户名。

$pu

P-Preferred-Identity 头的 URI。

$rb

消息体内容。

$rc

上一个函数的返回码。

$rd

请求 URI 的域名(可读写)。

$rdir(key)

请求方向(downstreamupstream)。

$re

Remote-Party-ID 头的 URI。

$rm

请求方法(如 INVITE)。

$rmid

请求方法的内部 ID。

$route_uri

第一个 Route 头的 URI。

$rp

请求 URI 的端口(可读写)。

$rP

请求 URI 的传输协议。

$rr

响应的原因短语。

$rs

响应的状态码。

$rt

Refer-To 头的 URI。

$ru

请求 URI(可读写)。

$rU

请求 URI 的用户名(可读写)。

$rUl

请求 URI 用户名的长度。

$rv

SIP 消息版本(如 SIP/2.0)。

$ruid

位置记录的内部唯一 ID。

$rz

请求 URI 的协议方案(如 sip, tel)。

$RAi

接收接口的广告 IP。

$RAp

接收接口的广告端口。

$Ri

接收消息的源 IP。

$Rp

接收消息的源端口。

$Rn

接收套接字名称。

$RAu

广告套接字 URI(无传输参数)。

$RAut

广告套接字 URI(带传输参数)。

$Ru

接收套接字 URI(无传输参数)。

$Rut

接收套接字 URI(带传输参数)。

$sas

源地址(格式 proto:ip:port)。

$sbranch(attr)

静态分支属性(同 $branch)。

$sf

脚本标志(十进制)。

$sF

脚本标志(十六进制)。

$si

源 IP 地址。

$sid

服务器 ID。

$siz

源 IP(IPv6 带方括号)。

$sp

源端口。

$stat(name)

统计项的值。

$su

源地址的 SIP URI(无传输参数)。

$sut

源地址的完整 SIP URI。

$td

To 头的域名(可读写,但实际值不变)。

$tn

To 头的显示名称(可读写,但实际值不变)。

$tt

To 头的标签。

$tti

初始响应中的 To 标签(需启用 append_fromtag)。

$tu

To 头的 URI(可读写,但实际值不变)。

$tU

To 头的用户名(可读写,但实际值不变)。

$tUl

To 用户名的长度。

$Tb

Kamailio 启动时间戳。

$Tf

格式化时间(缓存)。

$TF

格式化时间(实时)。

$Ts

Unix 时间戳(缓存)。

$TS

Unix 时间戳(实时)。

$ua

User-Agent 头的值。

$version()

版本信息:

  • $version(num): 数字版本
  • $version(full): 完整版本字符串
  • $version(hash): 哈希值
$env(NAME)

环境变量的值。

$avp(id)

AVP 值(可读写)。
示例:

$avp(x) = 1;  
$avp(y) = "abc";  
$expires(key)

Expires 头的最小/最大值。

  • min: 最小值
  • max: 最大值
$xavp(id)

扩展 AVP(支持嵌套结构)。
示例:

$xavp(person=>lastname) = "Smith";  
$hdr(name)

头域值(只读)。
示例:

if($hdr(From) =~ "kamailio\.org") { ... }  
$hfl(name)

多值头域的单个值(如 Contact, Via)。

$hdrc(name)

头域数量。

$hflc(name)

头域值的数量。

$var(name)

私有内存变量(可读写)。
示例:

$var(a) = 1;  
$vz(name)

$var(name)

$vn(name)

支持 $null 的私有变量。

$shv(name)

共享内存变量(可读写)。

$dsv(key)

分发器变量(如 code, reason)。

$dsg(key)

分发器组属性(如 count, active)。

$time(name)

本地时间的分解属性(如 sec, min)。

$utime(name)

UTC 时间的分解属性。

$timef(format)

格式化本地时间。

$utimef(format)

格式化 UTC 时间。

$ccp(key)

全局配置参数。

$sel(name)

选择器(如 via[1].host)。

$rcv(key)

接收数据的属性(如 buf, srcip)。

$rpl(key)

响应属性(如 duri, dhost)。

$msgbuf(index)

消息缓冲区的字符(可读写)。

$hfitname(iname)

头域迭代器的名称。

$hfitbody(iname)

头域迭代器的内容。

$blitval(iname)

消息体行的值。

$sndfrom(name)

发送地址的本地套接字属性。

$sndto(name)

发送地址的远程套接字属性。

$sipdump(name)

SIPDUMP 模块的消息属性。

$siptrace(name)

SIPTRACE 模块的消息属性。

$BM_time_diff

基准测试时间差。

$dlg(attr)

对话属性(如 h_id, state)。

$dlg_ctx(attr)

对话上下文属性(如 flags, timeout)。

$dlg_var(key)

对话自定义变量。

$erl_atom(name)

Erlang 原子类型。

$erl_list(name)

Erlang 列表类型。

$erl_tuple(name)

Erlang 元组类型。

$evapi(key)

EVAPI 模块的事件属性。

$sht(htable=>key)

哈希表条目(可读写)。

$shtex(htable=>key)

哈希表条目的过期时间。

$shtcn(htable=>exp)

匹配正则的哈希表条目数。

$shtcv(htable=>exp)

匹配值的哈希表条目数。

$shtinc(htable=>key)

原子递增哈希表值。

$shtdec(htable=>key)

原子递减哈希表值。

$shtitkey(iname)

哈希表迭代器的键。

$shtitval(iname)

哈希表迭代器的值。

$shtrecord(id)

过期哈希表记录的键或值。

$mct(key)

Memcached 条目(可读写)。

$mcinc(key)

原子递增 Memcached 值。

$mcdec(key)

原子递减 Memcached 值。

$http_req_id

HTTP 请求的唯一 ID。

$http_req(key)

HTTP 请求参数(如 method, body)。

$http_ok

HTTP 请求是否成功。

$http_err

HTTP 错误信息。

$http_rs

HTTP 状态码。

$http_rr

HTTP 原因短语。

$http_hdr(Name)

HTTP 头域值。

$xml(name=>spec)

XML 文档操作。

$T_branch_idx

当前分支的索引。

$T_reply_code

响应的状态码。

$T_req(pv)

事务请求的属性。

$T_rpl(pv)

事务响应的属性。

$T_inv(pv)

INVITE 请求的属性。

$T(name)

事务属性(如 id_index, reply_code)。

$uac_req(key)

UAC 请求参数(如 method, ruri)。

$rr_count

Record-Route 头的数量。

$rr_top_count

顶部 Record-Route 的数量。

$mqk(q)

队列的键。

$mqv(q)

队列的值。

$TV(name)

时间戳(秒和微秒)。

$nh(key)

下一跳地址属性(如 u, d)。

$gip(pvc=>key)

GeoIP 属性(如 cc, tz)。

$tls(key)

TLS 属性(如 m_issuer_line, p_subject_line)。

$msrp(key)

MSRP 帧属性(如 body, method)。

$sipt(key)

SIP-T 属性(如 calling_party_number)。

$dns(pvid=>key)

DNS 查询结果(如 count, addr)。

$HN(key)

本地主机名属性(如 n, f)。

$RANDOM

随机数(0 到 2^31-1)。

$jsonrpl(key)

JSONRPC 响应属性(如 code, body)。

$cfg(key)

配置文件属性(如 line, name)。

$lsock(expr)

监听套接字属性(如 name, listen)。

$atkv(name)

异步事件属性(如 type, key)。

$evr(key)

执行事件属性(如 data, srcip)。

$ulc(profile=>attr)

注册联系人的属性。

$hep(key)

HEP 数据包属性(如 version, src_ip)。

$phn(rid=>key)

电话号码匹配结果(如 number, valid)。

$secsipid(key)

安全 SIP 身份属性(如 val, ret)。

$sdp(key)

SDP 属性(如 body, c:ip)。

$sruid

唯一 ID。

$ltt(key)

本地生成的 To 标签。

$via0(attr)

第一个 Via 头的属性(如 host, port)。

$via1(attr)

第二个 Via 头的属性。

$viaZ(attr)

最后一个 Via 头的属性。

$tcp(key)

TCP 连接属性(如 c_si, conid)。

$C(xy)

终端颜色代码(如 $C(bg) 表示背景色)。

$K(key)

Kamailio 常量(如 IPv4, UDP)。


示例

示例 1:伪变量基本用法
avp_aliases="uuid=I:50"  
route {  
    $avp(uuid) = "caller_id";  
    $avp(i:20) = $avp(uuid) + ": " + $fu;  
    xdbg("$(C(bg))avp(i:20)$(C(xx)) [$avp(i:20)] $(C(br))cseq$(C(xx))=[$hdr(cseq)]\n");  
}  
示例 2:请求 URI 解析
# 请求 URI 包含 SIP URI  
$ru = "sip:example.com";  
$rz = "sip";  
$rU = "<null>";  
$rd = "example.com";  
$rp = "5060";
以下是关于请求URI(Request-URI)和目的URI(Destination-URI)解析的示例说明,涵盖SIP-URI、tel-URI和服务型URN的解析规则:

---

### **请求URI包含SIP URI**
```plaintext
$ru = "sip:example.com"
  $rz = "sip"          // 协议方案
  $rU = "<null>"       // 用户名为空
  $rd = "example.com"  // 域名
  $rp = "5060"         // 默认端口
  $rP = "UDP"          // 默认传输协议
$ru = "sips:john.q.public:hispw@example.com:6061 transport=tls;foo=bar"
  $rz = "sips"         // 协议方案(加密SIP)
  $rU = "john.q.public" // 用户名
  $rd = "example.com"  // 域名
  $rp = "6061"         // 显式指定端口
  $rP = "tls"          // 显式指定传输协议

请求URI包含服务型URN

$ru = "urn:service:sos.fire"
  $rz = "urn"          // 协议方案(统一资源名)
  $rU = "service"      // URN命名空间标识
  $rd = "sos.fire"     // URN具体内容
  $rp = "5060"         // 默认端口
  $rP = "UDP"          // 默认传输协议

请求URI包含tel: URI

$ru = "tel:+1-201-555-0123"
  $rz = "tel"          // 协议方案(电话URI)
  $rU = "+1-201-555-0123" // 电话号码
  $rd = "<null>"       // 无域名
  $rp = "5060"         // 默认端口
  $rP = "UDP"          // 默认传输协议
$ru = "tel:7042;phone-context=example.com"
  $rz = "tel"          // 协议方案
  $rU = "7042"         // 本地号码
  $rd = "<null>"       // 无域名(phone-context定义上下文)
  $rp = "5060"         // 默认端口
  $rP = "UDP"          // 默认传输协议

目的URI(必须是SIP(S) URI)

$du = "sip:example.com:6061;transport=tls;foo=bar"
  $dd = "example.com"  // 目标域名
  $dp = "6061"         // 显式指定端口
  $dP = "tls"          // 显式指定传输协议

关键字段说明

  • $rz:URI的协议方案(如sipsipstelurn)。
  • $rU:用户信息部分(如用户名、电话号码或URN命名空间)。
  • $rd/$dd:域名或URN内容。
  • $rp/$dp:端口号(未显式指定时使用默认值5060)。
  • $rP/$dP:传输协议(未显式指定时使用默认值UDP)。

相关文章:

  • 2.2 反向传播:神经网络如何“学习“?
  • 从Vec3实现复习运算符重载
  • Deepseek R1模型本地化部署与API实战指南:释放企业级AI生产力
  • 如何在 Vue 3 中使用 Vue Router 和 Vuex
  • 联想小新 510S-14IKB (80UX) 原厂Win10系统oem镜像下载
  • Hive查询之排序
  • 面试题整理:操作系统
  • Python 用户输入和While循环(使用while 循环来处理列表和字典)
  • PerfMonitor高效处理器性能监控与分析利器
  • [实现Rpc] 客户端划分 | 框架设计 | common类的实现
  • React AJAX:深入理解与高效实践
  • Java 数据类型
  • pptx2md - 将PPT文件转换成Markdown
  • 从零搭建微服务项目(第7章——微服务网关模块基础实现)
  • 如何解决DeepSeek服务器繁忙的问题?
  • JUC并发-4.wait和notify以及Atomic原理
  • 【JavaWeb学习Day16】
  • 什么是scaling laws?
  • 实现MiniQMT远程下单:跨设备交易指令的高效传递
  • pnpm, eslint, vue-router4, element-plus, pinia
  • 中期选举后第三势力成“莎拉弹劾案”关键,菲律宾权斗更趋复杂激烈
  • 降水较常年同期少五成,安徽四大水利工程调水超11亿方应对旱情
  • 美国将与阿联酋合作建立海外最大的人工智能数据中心
  • 上海市重大工程一季度开局良好,多项生态类项目按计划实施
  • 乌拉圭前总统何塞·穆希卡去世
  • 中华人民共和国和巴西联邦共和国关于强化携手构建更公正世界和更可持续星球的中巴命运共同体,共同维护多边主义的联合声明