User Tools

Site Tools


cookbooks:devel:transformations

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
cookbooks:devel:transformations [2017/11/18 17:16]
miconda
cookbooks:devel:transformations [2022/04/08 18:08]
miconda [URI Alias Transformations]
Line 1: Line 1:
-====== Kamailio SIP Server v5.2.x (devel): Transformations ======+====== Transformations ====== 
 + 
 +Version: Kamailio SIP Server v5.6.x (devel)
  
 <code> <code>
Line 153: Line 155:
 Decode base64 encoded PV and return value Decode base64 encoded PV and return value
  
 +==== {s.encode.base64t} ====
 +
 +Return base64 encoding of PV value without trailing padding characters('=').
 +
 +
 +==== {s.decode.base64t} ====
 +
 +Decode base64 encoded PV, handling missing trailing padding characters, and return value.
 +
 +==== {s.encode.base64url} ====
 +
 +Return base64-url encoding of PV value
 +
 +==== {s.decode.base64url} ====
 +
 +Decode base64-url encoded PV and return value
 +
 +==== {s.encode.base64urlt} ====
 +
 +Return base64-url encoding of PV value without trailing padding characters('=').
 +
 +
 +==== {s.decode.base64urlt} ====
 +
 +Decode base64-url encoded PV, handling missing trailing padding characters, and return value.
  
  
Line 308: Line 335:
 </code> </code>
  
 +==== {s.rmws} ====
 +
 +Remove occurrences of whitespace characters (' ', '\t, '\r', '\n').
 +
 +<code c>
 +$(var(x){s.rmws})
 +</code>
 ==== {s.corehash,n} ==== ==== {s.corehash,n} ====
  
Line 317: Line 351:
 $(var(x){s.corehash}) $(var(x){s.corehash})
 </code> </code>
 +
 +==== {s.unquote} ====
 +
 +Return the value without surrounding single (') or double quotes (").
 +
 +<code c>
 +$var(x) = "\"alice\"";
 +$var(alice) = $(var(x){s.unquote});
 +</code>
 +
 +==== {s.unbracket} ====
 +
 +Return the value without surrounding (), [], {} or <>.
 +
 +<code c>
 +$var(x) = "<sip:alice@test.sip>";
 +$var(uri) = $(var(x){s.unbracket});
 +</code>
 +
 +==== {s.count,c} ====
 +
 +Count how many times c appears in the pv value.
 +
 +<code c>
 +"abababa"{s.count,a}
 +# will return 4
 +</code>
 +
 +==== {s.after,x} ====
 +
 +Return the part of the string after the character **x** searched from the start of the value. If the character **x** is not found, it returns empty string.
 +
 +<code c>
 +"abcdef"{s.after,c}
 +# will return "def"
 +</code>
 +
 +==== {s.rafter,x} ====
 +
 +Return the part of the string after the character **x** searched from the end of the value. If the character **x** is not found, it returns empty string.
 +
 +<code c>
 +"abcdefcgh"{s.rafter,c}
 +# will return "gh"
 +</code>
 +==== {s.before,x} ====
 +
 +Return the part of the string before the character **x** searched from the start of the value. If the character **x** is not found, it returns the entire input string.
 +
 +<code c>
 +"abcdef"{s.before,c}
 +# will return "ab"
 +</code>
 +
 +==== {s.rbefore,x} ====
 +
 +Return the part of the string before the character **x** searched from the end of the value. If the character **x** is not found, it returns the entire input string.
 +
 +<code c>
 +"abcdefcgh"{s.rbefore,c}
 +# will return "abcdef"
 +</code>
 +
 +==== {s.fmtlines,n,m} ====
 +
 +Format the value in lines of n characters, adding m spaces to the start of each new line (not to first line). Each line is ended with "\r\n" apart of last line.
 +
 +<code c>
 +"abcdefgh"{s.fmtlines,4,2}
 +</code>
 +
 +==== {s.fmtlinet,n,m} ====
 +
 +Format the value in lines of n characters, adding m tabs to the start of each new line (not to first line). Each line is ended with "\r\n" apart of last line.
 +
 +<code c>
 +"abcdefgh"{s.fmtlinet,4,2}
 +</code>
 +==== {s.urlencode.param} ====
 +
 +Encode the value for URL param format.
 +
 +==== {s.urldecode.param} ====
 +
 +Decode the value from URL param format.
 +
 ===== URI Transformations ===== ===== URI Transformations =====
  
Line 385: Line 505:
 Return the string value of URI scheme. Return the string value of URI scheme.
  
 +==== {uri.tosocket} ====
 +
 +Return the string value corresponding to socket address matching proto, address and port from the URI. In other words, converts from a format like **sip:address:port;transport=proto** to **proto:address:port**.
 +
 +Example:
 +
 +<code>
 +"sip:test@127.0.0.1:5060;transport=udp"{uri.tosocket} => "udp:127.0.0.1:5060"
 +</code>
 +
 +==== {uri.duri} ====
 +
 +Return the destination URI for routing, keeping only schema, host, port and transport parameter. If port and transport are not in the original value, they are also not in the returned value.
 +
 +Example:
 +
 +<code c>
 +$var(ouri) = "sip:alice@server.com:5060;nat=yes;transport=tcp;line=xyz";
 +$var(duri) = $(var(ouri){uri.duri}); # => "sip:server.com:5060;transport=tcp"
 +</code>
 +
 +==== {uri.saor} ====
 +
 +Return the SIP AoR, keeping only schema, user and host. If user is not in the original value, it is also not in the returned value.
 +
 +Example:
 +
 +<code c>
 +$var(ouri) = "sip:alice@server.com:5060;nat=yes;transport=tcp;line=xyz";
 +$var(suri) = $(var(ouri){uri.saor}); # => "sip:alice@server.com"
 +</code>
 +
 +==== {uri.suri} ====
 +
 +Return the simple URI for routing, keeping only schema, user, host, port and transport parameter. If user, port and transport are not in the original value, they are also not in the returned value.
 +
 +Example:
 +
 +<code c>
 +$var(ouri) = "sip:alice@server.com:5060;nat=yes;transport=tcp;line=xyz";
 +$var(suri) = $(var(ouri){uri.suri}); # => "sip:alice@server.com:5060;transport=tcp"
 +</code>
 ===== Parameters List Transformations ===== ===== Parameters List Transformations =====
  
 The name of the transformation starts with 'param.'. The PV value is considered to be a string like name1=value1;name2=value2;...". The transformations returns the value for a specific parameter, or the name of a parameter at a specific index. The name of the transformation starts with 'param.'. The PV value is considered to be a string like name1=value1;name2=value2;...". The transformations returns the value for a specific parameter, or the name of a parameter at a specific index.
  
-Available transformations in this class:+Available transformations in this class are presented in the next sections. 
 + 
 +**Important Note:** the delimiter cannot be comma (,), because this transformation is using SIP header/URI parameters parser and the comma is a delimiter between serialized SIP header/URI bodies. The workaround is to use the subst transformation to replace the comma with another character that is used then as separator.
  
  
Line 399: Line 563:
 <code> <code>
 "a=1;b=2;c=3"{param.value,c} = "3" "a=1;b=2;c=3"{param.value,c} = "3"
 +</code>
 +
 +'name' can be a pseudo-variable
 +
 +'delimiter' allows you to specify a single character to use as the parameter delimiter. For example, when parsing HTTP URL query strings use '&'.
 +
 +==== {param.in,name[,delimiter]} ====
 +
 +Return 1 if the parameter 'name' is found in parameters list, 0 if not found.
 +
 +Example:
 +<code>
 +"a=1;b=2;c=3"{param.in,c} = 1
 </code> </code>
  
Line 517: Line 694:
 ==== {line.at,pos} ==== ==== {line.at,pos} ====
  
-Return the line at position 'pos'. The index start from 0. Negative position can be used to count from last line (which is -1).+Return the line at position 'pos'. The index start from 0. Negative position can be used to count from last line (which is -1). The pos can be also a variable holding the index value.
  
 Example: Example:
Line 573: Line 750:
 ==== {re.subst,expression} ==== ==== {re.subst,expression} ====
  
-Perform Perl-like substitutions on string value pseudo-variables.+Perform POSIX regex substitutions on string value pseudo-variables.
  
 <code c> <code c>
Line 686: Line 863:
 </code> </code>
  
 +===== JSON Transformations =====
 +
 +<fc #0000ff>This transformation class is exported by **json** module.</fc>
 +
 +
 +==== {json.parse} ====
 +
 +You can use the transformation to extract values from the json structured pseudo-variables
 +
 +<code>
 +
 +$var(Custom-Data) = $(rb{json.parse,Custom-Data});
 +
 +</code>
 +
 +===== Socket Address Transformations =====
 +
 +Transformations related to socket address values (**proto:host:port**).
 +
 +==== {sock.host} ====
 +
 +Return the host part.
 +
 +==== {sock.port} ====
 +
 +Return the port part.
 +
 +==== {sock.proto} ====
 +
 +Return the proto part.
 +
 +==== {sock.touri} ====
 +
 +Return the socket address converted to SIP URI: **sip:host:port;transport=proto**.
 +
 +===== URI Alias Transformations =====
 +
 +Transformations related to URI alias values (**addr~port~protoid**).
 +
 +==== {urialias.encode} ====
 +
 +Encode SIP URI to alias value.
 +
 +<code c>
 +"sip:127.0.0.1:5060;transport=udp"{urialias.encode} => "127.0.0.1~5060~1"
 +</code>
 +
 +==== {urialias.decode} ====
 +
 +Decode from alias value to SIP URI.
 +
 +<code c>
 +"127.0.0.1~5060~1"{urialias.decode} => "sip:127.0.0.1:5060;transport=udp"
 +</code>
 +
 +===== Value Transformations  =====
 +
 +Exported by **pv** module.
 +
 +==== {val.json} ====
 +
 +If value is $null, return empty string; if value is string, then it is escaped for use as json value (without surrounding quotes.
 +
 +<code c>
 +$var(x) = '"name" <sip:name@a.com>';
 +$(var(x){val.json}) => \"name\" <sip:name@a.com>
 +</code>
 +
 +==== {val.n0} ====
 +
 +Return integer 0 for values that are $null.
 +
 +<code c>
 +$sht(a=>x) = $null;
 +$(sht(a=>x){val.n0}) => 0
 +</code>
 +
 +==== {val.ne} ====
 +
 +Return empty string for values that are $null.
 +
 +<code c>
 +$sht(a=>x) = $null;
 +# $(sht(a=>x){val.ne});
 +</code>
 +
 +==== {val.jsonqe} ====
 +
 +If value is $null, return quoted empty string; if value is string, then it is escaped for use as json value already with surrounding quotes; if the value is int, then it is preserved as it is.
 +
 +<code c>
 +$var(x) = '"name" <sip:name@a.com>';
 +$(var(x){val.jsonqe}) => "\"name\" <sip:name@a.com>"
 +</code>
cookbooks/devel/transformations.txt · Last modified: 2022/04/08 18:08 by miconda