Mudanças entre as edições de "Tipos de rotas"

De opensipsbrasil - wiki
Ir para navegação Ir para pesquisar
(Criou página com 'O '''OpenSIPS''' possue diversos tipos de rota, cada rota é acionada por um certo evento e permite que você process um certo tipo de mensagem (request ou reply) ==route==...')
 
 
(2 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 123: Linha 123:
  
 
Exemplos de uso:
 
Exemplos de uso:
 +
<pre>
 
  route {
 
  route {
 
         seturi("sip:bob@opensips.org");  # first branch
 
         seturi("sip:bob@opensips.org");  # first branch
Linha 157: Linha 158:
 
         }
 
         }
 
  }
 
  }
 
+
</pre>
 
 
 
 
 
 
  
 
==error_route==
 
==error_route==
Linha 193: Linha 191:
 
==local_route==
 
==local_route==
  
The local route is executed automatically when a new SIP request is generated by TM, internally (no UAC side). This is a route intended to be used for message inspection, accounting and for applying last changes on the message headers. Routing and signaling functions are not allowed.  
+
A rota local é executada automaticamente quando uma nova requisição é gerada pelo módulo TM internamente. Esta é uma rota que tem a intenção de ser utilizada para inspeção de mensagens, accounting e para aplicação de últimas alterações em cabeçalhos, funções de sinalização e roteamento não são permitidas.
 
 
'''Triggered by''' : TM generating a brand new request
 
 
 
'''Processing''' : the new request
 
  
'''Type''' : stateful  
+
* Ativado por (triggered by): TM gerando uma nova requisição
 +
* Processamento (processing): uma nova requisição
 +
* Tipo: stateful
 +
* Ação default: enviar o request pra fora
  
'''Default action''' : send the request out
 
  
  
  
[@
 
 
   local_route {
 
   local_route {
 
     if (is_method("INVITE") && $ru=~"@foreign.com") {
 
     if (is_method("INVITE") && $ru=~"@foreign.com") {
Linha 215: Linha 210:
 
     }
 
     }
 
   }
 
   }
@]
 
  
----
 
!!!!startup_route
 
  
The '''startup_route''' is executed only once when OpenSIPS is started and before the processing of SIP messages begins. This is useful if some initiation actions are needed, like loading some data in the cache, to ease up the future processing. Notice that this route, compared to the others is not triggered at the receipt of a message, so the functions that can be called here must not do processing on the message.
 
  
'''Triggered''' : At startup, before the listener processes are started.
+
==startup_route==
  
'''Processing''' : Initializing functions.
+
A '''startup_route''' é executada apenas quando o OpenSIPS é iniciado, antes do processamento de mensagens SIP começar, isso é útil se algumas ações de inicialização são necessárias, como carregar dados no cache para facilitar o uso para processamento no futura, veja que esta rota diferente das demais não é ativada pelo recebimento de uma mensagem, então a função pode ser utilizada aqui mas não fará o processamento de mensagem.
  
 +
* Ativado por (triggered by): Inicialização do sistema, antes dos listeners serem iniciado
 +
* Processando (processing): Funções de inicialização
  
[@
+
 
 +
 
 +
Exemplo de uso:
 
   startup_route {
 
   startup_route {
 
     avp_db_query("select gwlist where ruleid==1",$avp(i:100));
 
     avp_db_query("select gwlist where ruleid==1",$avp(i:100));
 
     cache_store("local", "rule1", "$avp(i:100)");
 
     cache_store("local", "rule1", "$avp(i:100)");
 
   }
 
   }
@]
 
  
----
 
!!!!timer_route
 
  
The '''timer_route''' is as the name suggests, a route executed periodically at a configured interval of time specified next to the name(in seconds). The same as the startup_route, this route does not process a message. You can defined more timer routes.
+
==timer_route==
  
 +
As '''timer_route''' são como o nome sugere, uma rota que é executada periódicamente num intervalo de tempo especificado (em segundos), assim como a '''startup_route''' ésta rota não processa mensagens, você pode ter mais de uma 'timer_route' definida.
  
'''Triggered by''' : The time keeper.
+
* Ativada por (triggered by): ativado pelo time keeper
 +
* Processand (processing): Funções que atualizam ações
  
'''Processing''' : Functions that do refresh actions.
 
  
 
+
Exemplo e uso:
[@
 
 
   timer_route[gw_update, 300] {
 
   timer_route[gw_update, 300] {
 
     avp_db_query("select gwlist where ruleid==1",$avp(i:100));
 
     avp_db_query("select gwlist where ruleid==1",$avp(i:100));
 
     $shv(i:100) =$avp(i:100);
 
     $shv(i:100) =$avp(i:100);
 
   }
 
   }
@]
 
  
----
 
!!!! event_route
 
The '''event_route''' is used by the OpenSIPS Event Interface to execute script code when an event is triggered. The name of the route is the event that has to be handled by that route.
 
  
'''Triggered by''' : the [[http://www.opensips.org/html/docs/modules/devel/event_route | event_route ]] module when an event raised by the OpenSIPS Event Interface
 
  
'''Processing''' : the event triggered
+
==event_route==
  
'''Type''' : stateless (recommended)
+
A '''event_route''' é utilizada pela interface de eventos do OpenSIPS para executar uma função do script quando um evento é acionado, o nome da rota é o nome do evento que a mesma deve manipular.
  
'''Default action''' : no script code is executed when the event is raised.
+
* Ativado por (triggered by): Módulo [[modulo_event_route|event route]] quando um evento acontece
 +
* Processando (processing): o evento ativado
 +
* Tipo (type): stateless (recomendado)
 +
* Ação Default: nenhum script é executado quando acontece um evento
  
[@
+
Exemplo de uso:
 
   event_route[E_PIKE_BLOCKED] {
 
   event_route[E_PIKE_BLOCKED] {
 
     xlog("The E_PIKE_BLOCKED event was raised\n");
 
     xlog("The E_PIKE_BLOCKED event was raised\n");
 
   }
 
   }
@]
 
  
----
 
  
[[#comment1]](:nl:)>>messagehead<<
+
[[OpenSIPS_1.9_Manual|Voltar]]
!!!!![[~Stomaz]]  &mdash;  [-22 November 2012, 19:13-] 
 
>>messageitem<<
 
Very good!!
 
Is very util for me! Im starting in OpenSipS.
 
Tanks!!
 
>><<
 

Edição atual tal como às 23h29min de 6 de outubro de 2013

O OpenSIPS possue diversos tipos de rota, cada rota é acionada por um certo evento e permite que você process um certo tipo de mensagem (request ou reply)


route

O Bloco de roteamento de requisições (Request routing block) contém algumas ações a serem tomadas em uma requisição SIP

  • Ativado por (triggered by): recebendo uma requisição da rede
  • Processamento (processing): a requisição que gera a ativação
  • Tipo (type): inicialmente stateless, mas pode ser forçada para tornar-se stateful utilizando as funções do TM
  • Ação padrão (default action): Se a requisição ainda não foi encaminhada ou respondida a rota irá simplesmente discartar a requisição no fim

O bloco de roteamento principal é identificado por 'route{...}' ou 'route[0]{....}' e é executado por cada requisição.

A ação implicita após a execução do bloco principal é finalizar a requisição, para enviar uma resposta ou encaminhar a requisição as ações devem ser chamadas dentro do bloco de roteamento


Exemplo de uso:

   route {
        if(is_method("OPTIONS")) {
           # send reply for each options request
           sl_send_reply("200", "ok");
           exit();
        }
        route(1);
   }
   route[1] {
        # forward according to uri
        forward();
   }

Veja que se a 'route(X)' é chamada de uma 'branch_route[Y]' então a 'rota[X]' irá processar cada perna (lado) separadamente invés de todas as partes juntas como ocorre na rota principal (main route)


branch_route

O bloco de roteamento branch contém algumas ações que são processadas para cada perna (branch) da requisição

  • Ativado por (triggered by): preparação de uma nova perna (da requisição), os lados (cada perna) está devidamente formado mas ainda não enviado.
  • Processando (processing): a requisição sip (com as particularidade de cada perna como RURI e branch flags)
  • Tipo (type): stateful
  • Ação padrão (default action): se a perna não foi derrubada (via drop) a perna será automaticamente enviada

Este bloco é executado apenas pelo módulo TM após este ser definido via t_on_branch('nome ou numero da rota');


Exemplo de uso:

   route {
       lookup("location");
       t_on_branch("1");
       if(!t_relay()) {
           sl_send_reply("500", "relaying failed");
       }
   }
   branch_route[1] {
       if(uri=~"10\.10\.10].10") {
           # discard branches that go to 10.10.10.10
           drop();
       }
   }



failure_route

Bloco para roteamento de transações com falha, este contém uma série de ações a serem tomadas para cada transação que recebe apenas repostas negativas (>=300) para todas as pernas

  • Ativado por (triggered by): recebimento ou geração (nterno neste caso) de um reply negativo para completar a tranasação (todas as pernas são terminadas com replies negativos)
  • Processando (processing): a requisição horiginal (que foi enviada)
  • Tipo (type): stateful
  • Ação default: Se nao for gerada uma nova perna ou nenhum reply é forçado por padrão o reply será enviado de volta para o UAC


A 'failure_route' é executada apenas pelo módulo TM após este ser armado através da função t_on_failure("nome ou numero da rota").


Veja que a 'failure_route' é processada na requisição que iniciou a transação, não no reply.


Exemplo de uso:

   route {
       lookup("location");
       t_on_failure("1");
       if(!t_relay()) {
           sl_send_reply("500", "relaying failed");
       }
   }
   failure_route[1] {
       if(is_method("INVITE")) {
            # call failed - relay to voice mail
            t_relay("udp:voicemail.server.com:5060");
       }
   }


onreply_route

Bloco de roteamento de resposta (reply), este contém algumas ações executadas para os replies.

  • Ativado por (triggered by): receber um reply da rede
  • Processando (processing): o reply recebido
  • tipo (type): stateful (se pertencer a uma transação) ou stateless (se estiver no reply global)
  • Ação padrão (default action): Se o reply não é descartado (apenas replies temporarios podem) então será injetado e processado pela engine de transação


Existem alguns tipos de rotas onreply:

  • global: recebe qualquer reply recebido pelo OpenSIPS e não precisa de nenhuma definição especifica , apenas 'onreply_route{...}' ou 'onreply_route[0]{...}' é suficiente
  • por request/transação: manipula todos os replies que pertençam a uma certa transação e precisa ser definida durante o request (via 't_on_reply()' , no script deve ser criada como 'onreply_route[N] {...}.
  • por perna (branch): manipula apenas os replies que pertençam a uma certa perna (branch) da transação, precisa ser definida 't_on_reply()' durante a requisição, mas em uma BRANCH ROUTE, para processar quando uma perna é processada , o nome deve ser 'onreply_route[N]{....}'

Alguns blocos 'onreply_route' podem ser executados pelo módulo TM para alguns replies especiais, para isso a 'onreply_route' deve ser definida para a requisição cuja resposta deve ser processada dentro desta, através do t_on_reply("nome ou numero da rota").


Exemplos de uso:

 route {
        seturi("sip:bob@opensips.org");  # first branch
        append_branch("sip:alice@opensips.org"); # second branch

        t_on_reply("global"); # the "global" reply route
                              # is set the whole transaction
        t_on_branch("1");

        t_relay();
 }

 branch_route[1] {
        if ($rU=="alice")
                t_on_reply("alice"); # the "alice" reply route
                                      # is set only for second branch
 }

 onreply_route {
        xlog("OpenSIPS received a reply from $si\n");
 }


 onreply_route[alice] {
        xlog("received reply on the branch from alice\n");
 }

 onreply_route[global] {
        if (t_check_status("1[0-9][0-9]")) {
                setflag(1);
                log("provisional reply received\n");
                if (t_check_status("183"))
                        drop;
        }
 }

error_route

A error route é executada automaticamente quando um erro de execução acontece no processamento de uma requisição, isso permite ao administrador decidir oque fazer em caso de erro, abaixo as ações.

  • Acionado por (triggered by): Erro na rota
  • Porcessando (processing): uma requisição que falhou
  • Tipo (type): stateless (recomendado)
  • Ação Default (default action): descarta a requisição

Na error_route as seguintes pseudo-variaveis estão disponiveis para acesso dos detalhes:

  • $(err.class) - Classe de erro ( Atualmente '1' para tratamento de erro)
  • $(err.level) - Nivel de severidade do erro
  • $(err.info) - Texto descrevendo o erro
  • $(err.rcode) - Reply recomendado para o erro
  • $(err.rreason) - Frase com razão do erro recomendada para o reply

Exemplos de uso:

 error_route {
    xlog("--- error route class=$(err.class) level=$(err.level)
           info=$(err.info) rcode=$(err.rcode) rreason=$(err.rreason) ---\n");
    xlog("--- error from [$si:$sp]\n+++++\n$mb\n++++\n");
    sl_send_reply("$err.rcode", "$err.rreason");
    exit;
 }



local_route

A rota local é executada automaticamente quando uma nova requisição é gerada pelo módulo TM internamente. Esta é uma rota que tem a intenção de ser utilizada para inspeção de mensagens, accounting e para aplicação de últimas alterações em cabeçalhos, funções de sinalização e roteamento não são permitidas.

  • Ativado por (triggered by): TM gerando uma nova requisição
  • Processamento (processing): uma nova requisição
  • Tipo: stateful
  • Ação default: enviar o request pra fora



 local_route {
    if (is_method("INVITE") && $ru=~"@foreign.com") {
       append_hf("P-hint: foreign request\r\n");
       exit;
    }
    if (is_method("BYE") ) {
       acc_log_request("internally generated BYE");
    }
 }


startup_route

A startup_route é executada apenas quando o OpenSIPS é iniciado, antes do processamento de mensagens SIP começar, isso é útil se algumas ações de inicialização são necessárias, como carregar dados no cache para facilitar o uso para processamento no futura, veja que esta rota diferente das demais não é ativada pelo recebimento de uma mensagem, então a função pode ser utilizada aqui mas não fará o processamento de mensagem.

  • Ativado por (triggered by): Inicialização do sistema, antes dos listeners serem iniciado
  • Processando (processing): Funções de inicialização


Exemplo de uso:

 startup_route {
   avp_db_query("select gwlist where ruleid==1",$avp(i:100));
   cache_store("local", "rule1", "$avp(i:100)");
 }


timer_route

As timer_route são como o nome sugere, uma rota que é executada periódicamente num intervalo de tempo especificado (em segundos), assim como a startup_route ésta rota não processa mensagens, você pode ter mais de uma 'timer_route' definida.

  • Ativada por (triggered by): ativado pelo time keeper
  • Processand (processing): Funções que atualizam ações


Exemplo e uso:

 timer_route[gw_update, 300] {
   avp_db_query("select gwlist where ruleid==1",$avp(i:100));
   $shv(i:100) =$avp(i:100);
 }


event_route

A event_route é utilizada pela interface de eventos do OpenSIPS para executar uma função do script quando um evento é acionado, o nome da rota é o nome do evento que a mesma deve manipular.

  • Ativado por (triggered by): Módulo event route quando um evento acontece
  • Processando (processing): o evento ativado
  • Tipo (type): stateless (recomendado)
  • Ação Default: nenhum script é executado quando acontece um evento

Exemplo de uso:

 event_route[E_PIKE_BLOCKED] {
   xlog("The E_PIKE_BLOCKED event was raised\n");
 }


Voltar