Mudanças entre as edições de "Variáveis Core"
(5 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 31: | Linha 31: | ||
Exemplo de uso: | Exemplo de uso: | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | * Apenas '''name''': $ru | ||
+ | * '''Name''' e '''subname''': $hdr(Contact) | ||
+ | * '''Name''' e '''index''': $(ct[0]) | ||
+ | * '''Name''', '''subname''' e '''index''': $(avp(i:10)[2]) | ||
+ | * '''Context''' | ||
+ | ** $(<request>ru) de uma rota reply irá receber a Request-URI da requisição | ||
+ | ** $(<reply>hdr(contact)) , contexto pode ser utilizado em uma rota de falha para acessar as informações do reply. | ||
− | + | ==Tipos de variáveis== | |
− | + | ===script variables=== | |
− | + | * Como o nome diz, estas variáveis são estritamente utilizadas em rotas de script, estas variáveis são visiveis apenas nos blocos de roteamento, não existem mensagem ou transações relacionas, mas são processos relacionados (variaveis de script são dependentes de rotas executadas pelo mesmo processo do '''OpenSIPS'''). | |
− | + | Variáveis de scripts são de leitura e escrita e podem ter valores inteiros ou strings, uma variável de script pode ter apenas um valor, uma nova atribuição (ou escrita) irá sobrescrever os valores existentes. | |
− | |||
− | * | + | ===AVP - Atribute Value Pair=== |
− | + | * As avp's são variaveis dinamicas que podem ser criadas, as avp's são linkadas para uma mensagem singular ou uma transação ( se processamento stateful está em uso), uma mensagem ou transação irá inicialmente (quando recebida ou criada) ter uma lista vazia de avp's atreladas, durante o processo de roteamento o script diretamente ou via função poderá criar novos AVP's que automaticamente serão atrelados a mensagem/transação, as avp's serão visiveis em todas as rotas onde qualquer mensagem (reply ou request) da transação seja processada, branch_route, filure_route, onreply_route ( para onreply_route voce deve ter ativado o parametro ''onreply_avp_mode''). | |
− | + | AVP's são variáveis de leitura e escrita e uma AVP existente pode ser deletada (removida), uma AVP pode conter multiplos valores, uma nova atribuição (operação de escrita) irá adicionar o novo valor para a AVP, os valores são mantidos no formado ''ultimo adicionado é o primeiro a ser utilizado'' . | |
+ | ===pseudo variables=== | ||
+ | * pseudo-variáveis (ou PV's) provem acesso a informação das mensagens SIP processadas (cabeçalhos, RURI, informações de trnasporte, etc..) ou de informações do '''OpenSIPS''' (valores de timers, números de processo (PID), códigos de retorno de função). | ||
+ | Dependendo da informação provida a PV fica presa (relacionada) a um amensagem ou a nada (global), a maior parte das PV's são apenas de leitura, apenas algumas suportam operações de escrita, uma PV pode retornar varios ou apenas um valor dependendo da informação referenciadas (se pode ter valores multiplos ou nao) | ||
− | + | PV padrões são apenas de leitura e retornam apenas um valor (se não foi documentado de forma diferente) | |
− | |||
− | |||
− | ''' | + | [[escape sequences]] |
− | + | ||
− | + | * Sequencias de escape são utilizadas para formatar strings, estas não são variaveis mas podem ser formatadas. | |
− | + | ||
+ | ==Definições== | ||
+ | |||
+ | ===Script Variables=== | ||
+ | |||
+ | '''Nominação: **$var(name)** | ||
+ | |||
+ | '''Dicas''': | ||
+ | |||
+ | * Se você quer utilizar uma variavel em uma rota é melhor inicializar ou restar a mesma), de outra forma você poderá ter problemas com valores de rotas anteriores que forão executadas por um mesmo processo. | ||
+ | * Variáveis de script são mais rápidas que AVP's sendo processadas diretamente no endereço de memória. | ||
+ | * O valor de uma variável de script persiste para o processo do '''OpenSIPS''' | ||
+ | * Um variável pode ter apenas um valor | ||
+ | |||
# a script value can have only one value. | # a script value can have only one value. | ||
− | + | Exemplos de uso | |
− | + | <pre> | |
$var(a) = 2; # sets the value of variable 'a' to integer '2' | $var(a) = 2; # sets the value of variable 'a' to integer '2' | ||
$var(a) = "2"; # sets the value of variable 'a' to string '2' | $var(a) = "2"; # sets the value of variable 'a' to string '2' | ||
Linha 78: | Linha 91: | ||
xlog("var a has third bit set\n"); | xlog("var a has third bit set\n"); | ||
} | } | ||
− | + | </pre> | |
− | + | Definir uma variável para NULL corresponde a iniciar a a mesma com valor '0', variáveis de script não possuem valor NULL. | |
+ | ===AVP variables=== | ||
− | [ | + | '''Nominação''': **$avp(name)** ou **$(avp(name)[N])** |
− | |||
− | '' | + | Quando utilizado o index 'N' você pode forçar a AVP para retornar um certo valor (valor na posição N), se nenhum index é informado o primeiro valor será o retornado. |
− | |||
− | ''' | + | '''Dicas''': |
− | + | * Para ativar AVP's em onreply_route utilize '''modparam("tm", "onreply_avp_mode", 1)''' | |
− | + | * Se multiplos valores forem utilizados em uma mesma AVP os valores são indexados em ordem reversa (primeiro inserido é o ultimo da lista) | |
− | + | * AVP's são parte do contexto de transação, desta forma estarão visiveis em todo local que a transação esteja presente. | |
− | + | * O valor de uma AVP pode ser deletado | |
− | + | Exemplo de uso: | |
− | + | ||
− | + | Exemplo persistente a transação: | |
+ | |||
+ | <pre> | ||
# enable avps in onreply route | # enable avps in onreply route | ||
modparam("tm", "onreply_avp_mode", 1) | modparam("tm", "onreply_avp_mode", 1) | ||
Linha 118: | Linha 132: | ||
} | } | ||
} | } | ||
− | + | </pre> | |
− | + | Exemplo com multiplos valores | |
− | + | ||
+ | <pre> | ||
$avp(17) = "one"; | $avp(17) = "one"; | ||
# we have a single value | # we have a single value | ||
Linha 146: | Linha 161: | ||
#overwrite the value at a certain index | #overwrite the value at a certain index | ||
$(avp(17)[0]) = "zero"; | $(avp(17)[0]) = "zero"; | ||
− | + | </pre> | |
− | + | O módulo '''AVPOPS''' prove uma série de funções para operar as AVP's (como checagem de valores, extração em diferentes locais, deleção etc..) | |
+ | ===Pseudo Variables=== | ||
− | + | '''Nominação''': $name | |
− | |||
− | ''' | + | '''Dicas''': |
+ | * as PV podem ser utilizadas como parametros para diferentes funções e serão substituidas com o valor antes da execução da função | ||
+ | * A maior part edas PV's são disponibilizadas pelo core do '''OpenSIPS''' porém existem vários módulos que exportas PV's (para tornar algumas informações especificas do módulo disponivel), verifique as documentações dos módulos para saber mais. | ||
− | + | Váriaveis pré-definidas pelo core listadas em ordem alfabética. | |
− | |||
− | |||
+ | ====URI in SIP Request's P-Asserted-Identity header==== | ||
− | + | '''$ai''' - referencia a URI no cabeçalho P-Asserted-Identity (veja RFC 3325 para mais detalhes) | |
+ | ====Authentication Digest URI==== | ||
− | + | '''$adu''' - URI do cabeçalho Authorization ou Proxy-Authorization, esta URI é utilizada quando calculando a resposta do resposta do HTTP Digest (autenticação). | |
− | + | ====Authentication realm==== | |
− | |||
− | '''$ | + | '''$ar''' - referencia (dominio ou ip) no cabeçalho de Authorization ou Proxy-Authorization |
− | + | ====Auth username user==== | |
− | '''$ | + | '''$au''' - parte referente ao nome do usuário no cabeçalho de Authorization ou Proxy-Authorization |
− | + | ====Auth username domain==== | |
− | '''$ | + | '''$ad''' - parte referente ao dominio do usuário no cabeçalho de Authorization ou Proxy-Authorization |
− | + | ====Auth nonce==== | |
− | '''$ | + | '''$an''' - Hash do cebçalho Authorization ou Proxy-Authorization |
+ | Nota: na documentação fala nounce, não achei tradução para isso (ex de valor: nonce: 526442e200000000b8d49749e4bdd108e58cd246de209a50) | ||
− | + | ====Auth response==== | |
− | '''$ | + | '''$auth.resp''' - A resposta da autenticação para um cabeçalho Authorization ou Proxy-Authorization |
− | + | ====Auth nonce==== | |
− | |||
− | |||
− | |||
− | |||
− | |||
'''$auth.nonce''' - the nonce string from Authorization or Proxy-Authorization header | '''$auth.nonce''' - the nonce string from Authorization or Proxy-Authorization header | ||
− | + | ====Auth opaque==== | |
'''$auth.opaque''' - the opaque string from Authorization or Proxy-Authorization header | '''$auth.opaque''' - the opaque string from Authorization or Proxy-Authorization header | ||
− | + | ====Auth algorithm==== | |
− | '''$auth.alg''' - | + | '''$auth.alg''' - A string referente ao algoritimos utilizado para Authorization ou Proxy-Authorization. |
− | + | ===Auth QOP=== | |
− | '''$auth.qop''' - | + | '''$auth.qop''' - O valor do parametro qop (quality of protection) do caebaçalho Authorization ou Proxy-Authorization |
− | + | ====Auth nonce count (nc)==== | |
'''$auth.nc''' - the value of nonce count parameter from Authorization or Proxy-Authorization header | '''$auth.nc''' - the value of nonce count parameter from Authorization or Proxy-Authorization header | ||
− | + | ====Auth whole username==== | |
− | '''$aU''' - | + | '''$aU''' - Nome do usuário no cabeçalho Authorization or Proxy-Authorization |
− | + | ====Acc username==== | |
− | '''$Au''' - | + | '''$Au''' - usuário para proposito de accounting , é uma pseudo variavel seletiva (dependente do modulo acc) , se existir ela retorna seu valor ou retorna o valor do campo From em todo caso |
− | + | ====Argument options==== | |
+ | |||
+ | '''$argv''' - Permite acesso a argumentos de linha de comando especificados com o parametro '''-o''' | ||
+ | |||
+ | Exemplo: | ||
− | |||
− | |||
− | |||
# for option '-o foo=0' | # for option '-o foo=0' | ||
xlog("foo is $argv(foo) \n"); | xlog("foo is $argv(foo) \n"); | ||
− | |||
− | |||
− | '''$bf''' - | + | ====Branch flags==== |
+ | |||
+ | '''$bf''' - Exibe a lista de branch flags definidas para a requisição atual | ||
!!!!Branch flags (hexadecimal) %red%(Removed in OpenSIPS 1.9)%% | !!!!Branch flags (hexadecimal) %red%(Removed in OpenSIPS 1.9)%% | ||
− | |||
− | |||
− | '''$branch''' - | + | ====Branch==== |
− | + | ||
− | + | '''$branch''' - Esta variavel é utilizada para criação de novas branches (pernas) escrevendo as mesmas no valor da SIP URI | |
+ | Exemplos | ||
+ | |||
+ | |||
# creates a new branch | # creates a new branch | ||
$branch = "sip:new@doamin.org"; | $branch = "sip:new@doamin.org"; | ||
# print its URI | # print its URI | ||
xlog("last added branch has URI $(branch(uri)[-1]) \n"); | xlog("last added branch has URI $(branch(uri)[-1]) \n"); | ||
− | |||
− | |||
− | '''$branch()''' - | + | ====Branch fields==== |
− | * uri - | + | |
− | * duri - | + | '''$branch()''' - Esta variavel permite acesso de leitura e escrita para todos os campos/atributos de uma branch existente (previamente criada com append_branch()), os campos da branche são: |
− | * q - q | + | |
− | * path - | + | * uri - a RURI da branch (string) |
− | * flags - | + | * duri - a URI e destino da branch (proxy the saida da branch) (sting) |
− | * socket - | + | * q - o valor '''q''' da branch (inteiro) |
− | + | * path - a string PATH desta branch (string) | |
− | + | * flags - as flags para esta branch (inteiro) | |
− | + | * socket - o scoket local para ser utilizado para fazer o relay desta branch (string) | |
− | + | ||
+ | A variavel aceita também index '''$(branch(uri)[1])''' para acessar uma branch especifica (multiplas branches podem ser especificadas autalmente), o index inicia em 0 (primeira branch), se o index for negativo ele é considerado o valor n do fim ( index -1 é ultima branch) | ||
+ | |||
+ | Para todas as branches é utilizado o index '''*''' - $(branch(uri)[*]). | ||
+ | |||
+ | Exemplo: | ||
+ | <pre> | ||
# creates the first branch | # creates the first branch | ||
append_branch(); | append_branch(); | ||
Linha 287: | Linha 305: | ||
$(branch(socket)[1]) = NULL; # reset the socket of the second branch | $(branch(socket)[1]) = NULL; # reset the socket of the second branch | ||
$branch(duri) = NULL; # reset the destination URI or the first branch | $branch(duri) = NULL; # reset the destination URI or the first branch | ||
− | + | </pre> | |
+ | |||
+ | Esta é uma variavel de leitura e escrita (você pode definir valores apartir do script de roteamento) | ||
+ | |||
+ | |||
+ | ====Call-Id==== | ||
− | + | '''$ci''' - Referencia para o valor do cabeçalho call-id | |
− | + | ====Content-Length==== | |
− | '''$ | + | '''$cl''' - Referencia para o valor do cabeçalho content-length |
− | + | ====CSeq number==== | |
− | '''$ | + | '''$cs''' - Referencia ao valor do cabeçalho cseq |
− | + | ====Contact instance==== | |
− | '''$ | + | '''$ct''' - referencia a 'contact instance/body' do cabeçalho contact, uma contact instance é o display_name + URI + contact_params, como um cabeçalho de contato pode conter multiplos valores e uma mensagem pode conter vários cabeçalhos, um index é adicionado a $ct neste caso: |
− | + | * $ct -first primeiro 'contact instance' da mensagem | |
+ | * $(ct[n]) - 'contact instance' na posição n do inicio da mensagem, iniciando com index 0 | ||
+ | * $(ct[-n]) - 'contact instance' na posição n apartir do fim da mensagem (iniciando em -1 (ultimo contato) | ||
− | + | =====Fields of a contact instance===== | |
− | |||
− | |||
− | |||
− | + | A contact instance possue também campos que podem ser acessados | |
+ | |||
+ | '''$ct.fields()''' - referencia os campos da 'contact instance' (veja abaixo) | ||
+ | |||
+ | Campos suportados são: | ||
− | |||
* name - display name | * name - display name | ||
* uri - contact uri | * uri - contact uri | ||
− | * q - q | + | * q - parametro q (valor apenas) |
− | * expires - expires | + | * expires - parametro expires (valor apenas) |
− | * methods - | + | * methods - parametro metodo (valor apenas) |
− | * received - received | + | * received - parametro received (valor appenas) |
− | * params - | + | * params - Todos os parametros (incluindo nomes) |
+ | |||
+ | Exemplos: | ||
+ | * $ct.fields(uri) - URI da primeira 'contact instance' | ||
+ | * $(ct.fields(name)[1]) - O display nae da segunda 'contact instance' | ||
+ | |||
+ | |||
+ | ====Content-Type==== | ||
− | + | '''$cT''' - Referencia ao cabeçalho content-type | |
− | |||
− | |||
+ | ====Domain of destination URI==== | ||
− | + | '''$dd''' - Referencia do dominio da destination uri | |
− | + | Esta é uma variável de leitura e escrita | |
− | + | ====Diversion header URI==== | |
− | '''$ | + | '''$di''' - Referencia ao Diversion header URI |
− | + | ====Diversion "privacy" parameter==== | |
− | + | '''$dip''' - Referencia ao parametro 'privacy' do Diversion header | |
− | + | ====Diversion "reason" parameter==== | |
− | + | '''$dir''' - Referencia ao parametro 'reason' do Diversion header | |
− | + | ====Port of destination URI==== | |
− | + | '''$dp''' - Referencia a porta da destination URI | |
− | + | Váriavel de leitura e escrita | |
− | |||
− | + | ====Transport protocol of destination URI==== | |
− | + | '''$dP''' - referencia ao protocolo de transporte da destination uri | |
− | + | ====Destination set==== | |
− | '''$ | + | '''$ds''' - referencia para a destination set |
− | + | ====Destination URI==== | |
− | '''$ | + | '''$du''' - referencia a destination uri (outbound proxy que deve ser utilizado para enviar a requisição), se a loose_route() retornar TRUE a destination uri é definida de acordo com o primeiro Route header |
− | + | Esta é uma variável de leitura e escrita | |
− | |||
− | |||
− | + | ====Error class==== | |
− | + | '''$err.class''' - Classe de erro ( atualmente '1' ) | |
− | + | ====Error level==== | |
− | + | '''$err.level''' - Severidade da mensagem | |
− | + | ====Error info==== | |
− | + | '''$err.info''' - Texto descrevendo o erro | |
− | + | ====Error reply code==== | |
− | + | '''$err.rcode''' - Reply code recomendado para o erro | |
− | + | ====Error reply reason==== | |
− | + | '''$err.rreason''' - Reply reason (frase) recomendada para o erro | |
− | + | ====From URI domain==== | |
− | + | '''$fd''' - Referencia do dominio da URI do cabeçalho 'From' | |
− | + | ====From display name==== | |
− | + | '''$fn''' - Referencia ao display name do cabeçalho 'From' | |
− | + | ====Forced socket==== | |
− | + | '''$fs''' - Referencia ao socket (forçado) para envio de mensagens (quando existe) , o formato é proto:ip:port | |
− | + | Esta é uma variável de leitura e escrita | |
− | |||
− | + | ====From tag==== | |
− | '''$ft''' - | + | '''$ft''' - Referencia ao parametro tag do cabeçalho 'From' |
− | + | ====From URI==== | |
− | '''$fu''' - | + | '''$fu''' - referencia a URI do cabeçalho 'From' |
− | + | ====From URI username==== | |
− | '''$fU''' - | + | '''$fU''' - referencia ao username da URI do cabeçalho 'From' |
− | + | ====SIP message buffer==== | |
− | '''$mb''' - | + | '''$mb''' - Referencia para o SIP message buffer |
− | + | ====Message Flags==== | |
− | '''$mf''' - | + | '''$mf''' - Exibe uma lista com as flags utilizadas na mensagem ou transação para a requisição atual. |
− | |||
− | + | ====SIP message ID==== | |
− | + | '''$mi''' - Referencia ao ID da mensagem SIP | |
− | + | ====SIP message length==== | |
− | + | '''$ml''' - Referenia ao tamanho da mensagem SIP | |
− | ' | + | ====Domain in SIP Request's original URI==== |
− | + | '''$od''' - Referencia do dominio na R-URI original | |
− | + | ====Port of SIP request's original URI==== | |
− | + | '''$op''' - Referencia a porta da R-URI original | |
− | + | ====Transport protocol of SIP request original URI==== | |
− | + | '''$oP''' - Referencia do protocolo de transporte da R-URI original | |
− | ' | + | ====SIP Request's original URI==== |
− | + | '''$ou''' - Referencia a URI da requisição original | |
− | + | ====Username in SIP Request's original URI==== | |
− | + | '''$oU''' - Referenciao ao username na requisição original | |
− | '''$ | + | ====Route parameter==== |
+ | |||
+ | '''$param(idx)''' - Recupera o parametro da rota , o index pode ser um inteiro ou uma pseudo-variavel (index inicia em 1) | ||
+ | |||
+ | Exemplo | ||
− | |||
− | |||
− | |||
− | |||
route { | route { | ||
... | ... | ||
Linha 470: | Linha 496: | ||
xlog("$param(1): The parameter value is <$param($var(index))>\n"); | xlog("$param(1): The parameter value is <$param($var(index))>\n"); | ||
} | } | ||
− | |||
− | + | ====Domain in SIP Request's P-Preferred-Identity header URI==== | |
+ | |||
+ | '''$pd''' - Referencia ao dominio na URI do cabeçalho P-Preferred-Identity (veja RFC 3325) | ||
+ | |||
+ | ====Display Name in SIP Request's P-Preferred-Identity header==== | ||
+ | |||
+ | '''$pn''' - Referencia ao display name no cabeçalho P-Preferred-Identity (veja RFC 3325) | ||
− | + | ====Process id==== | |
− | + | '''$pp''' - Referenciao ao processo id (pid) | |
− | '''$ | + | ====Protocol of received message==== |
+ | '''$pr''' ou '''$proto''' - protocolo da mensagem recebida (UDP, TCP, TLS, SCTP) | ||
− | + | ====User in SIP Request's P-Preferred-Identity header URI==== | |
− | '''$ | + | '''$pU''' - referencia ao usuário da URI no cabeçalho P-Preferred-Identity (veja RFC 3325) |
− | + | ====URI in SIP Request's P-Preferred-Identity header==== | |
− | |||
− | + | '''$pu''' - Referencia a URI no cabeçalho P-Preferred-Identity (veja RFC 3325) | |
− | + | ====Domain in SIP Request's URI==== | |
− | + | '''$rd''' - Referencia ao dominio da URI | |
− | + | Esta é uma variável de leitura e escrita | |
− | + | ====Body of request/reply==== | |
− | '''$ | + | '''$rb''' - Referencia ao corpo da mensagem recebida |
− | + | ====Returned code==== | |
− | + | '''$rc''' - Referencia do código de retorno da ultima função executada | |
− | '''$ | + | '''$retcode''' - mesma coisa que **$rc** |
− | + | ====Remote-Party-ID header URI==== | |
− | '''$ | + | '''$re''' - referencia a URI do cabeçalho Remote-Party-ID |
− | ' | + | ====SIP request's method==== |
− | + | '''$rm''' - Referencia ao método da mensagem atual | |
− | ' | + | ====SIP request's port==== |
− | + | '''$rp''' - Referencia a porta da R-URI | |
− | + | Esta é uma váriavel de leitura e escrita. | |
− | |||
− | + | ====Transport protocol of SIP request URI==== | |
− | + | '''$rP''' - Referencia ao protocolo de transporte da R-URI | |
− | + | ====SIP reply's reason==== | |
− | '''$ | + | '''$rr''' - Referencia a '''reply's reason''' |
− | + | ====SIP reply's status==== | |
− | '''$ | + | '''$rs''' - Referencia ao status do reply |
− | + | ====Refer-to URI==== | |
− | '''$ | + | '''$rt''' - Referencia a URI do cabeçalho refer-to |
− | + | ====SIP Request's URI==== | |
− | '''$ | + | '''$ru''' - Referencia a request URI |
− | + | Esta é uma variável de leitura e escrita | |
− | |||
− | + | ====Username in SIP Request's URI==== | |
− | + | '''$rU''' - Referencia ao username da URI da requisição | |
− | + | Esta é uma variável de leitura e escrita | |
− | + | ====Q value of the SIP Request's URI==== | |
− | + | '''$ru_q''' - Referencia ao valor 'q' da R-URI | |
− | + | Esta é uma variável de leitura e escrita | |
− | + | ====Received IP address==== | |
− | + | '''$Ri''' - Referencia do IP da interface onde o pacote foi recebido | |
− | + | ====Received port==== | |
− | + | '''$Rp''' - Referencia da porta onde o pacote foi recebido | |
− | + | ====Script flags==== | |
− | + | '''$sf''' - Exibe uma lista com as flgs de script da requisição atual | |
− | |||
− | + | ====IP source address==== | |
− | '''$ | + | '''$si''' - IP de origem da mensagem recebida |
− | + | ====Source port==== | |
− | '''$ | + | '''$sp''' - Porta de origem da mensagme recebida |
− | + | ====To URI Domain==== | |
− | '''$ | + | '''$td''' - Referencia ao dominio da URI no cabeçalho 'To' |
− | + | ====To display name==== | |
− | '''$ | + | '''$tn''' - Referencia ao display name no cabeçalho 'To' |
− | + | ====To tag==== | |
− | '''$ | + | '''$tt''' - Referencia ao parametro tag do cabeçalho 'To' |
− | + | ====To URI==== | |
− | '''$ | + | '''$tu''' - Referencia a URI do cabeçalho 'To' |
− | + | ====To URI Username==== | |
− | '''$ | + | '''$tU''' - Referencia ao username da URI do cabeçalho 'To' |
− | + | ====Formatted date and time==== | |
− | '''$ | + | '''$time(format)''' - Retorna a string formatda de acordo com o comando date do UNIX (veja '''man date''') |
− | + | ====Branch index==== | |
− | '''$ | + | '''$T_branch_idx''' - O index (iniciando com 1 para a primeira branche) da branch para qual é executada uma branch_route[], se utilizado fora da branch_route[] o valor será 0, esta variável é exportado pelo módulo TM. |
− | + | ====Time Variables==== | |
− | + | =====String formatted time===== | |
− | + | '''$Tf''' - Referencia a string formatda para hora (HH:MM:SS) | |
− | + | =====Current unix time stamp in seconds===== | |
− | + | '''$Ts''' - Referencia ao unix timestamp em segundos | |
− | + | =====Current microseconds of the current second===== | |
− | + | '''$Tsm''' - Referencia para os microsegundos do segundo atual | |
− | + | =====Startup unix time stamp===== | |
− | + | '''$TS''' - Referencia ao 'startup unix time stamp' | |
− | + | ====User agent header==== | |
− | + | '''$ua''' - Referencia ao campo user agent do cabeçalho | |
− | + | ===SIP Headers=== | |
− | + | '''$(hdr(name)[N])''' - Representa o conteúdo do cabeçalho N identificado por 'name', se [N] for omitido então o conteúdo do primeiro cabeçalho será exibido, o primeiro cabeçalho é pego quando N=0, para o segundo N=1 e assim por diante, para imprimir o último cabeçalo daquele tipo é possível utilizar o index [-1], nenhum outro valor negativo é suportado, não é permitido espaço em branco antes ou depois de [, {, }, ], quando N='*' , todos os cabeçalhos serão exibidos. | |
− | ''' | + | O módulo deve identificar a maior parte dos cabeçalhos compactos (o '''OpenSIPS''' reconhece todos atualmente), se não a forma compacta do cabeçalho necessita ser especificada explicitamente, é recomendado usar identificadores especiais para os cabeçalhos (ex: %ua para user agent), se eles estiverem disponiveis pois são mais rapidos. |
− | |||
− | '''$(hdrcnt(name))''' -- | + | '''$(hdrcnt(name))''' -- Retorna o numero de cabeçalhos deste tipo existentes, o tipo é defnido por 'name', utiliza as mesmas regras de especificação de nome de cabeçalho como '''$hdr(name)''', muitos cabeçalhos (ex: Via, Path, Record-Route) podem aparecer mais de uma vez na mensagem, esta variavel então retorna o numero referente a quantidad ede vezes que o cabeçalho em questão está presente. |
+ | |||
+ | Veja que alguns cabeçalhos (ex: Path) pode ter valores com virgulas e aparecerem como uma unica linha, esta variavel conta a quantidade de linhas, e não a quantidade de valores | ||
+ | |||
+ | Para o fragmento de mensagem abaixo, '''$hdrcnt(Path)''' terá o valor 2 e '''$(hdr(Path)[0]''' terá o valor '''<a.com>''' ; | ||
− | |||
− | |||
− | |||
Path: <a.com> | Path: <a.com> | ||
Path: <b.com> | Path: <b.com> | ||
− | |||
− | + | Para o fragmento de mensagem abaixo , '''$hdrcnt(Path)''' terá o valor 1, e '''$(hdr(Path)[0]''' terá o valor '''<a.com>,<b.com>''' | |
− | + | ||
Path: <a.com>,<b.com> | Path: <a.com>,<b.com> | ||
− | |||
− | + | Veja que os dois exemplos representam a mesma coisa mas as variaveis possuem valores diferentes | |
− | |||
− | |||
− | + | ==Escape Sequences== | |
+ | Estas sequencias são exportadas e normalmente utilizadas pelo módulo xlog para exibir mensagens em várias cores (foreground ou background) usando sequencias de scape. | ||
− | |||
+ | ===Foreground and background colors=== | ||
− | |||
− | + | $C(xy) - Referencia uma sequencia de scape. 'x' repreenta a core de foreground (cor da fonte) e 'y' representa a cord de background (cor do fundo). | |
− | + | Cores devem ser: | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | * x : Cor padrão do terminal | ||
+ | * s : Preto | ||
+ | * r : Vermelho | ||
+ | * g : Verde | ||
+ | * y : Amarelo | ||
+ | * b : Azul | ||
+ | * p : Roxo | ||
+ | * c : Ciano | ||
+ | * w : Branco | ||
− | |||
+ | Examplos: | ||
− | + | Alguns exemplos de uso | |
− | + | <pre> | |
... | ... | ||
route { | route { | ||
Linha 695: | Linha 720: | ||
} | } | ||
... | ... | ||
− | + | </pre> | |
+ | |||
+ | [[OpenSIPS_1.9_Manual|Voltar]] |
Edição atual tal como às 22h33min de 20 de outubro de 2013
O OpenSIPS prove varios tipos de variaveis para serem usados no script de roteamento, as diferenças entre os tipos de variaveis são:
- 1. A visibilidade da variavel
- 2. Onde a variavel é relacionada (onde a mesma reside)
- 3. Status read-write da variavel ( algumas variaveis são apenas de leitura)
- 4. Como multiplos valores (da mesma variavel) são manipulados.
As variáveis do OpenSIPS podem facilmente ser identificadas no script apartir de seus nomes (ou nota'ões) iniciando com o simbolo $
Sintaxe:
A sintaxe completa de uma pseudo-variavel é:
$(<context>name(subname)[index]{transformation})
Os campos context, subname, index e transformation são opcionais
Os campos significam:
- name - o nome(tipo) da pseudo variavel.
Ex: pvar, avp, ru, DLG_status etc...
- subname - o identificador de um certo tipo de variável.
Ex: hdr(From), avp(nome)
- index - uma pv pode armazenar mais de um valor, isso pode ser referenciado a uma lista de valores, você pode acessar um certo valor de uma lista se você especificar o index, você também pode especificar indexe's negativos , -1 significa o ultimo inserido e -2 significa o valor anterior ao ultimo (penultimo).
- transformation - uma série de processos que podem ser aplicados em pseudo-variaveis, você pode encontrar a lista completa em Transformações , as transformações podem ser cascateadas usango a saída de uma tranformação como entrada de outra.
- context - o contexto onde a pseudo-variavel será verificada, atualmente existem dois contextos, reply e request, o contexto de reply pode ser usado na rota de falha para verificar o valor da pseudovariavel neste contexto , o contexto de request (requisição) pode ser usado quando em um contexto de reply é desejado a verificação do valor no contexto correspondente ao request.
Exemplo de uso:
- Apenas name: $ru
- Name e subname: $hdr(Contact)
- Name e index: $(ct[0])
- Name, subname e index: $(avp(i:10)[2])
- Context
- $(<request>ru) de uma rota reply irá receber a Request-URI da requisição
- $(<reply>hdr(contact)) , contexto pode ser utilizado em uma rota de falha para acessar as informações do reply.
Índice
- 1 Tipos de variáveis
- 2 Definições
- 2.1 Script Variables
- 2.2 AVP variables
- 2.3 Pseudo Variables
- 2.4 Auth QOP
- 2.4.1 Auth nonce count (nc)
- 2.4.2 Auth whole username
- 2.4.3 Acc username
- 2.4.4 Argument options
- 2.4.5 Branch flags
- 2.4.6 Branch
- 2.4.7 Branch fields
- 2.4.8 Call-Id
- 2.4.9 Content-Length
- 2.4.10 CSeq number
- 2.4.11 Contact instance
- 2.4.12 Content-Type
- 2.4.13 Domain of destination URI
- 2.4.14 Diversion header URI
- 2.4.15 Diversion "privacy" parameter
- 2.4.16 Diversion "reason" parameter
- 2.4.17 Port of destination URI
- 2.4.18 Transport protocol of destination URI
- 2.4.19 Destination set
- 2.4.20 Destination URI
- 2.4.21 Error class
- 2.4.22 Error level
- 2.4.23 Error info
- 2.4.24 Error reply code
- 2.4.25 Error reply reason
- 2.4.26 From URI domain
- 2.4.27 From display name
- 2.4.28 Forced socket
- 2.4.29 From tag
- 2.4.30 From URI
- 2.4.31 From URI username
- 2.4.32 SIP message buffer
- 2.4.33 Message Flags
- 2.4.34 SIP message ID
- 2.4.35 SIP message length
- 2.4.36 Domain in SIP Request's original URI
- 2.4.37 Port of SIP request's original URI
- 2.4.38 Transport protocol of SIP request original URI
- 2.4.39 SIP Request's original URI
- 2.4.40 Username in SIP Request's original URI
- 2.4.41 Route parameter
- 2.4.42 Domain in SIP Request's P-Preferred-Identity header URI
- 2.4.43 Display Name in SIP Request's P-Preferred-Identity header
- 2.4.44 Process id
- 2.4.45 Protocol of received message
- 2.4.46 User in SIP Request's P-Preferred-Identity header URI
- 2.4.47 URI in SIP Request's P-Preferred-Identity header
- 2.4.48 Domain in SIP Request's URI
- 2.4.49 Body of request/reply
- 2.4.50 Returned code
- 2.4.51 Remote-Party-ID header URI
- 2.4.52 SIP request's method
- 2.4.53 SIP request's port
- 2.4.54 Transport protocol of SIP request URI
- 2.4.55 SIP reply's reason
- 2.4.56 SIP reply's status
- 2.4.57 Refer-to URI
- 2.4.58 SIP Request's URI
- 2.4.59 Username in SIP Request's URI
- 2.4.60 Q value of the SIP Request's URI
- 2.4.61 Received IP address
- 2.4.62 Received port
- 2.4.63 Script flags
- 2.4.64 IP source address
- 2.4.65 Source port
- 2.4.66 To URI Domain
- 2.4.67 To display name
- 2.4.68 To tag
- 2.4.69 To URI
- 2.4.70 To URI Username
- 2.4.71 Formatted date and time
- 2.4.72 Branch index
- 2.4.73 Time Variables
- 2.4.74 User agent header
- 2.5 SIP Headers
- 3 Escape Sequences
Tipos de variáveis
script variables
- Como o nome diz, estas variáveis são estritamente utilizadas em rotas de script, estas variáveis são visiveis apenas nos blocos de roteamento, não existem mensagem ou transações relacionas, mas são processos relacionados (variaveis de script são dependentes de rotas executadas pelo mesmo processo do OpenSIPS).
Variáveis de scripts são de leitura e escrita e podem ter valores inteiros ou strings, uma variável de script pode ter apenas um valor, uma nova atribuição (ou escrita) irá sobrescrever os valores existentes.
AVP - Atribute Value Pair
- As avp's são variaveis dinamicas que podem ser criadas, as avp's são linkadas para uma mensagem singular ou uma transação ( se processamento stateful está em uso), uma mensagem ou transação irá inicialmente (quando recebida ou criada) ter uma lista vazia de avp's atreladas, durante o processo de roteamento o script diretamente ou via função poderá criar novos AVP's que automaticamente serão atrelados a mensagem/transação, as avp's serão visiveis em todas as rotas onde qualquer mensagem (reply ou request) da transação seja processada, branch_route, filure_route, onreply_route ( para onreply_route voce deve ter ativado o parametro onreply_avp_mode).
AVP's são variáveis de leitura e escrita e uma AVP existente pode ser deletada (removida), uma AVP pode conter multiplos valores, uma nova atribuição (operação de escrita) irá adicionar o novo valor para a AVP, os valores são mantidos no formado ultimo adicionado é o primeiro a ser utilizado .
pseudo variables
- pseudo-variáveis (ou PV's) provem acesso a informação das mensagens SIP processadas (cabeçalhos, RURI, informações de trnasporte, etc..) ou de informações do OpenSIPS (valores de timers, números de processo (PID), códigos de retorno de função).
Dependendo da informação provida a PV fica presa (relacionada) a um amensagem ou a nada (global), a maior parte das PV's são apenas de leitura, apenas algumas suportam operações de escrita, uma PV pode retornar varios ou apenas um valor dependendo da informação referenciadas (se pode ter valores multiplos ou nao)
PV padrões são apenas de leitura e retornam apenas um valor (se não foi documentado de forma diferente)
- Sequencias de escape são utilizadas para formatar strings, estas não são variaveis mas podem ser formatadas.
Definições
Script Variables
Nominação: **$var(name)**
Dicas:
- Se você quer utilizar uma variavel em uma rota é melhor inicializar ou restar a mesma), de outra forma você poderá ter problemas com valores de rotas anteriores que forão executadas por um mesmo processo.
- Variáveis de script são mais rápidas que AVP's sendo processadas diretamente no endereço de memória.
- O valor de uma variável de script persiste para o processo do OpenSIPS
- Um variável pode ter apenas um valor
- a script value can have only one value.
Exemplos de uso
$var(a) = 2; # sets the value of variable 'a' to integer '2' $var(a) = "2"; # sets the value of variable 'a' to string '2' $var(a) = 3 + (7&(~2)); # arithmetic and bitwise operation $var(a) = "sip:" + $au + "@" + $fd; # compose a value from authentication username and From URI domain # using a script variable for tests if( [ $var(a) & 4 ] ) { xlog("var a has third bit set\n"); }
Definir uma variável para NULL corresponde a iniciar a a mesma com valor '0', variáveis de script não possuem valor NULL.
AVP variables
Nominação: **$avp(name)** ou **$(avp(name)[N])**
Quando utilizado o index 'N' você pode forçar a AVP para retornar um certo valor (valor na posição N), se nenhum index é informado o primeiro valor será o retornado.
Dicas:
- Para ativar AVP's em onreply_route utilize modparam("tm", "onreply_avp_mode", 1)
- Se multiplos valores forem utilizados em uma mesma AVP os valores são indexados em ordem reversa (primeiro inserido é o ultimo da lista)
- AVP's são parte do contexto de transação, desta forma estarão visiveis em todo local que a transação esteja presente.
- O valor de uma AVP pode ser deletado
Exemplo de uso:
Exemplo persistente a transação:
# enable avps in onreply route modparam("tm", "onreply_avp_mode", 1) ... route{ ... $avp(tmp) = $Ts ; # store the current time (at request processing) ... t_onreply("1"); t_relay(); ... } onreply_route[1] { if (t_check_status("200")) { # calculate the setup time $var(setup_time) = $Ts - $avp(tmp); } }
Exemplo com multiplos valores
$avp(17) = "one"; # we have a single value $avp(17) = "two"; # we have two values ("two","one") $avp(17) = "three"; # we have three values ("three","two","one") xlog("accessing values with no index: $avp(17)\n"); # this will print the first value, which is the last added value -> "three" xlog("accessing values with no index: $(avp(17)[2])\n"); # this will print the index 2 value (third one), -> "one" # remove the last value of the avp; if there is only one value, the AVP itself will be destroyed $avp(17) = NULL; # delete all values and destroy the AVP avp_delete("$avp(17)/g"); # delete the value located at a certain index $(avp(17)[1]) = NULL; #overwrite the value at a certain index $(avp(17)[0]) = "zero";
O módulo AVPOPS prove uma série de funções para operar as AVP's (como checagem de valores, extração em diferentes locais, deleção etc..)
Pseudo Variables
Nominação: $name
Dicas:
- as PV podem ser utilizadas como parametros para diferentes funções e serão substituidas com o valor antes da execução da função
- A maior part edas PV's são disponibilizadas pelo core do OpenSIPS porém existem vários módulos que exportas PV's (para tornar algumas informações especificas do módulo disponivel), verifique as documentações dos módulos para saber mais.
Váriaveis pré-definidas pelo core listadas em ordem alfabética.
URI in SIP Request's P-Asserted-Identity header
$ai - referencia a URI no cabeçalho P-Asserted-Identity (veja RFC 3325 para mais detalhes)
Authentication Digest URI
$adu - URI do cabeçalho Authorization ou Proxy-Authorization, esta URI é utilizada quando calculando a resposta do resposta do HTTP Digest (autenticação).
Authentication realm
$ar - referencia (dominio ou ip) no cabeçalho de Authorization ou Proxy-Authorization
Auth username user
$au - parte referente ao nome do usuário no cabeçalho de Authorization ou Proxy-Authorization
Auth username domain
$ad - parte referente ao dominio do usuário no cabeçalho de Authorization ou Proxy-Authorization
Auth nonce
$an - Hash do cebçalho Authorization ou Proxy-Authorization Nota: na documentação fala nounce, não achei tradução para isso (ex de valor: nonce: 526442e200000000b8d49749e4bdd108e58cd246de209a50)
Auth response
$auth.resp - A resposta da autenticação para um cabeçalho Authorization ou Proxy-Authorization
Auth nonce
$auth.nonce - the nonce string from Authorization or Proxy-Authorization header
Auth opaque
$auth.opaque - the opaque string from Authorization or Proxy-Authorization header
Auth algorithm
$auth.alg - A string referente ao algoritimos utilizado para Authorization ou Proxy-Authorization.
Auth QOP
$auth.qop - O valor do parametro qop (quality of protection) do caebaçalho Authorization ou Proxy-Authorization
Auth nonce count (nc)
$auth.nc - the value of nonce count parameter from Authorization or Proxy-Authorization header
Auth whole username
$aU - Nome do usuário no cabeçalho Authorization or Proxy-Authorization
Acc username
$Au - usuário para proposito de accounting , é uma pseudo variavel seletiva (dependente do modulo acc) , se existir ela retorna seu valor ou retorna o valor do campo From em todo caso
Argument options
$argv - Permite acesso a argumentos de linha de comando especificados com o parametro -o
Exemplo:
# for option '-o foo=0' xlog("foo is $argv(foo) \n");
Branch flags
$bf - Exibe a lista de branch flags definidas para a requisição atual
!!!!Branch flags (hexadecimal) %red%(Removed in OpenSIPS 1.9)%%
Branch
$branch - Esta variavel é utilizada para criação de novas branches (pernas) escrevendo as mesmas no valor da SIP URI Exemplos
# creates a new branch $branch = "sip:new@doamin.org"; # print its URI xlog("last added branch has URI $(branch(uri)[-1]) \n");
Branch fields
$branch() - Esta variavel permite acesso de leitura e escrita para todos os campos/atributos de uma branch existente (previamente criada com append_branch()), os campos da branche são:
- uri - a RURI da branch (string)
- duri - a URI e destino da branch (proxy the saida da branch) (sting)
- q - o valor q da branch (inteiro)
- path - a string PATH desta branch (string)
- flags - as flags para esta branch (inteiro)
- socket - o scoket local para ser utilizado para fazer o relay desta branch (string)
A variavel aceita também index $(branch(uri)[1]) para acessar uma branch especifica (multiplas branches podem ser especificadas autalmente), o index inicia em 0 (primeira branch), se o index for negativo ele é considerado o valor n do fim ( index -1 é ultima branch)
Para todas as branches é utilizado o index * - $(branch(uri)[*]).
Exemplo:
# creates the first branch append_branch(); # creates the second branch force_send_socket(udp:192.168.1.10:5060); $du = "sip:192.168.2.10"; append_branch("sip:foo@bar.com","0.5"); # display branches xlog("----- branch 0: $(branch(uri)[0]) , $(branch(q)[0]), $(branch(duri)[0]), $(branch(path)[0]), $(branch(flags)[0]), $(branch(socket)[0]) \n"); xlog("----- branch 1: $(branch(uri)[1]) , $(branch(q)[1]), $(branch(duri)[1]), $(branch(path)[1]), $(branch(flags)[1]), $(branch(socket)[1]) \n"); # do some changes over the branches $branch(uri) = "sip:user@domain.ro"; # set URI for the first branch $(branch(q)[0]) = 1000; # set to 1.00 for the first branch $(branch(socket)[1]) = NULL; # reset the socket of the second branch $branch(duri) = NULL; # reset the destination URI or the first branch
Esta é uma variavel de leitura e escrita (você pode definir valores apartir do script de roteamento)
Call-Id
$ci - Referencia para o valor do cabeçalho call-id
Content-Length
$cl - Referencia para o valor do cabeçalho content-length
CSeq number
$cs - Referencia ao valor do cabeçalho cseq
Contact instance
$ct - referencia a 'contact instance/body' do cabeçalho contact, uma contact instance é o display_name + URI + contact_params, como um cabeçalho de contato pode conter multiplos valores e uma mensagem pode conter vários cabeçalhos, um index é adicionado a $ct neste caso:
- $ct -first primeiro 'contact instance' da mensagem
- $(ct[n]) - 'contact instance' na posição n do inicio da mensagem, iniciando com index 0
- $(ct[-n]) - 'contact instance' na posição n apartir do fim da mensagem (iniciando em -1 (ultimo contato)
Fields of a contact instance
A contact instance possue também campos que podem ser acessados
$ct.fields() - referencia os campos da 'contact instance' (veja abaixo)
Campos suportados são:
- name - display name
- uri - contact uri
- q - parametro q (valor apenas)
- expires - parametro expires (valor apenas)
- methods - parametro metodo (valor apenas)
- received - parametro received (valor appenas)
- params - Todos os parametros (incluindo nomes)
Exemplos:
- $ct.fields(uri) - URI da primeira 'contact instance'
- $(ct.fields(name)[1]) - O display nae da segunda 'contact instance'
Content-Type
$cT - Referencia ao cabeçalho content-type
Domain of destination URI
$dd - Referencia do dominio da destination uri
Esta é uma variável de leitura e escrita
Diversion header URI
$di - Referencia ao Diversion header URI
Diversion "privacy" parameter
$dip - Referencia ao parametro 'privacy' do Diversion header
Diversion "reason" parameter
$dir - Referencia ao parametro 'reason' do Diversion header
Port of destination URI
$dp - Referencia a porta da destination URI
Váriavel de leitura e escrita
Transport protocol of destination URI
$dP - referencia ao protocolo de transporte da destination uri
Destination set
$ds - referencia para a destination set
Destination URI
$du - referencia a destination uri (outbound proxy que deve ser utilizado para enviar a requisição), se a loose_route() retornar TRUE a destination uri é definida de acordo com o primeiro Route header
Esta é uma variável de leitura e escrita
Error class
$err.class - Classe de erro ( atualmente '1' )
Error level
$err.level - Severidade da mensagem
Error info
$err.info - Texto descrevendo o erro
Error reply code
$err.rcode - Reply code recomendado para o erro
Error reply reason
$err.rreason - Reply reason (frase) recomendada para o erro
From URI domain
$fd - Referencia do dominio da URI do cabeçalho 'From'
From display name
$fn - Referencia ao display name do cabeçalho 'From'
Forced socket
$fs - Referencia ao socket (forçado) para envio de mensagens (quando existe) , o formato é proto:ip:port
Esta é uma variável de leitura e escrita
From tag
$ft - Referencia ao parametro tag do cabeçalho 'From'
From URI
$fu - referencia a URI do cabeçalho 'From'
From URI username
$fU - referencia ao username da URI do cabeçalho 'From'
SIP message buffer
$mb - Referencia para o SIP message buffer
Message Flags
$mf - Exibe uma lista com as flags utilizadas na mensagem ou transação para a requisição atual.
SIP message ID
$mi - Referencia ao ID da mensagem SIP
SIP message length
$ml - Referenia ao tamanho da mensagem SIP
Domain in SIP Request's original URI
$od - Referencia do dominio na R-URI original
Port of SIP request's original URI
$op - Referencia a porta da R-URI original
Transport protocol of SIP request original URI
$oP - Referencia do protocolo de transporte da R-URI original
SIP Request's original URI
$ou - Referencia a URI da requisição original
Username in SIP Request's original URI
$oU - Referenciao ao username na requisição original
Route parameter
$param(idx) - Recupera o parametro da rota , o index pode ser um inteiro ou uma pseudo-variavel (index inicia em 1)
Exemplo
route { ... $var(debug) = "DBUG:" route(PRINT_VAR, $var(debug), "param value"); ... }
route[PRINT_VAR] { $var(index) = 2; xlog("$param(1): The parameter value is <$param($var(index))>\n"); }
Domain in SIP Request's P-Preferred-Identity header URI
$pd - Referencia ao dominio na URI do cabeçalho P-Preferred-Identity (veja RFC 3325)
Display Name in SIP Request's P-Preferred-Identity header
$pn - Referencia ao display name no cabeçalho P-Preferred-Identity (veja RFC 3325)
Process id
$pp - Referenciao ao processo id (pid)
Protocol of received message
$pr ou $proto - protocolo da mensagem recebida (UDP, TCP, TLS, SCTP)
User in SIP Request's P-Preferred-Identity header URI
$pU - referencia ao usuário da URI no cabeçalho P-Preferred-Identity (veja RFC 3325)
URI in SIP Request's P-Preferred-Identity header
$pu - Referencia a URI no cabeçalho P-Preferred-Identity (veja RFC 3325)
Domain in SIP Request's URI
$rd - Referencia ao dominio da URI
Esta é uma variável de leitura e escrita
Body of request/reply
$rb - Referencia ao corpo da mensagem recebida
Returned code
$rc - Referencia do código de retorno da ultima função executada
$retcode - mesma coisa que **$rc**
Remote-Party-ID header URI
$re - referencia a URI do cabeçalho Remote-Party-ID
SIP request's method
$rm - Referencia ao método da mensagem atual
SIP request's port
$rp - Referencia a porta da R-URI
Esta é uma váriavel de leitura e escrita.
Transport protocol of SIP request URI
$rP - Referencia ao protocolo de transporte da R-URI
SIP reply's reason
$rr - Referencia a reply's reason
SIP reply's status
$rs - Referencia ao status do reply
Refer-to URI
$rt - Referencia a URI do cabeçalho refer-to
SIP Request's URI
$ru - Referencia a request URI
Esta é uma variável de leitura e escrita
Username in SIP Request's URI
$rU - Referencia ao username da URI da requisição
Esta é uma variável de leitura e escrita
Q value of the SIP Request's URI
$ru_q - Referencia ao valor 'q' da R-URI
Esta é uma variável de leitura e escrita
Received IP address
$Ri - Referencia do IP da interface onde o pacote foi recebido
Received port
$Rp - Referencia da porta onde o pacote foi recebido
Script flags
$sf - Exibe uma lista com as flgs de script da requisição atual
IP source address
$si - IP de origem da mensagem recebida
Source port
$sp - Porta de origem da mensagme recebida
To URI Domain
$td - Referencia ao dominio da URI no cabeçalho 'To'
To display name
$tn - Referencia ao display name no cabeçalho 'To'
To tag
$tt - Referencia ao parametro tag do cabeçalho 'To'
To URI
$tu - Referencia a URI do cabeçalho 'To'
To URI Username
$tU - Referencia ao username da URI do cabeçalho 'To'
Formatted date and time
$time(format) - Retorna a string formatda de acordo com o comando date do UNIX (veja man date)
Branch index
$T_branch_idx - O index (iniciando com 1 para a primeira branche) da branch para qual é executada uma branch_route[], se utilizado fora da branch_route[] o valor será 0, esta variável é exportado pelo módulo TM.
Time Variables
String formatted time
$Tf - Referencia a string formatda para hora (HH:MM:SS)
Current unix time stamp in seconds
$Ts - Referencia ao unix timestamp em segundos
Current microseconds of the current second
$Tsm - Referencia para os microsegundos do segundo atual
Startup unix time stamp
$TS - Referencia ao 'startup unix time stamp'
User agent header
$ua - Referencia ao campo user agent do cabeçalho
SIP Headers
$(hdr(name)[N]) - Representa o conteúdo do cabeçalho N identificado por 'name', se [N] for omitido então o conteúdo do primeiro cabeçalho será exibido, o primeiro cabeçalho é pego quando N=0, para o segundo N=1 e assim por diante, para imprimir o último cabeçalo daquele tipo é possível utilizar o index [-1], nenhum outro valor negativo é suportado, não é permitido espaço em branco antes ou depois de [, {, }, ], quando N='*' , todos os cabeçalhos serão exibidos.
O módulo deve identificar a maior parte dos cabeçalhos compactos (o OpenSIPS reconhece todos atualmente), se não a forma compacta do cabeçalho necessita ser especificada explicitamente, é recomendado usar identificadores especiais para os cabeçalhos (ex: %ua para user agent), se eles estiverem disponiveis pois são mais rapidos.
$(hdrcnt(name)) -- Retorna o numero de cabeçalhos deste tipo existentes, o tipo é defnido por 'name', utiliza as mesmas regras de especificação de nome de cabeçalho como $hdr(name), muitos cabeçalhos (ex: Via, Path, Record-Route) podem aparecer mais de uma vez na mensagem, esta variavel então retorna o numero referente a quantidad ede vezes que o cabeçalho em questão está presente.
Veja que alguns cabeçalhos (ex: Path) pode ter valores com virgulas e aparecerem como uma unica linha, esta variavel conta a quantidade de linhas, e não a quantidade de valores
Para o fragmento de mensagem abaixo, $hdrcnt(Path) terá o valor 2 e $(hdr(Path)[0] terá o valor <a.com> ;
Path: <a.com> Path: <b.com>
Para o fragmento de mensagem abaixo , $hdrcnt(Path) terá o valor 1, e $(hdr(Path)[0] terá o valor <a.com>,<b.com>
Path: <a.com>,<b.com>
Veja que os dois exemplos representam a mesma coisa mas as variaveis possuem valores diferentes
Escape Sequences
Estas sequencias são exportadas e normalmente utilizadas pelo módulo xlog para exibir mensagens em várias cores (foreground ou background) usando sequencias de scape.
Foreground and background colors
$C(xy) - Referencia uma sequencia de scape. 'x' repreenta a core de foreground (cor da fonte) e 'y' representa a cord de background (cor do fundo).
Cores devem ser:
- x : Cor padrão do terminal
- s : Preto
- r : Vermelho
- g : Verde
- y : Amarelo
- b : Azul
- p : Roxo
- c : Ciano
- w : Branco
Examplos:
Alguns exemplos de uso
... route { ... $avp(uuid)="caller_id"; $avp(tmp)= $avp(uuid) + ": " + $fu; xdbg("$(C(bg))avp(tmp)$(C(xx)) [$avp(tmp)] $(C(br))cseq$(C(xx))=[$hdr(cseq)]\n"); ... } ...