Mudanças entre as edições de "Statements"
(→while) |
|||
| Linha 3: | Linha 3: | ||
Podemos usar Statements no '''OpenSIPS''' para construir nossa logica de roteamento | Podemos usar Statements no '''OpenSIPS''' para construir nossa logica de roteamento | ||
| − | + | (:toc-float Table of Content:) | |
==if== | ==if== | ||
Edição das 00h06min de 7 de outubro de 2013
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;
}