注意: Opensips的版本为2.4.x
参考文献地址 https://www.opensips.org/Documentation/Script-CoreVar-2-4
变量语法
name
其实是“type”,因为它分为几种,
- 标量/脚本变量var
- 键值对avp (Attribute Value Pair)
- 系统变量/伪变量PV (pseudo variables)
- 转移字符串
subname
就是对应type的变量name
index
如果是avp和PV,可以储存多个值,这里就可以使用index来索引。注意,它支持负数,表述从后往前
transformation
就是对取出的value做变换,如截取长度,取子字符串等
context
主要是区别request和reply两个方向的,如果不清楚的话,可以参考学习笔记一
标量/脚本变量
下面是官网的例子
$var(a) = 2; # sets the value of variable 'a' to integer '2'
$var(a) = "2"; # sets the value of variable 'a' to string '2'
$var(a) = 3 + (7&(~2)); # arithmetic and bitwise operation
$var(a) = "sip:" + $au + "@" + $fd; # compose a value from authentication username and From URI domain
# using a script variable for tests
if( [ $var(a) & 4 ] ) {
xlog("var a has third bit set\n");
}
AVP变量
TM模块有个参数onreply_avp_mode,这个参数如果设置为0(默认为0),则AVP的生命周期只有request route,branch route以及failure route阶段,reply route阶段没有;但是有意思的是,此时,var的生命周期是整个dialog。
如果设置为1,AVP的生命周期会包含request route,branch route以及failure route阶段,reply route阶段。但是只有一个transaction内的所有阶段。新的transaction是没有继承的;此时,var的生命周期只有一个transactin的equest route,branch route阶段。
modparam("tm", "onreply_avp_mode", 1)
官网的例子
例子1, 跨route阶段保存值
# enable avps in onreply route
modparam("tm", "onreply_avp_mode", 1)
...
route{
...
$avp(tmp) = $Ts ; # store the current time (at request processing)
...
t_onreply("1");
t_relay();
...
}
onreply_route[1] {
if (t_check_status("200")) {
# calculate the setup time
$var(setup_time) = $Ts - $avp(tmp);
}
}
例子2 多值操作
$avp(17) = "one";
# we have a single value
$avp(17) = "two";
# we have two values ("two","one")
$avp(17) = "three";
# we have three values ("three","two","one")
xlog("accessing values with no index: $avp(17)\n");
# this will print the first value, which is the last added value -> "three"
xlog("accessing values with no index: $(avp(17)[2])\n");
# this will print the index 2 value (third one), -> "one"
# remove the last value of the avp; if there is only one value, the AVP itself will be destroyed
$avp(17) = NULL;
# delete all values and destroy the AVP
avp_delete("$avp(17)/g");
# delete the value located at a certain index
$(avp(17)[1]) = NULL;
#overwrite the value at a certain index
$(avp(17)[0]) = "zero";
PV 系统变量
| PV | Header Full Name | Description |
|---|---|---|
| $ai | URI in SIP Request's P-Asserted-Identity header | reference to URI in request's P-Asserted-Identity header (see RFC 3325) |
| $adu | Authentication Digest URI | URI from Authorization or Proxy-Authorization header. This URI is used when calculating the HTTP Digest Response. |
| $ar | Authentication realm | realm from Authorization or Proxy-Authorization header |
| $au | Auth username user | user part of username from Authorization or Proxy-Authorization header |
| $ad | Auth username domain | domain part of username from Authorization or Proxy-Authorization header |
| $an | Auth nonce | the nonce from Authorization or Proxy-Authorization header |
| $auth.resp | Auth response | the authentication response from Authorization or Proxy-Authorization header |
| $auth.nonce | Auth nonce | the nonce string from Authorization or Proxy-Authorization header |
| $auth.opaque | Auth opaque | the opaque string from Authorization or Proxy-Authorization header |
| $auth.alg | Auth algorithm | the algorithm string from Authorization or Proxy-Authorization header |
| $auth.qop | Auth QOP | the value of qop parameter from Authorization or Proxy-Authorization header |
| $auth.nc | Auth nonce count (nc) | the value of nonce count parameter from Authorization or Proxy-Authorization header |
| $aU | Auth whole username | whole username from Authorization or Proxy-Authorization header |
| $Au | Acc username | username for accounting purposes. It's a selective pseudo variable (inherited from acc module). It returns $au if exits or From username otherwise. |
| $argv | provides access to command line arguments specified with '-o' option | |
| $af | Address family | The address family of the received SIP message. It's value is "INET" if the message was received over IPv4 or "INET6" if the message was received over IPv6 |
| $bf | Branch flags | displays a list with the branch flags set for the current SIP request |
| $branch | Branch | this variable is used for creating new branches by writing into it the value of a SIP URI |
| $ci | Call-Id | reference to body of call-id header |
| $cl | Content-Length | reference to body of content-length header |
| $cs | CSeq number | reference to cseq number from cseq header |
| $ct | Contact instance | reference to contact instance/body from the contact header. A contact instance is display_name + URI + contact_params. As a Contact header may contain multiple Contact instances and a message may contain multiple Contact headers, an index was added to the $ct variable |
| $cT | Content-Type | reference to body of Content-Type header and also the content-type headers inside a multi-part body |
$dd |
Domain of destination URI | reference to domain of destination uri (read/write)
|
| $di | Diversion header URI | reference to Diversion header URI |
| $dip | Diversion "privacy" parameter | reference to Diversion header "privacy" parameter value |
| $dir | Diversion "reason" parameter | reference to Diversion header "reason" parameter value |
$dp |
Port of destination URI | reference to port of destination uri(read/write)
|
| $dP | Transport protocol of destination URI | reference to transport protocol of destination uri |
| $ds | Destination set | reference to destination set |
$du |
Destination URI | reference to destination uri (outbound proxy to be used for sending the request) If loose_route() returns TRUE a destination uri is set according to the first Route header. (read/write)
|
| $err.class | Error class | the class of error (now is '1' for parsing errors) |
| $err.level | Error level | severity level for the error |
| $err.info | Error info | text describing the error |
| $err.rcode | Error reply code | recommended reply code |
| $err.rreason | Error reply reason | recommended reply reason phrase |
| $fd | From URI domain | reference to domain in URI of 'From' header |
| $fn | From display name | reference to display name of 'From' header |
$fs |
Forced socket | reference to the forced socket for message sending (if any) in the form proto:ip:port (read/write)
|
| $ft | From tag | reference to tag parameter of 'From' header |
| $fu | From URI | reference to URI of 'From' header |
| $fU | From URI username | reference to username in URI of 'From' header |
| $log_level | OpenSIPS Log level | changes the log level for the current process (read/write)
|
| $mb | SIP message buffer | reference to SIP message buffer |
| $mf | Message Flags | displays a list with the message/transaction flags set for the current SIP request |
| $mi | SIP message ID | reference to SIP message id |
| $ml | SIP message length | reference to SIP message length |
| $od | Domain in SIP Request's original URI | reference to domain in request's original R-URI |
| $op | Port of SIP request's original URI | reference to port of original R-URI |
| $oP | Transport protocol of SIP request original URI | reference to transport protocol of original R-URI |
| $ou | SIP Request's original URI | reference to request's original URI |
| $oU | Username in SIP Request's original URI | reference to username in request's original URI |
| $param(idx) | Route parameter | retrieves the parameters of the route. The index can be an integer, or a pseudo-variable (index starts at 1). |
| $pd | Domain in SIP Request's P-Preferred-Identity header URI | reference to domain in request's P-Preferred-Identity header URI (see RFC 3325) |
| $pn | Display Name in SIP Request's P-Preferred-Identity header | reference to Display Name in request's P-Preferred-Identity header (see RFC 3325) |
| $pp | Process id | reference to process id (pid) |
| $pr | Protocol of received message | protocol of received message (UDP, TCP, TLS, SCTP, WS) |
| $pU | User in SIP Request's P-Preferred-Identity header URI | reference to user in request's P-Preferred-Identity header URI (see RFC 3325) |
| $pu | URI in SIP Request's P-Preferred-Identity header | reference to URI in request's P-Preferred-Identity header (see RFC 3325) |
$rd |
Domain in SIP Request's URI | reference to domain in request's URI (read/write)
|
| $rb | Body of request/reply | reference to the body or a body part of the SIP message |
| $rc | Returned code | reference to returned code by last invoked function |
| $re | Remote-Party-ID header URI | reference to Remote-Party-ID header URI |
| $rm | SIP request's method | reference to request's method |
$rp |
SIP request's port | reference to port of R-URI (read/write)
|
| $rP | Transport protocol of SIP request URI | reference to transport protocol of R-URI |
| $rr | SIP reply's reason | reference to reply's reason |
| $rs | SIP reply's status | reference to reply's status |
| $rt | Refer-to URI | reference to URI of refer-to header |
$ru |
SIP Request's URI | reference to request's URI (read/write)
|
$rU |
Username in SIP Request's URI | reference to username in request's URI (read/write)
|
$ru_q |
Q value of the SIP Request's URI | reference to q value of the R-URI (read/write)
|
| $Ri | Received IP address | reference to IP address of the interface where the request has been received |
| $Rp | Received port | reference to the port where the message was received |
| $si | IP source address | reference to IP source address of the message |
| $sp | Source port | reference to the source port of the message |
| $td | To URI Domain | reference to domain in URI of 'To' header |
| $tn | To display name | reference to display name of 'To' header |
| $tt | To tag | reference to tag parameter of 'To' header |
| $tu | To URI | reference to URI of 'To' header |
| $tU | To URI Username | reference to username in URI of 'To' header |
| $time(format) | Formatted date and time | returns the string formatted time according to UNIX date (see: man date). |
| $T_branch_idx | Branch index | the index (starting with 1 for the first branch) of the branch for which is executed the branch_route[]. If used outside of branch_route[] block, the value is '0'. This is exported by TM module |
| $Tf | String formatted time | |
| $Ts | Current unix time stamp in seconds | |
| $Tsm | Current microseconds of the current second | |
| $TS | Startup unix time stamp | |
| $ua | User agent header | reference to user agent header field |
| $(hdr(name)[N]) $(hdrcnt(name) | SIP Headers | represents the body of the N-th header identified by 'name'. |
| $rT | Route Type | Holds the current route type as a string |
| $cfg_line $cfg_file | Current script line and file |














网友评论