kamailio的伪变量
- 创业
- 2025-09-09 09:00:02

伪变量
版本: Kamailio SIP 服务器 v6.0.x (稳定版)
简介伪变量(Pseudo-Variables)是指可在脚本函数中作为参数使用的特殊标记,这些标记在函数执行前会被替换为实际值。伪变量的起始标记为字符 $。若需在字符串中表示 $ 本身,需使用双写形式 $$。
伪变量由多个模块实现,大部分由 pv 模块提供(若无特殊说明,默认由 pv 模块提供)。
伪变量的用途伪变量可用于以下模块:
accavpopshtablehttp_async_clienttextopsuacxlog伪变量列表(按字母顺序) $$
表示字符 $。
$_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: 分支 URIdst_uri: 目标 URIpath: 路径向量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消息体大小。
$ciCall-Id 头的值。
$clContent-Length 头的值。
$cnt(pv)统计伪变量数量。 示例:
xlog("$$avp(x) 出现次数:$cnt($avp(x))\n"); $conidTCP 连接 ID(UDP/SCTP 为 $null)。
$csCSeq 头的序列号。
$csbCSeq 头的完整内容。
$ctContact 头的值。
$ctsContact 头是否为 *(1 表示存在值,0 表示 *)。
$ctuContact 头的 URI 部分。
$cTContent-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"); $diDiversion 头的 URI。
$dipDiversion 头的 privacy 参数。
$dirDiversion 头的 reason 参数。
$dicDiversion 头的 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: ` $fdFrom 头的域名(可读写,但实际值不变)。
$fnFrom 头的显示名称(可读写,但实际值不变)。
$fs强制发送套接字(格式 proto:ip:port,可读写)。
$fsn强制发送套接字名称(可读写)。
$ftFrom 头的标签。
$fti初始请求中的 From 标签(需启用 append_fromtag)。
$fuFrom 头的 URI(可读写,但实际值不变)。
$fUFrom 头的用户名(可读写,但实际值不变)。
$fUlFrom 用户名的长度。
$mbSIP 消息缓冲区。
$mbu更新后的 SIP 消息缓冲区。
$mf消息/事务标志(十进制,可读写)。
$mF消息/事务标志(十六进制,可读写)。
$miSIP 消息 ID。
$mlSIP 消息长度。
$mt消息类型(1 为请求,2 为响应)。
$od原始请求 URI 的域名。
$op原始请求 URI 的端口。
$oP原始请求 URI 的传输协议。
$ou原始请求 URI。
$oU原始请求 URI 的用户名。
$oUl原始请求 URI 用户名的长度。
$pdP-Preferred-Identity 头的域名。
$pnP-Preferred-Identity 头的显示名称。
$pp进程 ID。
$pr 或 $proto接收消息的协议(如 udp, tcp)。
$prid协议 ID(如 UDP=1, TCP=2)。
$pUP-Preferred-Identity 头的用户名。
$puP-Preferred-Identity 头的 URI。
$rb消息体内容。
$rc上一个函数的返回码。
$rd请求 URI 的域名(可读写)。
$rdir(key)请求方向(downstream 或 upstream)。
$reRemote-Party-ID 头的 URI。
$rm请求方法(如 INVITE)。
$rmid请求方法的内部 ID。
$route_uri第一个 Route 头的 URI。
$rp请求 URI 的端口(可读写)。
$rP请求 URI 的传输协议。
$rr响应的原因短语。
$rs响应的状态码。
$rtRefer-To 头的 URI。
$ru请求 URI(可读写)。
$rU请求 URI 的用户名(可读写)。
$rUl请求 URI 用户名的长度。
$rvSIP 消息版本(如 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。
$tdTo 头的域名(可读写,但实际值不变)。
$tnTo 头的显示名称(可读写,但实际值不变)。
$ttTo 头的标签。
$tti初始响应中的 To 标签(需启用 append_fromtag)。
$tuTo 头的 URI(可读写,但实际值不变)。
$tUTo 头的用户名(可读写,但实际值不变)。
$tUlTo 用户名的长度。
$TbKamailio 启动时间戳。
$Tf格式化时间(缓存)。
$TF格式化时间(实时)。
$TsUnix 时间戳(缓存)。
$TSUnix 时间戳(实时)。
$uaUser-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_idHTTP 请求的唯一 ID。
$http_req(key)HTTP 请求参数(如 method, body)。
$http_okHTTP 请求是否成功。
$http_errHTTP 错误信息。
$http_rsHTTP 状态码。
$http_rrHTTP 原因短语。
$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_countRecord-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 "; $rz = "sip"; $rU = "<null>"; $rd = "example "; $rp = "5060"; 以下是关于请求URI(Request-URI)和目的URI(Destination-URI)解析的示例说明,涵盖SIP-URI、tel-URI和服务型URN的解析规则: --- ### **请求URI包含SIP URI** ```plaintext $ru = "sip:example " $rz = "sip" // 协议方案 $rU = "<null>" // 用户名为空 $rd = "example " // 域名 $rp = "5060" // 默认端口 $rP = "UDP" // 默认传输协议 $ru = "sips:john.q.public:hispw@example :6061 transport=tls;foo=bar" $rz = "sips" // 协议方案(加密SIP) $rU = "john.q.public" // 用户名 $rd = "example " // 域名 $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 " $rz = "tel" // 协议方案 $rU = "7042" // 本地号码 $rd = "<null>" // 无域名(phone-context定义上下文) $rp = "5060" // 默认端口 $rP = "UDP" // 默认传输协议
目的URI(必须是SIP(S) URI) $du = "sip:example :6061;transport=tls;foo=bar" $dd = "example " // 目标域名 $dp = "6061" // 显式指定端口 $dP = "tls" // 显式指定传输协议
关键字段说明 $rz:URI的协议方案(如sip、sips、tel、urn)。$rU:用户信息部分(如用户名、电话号码或URN命名空间)。$rd/$dd:域名或URN内容。$rp/$dp:端口号(未显式指定时使用默认值5060)。$rP/$dP:传输协议(未显式指定时使用默认值UDP)。
kamailio的伪变量由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“kamailio的伪变量”