Formato do script
O script de configuração do OpenSIPs possui três partes logicas:
- Parametros globais
- Sessão de módulos
- lógica de roteamento
Índice
Parametros Globais
Normalmente é a primeira parte do script, neste você declara os Parâmetros Globais - estes parametros ou parametros de core afetão o core do OpenSIPS e possivelmente os módulos.
É possível configurar os endereços para aceitar requisição, protocolos de transporte disponiveis, forking (número de processos) , log's e outras coisas que são providas por estes parametros.
Exemplo:
disable_tcp = yes listen = udp:192.168.2.10:5060 listen = udp:192.168.2.10:5070 fork = yes children = 4 log_stderror = no
Sessão de módulos
Em relação aos módulos do OpenSIPS, os módulos que são para serem carregados (nenhum módulo é carregado por default) são especificados utilizando a diretiva loadmoule'. Os módulos devem ser especificados pelo nome e opcionalmente o caminho (para o arquivo .so ). Se não é informado o caminho (e apenas o nome do módulo) , o caminho padrão será assumido para localização e carregamento destes módulos (o caminho padrão é /usr/lib/opensips/modules se outro não foi configurado durante a compilação , ai neste caso deve ser utilizado o caminho completo , ou você pode definir de forma global (para todos os módulos) através da diretiva mpath nos parametros globais.
Uma vez que os módulos são carregados, os paramaetros para os módulos devem ser definidos utilizando a diretiva modparam , para verificar os parametros de cada módulo e os tipos de valores você pode verificar na documentação do módulo em especifico na sessão Parametros.
Exemplos:
loadmodule "modules/mi_datagram/mi_datagram.so" modparam("mi_datagram", "socket_name", "udp:127.0.0.1:4343") modparam("mi_datagram", "children_count", 3)
ou
mpath="/usr/local/opensips_proxy/lib/modules" loadmodule "mi_datagram.so" modparam("mi_datagram", "socket_name", "udp:127.0.0.1:4343") modparam("mi_datagram", "children_count", 3) loadmodule "mi_fifo.so" modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")
Lógica de Roteamento
A lógica de roteamente é atualmente a soma das rotas que contem no arquivo para o roteamento do trafego SIP. A descrição de oque o OpenSIPS deve fazer relacionado ao trafego SIP é feita atraves destas rotas.
Existem diferentes tipos de rota:
top routes
Rotas que são executadas diretamente pelo OpenSIPS quando alguns eventos acontecem (Como requisições recebidas, um SIP reply recebido ou uma falha de transação entre outras).
sub routes
Rotas que são executadas/utilizadas por outras rotas do script
Quais são as top routes, quando elas são chamadas , que tipo de mensagem SIP elas manipulam, que operações SIP são permitidas e outras estão documentadas em Tipos de Rotas.
As sub-routes possuem nomes e devem ser chamadas por outras rotas ( top ou sub ) por seus nomes. As sub-routes podem ter parametros (quando chamadas) ou retornarem um código numero (evite retornar 0 pois isso irá terminar o script todo), as sub-routes são similares a funções ou procedures de qualquer linguagem de programação.
Veja em Funções do Core a descrição da diretiva route para mais detalhes
Exemplo:
route { # top-route cahamada pela requisição que chegou if ( route(src_ip_is_gw) ) { xlog("request $rm comes from GW\n"); } } onreply_route { # top-route chamada pelo reply da requisição if ( route(src_ip_is_gw) ) { xlog("reply $rc comes from GW\n"); } } route[src_ip_is_gw] { # sub-route chamadas pelas top-route anteriores if ($si=='11.22.33.44' || $si=='11.22.33.45') return 1; return -1; }