Mudanças entre as edições de "Transformações"

De opensipsbrasil - wiki
Ir para navegação Ir para pesquisar
(Criou página com ''''Transformação''' é basicamente a função que é aplicada a uma variável (variavel de script, pseudo-variavel, AVPS, strings staticas), para pegar um valor especial, o ...')
 
 
(3 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 26: Linha 26:
 
$avp(i:11) = 1;
 
$avp(i:11) = 1;
  
#assing string value to an AVP
+
# definindo um valor de texto (string) para um AVP
 
$avp(i:22) = "opensips";
 
$avp(i:22) = "opensips";
  
# write ruri in an AVP
+
# Definir o valor de $ruri para um avp
 
$avp(i:33) = $ruri;
 
$avp(i:33) = $ruri;
  
# concat "sip:" + From username + "@" + To domain in a script variable x
+
# concatenando "sip:" + usuário no From + "@" + dominio no To na variável x
 
$var(x) = "sip:" + $fU +"@" + $td;
 
$var(x) = "sip:" + $fU +"@" + $td;
  
Linha 38: Linha 38:
 
</pre>
 
</pre>
  
The transformations are intended to facilitate access to different attributes of variables (like strlen of value, parts of value, substrings) or complete different value of variables (encoded in hexa, md5 value, escape/unescape value for DB operations...).
+
As transformações possuem o intuito de facilitar o acesso a diferentes atributos de variáveis, como o tamanho da string (strlen) , partes do valor, substring ou valores diferentes de variaveis (encoded em hexa, valor md5, escapar valores para operações em banco).
  
A transformation is represented in between ''''{'''' and ''''}'''' and follows the name of a variable. When using transformations, the variable name and transformations '''must''' be enclosed in between ''''('''' and '''')''''.
 
  
Example:
+
A transformação é representada entre ''''{'''' e ''''}'''' e segue o nome da variável. Quando utilizando transformação, o nome da variável e transformações '''devem''' estar dentro de parentesis ''''('''' e '''')'''' .
 +
 
 +
Exemplo:
  
[@
+
<pre>
# the length of From URI ($fu is pseudo-variable for From URI)
+
# o tamanho do From URI ( $fu é uma pseudo-variável para From URI)
  
 
$(fu{s.len})
 
$(fu{s.len})
@]
+
</pre>
  
Many transformations can be applied in the same time to a variable.
+
Muitas transformações podem ser aplicadas ao mesmo tempo na mesma variável.
  
[@
+
<pre>
# the length of escaped 'Test' header body
+
# O tamanho do cabeçalho 'Test' (escapado) .
  
 
$(hdr(Test){s.escape.common}{s.len})
 
$(hdr(Test){s.escape.common}{s.len})
@]
+
</pre>
 
 
The transformations can be used anywhere, being considered parts of script variables support -- in xlog, avpops or other modules' functions and parameters, in right side assignment expressions or in comparisons.
 
 
 
%red%IMPORTANT%%: To learn what variables can be used with transformations see [[Documentation.Script-CoreVar-1-9|Scripting variables list]].
 
 
 
  
 +
A transformação pode ser utilizada em qualquer lugar, sendo considerada parte das variáveis no script --- no xlog, avpops ou outros módulos, funções e parametros, a direita de expressões de atribuição ou em comparações.
  
 +
<font color="red">
 +
Para aprender que variável pode ser utilizada com transformações veja [[http://opensips.com.br/wiki/index.php?title=Vari%C3%A1veis_Core| Variáveis Core]]
 +
</font>
  
!!!String Transformations
+
==Transformação de string==
The name of these transformation starts with 's.'. They are intended to apply string operations to variables.
+
O nome destas trasnformações iniciam com 's.' , são utilizadas para aplicar operações de string nas variáveis.
  
Available transformations in this class:
 
  
 +
Transformações disponiveis nesta classe:
  
!!!!{s.len}
+
==={s.len}===
  
Return strlen of variable value
+
Retorna o tamanho do valor de uma variável
  
[@
+
<pre>
 
$var(x) = "abc";
 
$var(x) = "abc";
 
if($(var(x){s.len}) == 3)
 
if($(var(x){s.len}) == 3)
Linha 81: Linha 81:
 
   ...
 
   ...
 
}
 
}
@]
+
</pre>
 
 
!!!!{s.int}
 
  
Return integer value of a string-represented number
+
==={s.int}===
  
[@
+
Retorna o valor inteiro de uma string númerica.
 +
<pre>
 
$var(x) = "1234";
 
$var(x) = "1234";
 
if($(var(x){s.int})==1234) {
 
if($(var(x){s.int})==1234) {
 
   ...
 
   ...
 
}
 
}
@]
 
  
!!!!{s.md5}
+
</pre>
 +
 
 +
==={s.md5}===
  
Return md5 over variable value
+
Retorna o md5 do valor da variável
  
[@
+
<pre>
 
xlog("MD4 over From username: $(fU{s.md5})");
 
xlog("MD4 over From username: $(fU{s.md5})");
@]
+
</pre>
 +
 
 +
==={s.substr,offset,length}===
  
!!!!{s.substr,offset,length}
+
Retornar o pedaço (substring) iniciando no valor de offset até o valor de length . Se offset é negativo, então a contagem começa no fim, onde -1 é o último caracter. Em caso de valor positivo, 0 é o primeiro valor, o tamanho (length) deve ser positivo, em caso de 0, a substring retornará até o fim do valor, offset e length podem ser variáveis também.
  
Return substring starting at offset having size of 'length'. If offset is negative, then it is counted from the end of the value, -1 being the last char. In case of positive value, 0 is first char. Length must be positive, in case of 0, substring to the end of variable value is returned. offset and length can be a varibale as well.
 
  
 
Example:
 
Example:
[@
+
<pre>
 
$var(x) = "abcd";
 
$var(x) = "abcd";
 
$(var(x){s.substr,1,0}) = "bcd"
 
$(var(x){s.substr,1,0}) = "bcd"
@]
+
</pre>
  
!!!!{s.select,index,separator}
+
==={s.select,index,separator}===
  
Return a field from the value of a variable. The field is selected based on separator and index. The separator must be a character used to identify the fields. Index must be a integer value or a variable. If index is negative, the count of fields starts from end of value, -1 being last field. If index is positive, 0 is the first field.
+
Retorna um campo do valor da variável. O campo é selecionado baseado no spearador (separator) e indice (index). O separador deve ser um caractere usado para identificar os campos. Indice (index) deve ser um valor inteiro ou uma variavel. Se o index for negativo  a contagem de campos começa do fim do valor, -1 é o último campo, se o index é positivo, 0 é o primeiro campo.
  
Example:
+
Exemplo:
[@
+
<pre>
 
$var(x) = "12,34,56";
 
$var(x) = "12,34,56";
 
$(var(x){s.select,1,,}) => "34" ;
 
$(var(x){s.select,1,,}) => "34" ;
Linha 123: Linha 124:
 
$var(x) = "12,34,56";
 
$var(x) = "12,34,56";
 
$(var(x){s.select,-2,,}) => "34"
 
$(var(x){s.select,-2,,}) => "34"
@]
+
</pre>
 +
 
 +
==={s.encode.hexa}===
 +
 
 +
Retorna o valor da variável em hexa.
 +
 
 +
 
 +
==={s.decode.hexa}===
 +
 
 +
Decodifica o valor hexa da variável.
 +
 
 +
 
 +
==={s.escape.common}===
 +
 
 +
Retorna a string scapada do valor da variável. Caracteres escapados são ', ", e 0 , este recurso é util quando necessário realizar consultas em banco de dados ( deve se atentar quando utilizando caracteres que não fazem parte do LATIN )
 +
 
 +
 
 +
==={s.unescape.common}===
 +
 
 +
Retorna o valor sem escape de uma variável, o inverso da transformação acima.
 +
 
 +
 
 +
==={s.escape.user}===
 +
 
 +
Retorna o valor escapado da variavel, alterando para '%hexa' os caracteres nao permitidos na area  SIP URI seguindos as recomendações da RFC.
  
!!!!{s.encode.hexa}
+
==={s.unescape.user}===
  
Return encoding in hexa of variable's value
+
Retorna o valor sem escape da variável, alterando de '%hexa' para caracter, o inverso da transformação acima.
  
!!!!{s.decode.hexa}
+
==={s.escape.param}===
  
Return decoding from hexa of variable's value
+
Retorna o valor escapado da variável, alterando para '%hexa' o caractere que não é permitido na area param da SIP URI seguindo as recomendações da RFC.
  
  
!!!!{s.escape.common}
+
==={s.unescape.param}===
  
Return escaped string of variable's value. Characters escaped are ', ",  and 0. Useful when doing DB queries (care should be taken for non Latin character set).
+
Retorna o valor sem escape da variavel alterando de '%hexa' para caractere, inverso da transformação acima.
  
  
!!!!{s.unescape.common}
+
==={s.tolower}===
  
Return unescaped string of variable's value. Reverse of above transformation.
+
Retorna a string em lower case (caixa baixa)
  
  
!!!!{s.escape.user}
 
  
Return escaped string of variable's value, changing to '%hexa' the characters that are not allowed in user part of SIP URI following RFC requirements.
+
==={s.toupper}===
  
!!!!{s.unescape.user}
+
Retorna a string em upper case (caixa alta)
  
Return unescaped string of variable's value, changing '%hexa' to character code. Reverse of above transformation.
 
  
  
!!!!{s.escape.param}
+
==URI Transformations==
  
Return escaped string of variable's value, changing to '%hexa' the characters that are not allowed in the param part of SIP URI following RFC requirements.
+
O nome da transformação inicia-se com 'uri.'. O valor da variável é considerado ser parte da SIP URI. Esta transformação retorna partes da SIP URI (veja struct sip_uri). Se a parte estiver faltando o valor retornando será uma string vazia.
  
 +
Transformações disponiveis nesta classe:
  
!!!!{s.unescape.param}
 
  
Return unescaped string of variable's value, changing '%hexa' to character code. Reverse of above transformation.
+
==={uri.user}===
 +
Retorna o usuário no schema URI
  
!!!!{s.tolower}
 
  
Return string with lower case ASCII letters.
+
==={uri.host}===
  
 +
(mesmo que '''{uri.domain}''')
  
!!!!{s.toupper}
+
Retorna a parte do dominio no schema URI.
  
Return string with upper case ASCII letters.
+
==={uri.passwd}===
  
 +
Retorna a parte da senha no schema URI.
  
  
!!!URI Transformations
+
==={uri.port}===
  
The name of transformation starts with 'uri.'. The value of the variable is considered to be a SIP URI. This transformation returns parts of SIP URI (see struct sip_uri). If that part is missing, the returned value is an empty string.
+
Retorna a parte da porta no schema URI.
  
Available transformations in this class:
 
  
!!!!{uri.user}
+
==={uri.params}===
  
Returns the user part of the URI schema.
+
Retorna todos os parametros da URI em uma única string.
  
!!!!{uri.host}
 
  
(same as '''{uri.domain}''')
+
==={uri.param,name}===
  
Returns the domain part of the URI schema.
+
Retorna o valor do parametro da URI com nome de "name"
  
!!!!{uri.passwd}
 
  
Returns the password part of the URI schema.
+
==={uri.headers}===
  
!!!!{uri.port}
+
Retorna os cabeçalhos URI
  
Returns the port of the URI schema.
 
  
!!!!{uri.params}
+
==={uri.transport}===
  
Returns all the URI parameters into a single string.
+
Retorna o valor do parametro transport da URI.
  
!!!!{uri.param,name}
 
  
Returns the value of URI parameter with name "name"
+
==={uri.ttl}===
  
!!!!{uri.headers}
+
Retorna o valor do parametro TTL da URI.
  
Returns URI headers.
 
  
!!!!{uri.transport}
+
==={uri.uparam}===
  
Returns the value of transport URI parameter.
+
Retorna o valor do parametro user da URI.
  
!!!!{uri.ttl}
 
  
Returns the value of ttl URI parameter.
+
==={uri.maddr}===
  
!!!!{uri.uparam}
+
Retorna o valor do parametro maddr da URI.
  
Returns the value of user URI parameter
+
==={uri.method}===
  
!!!!{uri.maddr}
+
Retorna o valor do parametro metodo da URI.
  
Returns the value of maddr URI parameter.
 
  
!!!!{uri.method}
+
==={uri.lr}===
  
Returns the value of method URI parameter.
+
Retorna o valor do parametro lr da URI.
  
!!!!{uri.lr}
 
  
Returns the value of lr URI parameter.
+
==={uri.r2}===
  
!!!!{uri.r2}
+
Retorna o valor do parametro r2 da URI.
  
Returns the value of r2 URI parameter.
 
  
!!!VIA Transformations
+
==VIA Transformations==
  
These transformations parse Via headers and all starts with @@via.@@. The value of the variable is considered to be a SIP Via header. This transformation returns parts of the via header (see struct via_body). If the requested part is missing, the returned value is an empty string. Transformation will fail (with script error) if variable holding the Via header is empty. Unless otherwise specified in descriptions below, the result of transform is a string (not an integer).
+
Estas são as tranformações para o cabeçalho Via e todas iniciam com @@via@@. O valor da variável é considerado estar no cabeçalho SIP Via. Esta transformação retornará partes do cabeçalho vai ( veja struct via_body ). Se parte requisitada estiver faltando então o valor de retorna será uma variável vazia. A transformação irá falhar (com erro no script) se a variável que contem o cabeçalho Via estiver vazia. A menos que especificado abaixo, o resultado da transformação será uma string (não um inteiro).
  
Examples:
+
Exemplos:
 
     $var(upstreamtransport) = $(hdr(Via)[1]{via.transport}{s.tolower});
 
     $var(upstreamtransport) = $(hdr(Via)[1]{via.transport}{s.tolower});
 
     $var(upstreamip) = $(hdr(Via)[1]{via.param,received});
 
     $var(upstreamip) = $(hdr(Via)[1]{via.param,received});
 
     $var(clientport) = $(hdr(Via)[-1]{via.param,rport});
 
     $var(clientport) = $(hdr(Via)[-1]{via.param,rport});
  
   
 
Available transformations in this class:
 
  
!!!!{via.name}
+
Transformações disponíveis nesta classe:   
 +
 
 +
==={via.name}===
  
Returns the @@protocol-name@@ (of RFC3261 BNF), generally @@SIP@@.
+
Retorna o @@protocol-name@@ ( RFC3261 BNF ), geralmente @@SIP@@.
  
!!!!{via.version}
 
  
Returns the @@protocol-version@@ (of RFC3261 BNF), generally @@2.0@@.
+
==={via.version}===
  
!!!!{via.transport}
+
Retorna o @@protocol-version@@ ( RFC3261 BNF ), geralmente @@2.0@@.
  
Returns the @@transport@@ (of RFC3261 BNF), e.g., @@UDP@@, @@TCP@@, @@TLS@@. This is the transport protocol used to send the request message.
 
  
!!!!{via.host}
+
==={via.transport}===
  
(same as @@{via.domain}@@)
+
Retorna o @@transport@@ ( RFC3261 BNF ), ex: @@UDP@@, @@TCP@@, @@TLS@@. Este é o protocolo de transporte utilizado para enviar a mensagem.
  
Returns the @@host@@ portion of the @@sent-by@@ (of RFC3261 BNF). Typically this is the IP address of the sender of the request message, and is the address to which the response will be sent.
+
==={via.host}===
  
!!!!{via.port}
+
(mesmo que @@{via.domain}@@)
  
Returns the @@port@@ portion of the @@sent-by@@ (of RFC3261 BNF). Typically this is the IP port of the sender of the request message, and is the address to which the response will be sent. Result of transform is valid as both integer and string.
+
Retorna o @@host@@ do @@sent-by@@ (RFC3261 BNF). Tipicamente é o IP de quem enviou a requisição, e claro, é o endereço para onde a resposta será envaida.
  
!!!!{via.comment}
 
  
The comment associated with the via header. The @@struct via_body@@ contains this field, but it isn't clear that RFC3261 allows Via headers to have comments (see text at top of page 221, and the BNF doesn't explicit allow comment within Via). The comment is the text enclosed within parens.
+
==={via.port}===
  
!!!!{via.params}
+
Retorna a @@port@@ to @@sent-by@@ (RFC3261). Tipicamente é a  Porta de quem enviou a requisição e o endereço para onde a resposta será enviada, o resultado da transformação é valido tanto como inteiro quanto string.
  
Returns all the Via headers parameters (@@via-param@@ of RFC3261 BNF) as single string. Result can be processed using the @@{param.*}@@ transforms. This is essentially everything after the host and port.
 
  
!!!!{via.param,name}
+
==={via.comment}===
  
Returns the value of Via header parameter with name @@name@@. Typical parameters include @@branch@@, @@rport@@ and @@received@@.
+
O comment associado com o cabeçalho via. A @@struct via_body@@ contém este capmo, mas ele não é claro que a RFC3261 permite a utilização de comentarios em cabeçalho Via ( veja o texto no topo da pagina 221 , e a BNF não explicita se permite comentário em Via). O texto da comment deve ser fechado por parenteses.
  
!!!!{via.branch}
 
  
Returns the value of the branch parameter in the VIA header.
+
==={via.params}===
  
!!!!{via.received}
+
Retorna Todos os parametros do cabeçalho Via ( @@via-param@@ da RFC3261 BNF ) como uma string única. O resultado pode ser processado através da transformação @@{param.*}@@ . Isso é basicamente tudo após o host e porta.
  
Returns the value of the received parameter in the VIA header, if any.
+
==={via.param,name}===
  
!!!!{via.rport}
+
Retorna o valor do parametro do cabeçalho Via especificado por @@name@@. Tipicamente parametros incluem @@branch@@, @@rport@@ e @@received@@.
  
Returns the value of the rport parameter in the VIA header, if any.
 
  
!!!Parameters List Transformations
+
==={via.branch}===
  
The name of the transformation starts with "param.". The value of the variable 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.
+
Retorna o valor do parametro branch no cabeçalho VIA.
  
Available transformations in this class:
+
==={via.received}===
  
 +
Retorna o valor do parametro received no cabeçalho Via , se existir.
  
!!!!{param.value,name}
 
  
Returns the value of parameter 'name'
+
==={via.rport}===
 +
 
 +
Retorna o valor do parametro rport no cabeçalho VIA, se existir.
 +
 
 +
==Parameters List Transformations==
 +
 
 +
O nome da transformação inicia por "param." . O valor da variavel é considerado uma string como nome1=valor1; nome2=valor2;..." . A transformação retorna o valor de um parametro especifico ou o nome do parametro especificado no indice.
 +
 
 +
 
 +
Transformações disponiveis nesta classe:
 +
 
 +
 
 +
==={param.value,name}===
 +
 
 +
Retorna o valor do parametro 'name'
 +
 
 +
 
 +
Exemplo:
 +
 
 +
"a=1;b=2;c=3"{param.value,c} = "3"
 +
 
 +
O valor de 'name' pode ser uma variável.
  
Example:
 
[@
 
"a=1;b=2;c=3"{param.value,c} = "3"
 
@]
 
  
'name' can be a variable
 
  
!!!!{param.exist,name}
+
==={param.exist,name}===
  
Returns 1 if the parameter @@name@@ exists (with or without value), else 0. Returned value is both string and integer. @@name@@ can be variable. This can be used to test existence of parameters that do not have values.
+
Retorna 1 se o parametro @@name@@ existir (com ou sem valor), caso contrário retorna 0. O valor retornado é tanto string quanto inteiro. @@name@@ pode ser uma variável. Esta função pode ser utilizada para testar se um parametro possue ou não valores.
  
Example:
+
Exemplo:
[@
+
<pre>
 
"a=0;b=2;ob;c=3"{param.exist,ob};        # returns 1
 
"a=0;b=2;ob;c=3"{param.exist,ob};        # returns 1
 
"a=0;b=2;ob;c=3"{param.exist,a};          # returns 1
 
"a=0;b=2;ob;c=3"{param.exist,a};          # returns 1
 
"a=0;b=2;ob;c=3"{param.exist,foo};        # returns 0
 
"a=0;b=2;ob;c=3"{param.exist,foo};        # returns 0
@]
+
</pre>
 +
 
  
!!!!{param.valueat,index}
+
==={param.valueat,index}===
  
Returns the value of parameter at position give by 'index' (0-based index)
+
Retorna o valor do parametro na posição fornecida por 'index' (0-based index)
  
Example:
+
 
[@
+
 
 +
<pre>
 
"a=1;b=2;c=3"{param.valueat,1} = "2"
 
"a=1;b=2;c=3"{param.valueat,1} = "2"
@]
 
  
'index' can be a variable
+
</pre>
 +
'index' pode ser uma variável
 +
 
 +
==={param.name,index}===
 +
 
 +
Retorna o nome do parametro na posição 'index'.
 +
 
 +
 
 +
Exemplo:
  
!!!!{param.name,index}
+
"a=1;b=2;c=3"{param.name,1} = "b"
  
Returns the name of parameter at position 'index'.
 
  
Example:
+
==={param.count}===
[@
+
 
"a=1;b=2;c=3"{param.name,1} = "b"
+
Retorna o número de parametros na lista.
@]
+
 
 +
 
 +
Exemplo:
 +
 
 +
"a=1;b=2;c=3"{param.count} = 3
 +
 
 +
 
 +
 
 +
 
 +
==Name-address Transformations==
 +
 
 +
A nome da transformação inica com 'nameaddr.' . O valor da variável é considerado ser uma string como '[display_name] uri'. A transformação retorna o valor especificado no campo.
 +
 
 +
 
 +
Transformações disponiveis para esta classe:
 +
 
 +
 
 +
 
 +
==={nameaddr.name}===
 +
 
 +
Retorna o valor de display name
 +
 
 +
 
 +
Exemplo:
 +
 
 +
'"test" <sip:test@opensips.org>' {nameaddr.name} = "test"
 +
 
 +
 
 +
==={nameaddr.uri}===
 +
 
 +
Retorna o valor da URI
 +
 
 +
 
 +
Exemplo:
 +
 
 +
'"test" <sip:test@opensips.org>' {nameaddr.uri} = sip:test@opensips.org
 +
 
 +
 
 +
==={nameaddr.len}===
 +
 
 +
Retorna o tamanho da name-addr
 +
 
 +
 
 +
 
 +
==={nameaddr.param,param_name}===
 +
 
 +
Retorna o valor do parametro com o nome 'param_name'.
 +
 
 +
Exemplo:
 +
'"test" <sip:test@opensips.org>;tag=dat43h' {nameaddr.param,tag} = dat43h
 +
 
 +
 
 +
==={nameaddr.params}===
 +
 
 +
Retorna os parametros e seus valores correspondentes.
 +
 
 +
Exemplo:
 +
 
 +
'"test" <sip:test@opensips.org>;tag=dat43h;private=yes' {nameaddr.params} = "tag=dat43h;private=yes"
 +
 
 +
 
 +
==IP Transformations==
 +
 
 +
O nome da transformação inicia com 'ip.'
 +
 
 +
Transformações disponiveis para esta classe:
 +
 
  
 +
==={ip.pton}===
  
 +
Retorna a representação binária do IP
  
!!!!{param.count}
+
Exemplo:
  
Returns the number of parameters in the list.
+
"192.168.2.134" {ip.pton} returns a 4 byte binary representation of the IP provided
  
Example:
 
[@
 
"a=1;b=2;c=3"{param.count} = 3
 
@]
 
  
 +
==={ip.ntop}===
  
 +
Retorna a representação de um binário de IP
  
!!!Name-address Transformations
+
Exemplo:
  
The name of the transformation starts with 'nameaddr.'. The value of the variable is considered to be a string like '[display_name] uri'. The transformations returns the value for a specific field.
+
"192.168.2.134"{ip.pton}{ip.ntop} = "192.168.2.134"
  
Available transformations in this class:
 
  
 +
==={ip.isip}===
  
!!!!{nameaddr.name}
+
Retorna 1 ou 0, se a string provida for um ip válido ou não.
  
Returns the value of display name
+
Exemplo:
  
Example:
+
"192.168.2.134" {ip.isip} = 1
[@
+
"192.168.2.134.1" {ip.isip} = 0
'"test" <sip:test@opensips.org>' {nameaddr.name} = "test"
 
@]
 
  
!!!!{nameaddr.uri}
 
  
Returns the value of URI
+
==={ip.family}===
  
Example:
+
Retorna INET ou INET6 se a representação binária provida for um IPv4 ou IPv6.
[@
 
'"test" <sip:test@opensips.org>' {nameaddr.uri} = sip:test@opensips.org
 
@]
 
  
!!!!{nameaddr.len}
+
Exemplo:
  
Returns the length of the entire name-addr part from the value.
+
"192.168.2.134" {ip.pton}{ip.family} = "INET"
  
  
!!!!{nameaddr.param,param_name}
+
==={ip.resolve}===
  
Returns the value of the parameter with name param_name.
+
Retorna o IP de um host.dominio informado. a transformação não tem efeito se um IP for forncido.
Example:
 
[@
 
'"test" <sip:test@opensips.org>;tag=dat43h' {nameaddr.param,tag} = dat43h
 
@]
 
  
!!!!{nameaddr.params}
+
Exemplo:
  
Returns all the parameters and their corresponding values.
+
"opensips.org" {ip.resolve} = "78.46.64.50"
Example:
 
[@
 
'"test" <sip:test@opensips.org>;tag=dat43h;private=yes' {nameaddr.params} = "tag=dat43h;private=yes"
 
@]
 
  
!!!IP Transformations
 
  
The name of the transformation starts with 'ip.'. Available transformations in this class:
+
==CSV Transformations==
  
!!!!{ip.pton}
+
O nome da transformação inicia com "csv." . O valor da variável é considerado ser uma string como "campo1,campo2,....". A transformação retorna o numero de entradas no CSV informado, ou o campo de uma posição especifica do CSV.
  
Returns a binary representation of a string represented IP.
+
Tranformações disponiveis nesta classe:
Example:
 
[@
 
"192.168.2.134" {ip.pton} returns a 4 byte binary representation of the IP provided
 
@]
 
  
!!!!{ip.ntop}
 
  
Returns a string representation of the binary IP provided
+
==={csv.count}===
Example:
+
Retorna o número de entradas no CSV provido.
[@
 
"192.168.2.134"{ip.pton}{ip.ntop} = "192.168.2.134"
 
@]
 
  
!!!!{ip.isip}
+
Exemplo:
 +
"a,b,c" {csv.count} = 3
  
Returns 1 or 0, if the string provided is a valid IP or not.
 
Example:
 
[@
 
"192.168.2.134" {ip.isip} = 1
 
"192.168.2.134.1" {ip.isip} = 0
 
@]
 
  
!!!!{ip.family}
+
==={csv.value}===
Returns INET or INET6 if the binary IP representation provided is IPv4 or IPv6.
+
Retorna a entrada na posição especifica. Index inicia em 0
Example:
 
[@
 
"192.168.2.134" {ip.pton}{ip.family} = "INET"
 
@]
 
  
!!!!{ip.resolve}
+
Exemplo:
Returns the resolved IP address coresponding to the string domain provided. Transformation has no effect if a string IP is provided.
 
Example:
 
[@
 
"opensips.org" {ip.resolve} = "78.46.64.50"
 
@]
 
  
!!!CSV Transformations
+
"a,b,c" {csv.value,2} = c
  
The name of the transformation starts with "csv.". The value of the variable is considered to be a string like "field1,field2,...". The transformations return the number of entries in the provided CSV, or the field at a specified position in the CSV.
 
  
Available transformations in this class:
+
==SDP Transformations==
  
!!!!{csv.count}
+
O nome da transformação inica com "sdp.". O valor da variaável é considerado ser um body SDP válido. A transformação retorna uma linha especifica no body SDP.
Returns the number of entries in the provided CSV.
 
Example:
 
[@
 
"a,b,c" {csv.count} = 3
 
@]
 
  
!!!!{csv.value}
+
Transformações disponiveis para esta classe:
Returns the entry at the specified positions. Indexing starts from 0.
 
Example:
 
[@
 
"a,b,c" {csv.value,2} = c
 
@]
 
  
!!!SDP Transformations
 
  
The name of the transformation starts with "sdp.". The value of the variable is considered to be a valid SDP body. The transformation returns a specific line in the SDP body.
+
==={sdp.line}==
  
Available transformations in this class:
+
Retorna a linha especifica do body SDP. A transformação também aceita um segundo parametro, este especificado é o número da linha do primeiro parametro para pegar do body SDP. Index inicia em 0. Se o segundo parametro estiver faltando ele assume 0.
  
!!!!{sdp.line}
+
Exemplo
Returns the specified line in the SDP body. The transformations also accepts a second parameter, that specifies the line number of the first parameter's type to get from the SDP body. Indexing starts from 0. If the second parameter is missing, it is assumed to be 0.
+
<pre>
Example:
 
[@
 
 
if (is_method("INVITE"))
 
if (is_method("INVITE"))
 
   {
 
   {
Linha 487: Linha 535:
 
       xlog("The first m line in the SDP body is $var(mline)\n");
 
       xlog("The first m line in the SDP body is $var(mline)\n");
 
   }
 
   }
@]
+
</pre>
 +
 
 +
==Regular Expression Transformations==
 +
 
 +
O nome da trasnformação inicia-se com "re." . O valor de entrada pode ser qualquer string.
 +
 
  
!!!Regular Expression Transformations
+
==={re.subst,reg_exp}===
  
The name of the transformation starts with "re.". The input can be any string.
+
O parametro reg_exp pode ser tanto uma string quanto uma variável.
  
!!!!{re.subst,reg_exp}
+
O formato da reg_exp é:
  
The reg_exp parameter can either be a plain string or a variable.
 
The format of the reg_exp is :
 
 
     /posix_match_expression/replacement_expression/flags
 
     /posix_match_expression/replacement_expression/flags
  
The flags can be
+
As flags podem ser:
 
     i - match ignore case
 
     i - match ignore case
 
     s - match within multi-lines strings
 
     s - match within multi-lines strings
 
     g - replace all matches
 
     g - replace all matches
  
Example:
+
Exemplo:
[@
+
<pre>
 
$var(reg_input)="abc";
 
$var(reg_input)="abc";
 
$var(reg) = "/a/A/g";
 
$var(reg) = "/a/A/g";
Linha 513: Linha 564:
 
...
 
...
 
xlog("Applying reg /b/B/g to $var(reg_input) : $(var(reg_input){re.subst,/b/B/g})\n");
 
xlog("Applying reg /b/B/g to $var(reg_input) : $(var(reg_input){re.subst,/b/B/g})\n");
@]
+
</pre>
  
 +
</pre>
  
!!!Examples
 
  
Within a variable, many transformation can be applied, being executed from left to right.
+
==Exemplos==
  
* The length of the value of parameter at postion 1 (remember 0 is first position, 1 is second position)
+
Em uma variável, muitas trasnformações podem ser aplicadas, começando da esquerda para a direita.
  
[@
+
* O tamanho do valor da variavel do parametro na posição 1 (lembre-se que 0 é a primeira posição, 1 é a segunda)
 +
 
 +
 
 +
<pre>
 
$var(x) = "a=1;b=22;c=333";
 
$var(x) = "a=1;b=22;c=333";
 
$(var(x){param.value,$(var(x){param.name,1})}{s.len}) = 2
 
$(var(x){param.value,$(var(x){param.name,1})}{s.len}) = 2
@]
+
</pre>
  
* Test if whether is un-registration or not
+
* Testa se é des-registro ou não
  
[@
+
 
 +
<pre>
 
if(is_method("REGISTER") && is_present_hf("Expires") && $(hdr(Expires){s.int})==0)
 
if(is_method("REGISTER") && is_present_hf("Expires") && $(hdr(Expires){s.int})==0)
 
     xlog("This is an un-registrationn");
 
     xlog("This is an un-registrationn");
@]
+
</pre>
 +
 
 +
 
 +
[[OpenSIPS_1.9_Manual|Voltar]]

Edição atual tal como às 18h23min de 23 de abril de 2014

Transformação é basicamente a função que é aplicada a uma variável (variavel de script, pseudo-variavel, AVPS, strings staticas), para pegar um valor especial, o valor da variável horiginal não é alterado.

Exemplo utilizando diferentes tipos de variáveis em no script OpenSIPS

# verificando se o usuário no cabeçalho From é igual ao usuário no cabeçalho To 

if($fU==$tU) {
   ...
}

# checagem de usuário baseado em r-uri 

switch($ruri.user) {
   case "1234":
      ...
   break;
   case "5678":
      ...
   break;
   default:
     ...
}

# definindo um valor inteiro para um AVP 
$avp(i:11) = 1;

# definindo um valor de texto (string) para um AVP
$avp(i:22) = "opensips";

# Definir o valor de $ruri para um avp
$avp(i:33) = $ruri;

# concatenando "sip:" + usuário no From + "@" + dominio no To na variável x
$var(x) = "sip:" + $fU +"@" + $td;


As transformações possuem o intuito de facilitar o acesso a diferentes atributos de variáveis, como o tamanho da string (strlen) , partes do valor, substring ou valores diferentes de variaveis (encoded em hexa, valor md5, escapar valores para operações em banco).


A transformação é representada entre '{' e '}' e segue o nome da variável. Quando utilizando transformação, o nome da variável e transformações devem estar dentro de parentesis '(' e ')' .

Exemplo:

# o tamanho do From URI ( $fu é uma pseudo-variável para From URI)

$(fu{s.len})

Muitas transformações podem ser aplicadas ao mesmo tempo na mesma variável.

# O tamanho do cabeçalho 'Test' (escapado) .

$(hdr(Test){s.escape.common}{s.len})

A transformação pode ser utilizada em qualquer lugar, sendo considerada parte das variáveis no script --- no xlog, avpops ou outros módulos, funções e parametros, a direita de expressões de atribuição ou em comparações.

Para aprender que variável pode ser utilizada com transformações veja [Variáveis Core]

Transformação de string

O nome destas trasnformações iniciam com 's.' , são utilizadas para aplicar operações de string nas variáveis.


Transformações disponiveis nesta classe:

{s.len}

Retorna o tamanho do valor de uma variável

$var(x) = "abc";
if($(var(x){s.len}) == 3)
{
   ...
}

{s.int}

Retorna o valor inteiro de uma string númerica.

$var(x) = "1234";
if($(var(x){s.int})==1234) {
  ...
}

{s.md5}

Retorna o md5 do valor da variável

xlog("MD4 over From username: $(fU{s.md5})");

{s.substr,offset,length}

Retornar o pedaço (substring) iniciando no valor de offset até o valor de length . Se offset é negativo, então a contagem começa no fim, onde -1 é o último caracter. Em caso de valor positivo, 0 é o primeiro valor, o tamanho (length) deve ser positivo, em caso de 0, a substring retornará até o fim do valor, offset e length podem ser variáveis também.


Example:

$var(x) = "abcd";
$(var(x){s.substr,1,0}) = "bcd"

{s.select,index,separator}

Retorna um campo do valor da variável. O campo é selecionado baseado no spearador (separator) e indice (index). O separador deve ser um caractere usado para identificar os campos. Indice (index) deve ser um valor inteiro ou uma variavel. Se o index for negativo a contagem de campos começa do fim do valor, -1 é o último campo, se o index é positivo, 0 é o primeiro campo.

Exemplo:

$var(x) = "12,34,56";
$(var(x){s.select,1,,}) => "34" ;

$var(x) = "12,34,56";
$(var(x){s.select,-2,,}) => "34"

{s.encode.hexa}

Retorna o valor da variável em hexa.


{s.decode.hexa}

Decodifica o valor hexa da variável.


{s.escape.common}

Retorna a string scapada do valor da variável. Caracteres escapados são ', ", e 0 , este recurso é util quando necessário realizar consultas em banco de dados ( deve se atentar quando utilizando caracteres que não fazem parte do LATIN )


{s.unescape.common}

Retorna o valor sem escape de uma variável, o inverso da transformação acima.


{s.escape.user}

Retorna o valor escapado da variavel, alterando para '%hexa' os caracteres nao permitidos na area SIP URI seguindos as recomendações da RFC.

{s.unescape.user}

Retorna o valor sem escape da variável, alterando de '%hexa' para caracter, o inverso da transformação acima.

{s.escape.param}

Retorna o valor escapado da variável, alterando para '%hexa' o caractere que não é permitido na area param da SIP URI seguindo as recomendações da RFC.


{s.unescape.param}

Retorna o valor sem escape da variavel alterando de '%hexa' para caractere, inverso da transformação acima.


{s.tolower}

Retorna a string em lower case (caixa baixa)


{s.toupper}

Retorna a string em upper case (caixa alta)


URI Transformations

O nome da transformação inicia-se com 'uri.'. O valor da variável é considerado ser parte da SIP URI. Esta transformação retorna partes da SIP URI (veja struct sip_uri). Se a parte estiver faltando o valor retornando será uma string vazia.

Transformações disponiveis nesta classe:


{uri.user}

Retorna o usuário no schema URI


{uri.host}

(mesmo que {uri.domain})

Retorna a parte do dominio no schema URI.

{uri.passwd}

Retorna a parte da senha no schema URI.


{uri.port}

Retorna a parte da porta no schema URI.


{uri.params}

Retorna todos os parametros da URI em uma única string.


{uri.param,name}

Retorna o valor do parametro da URI com nome de "name"


{uri.headers}

Retorna os cabeçalhos URI


{uri.transport}

Retorna o valor do parametro transport da URI.


{uri.ttl}

Retorna o valor do parametro TTL da URI.


{uri.uparam}

Retorna o valor do parametro user da URI.


{uri.maddr}

Retorna o valor do parametro maddr da URI.

{uri.method}

Retorna o valor do parametro metodo da URI.


{uri.lr}

Retorna o valor do parametro lr da URI.


{uri.r2}

Retorna o valor do parametro r2 da URI.


VIA Transformations

Estas são as tranformações para o cabeçalho Via e todas iniciam com @@via@@. O valor da variável é considerado estar no cabeçalho SIP Via. Esta transformação retornará partes do cabeçalho vai ( veja struct via_body ). Se parte requisitada estiver faltando então o valor de retorna será uma variável vazia. A transformação irá falhar (com erro no script) se a variável que contem o cabeçalho Via estiver vazia. A menos que especificado abaixo, o resultado da transformação será uma string (não um inteiro).

Exemplos:

   $var(upstreamtransport) = $(hdr(Via)[1]{via.transport}{s.tolower});
   $var(upstreamip) = $(hdr(Via)[1]{via.param,received});
   $var(clientport) = $(hdr(Via)[-1]{via.param,rport});


Transformações disponíveis nesta classe:

{via.name}

Retorna o @@protocol-name@@ ( RFC3261 BNF ), geralmente @@SIP@@.


{via.version}

Retorna o @@protocol-version@@ ( RFC3261 BNF ), geralmente @@2.0@@.


{via.transport}

Retorna o @@transport@@ ( RFC3261 BNF ), ex: @@UDP@@, @@TCP@@, @@TLS@@. Este é o protocolo de transporte utilizado para enviar a mensagem.

{via.host}

(mesmo que @@{via.domain}@@)

Retorna o @@host@@ do @@sent-by@@ (RFC3261 BNF). Tipicamente é o IP de quem enviou a requisição, e claro, é o endereço para onde a resposta será envaida.


{via.port}

Retorna a @@port@@ to @@sent-by@@ (RFC3261). Tipicamente é a Porta de quem enviou a requisição e o endereço para onde a resposta será enviada, o resultado da transformação é valido tanto como inteiro quanto string.


{via.comment}

O comment associado com o cabeçalho via. A @@struct via_body@@ contém este capmo, mas ele não é claro que a RFC3261 permite a utilização de comentarios em cabeçalho Via ( veja o texto no topo da pagina 221 , e a BNF não explicita se permite comentário em Via). O texto da comment deve ser fechado por parenteses.


{via.params}

Retorna Todos os parametros do cabeçalho Via ( @@via-param@@ da RFC3261 BNF ) como uma string única. O resultado pode ser processado através da transformação @@{param.*}@@ . Isso é basicamente tudo após o host e porta.

{via.param,name}

Retorna o valor do parametro do cabeçalho Via especificado por @@name@@. Tipicamente parametros incluem @@branch@@, @@rport@@ e @@received@@.


{via.branch}

Retorna o valor do parametro branch no cabeçalho VIA.

{via.received}

Retorna o valor do parametro received no cabeçalho Via , se existir.


{via.rport}

Retorna o valor do parametro rport no cabeçalho VIA, se existir.

Parameters List Transformations

O nome da transformação inicia por "param." . O valor da variavel é considerado uma string como nome1=valor1; nome2=valor2;..." . A transformação retorna o valor de um parametro especifico ou o nome do parametro especificado no indice.


Transformações disponiveis nesta classe:


{param.value,name}

Retorna o valor do parametro 'name'


Exemplo:

"a=1;b=2;c=3"{param.value,c} = "3"

O valor de 'name' pode ser uma variável.


{param.exist,name}

Retorna 1 se o parametro @@name@@ existir (com ou sem valor), caso contrário retorna 0. O valor retornado é tanto string quanto inteiro. @@name@@ pode ser uma variável. Esta função pode ser utilizada para testar se um parametro possue ou não valores.

Exemplo:

"a=0;b=2;ob;c=3"{param.exist,ob};         # returns 1
"a=0;b=2;ob;c=3"{param.exist,a};          # returns 1
"a=0;b=2;ob;c=3"{param.exist,foo};        # returns 0


{param.valueat,index}

Retorna o valor do parametro na posição fornecida por 'index' (0-based index)


"a=1;b=2;c=3"{param.valueat,1} = "2"

'index' pode ser uma variável

{param.name,index}

Retorna o nome do parametro na posição 'index'.


Exemplo:

"a=1;b=2;c=3"{param.name,1} = "b"


{param.count}

Retorna o número de parametros na lista.


Exemplo:

"a=1;b=2;c=3"{param.count} = 3



Name-address Transformations

A nome da transformação inica com 'nameaddr.' . O valor da variável é considerado ser uma string como '[display_name] uri'. A transformação retorna o valor especificado no campo.


Transformações disponiveis para esta classe:


{nameaddr.name}

Retorna o valor de display name


Exemplo:

'"test" <sip:test@opensips.org>' {nameaddr.name} = "test"


{nameaddr.uri}

Retorna o valor da URI


Exemplo:

'"test" <sip:test@opensips.org>' {nameaddr.uri} = sip:test@opensips.org


{nameaddr.len}

Retorna o tamanho da name-addr


{nameaddr.param,param_name}

Retorna o valor do parametro com o nome 'param_name'.

Exemplo:

'"test" <sip:test@opensips.org>;tag=dat43h' {nameaddr.param,tag} = dat43h


{nameaddr.params}

Retorna os parametros e seus valores correspondentes.

Exemplo:

'"test" <sip:test@opensips.org>;tag=dat43h;private=yes' {nameaddr.params} = "tag=dat43h;private=yes"


IP Transformations

O nome da transformação inicia com 'ip.'

Transformações disponiveis para esta classe:


{ip.pton}

Retorna a representação binária do IP

Exemplo:

"192.168.2.134" {ip.pton} returns a 4 byte binary representation of the IP provided


{ip.ntop}

Retorna a representação de um binário de IP

Exemplo:

"192.168.2.134"{ip.pton}{ip.ntop} = "192.168.2.134"


{ip.isip}

Retorna 1 ou 0, se a string provida for um ip válido ou não.

Exemplo:

"192.168.2.134" {ip.isip} = 1
"192.168.2.134.1" {ip.isip} = 0


{ip.family}

Retorna INET ou INET6 se a representação binária provida for um IPv4 ou IPv6.

Exemplo:

"192.168.2.134" {ip.pton}{ip.family} = "INET"


{ip.resolve}

Retorna o IP de um host.dominio informado. a transformação não tem efeito se um IP for forncido.

Exemplo:

"opensips.org" {ip.resolve} = "78.46.64.50"


CSV Transformations

O nome da transformação inicia com "csv." . O valor da variável é considerado ser uma string como "campo1,campo2,....". A transformação retorna o numero de entradas no CSV informado, ou o campo de uma posição especifica do CSV.

Tranformações disponiveis nesta classe:


{csv.count}

Retorna o número de entradas no CSV provido.

Exemplo:

"a,b,c" {csv.count} = 3


{csv.value}

Retorna a entrada na posição especifica. Index inicia em 0

Exemplo:

"a,b,c" {csv.value,2} = c


SDP Transformations

O nome da transformação inica com "sdp.". O valor da variaável é considerado ser um body SDP válido. A transformação retorna uma linha especifica no body SDP.

Transformações disponiveis para esta classe:


={sdp.line}

Retorna a linha especifica do body SDP. A transformação também aceita um segundo parametro, este especificado é o número da linha do primeiro parametro para pegar do body SDP. Index inicia em 0. Se o segundo parametro estiver faltando ele assume 0.

Exemplo

if (is_method("INVITE"))
   {
      $var(aline) = $(rb{sdp.line,a,1});
      xlog("The second a line in the SDP body is $var(aline)\n");
   }

if (is_method("INVITE"))
   {
      $var(mline) = $(rb{sdp.line,m});
      xlog("The first m line in the SDP body is $var(mline)\n");
   }

Regular Expression Transformations

O nome da trasnformação inicia-se com "re." . O valor de entrada pode ser qualquer string.


{re.subst,reg_exp}

O parametro reg_exp pode ser tanto uma string quanto uma variável.

O formato da reg_exp é:

   /posix_match_expression/replacement_expression/flags

As flags podem ser:

   i - match ignore case
   s - match within multi-lines strings
   g - replace all matches

Exemplo:

$var(reg_input)="abc";
$var(reg) = "/a/A/g";
xlog("Applying reg exp $var(reg) to $var(reg_input) : $(var(reg_input){re.subst,$var(reg)})\n");

...
...
xlog("Applying reg /b/B/g to $var(reg_input) : $(var(reg_input){re.subst,/b/B/g})\n");


Exemplos

Em uma variável, muitas trasnformações podem ser aplicadas, começando da esquerda para a direita.

  • O tamanho do valor da variavel do parametro na posição 1 (lembre-se que 0 é a primeira posição, 1 é a segunda)


$var(x) = "a=1;b=22;c=333";
$(var(x){param.value,$(var(x){param.name,1})}{s.len}) = 2
  • Testa se é des-registro ou não


if(is_method("REGISTER") && is_present_hf("Expires") && $(hdr(Expires){s.int})==0)
    xlog("This is an un-registrationn");


Voltar