This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
cookbooks:devel:pseudovariables [2015/03/30 16:40] miconda [$jsonrpl(key) - JSONRPC Reply] |
cookbooks:devel:pseudovariables [2019/10/28 13:01] miconda tcp variable |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Kamailio SIP Server | + | {{ : |
+ | ====== Kamailio SIP Server | ||
===== Introduction ===== | ===== Introduction ===== | ||
Line 75: | Line 76: | ||
**$aU** - whole username from Authorization or Proxy-Authorization header | **$aU** - whole username from Authorization or Proxy-Authorization header | ||
- | ==== $Au - Acc username ==== | + | ==== $Au - Acc username |
- | **$Au** - username for accounting purposes. It's a selective pseudo variable (inherited from acc module). It returns $au if exits or From username | + | **$Au** - username for accounting purposes. It's a selective pseudo variable (inherited from acc module). It returns |
+ | ==== $AU - Acc username ==== | ||
+ | **$AU** - username for accounting purposes. It's a selective pseudo variable (inherited from acc module). It returns the auth username ($au) if exists or From user ($fU) otherwise. | ||
==== $branch(name) - Branch attributes ==== | ==== $branch(name) - Branch attributes ==== | ||
Line 169: | Line 172: | ||
**$conid** - The TCP connection ID of the connection the current message arrived on for TCP, TLS, WS, and WSS. Set to $null for SCTP and UDP. | **$conid** - The TCP connection ID of the connection the current message arrived on for TCP, TLS, WS, and WSS. Set to $null for SCTP and UDP. | ||
- | ==== $cs - CSeq ==== | + | ==== $cs - CSeq Number |
- | **$cs** - reference to the sequence number in the cseq header. The method in the CSeq header is identical to the request method, thus use $rm to get the method (works also for responses). | + | **$cs** - reference to the sequence number in the CSeq header. The method in the CSeq header is identical to the request method, thus use $rm to get the method (works also for responses). |
+ | ==== $csb - CSeq Header Body ==== | ||
+ | |||
+ | **$csb** - reference to the CSeq header body (number method). | ||
==== $ct - Contact header ==== | ==== $ct - Contact header ==== | ||
Line 221: | Line 227: | ||
If loose_route() returns TRUE a destination uri is set according to the first Route header. | If loose_route() returns TRUE a destination uri is set according to the first Route header. | ||
- | $du is also set if lookup() function of ' | + | $du is also set if lookup() function of ' |
- | set $du to any SIP URI. | + | if you use the path functionality. The function handle_ruri_alias() from the nathelper |
+ | module will also set it. You can set $du to any SIP URI. | ||
| | ||
| | ||
Line 230: | Line 237: | ||
To reset $du: | To reset $du: | ||
- | $du = null; | + | $du = $null; |
==== $fd - From URI domain ==== | ==== $fd - From URI domain ==== | ||
Line 274: | Line 281: | ||
**$mb** - reference to SIP message buffer | **$mb** - reference to SIP message buffer | ||
+ | |||
+ | ==== $mbu - updated SIP message buffer ==== | ||
+ | |||
+ | **$mbu** - reference to updated SIP message buffer, after applying changes | ||
==== $mf - Flags ==== | ==== $mf - Flags ==== | ||
Line 332: | Line 343: | ||
**$pp** - reference to process id (pid) | **$pp** - reference to process id (pid) | ||
- | ==== $pr - Protocol of received message ==== | + | ==== $pr or $proto |
+ | |||
+ | **$pr** or **$proto** - protocol of received message (udp, tcp, tls, sctp, ws, wss) | ||
+ | |||
+ | ==== $prid - protocol id ==== | ||
- | **$pr** or **$proto** - protocol | + | **$prid** - internal |
+ | * 0 - NONE | ||
+ | * 1 - UDP | ||
+ | * 2 - TCP | ||
+ | * 3 - TLS | ||
+ | * 4 - SCTP | ||
+ | * 5 - WS | ||
+ | * 6 - WSS | ||
+ | * 7 - OTHER | ||
==== $pU - User in P-Preferred-Identity header URI ==== | ==== $pU - User in P-Preferred-Identity header URI ==== | ||
Line 432: | Line 455: | ||
<fc # | <fc # | ||
+ | ==== $rv - SIP message version ==== | ||
+ | |||
+ | **$rv** - reference to SIP message (reply or request) version | ||
==== $ruid - Record internal Unique ID ==== | ==== $ruid - Record internal Unique ID ==== | ||
Line 439: | Line 465: | ||
**$rz** - returns R-URI scheme, possible values: sip, sips, tel, tels and urn, R-URI scheme parsing error should be reflected by value: none | **$rz** - returns R-URI scheme, possible values: sip, sips, tel, tels and urn, R-URI scheme parsing error should be reflected by value: none | ||
+ | |||
+ | ==== $RAi - Received advertised IP address ==== | ||
+ | |||
+ | **$RAi** - reference to advertised IP address of the interface where the request has been received, or $Ri if no advertised address. | ||
+ | |||
+ | ==== $RAp - Received advertised port ==== | ||
+ | |||
+ | **$RAp** - reference to advertised port where the request has been received, or $Rp if no advertised port. | ||
==== $Ri - Received IP address ==== | ==== $Ri - Received IP address ==== | ||
**$Ri** - reference to IP address of the interface where the request has been received | **$Ri** - reference to IP address of the interface where the request has been received | ||
- | |||
==== $Rp - Received port ==== | ==== $Rp - Received port ==== | ||
**$Rp** - reference to the port where the message was received | **$Rp** - reference to the port where the message was received | ||
+ | |||
+ | ==== $RAu - Advertised socket URI ==== | ||
+ | |||
+ | **$RAu** - local socket where the SIP messages was received in URI format, without transport parameter for UDP, using advertised address when available. | ||
+ | |||
+ | ==== $RAut - Advertised socket URI ==== | ||
+ | |||
+ | **$RAut** - local socket where the SIP messages was received in URI format, always with transport parameter, using advertised address when available. | ||
+ | |||
+ | ==== $Ru - Received socket URI ==== | ||
+ | |||
+ | **$Ru** - local socket where the SIP messages was received in URI format, without transport parameter for UDP. | ||
+ | |||
+ | ==== $Rut - Received socket URI ==== | ||
+ | |||
+ | **$Rut** - local socket where the SIP messages was received in URI format, always with transport parameter. | ||
+ | |||
+ | ==== $sas - Source address in socket format ==== | ||
+ | |||
+ | **$sas** - get source address in socket format (proto: | ||
+ | ==== $sbranch(attr) - Static Branch ==== | ||
+ | |||
+ | **$sbranch(attr)** - class of variables allowing to manage the values of attributes for static branch. The static branch is internal structure that is used by the functions sbranch_push_ruri() and sbranch_append() from **pv** module, enabling more flexibility in updating the R-URI (first) branch attributes as well as extra branches (e.g., for parallel forking). | ||
+ | |||
+ | The **attr** can be any of the supported values for **$branch(attr)** class of variables -- see above for proper details. | ||
+ | |||
+ | Example of usage: | ||
+ | |||
+ | <code c> | ||
+ | sbranch_reset(); | ||
+ | $sbranch(uri) = " | ||
+ | $sbranch(dst_uri) = " | ||
+ | $sbranch(path) = " | ||
+ | $sbranch(send_socket) = " | ||
+ | sbranch_set_ruri(); | ||
+ | </ | ||
==== $sf - Script flags ==== | ==== $sf - Script flags ==== | ||
Line 458: | Line 527: | ||
==== $si - Source IP address ==== | ==== $si - Source IP address ==== | ||
- | **$si** - reference to IP source address of the message | + | **$si** - reference to IP source address of the message |
+ | |||
+ | ==== $sid - Server ID ==== | ||
+ | |||
+ | **$sid** - the value for server id (server_id parameter) | ||
+ | ==== $siz - Source IP address ==== | ||
+ | |||
+ | **$siz** - reference to IP source address of the message, with enclosing square brackets for IPv6 | ||
==== $sp - Source port ==== | ==== $sp - Source port ==== | ||
Line 484: | Line 560: | ||
==== $sut - Source address as full URI ==== | ==== $sut - Source address as full URI ==== | ||
- | **$su** - returns the representation of source address (ip, port, proto) as full SIP URI. The proto UDP is added also as transport parameter. | + | **$sut** - returns the representation of source address (ip, port, proto) as full SIP URI. The proto UDP is added also as transport parameter. |
Its value looks like: | Its value looks like: | ||
Line 549: | Line 625: | ||
**$ua** - reference to user agent header field | **$ua** - reference to user agent header field | ||
+ | |||
+ | ==== $version() - version ==== | ||
+ | |||
+ | **$version(num)** - version as number | ||
+ | |||
+ | **$version(full)** - full version string "name version architecture/ | ||
+ | |||
+ | **$version(hash)** - TBA | ||
+ | |||
+ | ===== $env(NAME) - environment variables ===== | ||
+ | |||
+ | **$env(NAME)** - value of the environment variable named NAME | ||
===== $avp(id) - AVPs ===== | ===== $avp(id) - AVPs ===== | ||
Line 596: | Line 684: | ||
It is R/W variable (you can assign values to it directly in configuration file). | It is R/W variable (you can assign values to it directly in configuration file). | ||
+ | |||
+ | ===== $expires(key) - Expires Values ===== | ||
+ | |||
+ | Return the min and max of expires value for current SIP message. Contact headers are checked with higher priority, if no expires parameter there, then Expires header is used | ||
+ | |||
+ | If none is found, $null is returned. | ||
+ | |||
+ | Possible ' | ||
+ | |||
+ | * $expires(min) - the minimum value for expires | ||
+ | * $expires(max) - the maximum value for expires | ||
+ | |||
+ | When there is only one expires value, then min and max return the same. | ||
+ | |||
+ | Example of usage: | ||
+ | |||
+ | <code c> | ||
+ | if($expires(max)!=$null) { | ||
+ | xlog(" | ||
+ | } | ||
+ | </ | ||
===== $xavp(id) - XAVPs ===== | ===== $xavp(id) - XAVPs ===== | ||
- | xavp - extended AVP's - are structures that can store multiple values. They work like a stack, much like AVPs, and are attached to SIP transactions. Each xavp has a name and can contain multiple named values, the structure name and the value name are separated by '=>' | + | xavp - extended AVP's - are structures that can store multiple values. They work like a stack, much like AVPs, and are attached to SIP transactions. Each xavp has a name and can contain multiple named values, the structure name and the value name are separated by < |
<code c> | <code c> | ||
$xavp(root=> | $xavp(root=> | ||
Line 652: | Line 761: | ||
**$(hdr(name)[N])** - represents the body of the N-th header identified by ' | **$(hdr(name)[N])** - represents the body of the N-th header identified by ' | ||
- | If [N] is omitted then the body of the first header is printed. The first header is got when N=0, for the second N=1, a.s.o. In case of a comma-separated multi-body headers, it returns all the bodies, comma-separated. To print the last header of that type, use -1, or other negative values to count from the end. No white spaces are allowed inside the specifier (before }, before or after {, [, ] symbols). When N=' | + | If [N] is omitted then the body of the first header is printed. The body of first header is returned |
+ | |||
+ | If name is *, then any header name is matched, e.g., $hdr(*) is body of first header, $(hdr(*)[-1]) is body of last header. | ||
The module should identify compact header names. It is recommended to use dedicated specifiers for headers (e.g., $ua for user agent header), if they are available -- they are faster. | The module should identify compact header names. It is recommended to use dedicated specifiers for headers (e.g., $ua for user agent header), if they are available -- they are faster. | ||
Line 665: | Line 776: | ||
<fc # | <fc # | ||
+ | |||
+ | ===== $hdrc(name) - Number of Headers ===== | ||
+ | |||
+ | **$hdrc(name)** - get the number of headers with the respective name | ||
+ | |||
+ | Example of usage: | ||
+ | |||
+ | <code c> | ||
+ | if($hdrc(Via) == 2) { | ||
+ | ... | ||
+ | } | ||
+ | </ | ||
===== $var(name) - Private memory variables (zero) ===== | ===== $var(name) - Private memory variables (zero) ===== | ||
Line 717: | Line 840: | ||
===== $shv(name) - Shared memory variables ===== | ===== $shv(name) - Shared memory variables ===== | ||
- | **$shv(name)** | + | **$shv(name)** |
Example - shv(name) pseudo-variable usage: | Example - shv(name) pseudo-variable usage: | ||
Line 735: | Line 858: | ||
===== $time(name) - Broken-down time ===== | ===== $time(name) - Broken-down time ===== | ||
- | **$time(name)** - the PV provides access to broken-down time attributes. | + | **$time(name)** - the PV provides access to broken-down time attributes |
The ' | The ' | ||
Line 758: | Line 881: | ||
</ | </ | ||
+ | ===== $utime(name) - Broken-down time ===== | ||
+ | **$utime(name)** - the PV provides access to broken-down time attributes in UTC. | ||
+ | |||
+ | See **$time(name)** above for the possible attributes | ||
===== $timef(format) - Strftime Formatted Time ===== | ===== $timef(format) - Strftime Formatted Time ===== | ||
Line 767: | Line 894: | ||
<code c> | <code c> | ||
xlog(" | xlog(" | ||
+ | </ | ||
+ | |||
+ | ===== $utimef(format) - Strftime Formatted UTC Time ===== | ||
+ | |||
+ | **$utimef(format)** - return current time in UTC as formatted by strftime ' | ||
+ | |||
+ | Example: | ||
+ | |||
+ | <code c> | ||
+ | xlog(" | ||
</ | </ | ||
Line 785: | Line 922: | ||
} | } | ||
</ | </ | ||
- | ===== Send Address | + | ===== Received Data Attributes ===== |
+ | |||
+ | ==== $rcv(key) ==== | ||
+ | |||
+ | Attributes of received data. The variables must be used inside **event_route[core: | ||
+ | |||
+ | The key can be: | ||
+ | |||
+ | * buf - received message | ||
+ | * len - lenght of received message | ||
+ | * srcip - source ip | ||
+ | * rcvip - local ip where it was received | ||
+ | * scrport - source port | ||
+ | * rcvport - local port where it was received | ||
+ | * proto - protocol as int id | ||
+ | * sproto - protocol as string | ||
+ | * af - address family | ||
+ | |||
+ | Example of usage: | ||
+ | |||
+ | <code c> | ||
+ | event_route[core: | ||
+ | xlog(" | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== Send Data Attributes ===== | ||
==== $sndfrom(name) ==== | ==== $sndfrom(name) ==== | ||
Line 804: | Line 967: | ||
* af - address family to be used to send (numeric) | * af - address family to be used to send (numeric) | ||
* port - port of destination address | * port - port of destination address | ||
- | * proto - transport protocol to be used to send (numeric) | + | * proto - transport protocol to be used to send (numeric |
+ | * sproto - transport protocol to be used to send (string) | ||
* buf - entire send buffer as string | * buf - entire send buffer as string | ||
* len - length of outgoing packet (length of above buf) | * len - length of outgoing packet (length of above buf) | ||
Line 861: | Line 1025: | ||
Return the attribute of the context for current processed dialog. | Return the attribute of the context for current processed dialog. | ||
- | <fc #0000ff>It is R/W variable.</ | + | <fc #0000ff>Some of the attributes are R/W variables.</ |
The ' | The ' | ||
- | * set | + | * set - returns 1 if the dialog for current context is set, 0 otherwise |
- | * flags | + | * flags - get/set dialog |
- | * timeout_route | + | * timeout_route |
- | * timeout_bye | + | * timeout_route_id - get internal id for the route to be executed on timeout |
+ | * timeout_bye | ||
+ | * timeout - set the dialog lifetime (in seconds) | ||
+ | * on - get/set an integer value associated with the context (cfg usage) | ||
+ | * dir - get direction of the request for the dialog of the current context (0 - unknown, 1 - downstream, 2 - upstream) | ||
==== $dlg_var(key) ==== | ==== $dlg_var(key) ==== | ||
Line 876: | Line 1044: | ||
The ' | The ' | ||
+ | |||
+ | ===== Erlang module Pseudo-Variables ===== | ||
+ | |||
+ | ==== Erlang pseudo-variable attributes === | ||
+ | |||
+ | * type - get variable type. Possible types are: atom, integer, list, string, tuple, pid and ref. | ||
+ | |||
+ | * length - get length of list or tuple. | ||
+ | |||
+ | * format - prints a term, in clear text. It tries to resemble the term printing in the Erlang shell. | ||
+ | |||
+ | ==== $erl_atom(name) ==== | ||
+ | // | ||
+ | Erlang atom is a literal, a constant with name. Formatted output pseudo variable | ||
+ | atom could be enclosed in single quotes (') if it does not begin with a | ||
+ | lower-case letter or if it contains other characters than alphanumeric characters, | ||
+ | underscore (_), or @. | ||
+ | |||
+ | Example: | ||
+ | |||
+ | <code c> | ||
+ | $erl_atom(A) = " | ||
+ | |||
+ | xlogl(" | ||
+ | </ | ||
+ | |||
+ | ==== $erl_list(name) ==== | ||
+ | Compound data type with a variable number of terms. Formally, a list is either | ||
+ | the empty list [] or consists of one or more elements. | ||
+ | |||
+ | Example: | ||
+ | |||
+ | <code c> | ||
+ | $erl_atom(E) = " | ||
+ | $erl_list(L) = " | ||
+ | $erl_list(L) = " | ||
+ | $erl_list(L) = $erl_atom(E); | ||
+ | |||
+ | xlogl(" | ||
+ | |||
+ | # empty list | ||
+ | $erl_tuple(E[*]) = $null; | ||
+ | </ | ||
+ | |||
+ | ==== $erl_tuple(name) ==== | ||
+ | From the Erlang point of view the tuple compound data type with a fixed number | ||
+ | of terms. The module implementation of tuple has the same behavior as the list. | ||
+ | |||
+ | Example: | ||
+ | |||
+ | <code c> | ||
+ | $erl_atom(e) = " | ||
+ | |||
+ | $erl_tuple(T) = " | ||
+ | $erl_tuple(T) = $erl_atom(e); | ||
+ | |||
+ | xlogl(" | ||
+ | </ | ||
+ | |||
+ | ==== $erl_pid(name) ==== | ||
+ | Holds Eralng process identifier. Provides access to Erlang PID value and could | ||
+ | be used in send message. | ||
+ | |||
+ | ==== $erl_ref(name) ==== | ||
+ | Holds Erlang reference. Provides access to reference value and could be used in | ||
+ | send message. | ||
+ | |||
+ | ==== $erl_xbuff(name) ==== | ||
+ | Generic pseudo variable to acts as other pseudo variables exported from Erlang | ||
+ | module. | ||
===== HTable module Pseudo-Variables ===== | ===== HTable module Pseudo-Variables ===== | ||
Line 883: | Line 1121: | ||
Access hash table entries. | Access hash table entries. | ||
- | <fc # | + | <fc # |
The “htname” must be a hash table name defined via “htable” parameter. | The “htname” must be a hash table name defined via “htable” parameter. | ||
Line 994: | Line 1232: | ||
xlog(" | xlog(" | ||
... | ... | ||
+ | </ | ||
+ | |||
+ | ==== $shtitkey(iname) ==== | ||
+ | |||
+ | The key at the current position in the iterator. | ||
+ | |||
+ | ==== $shtitval(iname) ==== | ||
+ | |||
+ | The value at the current position in the iterator. | ||
+ | |||
+ | Example: | ||
+ | |||
+ | <code c> | ||
+ | sht_iterator_start(" | ||
+ | while(sht_iterator_next(" | ||
+ | xlog(" | ||
+ | } | ||
+ | sht_iterator_end(" | ||
+ | </ | ||
+ | |||
+ | ==== $shtrecord(id) ==== | ||
+ | |||
+ | Get the key or the value of expired item inside the event_route[htable: | ||
+ | |||
+ | The id can be: | ||
+ | |||
+ | * key | ||
+ | * value | ||
+ | |||
+ | Example: | ||
+ | |||
+ | <code c> | ||
+ | event_route[htable: | ||
+ | xlog(" | ||
+ | } | ||
</ | </ | ||
===== Memcached module Pseudo-Variables ===== | ===== Memcached module Pseudo-Variables ===== | ||
Line 1155: | Line 1428: | ||
The **name** can be: | The **name** can be: | ||
- | * id_index - return the internal index of current transaction | + | * id_index - return the internal index of current transaction |
- | * id_label - return the internal label of current transaction | + | * id_label - return the internal label of current transaction |
- | * reply_code - alias to $T_reply_code | + | * id_index_n - return the internal index of current transaction, |
- | * branch_index - alias to $T_branch_idx | + | * id_label_n - return the internal label of current transaction, |
+ | * reply_code - reply code (alias to $T_reply_code) | ||
+ | * reply_reason - reply reason | ||
+ | * reply_last - last received reply code | ||
+ | * branch_index - branch index (alias to $T_branch_idx) | ||
+ | * ruid - return the internal location ruid field for current branch | ||
* reply_type - 1 if it is a local generated reply, 0 - if no reply for transaction or it is a received reply | * reply_type - 1 if it is a local generated reply, 0 - if no reply for transaction or it is a received reply | ||
Line 1179: | Line 1457: | ||
* used to build the input for uac_send_req() function of UAC module | * used to build the input for uac_send_req() function of UAC module | ||
- | key can be: | + | The key can be: |
* method - SIP method | * method - SIP method | ||
* ruri - request URI | * ruri - request URI | ||
Line 1190: | Line 1468: | ||
* apasswd - authentication password | * apasswd - authentication password | ||
* sock - local socket to be used for sending (proto: | * sock - local socket to be used for sending (proto: | ||
+ | * callid - SIP-Call-ID of the generated request (by default, a call-id is generated) | ||
* all - alias useful to reset all fields - $uac_req(all) = $null; | * all - alias useful to reset all fields - $uac_req(all) = $null; | ||
+ | * evroute - it has to be set to 1 in order to execute event_route[uac: | ||
+ | * evcode - reply code for the request sent with uac_req_send(), | ||
+ | * evtype - is 1 if the reply was received via network, 2 if the reply was locally generated (e.g., retransmission timeout), available inside event_route[uac: | ||
+ | * evparam - generic data buffer associated with the request that can be set before sending it and retrieved when executing the event route. It has a size of 128 characters. | ||
<code c> | <code c> | ||
Line 1197: | Line 1480: | ||
$uac_req(furi)=" | $uac_req(furi)=" | ||
$uac_req(turi)=" | $uac_req(turi)=" | ||
+ | $uac_req(evroute) = 1; | ||
uac_req_send(); | uac_req_send(); | ||
+ | ... | ||
+ | event_route[uac: | ||
+ | xlog(" | ||
+ | } | ||
</ | </ | ||
===== Nathelper module Pseudo-Variables ===== | ===== Nathelper module Pseudo-Variables ===== | ||
Line 1235: | Line 1523: | ||
==== $TV(name) ==== | ==== $TV(name) ==== | ||
- | Seconds and microseconds taken from struct timeval. | + | Seconds and microseconds taken from struct timeval. The time at that moment is represented by **seconds.microseconds**. |
* $TV(s) - seconds (cached at first call per sip message) | * $TV(s) - seconds (cached at first call per sip message) | ||
* $TV(u) - microseconds (cached at first call per sip message) | * $TV(u) - microseconds (cached at first call per sip message) | ||
- | * $TV(sn) - seconds (not cached) | + | * $TV(sn) - seconds (not cached, taken at that moment) |
- | * $TV(un) - microseconds (not cached) | + | * $TV(un) - microseconds (corresponding to the moment $TV(sn) is retrieved) |
- | * $TV(Sn) - string representation seconds.microseconds (not cached) | + | * $TV(Sn) - string representation seconds.microseconds (not cached, taken at that moment) |
===== Next hop address ===== | ===== Next hop address ===== | ||
Line 1255: | Line 1542: | ||
* $nh(P) - transport protocol (upper case p) | * $nh(P) - transport protocol (upper case p) | ||
- | ===== GeoIP module Pseudo-Variables | + | ===== NDB_REDIS Module ===== |
+ | |||
+ | ==== $redis(res=> | ||
+ | |||
+ | Access the attributes of the Redis response. | ||
+ | |||
+ | The key can be: | ||
+ | |||
+ | * type - type of the reply (as in hiredis.h) | ||
+ | * value - the value returned by REDIS server; | ||
+ | * info - in case of error from REDIS, it will contain an info message. | ||
+ | |||
+ | If reply type is an array (as in hiredis.h), there are other keys available: | ||
+ | |||
+ | * size - returns number of elements in the array. | ||
+ | |||
+ | * type[n] - returns the type of the nth element in the array. type - returns array type. | ||
+ | |||
+ | * value[n] - returns value of the nth element. value - returns null for an array. You need to get each element by index. | ||
+ | |||
+ | In case one of the members of the array is also an array (for example calling SMEMBERS in a MULTI/EXEC transaction), | ||
+ | |||
+ | Example: | ||
+ | |||
+ | < | ||
+ | redis_cmd(" | ||
+ | xlog(" | ||
+ | </ | ||
+ | |||
+ | ==== $redisd(key) ==== | ||
+ | |||
+ | Return the corresponding value for various defines from hiredis library. | ||
+ | |||
+ | The key can be: | ||
+ | |||
+ | * rpl_str - return REDIS_REPLY_STRING | ||
+ | * rpl_arr - return REDIS_REPLY_ARRAY | ||
+ | * rpl_int - return REDIS_REPLY_INTEGER | ||
+ | * rpl_nil - return REDIS_REPLY_NIL | ||
+ | * rpl_sts - return REDIS_REPLY_STATUS | ||
+ | * rpl_err - return REDIS_REPLY_ERROR | ||
+ | |||
+ | $redisd(rpl_XYZ) can be compared with $redis(r=> | ||
+ | |||
+ | Example: | ||
+ | |||
+ | < | ||
+ | redis_cmd(" | ||
+ | if ($redis(r=> | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== GeoIP Module | ||
==== $gip(pvc=> | ==== $gip(pvc=> | ||
Line 1294: | Line 1633: | ||
==== $tls_version ==== | ==== $tls_version ==== | ||
+ | The TLS/SSL version which is used on the TLS connection from which the message was received. String type. | ||
==== $tls_description ==== | ==== $tls_description ==== | ||
+ | The TLS/SSL description of the TLS connection from which the message was received. String type. | ||
==== $tls_cipher_info ==== | ==== $tls_cipher_info ==== | ||
+ | The TLS/SSL cipher which is used on the TLS connection from which the message was received. String type. | ||
==== $tls_cipher_bits ==== | ==== $tls_cipher_bits ==== | ||
+ | The number of cipher bits which are used on the TLS connection from which the message was received. String and Integer type. | ||
==== $tls_peer_version ==== | ==== $tls_peer_version ==== | ||
+ | The version of the certificate. String type. | ||
==== $tls_my_version ==== | ==== $tls_my_version ==== | ||
+ | The version of the certificate. String type. | ||
==== $tls_peer_serial ==== | ==== $tls_peer_serial ==== | ||
+ | The serial number of the certificate. String and Integer type. | ||
==== $tls_my_serial ==== | ==== $tls_my_serial ==== | ||
+ | The serial number of the certificate. String and Integer type. | ||
==== $tls_peer_subject ==== | ==== $tls_peer_subject ==== | ||
+ | ASCII dump of the fields in the subject section of the certificate. String type. Example: | ||
+ | / | ||
==== $tls_peer_issuer ==== | ==== $tls_peer_issuer ==== | ||
+ | ASCII dump of the fields in the issuer section of the certificate. String type. | ||
==== $tls_my_subject ==== | ==== $tls_my_subject ==== | ||
+ | ASCII dump of the fields in the subject section of the certificate. String type. | ||
==== $tls_my_issuer ==== | ==== $tls_my_issuer ==== | ||
+ | ASCII dump of the fields in the issuer section of the certificate. String type. | ||
==== $tls_peer_subject_cn ==== | ==== $tls_peer_subject_cn ==== | ||
+ | commonName in the subject section of the certificate. String type. | ||
==== $tls_peer_issuer_cn ==== | ==== $tls_peer_issuer_cn ==== | ||
+ | commonName in the issuer section of the certificate. String type. | ||
==== $tls_my_subject_cn ==== | ==== $tls_my_subject_cn ==== | ||
+ | commonName in the subject section of the certificate. String type. | ||
==== $tls_my_issuer_cn ==== | ==== $tls_my_issuer_cn ==== | ||
+ | commonName in the issuer section of the certificate. String type. | ||
==== $tls_peer_subject_locality ==== | ==== $tls_peer_subject_locality ==== | ||
+ | localityName in the subject section of the certificate. String type. | ||
==== $tls_peer_issuer_locality ==== | ==== $tls_peer_issuer_locality ==== | ||
+ | localityName in the issuer section of the certificate. String type. | ||
==== $tls_my_subject_locality ==== | ==== $tls_my_subject_locality ==== | ||
+ | localityName in the subject section of the certificate. String type. | ||
==== $tls_my_issuer_locality ==== | ==== $tls_my_issuer_locality ==== | ||
+ | localityName in the issuer section of the certificate. String type. | ||
==== $tls_peer_subject_country ==== | ==== $tls_peer_subject_country ==== | ||
+ | countryName in the subject section of the certificate. String type. | ||
==== $tls_peer_issuer_country ==== | ==== $tls_peer_issuer_country ==== | ||
+ | countryName in the issuer section of the certificate. String type. | ||
==== $tls_my_subject_country ==== | ==== $tls_my_subject_country ==== | ||
+ | countryName in the subject section of the certificate. String type. | ||
==== $tls_my_issuer_country ==== | ==== $tls_my_issuer_country ==== | ||
+ | countryName in the issuer section of the certificate. String type. | ||
==== $tls_peer_subject_state ==== | ==== $tls_peer_subject_state ==== | ||
+ | stateOrProvinceName in the subject section of the certificate. String type. | ||
==== $tls_peer_issuer_state ==== | ==== $tls_peer_issuer_state ==== | ||
+ | stateOrProvinceName in the issuer section of the certificate. String type. | ||
==== $tls_my_subject_state ==== | ==== $tls_my_subject_state ==== | ||
+ | stateOrProvinceName in the subject section of the certificate. String type. | ||
==== $tls_my_issuer_state ==== | ==== $tls_my_issuer_state ==== | ||
+ | stateOrProvinceName in the issuer section of the certificate. String type. | ||
==== $tls_peer_subject_organization ==== | ==== $tls_peer_subject_organization ==== | ||
+ | organizationName in the subject section of the certificate. String type. | ||
==== $tls_peer_issuer_organization ==== | ==== $tls_peer_issuer_organization ==== | ||
+ | organizationName in the issuer section of the certificate. String type. | ||
==== $tls_my_subject_organization ==== | ==== $tls_my_subject_organization ==== | ||
+ | organizationName in the subject section of the certificate. String type. | ||
==== $tls_my_issuer_organization ==== | ==== $tls_my_issuer_organization ==== | ||
+ | organizationName in the issuer section of the certificate. String type. | ||
==== $tls_peer_subject_unit ==== | ==== $tls_peer_subject_unit ==== | ||
+ | organizationalUnitName in the subject section of the certificate. String type. | ||
+ | ==== $tls_peer_subject_uid ==== | ||
+ | UID in the subject section of the certificate. String type. | ||
==== $tls_peer_issuer_unit ==== | ==== $tls_peer_issuer_unit ==== | ||
+ | organizationalUnitName in the issuer section of the certificate. String type. | ||
==== $tls_my_subject_unit ==== | ==== $tls_my_subject_unit ==== | ||
+ | organizationalUnitName in the subject section of the certificate. String type. | ||
+ | ==== $tls_my_subject_uid ==== | ||
+ | UID in the subject section of the certificate. String type. | ||
==== $tls_my_issuer_unit ==== | ==== $tls_my_issuer_unit ==== | ||
+ | organizationalUnitName in the issuer section of the certificate. String type. | ||
==== $tls_peer_san_email ==== | ==== $tls_peer_san_email ==== | ||
+ | email address in the " | ||
==== $tls_my_san_email ==== | ==== $tls_my_san_email ==== | ||
+ | email address in the " | ||
==== $tls_peer_san_hostname ==== | ==== $tls_peer_san_hostname ==== | ||
+ | hostname (DNS) in the " | ||
==== $tls_my_san_hostname ==== | ==== $tls_my_san_hostname ==== | ||
+ | hostname (DNS) in the " | ||
==== $tls_peer_san_uri ==== | ==== $tls_peer_san_uri ==== | ||
+ | URI in the " | ||
==== $tls_my_san_uri ==== | ==== $tls_my_san_uri ==== | ||
+ | URI in the " | ||
==== $tls_peer_san_ip ==== | ==== $tls_peer_san_ip ==== | ||
+ | ip address in the " | ||
==== $tls_my_san_ip ==== | ==== $tls_my_san_ip ==== | ||
+ | ip address in the " | ||
+ | |||
+ | ==== $tls_peer_verified ==== | ||
+ | Returns 1 if the peer's certificate was successfully verified. Otherwise it returns 0. String and Integer type. | ||
+ | |||
+ | ==== $tls_peer_revoked ==== | ||
+ | Returns 1 if the peer's certificate was revoked. Otherwise it returns 0. String and Integer type. | ||
+ | |||
+ | ==== $tls_peer_expired ==== | ||
+ | Returns 1 if the peer's certificate is expired. Otherwise it returns 0. String and Integer type. | ||
+ | |||
+ | ==== $tls_peer_selfsigned ==== | ||
+ | Returns 1 if the peer's certificate is selfsigned. Otherwise it returns 0. String and Integer type. | ||
+ | |||
+ | ==== $tls_peer_notBefore ==== | ||
+ | Returns the notBefore validity date of the peer's certificate. String type. | ||
+ | |||
+ | ==== $tls_peer_notAfter ==== | ||
+ | Returns the notAfter validity date of the peer's certificate. String type. | ||
+ | |||
+ | ==== $tls_peer_server_name ==== | ||
+ | The SNI server name of the peer | ||
+ | ===== SIP Message Attributes ===== | ||
+ | |||
+ | ==== $msg(attr) ==== | ||
+ | |||
+ | Return attributes of SIP message: | ||
+ | |||
+ | * $msg(len) - sip message length | ||
+ | * $msg(buf) - sip message buffer | ||
+ | * $msg(body) - sip message body | ||
+ | * $msg(body_len) - sip message body length | ||
+ | * $msg(hdrs) - sip message headers | ||
+ | * $msg(fline) - sip message first line | ||
===== XHTTP module Pseudo-Variables ===== | ===== XHTTP module Pseudo-Variables ===== | ||
Line 1417: | Line 1838: | ||
==== $sipt(calling_party_number.presentation) / $sipt_presentation ==== | ==== $sipt(calling_party_number.presentation) / $sipt_presentation ==== | ||
Returns the value of the Address presentation restricted indicator contained in the Calling Party Number header of the IAM message if it exists. Returns -1 if there isn't a Calling Party Number header. | Returns the value of the Address presentation restricted indicator contained in the Calling Party Number header of the IAM message if it exists. Returns -1 if there isn't a Calling Party Number header. | ||
+ | |||
+ | The following values can be returned: | ||
+ | * 0 presentation allowed | ||
+ | * 1 resentation restricted | ||
+ | * 2 address not avail (national use) | ||
+ | * 3 spare | ||
+ | |||
+ | Example: | ||
+ | |||
+ | <code c> | ||
+ | if($sipt(calling_party_number.presentation) == 1) | ||
+ | { | ||
+ | append_hf(" | ||
+ | $fn = " | ||
+ | } | ||
+ | </ | ||
+ | |||
==== $sipt(calling_party_number.screening) / $sipt_screening ==== | ==== $sipt(calling_party_number.screening) / $sipt_screening ==== | ||
Returns the value of the Screening Indicator contained in the Calling Party Number header of the IAM message if it exists. Returns -1 if there isn't a Calling Party Number header. | Returns the value of the Screening Indicator contained in the Calling Party Number header of the IAM message if it exists. Returns -1 if there isn't a Calling Party Number header. | ||
+ | |||
+ | Can return the following values: | ||
+ | * 0 Reserved (user provided, not verified) | ||
+ | * 1 User Provided, Verified and Passed | ||
+ | * 2 Reserved (user provided, verified and failed) | ||
+ | * 3 Network provided | ||
+ | |||
+ | Example: | ||
+ | <code c> | ||
+ | # remove P-Asserted-Identity header if the screening isn't verified | ||
+ | # or network provided | ||
+ | $avp(s: | ||
+ | if($avp(s: | ||
+ | { | ||
+ | remove_hf(" | ||
+ | } | ||
+ | </ | ||
+ | |||
==== $sipt(hop_counter) / $sipt_hop_counter ==== | ==== $sipt(hop_counter) / $sipt_hop_counter ==== | ||
Returns the value of the Hop Counter for the IAM message if it exists. Returns -1 if there isn't a hop counter. | Returns the value of the Hop Counter for the IAM message if it exists. Returns -1 if there isn't a hop counter. | ||
+ | |||
+ | Example: | ||
+ | <code c> | ||
+ | # get the hop counter and update the Max-Forwards header if it exists | ||
+ | $avp(s:hop) = $sipt(hop_counter); | ||
+ | if($avp(s: | ||
+ | { | ||
+ | remove_hf(" | ||
+ | append_hf(" | ||
+ | } | ||
+ | </ | ||
==== $sipt(calling_party_category) / $sipt(cpc) / $sipt_cpc ==== | ==== $sipt(calling_party_category) / $sipt(cpc) / $sipt_cpc ==== | ||
Line 1429: | Line 1896: | ||
==== $sipt(calling_party_number.nature_of_address) / $sipt.(calling_party_number.nai) / $sipt_calling_party_nai ==== | ==== $sipt(calling_party_number.nature_of_address) / $sipt.(calling_party_number.nai) / $sipt_calling_party_nai ==== | ||
Returns the value of the Nature of Address Indicator of the Calling Party for the IAM message. Returns -1 if there is a parsing error or if the Calling Party Number is not present. | Returns the value of the Nature of Address Indicator of the Calling Party for the IAM message. Returns -1 if there is a parsing error or if the Calling Party Number is not present. | ||
+ | |||
+ | Can return the following values: | ||
+ | * 0 Spare | ||
+ | * 1 Subscriber Number (national use) | ||
+ | * 2 Unknown (national use) | ||
+ | * 3 National (significant) number (national use) | ||
+ | * 4 International use | ||
+ | |||
+ | Example: | ||
+ | <code c> | ||
+ | # get the Calling Nai and add country code if national | ||
+ | if($sipt(calling_party_number.nai) == 3) | ||
+ | { | ||
+ | $fU = " | ||
+ | } | ||
+ | </ | ||
==== $sipt(called_party_number.nature_of_address) / $sipt(called_party_number.nai) / $sipt_called_party_nai ==== | ==== $sipt(called_party_number.nature_of_address) / $sipt(called_party_number.nai) / $sipt_called_party_nai ==== | ||
Returns the value of the Nature of Address Indicator of the Called Party for the IAM message. Returns -1 if there is a parsing error. | Returns the value of the Nature of Address Indicator of the Called Party for the IAM message. Returns -1 if there is a parsing error. | ||
+ | |||
+ | Can return the following values: | ||
+ | |||
+ | * 0 Spare | ||
+ | * 1 Subscriber Number (national use) | ||
+ | * 2 Unknown (national use) | ||
+ | * 3 National (significant) number | ||
+ | * 4 International use | ||
+ | * 5 Network-specific number (national use) | ||
+ | |||
+ | Example: | ||
+ | <code c> | ||
+ | # get the Called Nai and add country code if national | ||
+ | if($sipt(called_party_number.nai) == 3) | ||
+ | { | ||
+ | $rU = " | ||
+ | } | ||
+ | </ | ||
==== $sipt(event_info) === | ==== $sipt(event_info) === | ||
Returns the value of the Event Info header of the CPG message. Returns -1 if there is a parsing error. | Returns the value of the Event Info header of the CPG message. Returns -1 if there is a parsing error. | ||
+ | |||
+ | Can return the following values: | ||
+ | * 0 Spare | ||
+ | * 1 ALERTING | ||
+ | * 2 PROGRESS | ||
+ | * 3 In-band information or an appropriate pattern is now available | ||
+ | * 4 Call forward on busy | ||
+ | * 5 Call forward on no reply | ||
+ | * 6 Call forward unconditional | ||
+ | |||
+ | |||
+ | ==== $sipt(backward_call_indicator.charge_indicator) === | ||
+ | Returns the value of the charge indication of the backward call | ||
+ | indicator header in the ACM or COT message. Returns -1 if there is a | ||
+ | parsing error | ||
+ | |||
+ | Can return the following values: | ||
+ | * 0 no indication | ||
+ | * 1 no charge | ||
+ | * 2 charge | ||
+ | * 3 spare | ||
+ | |||
===== $cfg(key) - Config File Attributes ===== | ===== $cfg(key) - Config File Attributes ===== | ||
Line 1442: | Line 1965: | ||
The key can be: | The key can be: | ||
- | * line - return current line in config | + | |
- | * name - return the name of current config file | + | * name - return the name of current config file |
+ | * file - return the name of current config file | ||
+ | * route - return the name of routing block | ||
Example: | Example: | ||
Line 1450: | Line 1975: | ||
send_reply(" | send_reply(" | ||
</ | </ | ||
+ | |||
===== $dns(pvid=> | ===== $dns(pvid=> | ||
Line 1494: | Line 2020: | ||
===== $RANDOM - Random number ===== | ===== $RANDOM - Random number ===== | ||
+ | |||
Returns a random value from the [0 - 2^31) range. | Returns a random value from the [0 - 2^31) range. | ||
Line 1511: | Line 2038: | ||
</ | </ | ||
- | ===== JSONRPC-S | + | ===== JSONRPCS |
==== $jsonrpl(key) - JSONRPC Reply ==== | ==== $jsonrpl(key) - JSONRPC Reply ==== | ||
Line 1526: | Line 2053: | ||
==== $subs(key) - Subscription Attributes ==== | ==== $subs(key) - Subscription Attributes ==== | ||
- | This variable gives access to attributes of the current subscription. The variable has to be used after executing | + | This variable gives access to attributes of the current subscription. The variable has to be used after executing |
The key can be: | The key can be: | ||
* uri - subscription URI. Useful in particular for subscriptions within the dialog, when the request URI in SUBSCRIBE is the Contact address from the initial subscription. | * uri - subscription URI. Useful in particular for subscriptions within the dialog, when the request URI in SUBSCRIBE is the Contact address from the initial subscription. | ||
- | ===== $C(xy) - Foreground and background colors ===== | ||
+ | ===== Registrar Module Pseudo-Variables ===== | ||
+ | |||
+ | ==== $ulc(profile=> | ||
+ | |||
+ | Access the attributes of contact addresses stored in ' | ||
+ | |||
+ | It must be used after a call of “reg_fetch_contacts()”. | ||
+ | |||
+ | ===== sipcapture Module Pseudo-Variables ===== | ||
+ | |||
+ | ==== $hep(key) - HEP Packet Attributes ==== | ||
+ | |||
+ | The key refers to HEP packet header values: | ||
+ | |||
+ | * version - HEP version | ||
+ | * src_ip - source IP address | ||
+ | * dst_ip - destination IP address | ||
+ | * 0x000 - HEP attribute 0x000 | ||
+ | * 0x999 - HEP attribute 0x999 | ||
+ | |||
+ | ===== $phn(rid=> | ||
+ | |||
+ | $phn(rid=> | ||
+ | |||
+ | * number - phone number that is matched | ||
+ | * valid - 1 if the matched number has a valid result; 0 otherwise | ||
+ | * normalized - normalized phone number | ||
+ | * cctel - country code for phone number | ||
+ | * ltype - local network type | ||
+ | * ndesc - phone number description | ||
+ | * error - error string if phone number matching fails. | ||
+ | |||
+ | <code c> | ||
+ | if(phonenum_match(" | ||
+ | if($phn(src=> | ||
+ | xlog(" | ||
+ | } else { | ||
+ | xlog(" | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== sdpops module variables ===== | ||
+ | |||
+ | * $sdp(body) - full SDP body (read only) | ||
+ | * $sdp(sess_version) - sess-version -attribute from SDP o= -line. When set to special value -1, current value is incremented. (read + write) | ||
+ | |||
+ | ===== $sruid - Unique ID ===== | ||
+ | |||
+ | * $sruid - return unique ID generated internally Kamailio | ||
+ | |||
+ | ===== $ltt(key) - Local To-Tag ===== | ||
+ | |||
+ | $ltt(key) - return local generated To-tag when Kamailio sends a reply | ||
+ | |||
+ | * $ltt(s) - the to-tag used in stateless replies | ||
+ | * $ltt(t) - the to-tag used in transaction stateful replies (transaction has to be created at that time, eg., by t_newtran() or in a branch/ | ||
+ | * $ltt(x) - $ltt(t) if the transaction was created already, otherwise $ltt(s) | ||
+ | |||
+ | ===== $tcp(key) ===== | ||
+ | |||
+ | $tcp(key) - return TCP connection attributes. | ||
+ | |||
+ | The key can be: | ||
+ | * **c_si** - connection source ip (useful with HAProxy connections) | ||
+ | * **c_sp** - connection source port (useful with HAProxy connections) | ||
+ | * **conid** - connection id | ||
+ | ===== $C(xy) - Foreground and background colors ===== | ||
$C(xy) - reference to an escape sequence. “x” represents the foreground color and “y” represents the background color. | $C(xy) - reference to an escape sequence. “x” represents the foreground color and “y” represents the background color. |