Statements

De opensipsbrasil - wiki
Ir para navegação Ir para pesquisar

Nota: Desculpe, não achei nada bom para traduzir Statements



Podemos usar Statements no OpenSIPS para construir nossa logica de roteamento

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;
   }


Voltar