Statements
Nota: Desculpe, não achei nada bom para traduzier Statements
Podemos usar Statements no OpenSIPS para construir nossa logica de roteamento
(:toc-float Table of Content:)
if
IF-ELSE statement
Prototype:
if (expr) { actions; } else { actions; }
A 'expr' deve ser uma expressão lógica valida.
Os operadores lógicos que podemos utilizar na expressão lógica:
- == - igual
- != - diferente
- =~ - expressão regular (e.g. $rU =~ '^1800*' is "$rU begins with 1800" )
- !~ - expressão regular (negação)
- > - maior
- >= - maior ou igual
- < - menor
- <= - menor or igual
- && - AND (e) lógico
- || - OR (ou) lógico
- ! - NOT (não) lógico
- [ ... ] - operadora de teste - dentro pode ter qualquer operação aritmetica
Exemplo de uso:
if ( is_method("INVITE") && $rp==5060 ) { log("this sip message is an invite\n"); } else { log("this sip message is not an invite\n"); }
switch
SWITCH statement - pode ser utilizado para testar o valor de uma pseudo-variável.
NOTA IMPORTANTE: a função 'break' pode ser utilizada apenas para marcar o fim de um 'case' ( assim como no shell script ), se você tentar utilizar o 'break' fora de um 'case' o script retornará erro, neste caso você deve usar 'return'.
Exemplo de uso:
route { route(my_logic); switch($retcode) { case -1: log("process INVITE requests here\n"); break; case 1: log("process REGISTER requests here\n"); break; case 2: case 3: log("process SUBSCRIBE and NOTIFY requests here\n"); break; default: log("process other requests here\n"); }
# switch of R-URI username switch($rU) { case "101": log("destination number is 101\n"); break; case "102": log("destination number is 102\n"); break; case "103": case "104": log("destination number is 103 or 104\n"); break; default: log("unknown destination number\n"); } }
route[my_logic]{ if(is_method("INVITE")) { return(-1); }; if(is_method("REGISTER")) return(1); } if(is_method("SUBSCRIBE")) return(2); } if(is_method("NOTIFY")) return(3); } return(-2); }
AVISO Tenha cuidado ao utilizar 'return' , 'return(0)' irá encerrar e execução do script
while
while statement
Exemplo de uso:
$var(i) = 0; while($var(i) < 10) { xlog("counter: $var(i)\n"); $var(i) = $var(i) + 1; }