<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>http://opensips.com.br/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Eluizbr</id>
	<title>opensipsbrasil - wiki - Contribuições do(a) usuário(a) [pt-br]</title>
	<link rel="self" type="application/atom+xml" href="http://opensips.com.br/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Eluizbr"/>
	<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Especial:Contribui%C3%A7%C3%B5es/Eluizbr"/>
	<updated>2026-04-30T05:45:21Z</updated>
	<subtitle>Contribuições do(a) usuário(a)</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Opensips_com_RASPBERRY_PI&amp;diff=1421</id>
		<title>Opensips com RASPBERRY PI</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Opensips_com_RASPBERRY_PI&amp;diff=1421"/>
		<updated>2013-09-10T21:06:43Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=white&amp;gt; NÃO SIGA ESTE DOCUMENTO. O MESMO SE ENCONTRA EM DESEVOLVIMENTO&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==O que é o Raspberry PI?==&lt;br /&gt;
&lt;br /&gt;
A Raspberry Pi Foundation criou o computador de código aberto como uma forma incentivar escolas e instituições de ensino a criar o hábito de ensinar programação e tecnologia aos estudantes. O pequeno suporta distribuições Linux populares, como Fedora e RISC OS. &lt;br /&gt;
Demonstrações ao longo do desenvolvimento do modelo apresentaram o Raspberry Pi rodando Quake III, e benchmarks mostraram que o computador é mais rápido que o chipset Nvidia Tegra 2. Além disso, ele oferece o dobro da capacidade de processamento gráfico do iPhone 4S.&lt;br /&gt;
O Raspberry Pi é calçado por um processador de clock estimado em 700 MHz, lento se comparado aos mais recentes smartphones do mercado. O minicomputador ainda oferece 512 MB de memória RAM, duas portas USB (no Model B), saídas RCA e HDMI, slot para dispositivos de armazenamento flash, porta Ethernet (Model B) e alimentação por interface microUSB.&lt;br /&gt;
&lt;br /&gt;
Neste link [http://www.raspberrypi.org/, você terá todas as informações sobre o Raspberry PI.&lt;br /&gt;
&lt;br /&gt;
==O que faremos?==&lt;br /&gt;
&lt;br /&gt;
Iremos instalar a distribuição RASPBIAN ( http://www.raspbian.org/ ), que é baseada na ultima versão do Debian Linux em conjunto com a versão 1.9.0 do OpenSIPS. Iremos mostra como um hardware com 700Mhz e 512 de Memoria, consegue fazer as vezes de SIP Proxy para cerca de 500 Ligacões. Tudo isso com apenas 50USD, isso mesmo, 50USD é o custo medio de um Raspberry PI.&lt;br /&gt;
&lt;br /&gt;
==O que iremos precisar?==&lt;br /&gt;
&lt;br /&gt;
* Uma unidade do Raspbarry PI MODEL B&lt;br /&gt;
* 1 Teclado&lt;br /&gt;
* Conexção com internet via ETHERNET&lt;br /&gt;
* Um cartão SD CLASSE 10 com no minimo 8GB, mas recomendo 32GB ( Funciona com cartões classe 4/6/8/10 )&lt;br /&gt;
* Conhecimento em shell Linux&lt;br /&gt;
&lt;br /&gt;
==Baixando o Raspbian==&lt;br /&gt;
Atravez deste link http://downloads.raspberrypi.org/raspbian_latest, você pode baixar a ultima versão do Raspbian.&lt;br /&gt;
&lt;br /&gt;
===Instalado o Raspbian===&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Opensips_com_RASPBERRY_PI&amp;diff=1420</id>
		<title>Opensips com RASPBERRY PI</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Opensips_com_RASPBERRY_PI&amp;diff=1420"/>
		<updated>2013-09-10T21:04:31Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: /* O que iremos precisar? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==O que é o Raspberry PI?==&lt;br /&gt;
&lt;br /&gt;
A Raspberry Pi Foundation criou o computador de código aberto como uma forma incentivar escolas e instituições de ensino a criar o hábito de ensinar programação e tecnologia aos estudantes. O pequeno suporta distribuições Linux populares, como Fedora e RISC OS. &lt;br /&gt;
Demonstrações ao longo do desenvolvimento do modelo apresentaram o Raspberry Pi rodando Quake III, e benchmarks mostraram que o computador é mais rápido que o chipset Nvidia Tegra 2. Além disso, ele oferece o dobro da capacidade de processamento gráfico do iPhone 4S.&lt;br /&gt;
O Raspberry Pi é calçado por um processador de clock estimado em 700 MHz, lento se comparado aos mais recentes smartphones do mercado. O minicomputador ainda oferece 512 MB de memória RAM, duas portas USB (no Model B), saídas RCA e HDMI, slot para dispositivos de armazenamento flash, porta Ethernet (Model B) e alimentação por interface microUSB.&lt;br /&gt;
&lt;br /&gt;
Neste link [http://www.raspberrypi.org/, você terá todas as informações sobre o Raspberry PI.&lt;br /&gt;
&lt;br /&gt;
==O que faremos?==&lt;br /&gt;
&lt;br /&gt;
Iremos instalar a distribuição RASPBIAN ( http://www.raspbian.org/ ), que é baseada na ultima versão do Debian Linux em conjunto com a versão 1.9.0 do OpenSIPS. Iremos mostra como um hardware com 700Mhz e 512 de Memoria, consegue fazer as vezes de SIP Proxy para cerca de 500 Ligacões. Tudo isso com apenas 50USD, isso mesmo, 50USD é o custo medio de um Raspberry PI.&lt;br /&gt;
&lt;br /&gt;
==O que iremos precisar?==&lt;br /&gt;
&lt;br /&gt;
* Uma unidade do Raspbarry PI MODEL B&lt;br /&gt;
* 1 Teclado&lt;br /&gt;
* Conexção com internet via ETHERNET&lt;br /&gt;
* Um cartão SD CLASSE 10 com no minimo 8GB, mas recomendo 32GB ( Funciona com cartões classe 4/6/8/10 )&lt;br /&gt;
* Conhecimento em shell Linux&lt;br /&gt;
&lt;br /&gt;
==Baixando o Raspbian==&lt;br /&gt;
Atravez deste link http://downloads.raspberrypi.org/raspbian_latest, você pode baixar a ultima versão do Raspbian.&lt;br /&gt;
&lt;br /&gt;
===Instalado o Raspbian===&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Opensips_com_RASPBERRY_PI&amp;diff=1419</id>
		<title>Opensips com RASPBERRY PI</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Opensips_com_RASPBERRY_PI&amp;diff=1419"/>
		<updated>2013-09-10T21:02:43Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==O que é o Raspberry PI?==&lt;br /&gt;
&lt;br /&gt;
A Raspberry Pi Foundation criou o computador de código aberto como uma forma incentivar escolas e instituições de ensino a criar o hábito de ensinar programação e tecnologia aos estudantes. O pequeno suporta distribuições Linux populares, como Fedora e RISC OS. &lt;br /&gt;
Demonstrações ao longo do desenvolvimento do modelo apresentaram o Raspberry Pi rodando Quake III, e benchmarks mostraram que o computador é mais rápido que o chipset Nvidia Tegra 2. Além disso, ele oferece o dobro da capacidade de processamento gráfico do iPhone 4S.&lt;br /&gt;
O Raspberry Pi é calçado por um processador de clock estimado em 700 MHz, lento se comparado aos mais recentes smartphones do mercado. O minicomputador ainda oferece 512 MB de memória RAM, duas portas USB (no Model B), saídas RCA e HDMI, slot para dispositivos de armazenamento flash, porta Ethernet (Model B) e alimentação por interface microUSB.&lt;br /&gt;
&lt;br /&gt;
Neste link [http://www.raspberrypi.org/, você terá todas as informações sobre o Raspberry PI.&lt;br /&gt;
&lt;br /&gt;
==O que faremos?==&lt;br /&gt;
&lt;br /&gt;
Iremos instalar a distribuição RASPBIAN ( http://www.raspbian.org/ ), que é baseada na ultima versão do Debian Linux em conjunto com a versão 1.9.0 do OpenSIPS. Iremos mostra como um hardware com 700Mhz e 512 de Memoria, consegue fazer as vezes de SIP Proxy para cerca de 500 Ligacões. Tudo isso com apenas 50USD, isso mesmo, 50USD é o custo medio de um Raspberry PI.&lt;br /&gt;
&lt;br /&gt;
==O que iremos precisar?==&lt;br /&gt;
&lt;br /&gt;
* Uma unidade do Raspbarry PI MODEL B&lt;br /&gt;
* 1 Teclado&lt;br /&gt;
* Conexção com internet via ETHERNET&lt;br /&gt;
* Um cartão SD CLASSE 10 ( Funciona com cartões classe 4/6/8/10 )&lt;br /&gt;
* Conhecimento em shell Linux&lt;br /&gt;
&lt;br /&gt;
==Baixando o Raspbian==&lt;br /&gt;
Atravez deste link http://downloads.raspberrypi.org/raspbian_latest, você pode baixar a ultima versão do Raspbian.&lt;br /&gt;
&lt;br /&gt;
===Instalado o Raspbian===&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Opensips_com_RASPBERRY_PI&amp;diff=1418</id>
		<title>Opensips com RASPBERRY PI</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Opensips_com_RASPBERRY_PI&amp;diff=1418"/>
		<updated>2013-09-10T21:02:03Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: /* Baixando o Raspbian */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==O que é o Raspberry PI?==&lt;br /&gt;
&lt;br /&gt;
A Raspberry Pi Foundation criou o computador de código aberto como uma forma incentivar escolas e instituições de ensino a criar o hábito de ensinar programação e tecnologia aos estudantes. O pequeno suporta distribuições Linux populares, como Fedora e RISC OS. &lt;br /&gt;
Demonstrações ao longo do desenvolvimento do modelo apresentaram o Raspberry Pi rodando Quake III, e benchmarks mostraram que o computador é mais rápido que o chipset Nvidia Tegra 2. Além disso, ele oferece o dobro da capacidade de processamento gráfico do iPhone 4S.&lt;br /&gt;
O Raspberry Pi é calçado por um processador de clock estimado em 700 MHz, lento se comparado aos mais recentes smartphones do mercado. O minicomputador ainda oferece 512 MB de memória RAM, duas portas USB (no Model B), saídas RCA e HDMI, slot para dispositivos de armazenamento flash, porta Ethernet (Model B) e alimentação por interface microUSB.&lt;br /&gt;
&lt;br /&gt;
Neste link [http://www.raspberrypi.org/, você terá todas as informações sobre o Raspberry PI.&lt;br /&gt;
&lt;br /&gt;
==O que faremos?==&lt;br /&gt;
&lt;br /&gt;
Iremos instalar a distribuição RASPBIAN ( http://www.raspbian.org/ ), que é baseada na ultima versão do Debian Linux em conjunto com a versão 1.9.0 do OpenSIPS. Iremos mostra como um hardware com 700Mhz e 512 de Memoria, consegue fazer as vezes de SIP Proxy para cerca de 500 Ligacões. Tudo isso com apenas 50USD, isso mesmo, 50USD é o custo medio de um Raspberry PI.&lt;br /&gt;
&lt;br /&gt;
==O que iremos precisar?==&lt;br /&gt;
&lt;br /&gt;
* Uma unidade do Raspbarry PI MODEL B&lt;br /&gt;
* 1 Teclado&lt;br /&gt;
* Conexção com internet via ETHERNET&lt;br /&gt;
* Um cartão SD CLASSE 10 ( Funciona com cartões classe 4/6/8/10 )&lt;br /&gt;
* Conhecimento em shell Linux&lt;br /&gt;
&lt;br /&gt;
==Baixando o Raspbian==&lt;br /&gt;
Atravez deste link http://downloads.raspberrypi.org/raspbian_latest, você pode baixar a ultima versão do Raspbian.&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Opensips_com_RASPBERRY_PI&amp;diff=1417</id>
		<title>Opensips com RASPBERRY PI</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Opensips_com_RASPBERRY_PI&amp;diff=1417"/>
		<updated>2013-09-10T21:01:52Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==O que é o Raspberry PI?==&lt;br /&gt;
&lt;br /&gt;
A Raspberry Pi Foundation criou o computador de código aberto como uma forma incentivar escolas e instituições de ensino a criar o hábito de ensinar programação e tecnologia aos estudantes. O pequeno suporta distribuições Linux populares, como Fedora e RISC OS. &lt;br /&gt;
Demonstrações ao longo do desenvolvimento do modelo apresentaram o Raspberry Pi rodando Quake III, e benchmarks mostraram que o computador é mais rápido que o chipset Nvidia Tegra 2. Além disso, ele oferece o dobro da capacidade de processamento gráfico do iPhone 4S.&lt;br /&gt;
O Raspberry Pi é calçado por um processador de clock estimado em 700 MHz, lento se comparado aos mais recentes smartphones do mercado. O minicomputador ainda oferece 512 MB de memória RAM, duas portas USB (no Model B), saídas RCA e HDMI, slot para dispositivos de armazenamento flash, porta Ethernet (Model B) e alimentação por interface microUSB.&lt;br /&gt;
&lt;br /&gt;
Neste link [http://www.raspberrypi.org/, você terá todas as informações sobre o Raspberry PI.&lt;br /&gt;
&lt;br /&gt;
==O que faremos?==&lt;br /&gt;
&lt;br /&gt;
Iremos instalar a distribuição RASPBIAN ( http://www.raspbian.org/ ), que é baseada na ultima versão do Debian Linux em conjunto com a versão 1.9.0 do OpenSIPS. Iremos mostra como um hardware com 700Mhz e 512 de Memoria, consegue fazer as vezes de SIP Proxy para cerca de 500 Ligacões. Tudo isso com apenas 50USD, isso mesmo, 50USD é o custo medio de um Raspberry PI.&lt;br /&gt;
&lt;br /&gt;
==O que iremos precisar?==&lt;br /&gt;
&lt;br /&gt;
* Uma unidade do Raspbarry PI MODEL B&lt;br /&gt;
* 1 Teclado&lt;br /&gt;
* Conexção com internet via ETHERNET&lt;br /&gt;
* Um cartão SD CLASSE 10 ( Funciona com cartões classe 4/6/8/10 )&lt;br /&gt;
* Conhecimento em shell Linux&lt;br /&gt;
&lt;br /&gt;
==Baixando o Raspbian==&lt;br /&gt;
Atravez deste link http://downloads.raspberrypi.org/raspbian_latest,você pode baixar a ultima versão do Raspbian.&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Opensips_com_RASPBERRY_PI&amp;diff=1416</id>
		<title>Opensips com RASPBERRY PI</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Opensips_com_RASPBERRY_PI&amp;diff=1416"/>
		<updated>2013-09-10T21:00:51Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==O que é o Raspberry PI?==&lt;br /&gt;
&lt;br /&gt;
A Raspberry Pi Foundation criou o computador de código aberto como uma forma incentivar escolas e instituições de ensino a criar o hábito de ensinar programação e tecnologia aos estudantes. O pequeno suporta distribuições Linux populares, como Fedora e RISC OS. &lt;br /&gt;
Demonstrações ao longo do desenvolvimento do modelo apresentaram o Raspberry Pi rodando Quake III, e benchmarks mostraram que o computador é mais rápido que o chipset Nvidia Tegra 2. Além disso, ele oferece o dobro da capacidade de processamento gráfico do iPhone 4S.&lt;br /&gt;
O Raspberry Pi é calçado por um processador de clock estimado em 700 MHz, lento se comparado aos mais recentes smartphones do mercado. O minicomputador ainda oferece 512 MB de memória RAM, duas portas USB (no Model B), saídas RCA e HDMI, slot para dispositivos de armazenamento flash, porta Ethernet (Model B) e alimentação por interface microUSB.&lt;br /&gt;
&lt;br /&gt;
Neste link [http://www.raspberrypi.org/, você terá todas as informações sobre o Raspberry PI.&lt;br /&gt;
&lt;br /&gt;
==O que faremos?==&lt;br /&gt;
&lt;br /&gt;
Iremos instalar a distribuição RASPBIAN ( http://www.raspbian.org/ ), que é baseada na ultima versão do Debian Linux em conjunto com a versão 1.9.0 do OpenSIPS. Iremos mostra como um hardware com 700Mhz e 512 de Memoria, consegue fazer as vezes de SIP Proxy para cerca de 500 Ligacões. Tudo isso com apenas 50USD, isso mesmo, 50USD é o custo medio de um Raspberry PI.&lt;br /&gt;
&lt;br /&gt;
==O que iremos precisar?==&lt;br /&gt;
&lt;br /&gt;
* Uma unidade do Raspbarry PI MODEL B&lt;br /&gt;
* 1 Teclado&lt;br /&gt;
* Conexção com internet via ETHERNET&lt;br /&gt;
* Um cartão SD CLASSE 10 ( Funciona com cartões classe 4/6/8/10 )&lt;br /&gt;
* Conhecimento em shell Linux&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Opensips_com_RASPBERRY_PI&amp;diff=1415</id>
		<title>Opensips com RASPBERRY PI</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Opensips_com_RASPBERRY_PI&amp;diff=1415"/>
		<updated>2013-09-10T20:59:05Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===O que é o Raspberry PI?===&lt;br /&gt;
&lt;br /&gt;
A Raspberry Pi Foundation criou o computador de código aberto como uma forma incentivar escolas e instituições de ensino a criar o hábito de ensinar programação e tecnologia aos estudantes. O pequeno suporta distribuições Linux populares, como Fedora e RISC OS. &lt;br /&gt;
Demonstrações ao longo do desenvolvimento do modelo apresentaram o Raspberry Pi rodando Quake III, e benchmarks mostraram que o computador é mais rápido que o chipset Nvidia Tegra 2. Além disso, ele oferece o dobro da capacidade de processamento gráfico do iPhone 4S.&lt;br /&gt;
O Raspberry Pi é calçado por um processador de clock estimado em 700 MHz, lento se comparado aos mais recentes smartphones do mercado. O minicomputador ainda oferece 512 MB de memória RAM, duas portas USB (no Model B), saídas RCA e HDMI, slot para dispositivos de armazenamento flash, porta Ethernet (Model B) e alimentação por interface microUSB.&lt;br /&gt;
&lt;br /&gt;
Neste link [http://www.raspberrypi.org/, você terá todas as informações sobre o Raspberry PI.&lt;br /&gt;
&lt;br /&gt;
===O que faremos?===&lt;br /&gt;
&lt;br /&gt;
Iremos instalar a distribuição RASPBIAN ( http://www.raspbian.org/ ), que é baseada na ultima versão do Debian Linux em conjunto com a versão 1.9.0 do OpenSIPS. Iremos mostra como um hardware com 700Mhz e 512 de Memoria, consegue fazer as vezes de SIP Proxy para cerca de 500 Ligacões. Tudo isso com apenas 50USD, isso mesmo, 50USD é o custo medio de um Raspberry PI.&lt;br /&gt;
&lt;br /&gt;
===O que iremos precisar?===&lt;br /&gt;
* Uma unidade do Raspbarry PI MODEL B&lt;br /&gt;
* 1 Teclado&lt;br /&gt;
* Conexção com internet via ETHERNET&lt;br /&gt;
* Um cartão SD CLASSE 10 ( Funciona com cartões classe 4/6/8/10 )&lt;br /&gt;
* Conhecimento em shell Linux&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Opensips_com_RASPBERRY_PI&amp;diff=1414</id>
		<title>Opensips com RASPBERRY PI</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Opensips_com_RASPBERRY_PI&amp;diff=1414"/>
		<updated>2013-09-10T20:54:33Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===O que é o Raspberry PI?===&lt;br /&gt;
&lt;br /&gt;
A Raspberry Pi Foundation criou o computador de código aberto como uma forma incentivar escolas e instituições de ensino a criar o hábito de ensinar programação e tecnologia aos estudantes. O pequeno suporta distribuições Linux populares, como Fedora e RISC OS. &lt;br /&gt;
Demonstrações ao longo do desenvolvimento do modelo apresentaram o Raspberry Pi rodando Quake III, e benchmarks mostraram que o computador é mais rápido que o chipset Nvidia Tegra 2. Além disso, ele oferece o dobro da capacidade de processamento gráfico do iPhone 4S.&lt;br /&gt;
O Raspberry Pi é calçado por um processador de clock estimado em 700 MHz, lento se comparado aos mais recentes smartphones do mercado. O minicomputador ainda oferece 512 MB de memória RAM, duas portas USB (no Model B), saídas RCA e HDMI, slot para dispositivos de armazenamento flash, porta Ethernet (Model B) e alimentação por interface microUSB.&lt;br /&gt;
&lt;br /&gt;
Neste link [http://www.raspberrypi.org/, você terá todas as informações sobre o Raspberry PI.&lt;br /&gt;
&lt;br /&gt;
===O que faremos?===&lt;br /&gt;
&lt;br /&gt;
Iremos instalar a distribuição RASPBIAN ( http://www.raspbian.org/ ), que é baseada na ultima versão do Debian Linux.&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Opensips_com_RASPBERRY_PI&amp;diff=1413</id>
		<title>Opensips com RASPBERRY PI</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Opensips_com_RASPBERRY_PI&amp;diff=1413"/>
		<updated>2013-09-10T20:52:56Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===O que é o Raspberry PI?===&lt;br /&gt;
&lt;br /&gt;
A Raspberry Pi Foundation criou o computador de código aberto como uma forma incentivar escolas e instituições de ensino a criar o hábito de ensinar programação e tecnologia aos estudantes. O pequeno suporta distribuições Linux populares, como Fedora e RISC OS. &lt;br /&gt;
Demonstrações ao longo do desenvolvimento do modelo apresentaram o Raspberry Pi rodando Quake III, e benchmarks mostraram que o computador é mais rápido que o chipset Nvidia Tegra 2. Além disso, ele oferece o dobro da capacidade de processamento gráfico do iPhone 4S.&lt;br /&gt;
O Raspberry Pi é calçado por um processador de clock estimado em 700 MHz, lento se comparado aos mais recentes smartphones do mercado. O minicomputador ainda oferece 512 MB de memória RAM, duas portas USB (no Model B), saídas RCA e HDMI, slot para dispositivos de armazenamento flash, porta Ethernet (Model B) e alimentação por interface microUSB.&lt;br /&gt;
&lt;br /&gt;
Neste link [http://www.raspberrypi.org/, você terá todas as informações sobre o Raspberry PI.&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Opensips_com_RASPBERRY_PI&amp;diff=1412</id>
		<title>Opensips com RASPBERRY PI</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Opensips_com_RASPBERRY_PI&amp;diff=1412"/>
		<updated>2013-09-10T20:52:01Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: Criou página com 'O que é o Raspberry PI?  A Raspberry Pi Foundation criou o computador de código aberto como uma forma incentivar escolas e instituições de ensino a criar o hábito de ensi...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O que é o Raspberry PI?&lt;br /&gt;
&lt;br /&gt;
A Raspberry Pi Foundation criou o computador de código aberto como uma forma incentivar escolas e instituições de ensino a criar o hábito de ensinar programação e tecnologia aos estudantes. O pequeno suporta distribuições Linux populares, como Fedora e RISC OS. &lt;br /&gt;
Demonstrações ao longo do desenvolvimento do modelo apresentaram o Raspberry Pi rodando Quake III, e benchmarks mostraram que o computador é mais rápido que o chipset Nvidia Tegra 2. Além disso, ele oferece o dobro da capacidade de processamento gráfico do iPhone 4S.&lt;br /&gt;
O Raspberry Pi é calçado por um processador de clock estimado em 700 MHz, lento se comparado aos mais recentes smartphones do mercado. O minicomputador ainda oferece 512 MB de memória RAM, duas portas USB (no Model B), saídas RCA e HDMI, slot para dispositivos de armazenamento flash, porta Ethernet (Model B) e alimentação por interface microUSB.&lt;br /&gt;
&lt;br /&gt;
Neste link [http://www.raspberrypi.org/], você terá todas as informações sobre o Raspberry PI.&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Documentacoes&amp;diff=1411</id>
		<title>Documentacoes</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Documentacoes&amp;diff=1411"/>
		<updated>2013-09-10T20:47:49Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[OpenSIPs e Asterisk]]==&lt;br /&gt;
Configuração de um OpenSIPs com Asterisk&lt;br /&gt;
&lt;br /&gt;
==[[OpenSIPs e Asterisk - LIKE CentOS]]==&lt;br /&gt;
Fork do documento original do Mike portado para CentOS 6.4 &lt;br /&gt;
&lt;br /&gt;
==[[Opensips 1.9]]==&lt;br /&gt;
Tutorial de compilação e instalação do OpenSIPS 1.9 utilizando os &lt;br /&gt;
recursos de geração de arquivo&lt;br /&gt;
&lt;br /&gt;
==[[Opensips com RASPBERRY PI]]==&lt;br /&gt;
Tutorial mostrando como é possivel utilizar o Raspberry PI com OpenSIPS&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1408</id>
		<title>OpenSIPs e Asterisk - LIKE CentOS</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1408"/>
		<updated>2013-09-02T20:04:26Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: /* Compilando o Asterisk 1.8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=white&amp;gt; NÃO SIGA ESTE DOCUMENTO. O MESMO SE ENCONTRA EM DESEVOLVIMENTO&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este tutorial é baseado em um tutorial originalmente escrito pelo Mike, se quiser verificar o tutorial original acesse http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk&lt;br /&gt;
&lt;br /&gt;
Para esta implementação utilizamos CentOS 6.4 64 Bits , OpenSIPS 1.9 e Asterisk 1.8.23 &lt;br /&gt;
&lt;br /&gt;
==Funcionalidades==&lt;br /&gt;
Este tutorial tem por objetivo atingir as seguintes funcionalidades.&lt;br /&gt;
*Autenticação de usuário&lt;br /&gt;
*Registro de usuário&lt;br /&gt;
*Localização de usuário (encaminhamento de chamadas)&lt;br /&gt;
*Roteamento de chamadas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Através do Asterisk estenderemos estas funcionalidades agregando.&lt;br /&gt;
*Correio de voz (Voicemail)&lt;br /&gt;
*Conferencia &lt;br /&gt;
*SBC ( Pode ser utilizado para transcoding, esconder topologia, play de mensagens e tarifação )&lt;br /&gt;
*Outros serviços de media (Anuncios, Ura's e coisas do tipo)&lt;br /&gt;
&lt;br /&gt;
==Definições==&lt;br /&gt;
Para um melhor entendimento da solução vamos expor aqui algumas definições de nosso sistema.&lt;br /&gt;
*Usuários locais terão ramais com 3 digitos (ex: 101, 102, 103)&lt;br /&gt;
*Identidade do correio de voz será o mesmo do ramal&lt;br /&gt;
*Serviços de media (acesso a voicemail e outros) receberão rotas de 4 digitos&lt;br /&gt;
*Opensips e Asterisk utilizarão o mesmo servidor (Neste caso IP: 10.254.254.6)&lt;br /&gt;
*Os serviços rodarão nas portas 5060 (opensips) , 5090 (Asterisk)&lt;br /&gt;
&lt;br /&gt;
==Funcionamento==&lt;br /&gt;
A autenticação do usuário será realizada pelo OpenSIPs, quando uma chamada é autenticada então ela serguirá:&lt;br /&gt;
*Se o usuário de destino não está online a chamada será enviada para o Asterisk para função de correio de voz&lt;br /&gt;
*Se o usuário está online a chamada será encaminhada para o Asterisk, desta forma é possivel acionar funcionalidades como anuncios, definição de tempo de chamada, forçar codecs e outras funcionalidades.&lt;br /&gt;
*Asterisk envia a chamada novamente para o OpenSIPs que verificará no location e entregará a chamada para o usuário.&lt;br /&gt;
*Se a chamada não for atendida o Opensips irá re-encaminhar para o Asterisk direcionando para função de voicemail&lt;br /&gt;
&lt;br /&gt;
==OpenSIPs==&lt;br /&gt;
Vamos iniciar o processo de instalação com o OpenSIPs, siga os procedimentos abaixo para evitar qualquer dificuldade.&lt;br /&gt;
&lt;br /&gt;
===Dependencias===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====Atualizando o sistema====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum -y update&lt;br /&gt;
yum -y upgrade&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pacotes de desenvolvimento ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall 'Development Tools' -y&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
yum install wget mysql-server pcre-devel libxml2-devel xmlrpc-c-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Desabilitando o SELINUX ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/bin/sed -i -e s,'SELINUX=enforcing','SELINUX=disabled', /etc/selinux/config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durante a instalação o sistema irá lhe perguntar a senha de root para o servidor MySQL é importante que você se lembre da mesma posteriormente pois utilizaremos a mesma.&lt;br /&gt;
&lt;br /&gt;
===Compilando o OpenSIPs===&lt;br /&gt;
Para manter um padrão onde os dados estao vamos utilizar o diretório /usr/src/ para o download de código fonte.&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/&lt;br /&gt;
 wget -c http://opensips.org/pub/opensips/1.9.1/src/opensips-1.9.1_src.tar.gz&lt;br /&gt;
 tar -xzvf opensips-1.9.1_src.tar.gz&lt;br /&gt;
 cd opensips-1.9.1-tls/&lt;br /&gt;
 make menuconfig&lt;br /&gt;
&lt;br /&gt;
Neste ponto o sistema irá abrir uma tela com algumas opções para selecionar, Acesse a primeira opção do menu, no submenu acesse a segunda opção ( Configure excluded modules ), selecione os módulos db_mysql , dialplan , mi_xmlrpc , presence e presence_xml&lt;br /&gt;
&lt;br /&gt;
Agora volte ao submenu, e selecione a opção Save Changes, volte para o menu principal e selecione '''Compile and Install OpenSips''' , deixe que o sistema execute suas funções.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ao finalizar a compilação você retornará ao menu, va na opção '''Exit and Save all changes'''&lt;br /&gt;
&lt;br /&gt;
===Preparando a Configuração===&lt;br /&gt;
&lt;br /&gt;
Antes de darmos inicio ao arquivo de configuração, vamos ajustar algumas questões, o opensips instala os arquivos (se voce nao alterar o parametro) em /usr/local, consequentemente as configurações ficam em /usr/local/etc , eu por padrão faço um link para o diretório /etc, assim acesso as configurações em /etc/opensips&lt;br /&gt;
&lt;br /&gt;
 ln -s /usr/etc/opensips/ /etc/&lt;br /&gt;
&lt;br /&gt;
Para o script de inicialização execute o comando abaixo&lt;br /&gt;
 cp packaging/fedora/opensips.init /etc/init.d/opensips&lt;br /&gt;
 chmod +x /etc/init.d/opensips&lt;br /&gt;
 chkconfig --add opensips&lt;br /&gt;
 cp packaging/fedora/opensips.sysconfig /etc/sysconfig&lt;br /&gt;
&lt;br /&gt;
 groupadd opensips&lt;br /&gt;
 mkdir /var/run/opensips&lt;br /&gt;
 useradd -d /var/run/opensips/ -s /bin/false -g opensips opensips&lt;br /&gt;
 chown -R opensips.opensips /var/run/opensips&lt;br /&gt;
&lt;br /&gt;
===Configurando o opensipsctl===&lt;br /&gt;
O opensipsctl (e opensipsdbctl) utilizam o arquivo de configuração /etc/opensips/opensipsctlrc, abaixo segue o conteúdo do arquivo. (Sugiro que você faça um backup dos arquivos originais para ter uma copia, existem parametros que você pode estudar depois).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DBENGINE=MYSQL&lt;br /&gt;
DBHOST=localhost&lt;br /&gt;
DBNAME=opensips&lt;br /&gt;
DBRWUSER=opensips&lt;br /&gt;
DBRWPW=&amp;quot;opensipsrw&amp;quot;&lt;br /&gt;
SIP_DOMAIN=10.254.254.6  ### caso voce esteja usando outro ip altere aqui&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DBROOTUSER=&amp;quot;root&amp;quot;&lt;br /&gt;
INSTALL_EXTRA_TABLES=ask&lt;br /&gt;
ALIASES_TYPE=&amp;quot;DB&amp;quot;&lt;br /&gt;
MI_CONNECTOR=FIFO:/tmp/opensips_fifo&lt;br /&gt;
# VERIFY_ACL=1&lt;br /&gt;
# ACL_GROUPS=&amp;quot;local ld int voicemail free-pstn&amp;quot;&lt;br /&gt;
# VERBOSE=1&lt;br /&gt;
# STORE_PLAINTEXT_PW=0&lt;br /&gt;
# NOHLPRINT=1&lt;br /&gt;
PID_FILE=/var/run/opensips/opensips.pid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Criando o banco de dados===&lt;br /&gt;
Agora que temos nosso arquivo configurado vamos fazer a criação do banco de dados, execute o comando abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
opensipsdbctl create opensips&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema irá lhe perguntar algumas coisas, responda Y (sim) para todas para que ele instale todas as tabelas, não usaremos todas elas, mas desta forma você fica com praticamente tudo criado para o caso de uma expansão dos recursos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Instalando o RTP Proxy===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/src/&lt;br /&gt;
wget -c http://b2bua.org/chrome/site/rtpproxy-1.2.1.tar.gz&lt;br /&gt;
tar -xzvf rtpproxy-1.2.1.tar.gz&lt;br /&gt;
cd rtpproxy-1.2.1&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
groupadd rtpproxy&lt;br /&gt;
useradd -d /var/run/rtpproxy -s /bin/true -g rtpproxy rtpproxy&lt;br /&gt;
mkdir /var/log/rtpproxy&lt;br /&gt;
mkdir /var/run/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/log/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/run/rtpproxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Arquivo de inicialização====&lt;br /&gt;
'''/etc/init.d/rtpproxy'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# Este script e de autoria de Mike Tesliuk&lt;br /&gt;
# qualquer falha no mesmo por favor informe &lt;br /&gt;
# atraves do email mike (a) tesliuk.com&lt;br /&gt;
#&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:          rtpproxy&lt;br /&gt;
# Required-Start:    $syslog $network $local_fs $time&lt;br /&gt;
# Required-Stop:     $syslog $network $local_fs&lt;br /&gt;
# Default-Start:     2 3 4 5&lt;br /&gt;
# Default-Stop:      0 1 6&lt;br /&gt;
# Short-Description: Start the RTPPROXY server&lt;br /&gt;
# Description:       Start the RTPPROXY server&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin&lt;br /&gt;
USELOG=1&lt;br /&gt;
USER=rtpproxy&lt;br /&gt;
# Altere o ip abaixo para o ip de seu sistema&lt;br /&gt;
IPADDR=&amp;quot;10.254.254.6&amp;quot;&lt;br /&gt;
&lt;br /&gt;
. /lib/lsb/init-functions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
start(){&lt;br /&gt;
        echo &amp;quot;Iniciando RTP PROXY &amp;quot;&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                if [ &amp;quot;${USELOG}&amp;quot; = &amp;quot;1&amp;quot; ]; then&lt;br /&gt;
                        echo &amp;quot;Iniciando com LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER -F -f d DBUG 2&amp;amp;&amp;gt; /var/log/rtpproxy/rtpproxy.log &amp;amp;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Iniciando sem LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER  -F -f d DBUG 2&amp;amp;&amp;gt; /dev/null&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;START OK&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
        else&lt;br /&gt;
                echo &amp;quot;Processo ja em execucao&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
stop(){&lt;br /&gt;
&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                echo &amp;quot;Processo nao encontrado&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
                kill -9 $(pidof rtpproxy)&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;STOP OK&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Falha em realizar stop do servico&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
case $1 in&lt;br /&gt;
        start)&lt;br /&gt;
                start&lt;br /&gt;
        ;;&lt;br /&gt;
        stop)&lt;br /&gt;
                stop&lt;br /&gt;
        ;;&lt;br /&gt;
        restart)&lt;br /&gt;
                stop&lt;br /&gt;
                start&lt;br /&gt;
&lt;br /&gt;
        ;;&lt;br /&gt;
        *)&lt;br /&gt;
                echo &amp;quot;Utilize: stop | start | restart&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos dar permissao e colocar na inicialização&lt;br /&gt;
 chmod +x /etc/init.d/rtpproxy &lt;br /&gt;
 chkconfig --add rtpproxy&lt;br /&gt;
 /etc/init.d/rtpproxy start&lt;br /&gt;
&lt;br /&gt;
===Criando o arquivo opensips.cfg===&lt;br /&gt;
O arquivo opensips.cfg é a onde a coisa toda acontece para o opensips, claro que ele dependerá de informações que estarão no banco de dados, mas é onde criamos todas as nossas rotas e validações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Este tutorial nao esta terminado, este arquivo ainda esta em testes &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
####### Global Parameters #########&lt;br /&gt;
debug=3&lt;br /&gt;
log_stderror=no&lt;br /&gt;
log_facility=LOG_LOCAL0&lt;br /&gt;
&lt;br /&gt;
fork=yes&lt;br /&gt;
children=4&lt;br /&gt;
&lt;br /&gt;
/* Descomente as linhas abaixo para ativar o debug */&lt;br /&gt;
#debug=7&lt;br /&gt;
#fork=no&lt;br /&gt;
#log_stderror=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Comente a linha abaixo para ativar a descoberta automatica de enderecos locais&lt;br /&gt;
 , isso significa que o sistema ira verificar todos os ips ativos e hosts e entao ativara&lt;br /&gt;
 o protocolo para todos eles */ &lt;br /&gt;
auto_aliases=no&lt;br /&gt;
&lt;br /&gt;
/* Defina aqui o ip a ser utilizado */&lt;br /&gt;
listen=udp:10.254.254.6:5060   # Altere este IP para o seu ambiente&lt;br /&gt;
&lt;br /&gt;
/* Nao usaremos sip por tcp nem tls neste script */&lt;br /&gt;
disable_tcp=yes&lt;br /&gt;
&lt;br /&gt;
disable_tls=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Secao de modulos ########&lt;br /&gt;
&lt;br /&gt;
#set module path&lt;br /&gt;
mpath=&amp;quot;/usr//lib64/opensips/modules/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;signaling.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sl.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;tm.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_timer&amp;quot;, 5)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_inv_timer&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;restart_fr_on_each_reply&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;onreply_avp_mode&amp;quot;, 1)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rr.so&amp;quot;&lt;br /&gt;
/* do not append from tag to the RR (no need for this script) */&lt;br /&gt;
modparam(&amp;quot;rr&amp;quot;, &amp;quot;append_fromtag&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;maxfwd.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sipmsgops.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;mi_fifo.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_name&amp;quot;, &amp;quot;/tmp/opensips_fifo&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_mode&amp;quot;, 0666)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;db_mysql.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;uri.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;uri&amp;quot;, &amp;quot;use_uri_table&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;usrloc.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;nat_bflag&amp;quot;, &amp;quot;FLB_NATB&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_mode&amp;quot;,   2)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;registrar.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;registrar&amp;quot;, &amp;quot;tcp_persistent_flag&amp;quot;, &amp;quot;TCP_PERSISTENT&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
/* Descomente a linha abaixo para nao permitir mais de 10 contatos por conta */&lt;br /&gt;
#modparam(&amp;quot;registrar&amp;quot;, &amp;quot;max_contacts&amp;quot;, 10)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;acc.so&amp;quot;&lt;br /&gt;
/* Quais eventos deverao ser registrados ? */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;early_media&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;report_cancels&amp;quot;, 0)&lt;br /&gt;
/* por padrao nos nao ajustamos a direcao em requisicoes sequencias, &lt;br /&gt;
 se voce deseja usar este recurso tenha certeza de ativar o &amp;quot;appen_fromtag&amp;quot; &lt;br /&gt;
 para o modulo &amp;quot;rr&amp;quot; */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;detect_direction&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;failed_transaction_flag&amp;quot;, &amp;quot;FLT_ACCFAILED&amp;quot;)&lt;br /&gt;
/* Gatilhos para accounting  (flags) */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_extra&amp;quot;, &lt;br /&gt;
	&amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_extra&amp;quot;, &amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;auth.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;auth_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;calculate_ha1&amp;quot;, yes)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;password_column&amp;quot;, &amp;quot;password&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;load_credentials&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;permissions.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;permissions&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;alias_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;alias_db&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;presence.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;presence&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
#loadmodule &amp;quot;presence_xml.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;dialog.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_mode&amp;quot;, 2)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_url&amp;quot;,&amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;dlg_match_mode&amp;quot;, 1)&lt;br /&gt;
#modparam(&amp;quot;dialog&amp;quot;, &amp;quot;default_timeout&amp;quot;, 60)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;siptrace.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;trace_flag&amp;quot;, 22)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;traced_user_avp&amp;quot;, &amp;quot;$avp(s:traceuser)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;nathelper.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;natping_interval&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;ping_nated_only&amp;quot;, 1)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_bflag&amp;quot;, &amp;quot;FLB_NATSIPPING&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_from&amp;quot;, &amp;quot;sip:pinger@10.254.254.6&amp;quot;) # Altere o ip para o ip do servidor&lt;br /&gt;
modparam(&amp;quot;nathelper|registrar&amp;quot;, &amp;quot;received_avp&amp;quot;, &amp;quot;$avp(RECEIVED)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rtpproxy.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;rtpproxy&amp;quot;, &amp;quot;rtpproxy_sock&amp;quot;, &amp;quot;udp:127.0.0.1:7722&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Logica de roteamento ########&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route {&lt;br /&gt;
&lt;br /&gt;
	if (!mf_process_maxfwd_header(&amp;quot;3&amp;quot;)) {&lt;br /&gt;
                send_reply(&amp;quot;483&amp;quot;,&amp;quot;looping&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;REQUISICAO RECEBIDA, ENVIANDO PARA REQINIT&amp;quot;);&lt;br /&gt;
	# Checagem inicial por requisicao&lt;br /&gt;
	route(REQINIT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA NAT&amp;quot;);&lt;br /&gt;
	# Deteccao de nat&lt;br /&gt;
	route(NAT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA WITHINDLG&amp;quot;);&lt;br /&gt;
	# Gerenciando requisicaoes com dialog&lt;br /&gt;
	route(WITHINDLG);&lt;br /&gt;
&lt;br /&gt;
	# Manipulando requisicoes iniciais (nao consta To tag)&lt;br /&gt;
	&lt;br /&gt;
	# Processando CANCEL&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;CANCEL&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD CANCEL&amp;quot;);&lt;br /&gt;
		if(t_check_trans()){&lt;br /&gt;
			t_relay();&lt;br /&gt;
		}&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	t_check_trans();&lt;br /&gt;
&lt;br /&gt;
	# Enviando para autenticacao&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA AUTENTICACAO&amp;quot;);&lt;br /&gt;
	route(AUTH);&lt;br /&gt;
&lt;br /&gt;
	# gravando rota para formacao dos dialogs (caso sejam roteados)&lt;br /&gt;
	# removemos qualquer cabecalho de rota pre carregado&lt;br /&gt;
	remove_hf(&amp;quot;Route&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE OU SIBSCRIBE&amp;quot;);&lt;br /&gt;
		record_route();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Contabilizando (acc) INVITES&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE, FAZENDOA ACC&amp;quot;);&lt;br /&gt;
		setflag(FLT_ACC);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando chamada para destinos externos&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA SIPOUT&amp;quot;);&lt;br /&gt;
	route(SIPOUT);&lt;br /&gt;
&lt;br /&gt;
	# Requisicoes para dominio local&lt;br /&gt;
	&lt;br /&gt;
	# Roteando requisicoes de PRESENCE&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PRESENCE&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	route(PRESENCE);&lt;br /&gt;
&lt;br /&gt;
	# Gerenciando pedidos de registro&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA REGISTRAR&amp;quot;);	&lt;br /&gt;
	route(REGISTRAR);&lt;br /&gt;
&lt;br /&gt;
	if($ru==&amp;quot;&amp;quot;){&lt;br /&gt;
		xlog(&amp;quot;ru --&amp;gt; vazio&amp;quot;);&lt;br /&gt;
		# Requisicao sem usuario na RURI&lt;br /&gt;
		sl_send_reply(&amp;quot;484&amp;quot;, &amp;quot;Address Incomplete&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando requisicao para PSTN&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PSTN&amp;quot;);&lt;br /&gt;
	route(PSTN);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Salvando informacao de quem originou a chamad&lt;br /&gt;
	$avp(callee)=$rU;&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA DISPATCH PSTN&amp;quot;);&lt;br /&gt;
	route(FSDISPATCH);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	# Servico de localizacao de usuario&lt;br /&gt;
	route(LOCATION);&lt;br /&gt;
&lt;br /&gt;
	# Efetuando o relay (encaminhamento)&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[RELAY] {&lt;br /&gt;
	if(check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
		setbflag(FLB_NATB);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(isflagset(FLT_NATS) || isbflagset(FLB_NATB)){&lt;br /&gt;
		#route(RTPPROXY);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
#		t_on_reply(&amp;quot;REPLY_ONE&amp;quot;);&lt;br /&gt;
#		t_on_failure(&amp;quot;FAIL_ONE&amp;quot;);&lt;br /&gt;
#	}&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;AQUI TENTAMOS ENVIAR A CHAMADA $fU $tU&amp;quot;);&lt;br /&gt;
	if(!t_relay()){&lt;br /&gt;
		xlog(&amp;quot;FALHA EM ENVIAR A CHAMADA, NAO FOI POSSIVEL FAZER O RELAY&amp;quot;);&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
	}&lt;br /&gt;
	xlog(&amp;quot;CHAMADA FOI ENVIADA AQUI, QUAL O ERRO ENTAO&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REQINIT] {&lt;br /&gt;
	if(!mf_process_maxfwd_header(&amp;quot;10&amp;quot;)){&lt;br /&gt;
		sl_send_reply(&amp;quot;483&amp;quot;, &amp;quot;Too Many Hops&amp;quot;);&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[WITHINDLG] {&lt;br /&gt;
	if(has_totag()){&lt;br /&gt;
		if(loose_route()){&lt;br /&gt;
			if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
				setflag(FLT_ACC);&lt;br /&gt;
				setflag(FLT_ACCFAILED);&lt;br /&gt;
			}&lt;br /&gt;
			route(RELAY);&lt;br /&gt;
		}else{&lt;br /&gt;
			if(is_method(&amp;quot;SUBSCRIBE&amp;quot;) &amp;amp;&amp;amp; uri==myself) {&lt;br /&gt;
				# requisicao de subscribe pre-estabelecida&lt;br /&gt;
				route(PRESENCE);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;ACK&amp;quot;)){&lt;br /&gt;
				if(t_check_trans()){&lt;br /&gt;
					t_relay();&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}else{&lt;br /&gt;
				# ACK para transacao nao encontrada, ignoramos...&lt;br /&gt;
				exit;&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			sl_send_reply(&amp;quot;404&amp;quot;, &amp;quot;Not Here&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		}	&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REGISTRAR] {&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		if(isflagset(FLT_NATS)){&lt;br /&gt;
			setbflag(FLB_NATB);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(!save(&amp;quot;location&amp;quot;)){&lt;br /&gt;
			sl_reply_error();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[LOCATION] {&lt;br /&gt;
&lt;br /&gt;
	alias_db_lookup(&amp;quot;dbaliases&amp;quot;);&lt;br /&gt;
	if(!lookup(&amp;quot;location&amp;quot;)){&lt;br /&gt;
		switch($rc) {&lt;br /&gt;
			case -1:&lt;br /&gt;
			case -3:&lt;br /&gt;
				t_newtran();&lt;br /&gt;
				t_reply(&amp;quot;404&amp;quot;,&amp;quot;Not Found&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			case -2:&lt;br /&gt;
				sl_send_reply(&amp;quot;405&amp;quot;, &amp;quot;Method Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		setflag(FLT_ACCMISSED);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PRESENCE] {&lt;br /&gt;
	if(!is_method(&amp;quot;PUBLISH|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!t_newtran()){&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
		handle_publish();&lt;br /&gt;
	}else if(is_method(&amp;quot;SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		handle_subscribe();&lt;br /&gt;
	}&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[AUTH]{&lt;br /&gt;
	xlog(&amp;quot;PEDIDO DE AUTENTICACAO&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		# atentica pedidos de registro&lt;br /&gt;
		if(!www_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
			www_challenge(&amp;quot;&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if($au!=$tU){&lt;br /&gt;
			sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	}else{&lt;br /&gt;
		if(route(FSINBOUND)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(check_source_address(&amp;quot;0&amp;quot;)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(from_uri==myself){&lt;br /&gt;
			if(!proxy_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
				proxy_challenge(&amp;quot;&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
				if($au!=$tU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}else{&lt;br /&gt;
				if($au!=$fU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			# Validamos (autenticamos) o usuario&lt;br /&gt;
			consume_credentials();&lt;br /&gt;
		}else{&lt;br /&gt;
		&lt;br /&gt;
			# usuario nao e local, vamos negar&lt;br /&gt;
			if(!uri==myself){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not relaying&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}	&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[NAT] {&lt;br /&gt;
	force_rport();&lt;br /&gt;
	if(nat_uac_test(&amp;quot;19&amp;quot;)){&lt;br /&gt;
		if(method==&amp;quot;REGISTER&amp;quot;){&lt;br /&gt;
			fix_nated_register();&lt;br /&gt;
		}else{&lt;br /&gt;
			fix_nated_contact();&lt;br /&gt;
		}&lt;br /&gt;
		setflag(FLT_NATS);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[RTPPROXY] {&lt;br /&gt;
	if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}else if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		engage_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!has_totag()){&lt;br /&gt;
&lt;br /&gt;
		if(!check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
			add_rr_param(&amp;quot;;nat=yes&amp;quot;);&lt;br /&gt;
			xlog(&amp;quot;NAT yes NAO ENCONTRADO&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[SIPOUT]{&lt;br /&gt;
	if(!uri==myself){&lt;br /&gt;
		append_hf(&amp;quot;P-hint: outbound\r\n&amp;quot;);&lt;br /&gt;
		route(RELAY);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PSTN]{&lt;br /&gt;
        # neste caso apenas para exemplificar um uso simples&lt;br /&gt;
        # vamos fazer o redirecionamento par ao asterisk&lt;br /&gt;
        # realizar a dicagem da chamada&lt;br /&gt;
&lt;br /&gt;
        if(!($rU=~&amp;quot;^(\+|00)[1-9][0-9]{3,20}$&amp;quot;))&lt;br /&gt;
                return;&lt;br /&gt;
&lt;br /&gt;
        ## a regra acima aceita para discagem externa qualquer numero&lt;br /&gt;
        # comecado com 00 ou +&lt;br /&gt;
        #&lt;br /&gt;
&lt;br /&gt;
        if(from_uri!=myself){&lt;br /&gt;
                sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $ru = &amp;quot;sip:&amp;quot; + $rU + &amp;quot;@&amp;quot; + &amp;quot;10.254.254.6:5090&amp;quot;;&lt;br /&gt;
        xlog(&amp;quot;NOVO DESTINO: $ru&amp;quot;);&lt;br /&gt;
        route(RELAY);&lt;br /&gt;
        exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[XMLRPC]{&lt;br /&gt;
	# nao vamos implementar esta funcionalidade&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSINBOUND] {&lt;br /&gt;
	# verificar para validar o ip do asterisk:porta&lt;br /&gt;
	# se bater , responder com return 1;&lt;br /&gt;
	if($si==&amp;quot;10.254.254.6&amp;quot; &amp;amp;&amp;amp; $sp==&amp;quot;5090&amp;quot;){&lt;br /&gt;
		return(1);&lt;br /&gt;
	}else{&lt;br /&gt;
		return(-1);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSDISPATCH] {&lt;br /&gt;
&lt;br /&gt;
	if(!is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(route(FSINBOUND)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;CAIMOS NO SWITCH, VAMOS LOCALIZAR O PERFIL DA CHAMADA $rU&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if($rU =~ &amp;quot;^41$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH expressa comeca e termina em 41&amp;quot;);&lt;br /&gt;
			#regra de menu de voicemail, apenas &lt;br /&gt;
			# usuarios autenticados&lt;br /&gt;
			if($au==&amp;quot;&amp;quot;){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$rU = &amp;quot;vma-&amp;quot; + $au;&lt;br /&gt;
	}else if($rU =~ &amp;quot;^441[0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCA 441XX &amp;quot;);&lt;br /&gt;
			# numero discado comeca com 441 seguido de dois digitos&lt;br /&gt;
			# chamada direta para inbox do voicemail&lt;br /&gt;
			strip(2);&lt;br /&gt;
			route(FSVBOX);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^433[01][0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH OPCAO 433[01]XX&amp;quot;);&lt;br /&gt;
			# numero comecado em 443, seguido de 0 ou 1, mais dois digitos&lt;br /&gt;
			# sistema de conferencia&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^45[0-9]+$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCAO 45X.&amp;quot;);&lt;br /&gt;
			#numero comecado com 45, seguindo de numeros;&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else{&lt;br /&gt;
			xlog(&amp;quot;OPCAO DEFAULT DO SWITCH&amp;quot;);&lt;br /&gt;
			# usuario offline, enviando para voicemail&lt;br /&gt;
			if(!registered(&amp;quot;location&amp;quot;)){&lt;br /&gt;
				route(FSVBOX);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			# usuario online, fazendo bridging&lt;br /&gt;
			xlog(&amp;quot;USUARIO ESTA ONLINE VAMOS FAZER BRIDGE&amp;quot;);&lt;br /&gt;
			prefix(&amp;quot;kb-&amp;quot;);&lt;br /&gt;
			if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
				t_on_failure(&amp;quot;FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
	}&lt;br /&gt;
	route(FSRELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSVBOX&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($rU =~ &amp;quot;^441[0-9][0-9]&amp;quot;){&lt;br /&gt;
		strip(2);&lt;br /&gt;
	}&lt;br /&gt;
	prefix(&amp;quot;vm-&amp;quot;);&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[FSRELAY] {&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSRELAY&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
branch_route[BRANCH_ONE]{&lt;br /&gt;
	xlog(&amp;quot;new branch at $ru&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
onreply_route[REPLY_ONE]{&lt;br /&gt;
	xlog(&amp;quot;Incoming reply&amp;quot;);&lt;br /&gt;
	if((isflagset(FLT_NATS) || isbflagset(FLB_NATB) &amp;amp;&amp;amp; status =~ &amp;quot;(183)|(2[0-9][0-9])&amp;quot;)){&lt;br /&gt;
		#rtpproxy_offer();&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	if(isbflagset(FLB_NATB)){&lt;br /&gt;
		fix_nated_contact();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_ONE]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_ONE&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_check_status(&amp;quot;486|408|480&amp;quot;)){&lt;br /&gt;
		$rU = $avp(callee);&lt;br /&gt;
		$var(newbranch) = 1;&lt;br /&gt;
		route(FSVBOX);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testes com Opensips (registro)==&lt;br /&gt;
&lt;br /&gt;
Antes de podermos testar precisamos iniciar o serviço, no momento estamos com ele operando em modo debug, então a inicialização deve ser realizada com o comando abaixo&lt;br /&gt;
 /etc/init.d/opensips debug&lt;br /&gt;
&lt;br /&gt;
Abra uma nova sessão no servidor e então vamos criar os usuários&lt;br /&gt;
 opensipsctl add 101 101&lt;br /&gt;
 opensipsctl add 102 102&lt;br /&gt;
 opensipsctl add 103 103&lt;br /&gt;
&lt;br /&gt;
usuario 101 com senha 101 e assim por diante&lt;br /&gt;
&lt;br /&gt;
Faça a onexão com seu softphone, aqui para testes utilizei o jitsi e o zoiper, neste momento vamos apenas fazer o registro do usuário para testar a autenticação, se você tentar realizar uma discagem não funcionará pois neste caso o processo depende do Asterisk que ainda não está configurado, vamos dar inicio nesta configuração agora.&lt;br /&gt;
&lt;br /&gt;
==Asterisk==&lt;br /&gt;
Não vamos dar muitos detalhes da instalação do asterisk aqui, a ideia é simplesmente ter o mesmo funcionando da forma que necessitamos.&lt;br /&gt;
&lt;br /&gt;
===Instalando dependências===&lt;br /&gt;
&lt;br /&gt;
Dependências necessárias para a instalação do Asterisk.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Asterisk 1.8===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget -c http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8-current.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Compilando o Asterisk 1.8====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar zxvf asterisk-1.8-current.tar.gz&lt;br /&gt;
cd asterisk-1.8.23.1&lt;br /&gt;
./configure  --disable-xmldoc&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make samples&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Após a instalação , abra o arquivo /etc/asterisk/sip.conf, localize a linha '''udpbindaddr=0.0.0.0''' e altere para '''udpbindaddr=0.0.0.0:5090'''  , depois ao fim do arquivo adicione.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
type=peer&lt;br /&gt;
host=10.254.254.6&lt;br /&gt;
port=5060&lt;br /&gt;
qualify=yes&lt;br /&gt;
context=opensips&lt;br /&gt;
insecure=port,invite&lt;br /&gt;
canreinvite=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora abra o arquivo '''/etc/asterisk/extensions.conf''' , crie no fim do arquivo a seguinte entrada.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _kb-1XX,1,NoOp(CHAMADA INTERNA - FAZER BRIDGE - ${CALLERID(num)} ${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Dial(SIP/opensips/${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Goto(opensips,vm-${EXTEN:3},1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vm-1XX,1,NoOp(CHAMADA PARA VOICEMAIL)&lt;br /&gt;
same =&amp;gt; n,Voicemail(${EXTEN:3}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vma-1XX,1,NoOp(CHAMADA PARA VOICEMAIL - ADMINISTRATIVO)&lt;br /&gt;
same =&amp;gt; n,VoicemailMain(${EXTEN:4}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _3[01]XX,1,NoOp(CHAMADA PARA CONFERENCIA)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,ConfBridge(${EXTEN},cM1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _00.,1,NoOp(CHAMADA PARA PSTN)&lt;br /&gt;
same =&amp;gt; n,Wait(2)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,Wait(1)&lt;br /&gt;
same =&amp;gt; n,PlayBack(tt-monkeys)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; h,1,Hangup()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finalmente precisamos criar as entradas do voicemail, para isso altere o arquivo '''/etc/asterisk/voicemail.conf''' localize o contexto '''[default]''' e então adicione as entradas para seu voicemail, segue dois exemplos abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
101 =&amp;gt; 123123,Mike Tesliuk&lt;br /&gt;
102 =&amp;gt; 123123,Mike Tesliuk 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Feito isso, faça um restart no asterisk&lt;br /&gt;
 /etc/init.d/asterisk restart&lt;br /&gt;
&lt;br /&gt;
Agora você ja poderá fazer os testes, basicamente criamos as seguintes situações para serem testadas.&lt;br /&gt;
&lt;br /&gt;
*1 Autenticação de usuários&lt;br /&gt;
*2 Chamada entre usuários&lt;br /&gt;
*3 Encaminhamento para caixa postal&lt;br /&gt;
*4 Acesso a caixa postal&lt;br /&gt;
*5 Acesso a conferência&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1407</id>
		<title>OpenSIPs e Asterisk - LIKE CentOS</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1407"/>
		<updated>2013-09-02T19:27:47Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: /* Arquivo de inicialização */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=white&amp;gt; NÃO SIGA ESTE DOCUMENTO. O MESMO SE ENCONTRA EM DESEVOLVIMENTO&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este tutorial é baseado em um tutorial originalmente escrito pelo Mike, se quiser verificar o tutorial original acesse http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk&lt;br /&gt;
&lt;br /&gt;
Para esta implementação utilizamos CentOS 6.4 64 Bits , OpenSIPS 1.9 e Asterisk 1.8.23 &lt;br /&gt;
&lt;br /&gt;
==Funcionalidades==&lt;br /&gt;
Este tutorial tem por objetivo atingir as seguintes funcionalidades.&lt;br /&gt;
*Autenticação de usuário&lt;br /&gt;
*Registro de usuário&lt;br /&gt;
*Localização de usuário (encaminhamento de chamadas)&lt;br /&gt;
*Roteamento de chamadas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Através do Asterisk estenderemos estas funcionalidades agregando.&lt;br /&gt;
*Correio de voz (Voicemail)&lt;br /&gt;
*Conferencia &lt;br /&gt;
*SBC ( Pode ser utilizado para transcoding, esconder topologia, play de mensagens e tarifação )&lt;br /&gt;
*Outros serviços de media (Anuncios, Ura's e coisas do tipo)&lt;br /&gt;
&lt;br /&gt;
==Definições==&lt;br /&gt;
Para um melhor entendimento da solução vamos expor aqui algumas definições de nosso sistema.&lt;br /&gt;
*Usuários locais terão ramais com 3 digitos (ex: 101, 102, 103)&lt;br /&gt;
*Identidade do correio de voz será o mesmo do ramal&lt;br /&gt;
*Serviços de media (acesso a voicemail e outros) receberão rotas de 4 digitos&lt;br /&gt;
*Opensips e Asterisk utilizarão o mesmo servidor (Neste caso IP: 10.254.254.6)&lt;br /&gt;
*Os serviços rodarão nas portas 5060 (opensips) , 5090 (Asterisk)&lt;br /&gt;
&lt;br /&gt;
==Funcionamento==&lt;br /&gt;
A autenticação do usuário será realizada pelo OpenSIPs, quando uma chamada é autenticada então ela serguirá:&lt;br /&gt;
*Se o usuário de destino não está online a chamada será enviada para o Asterisk para função de correio de voz&lt;br /&gt;
*Se o usuário está online a chamada será encaminhada para o Asterisk, desta forma é possivel acionar funcionalidades como anuncios, definição de tempo de chamada, forçar codecs e outras funcionalidades.&lt;br /&gt;
*Asterisk envia a chamada novamente para o OpenSIPs que verificará no location e entregará a chamada para o usuário.&lt;br /&gt;
*Se a chamada não for atendida o Opensips irá re-encaminhar para o Asterisk direcionando para função de voicemail&lt;br /&gt;
&lt;br /&gt;
==OpenSIPs==&lt;br /&gt;
Vamos iniciar o processo de instalação com o OpenSIPs, siga os procedimentos abaixo para evitar qualquer dificuldade.&lt;br /&gt;
&lt;br /&gt;
===Dependencias===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====Atualizando o sistema====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum -y update&lt;br /&gt;
yum -y upgrade&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pacotes de desenvolvimento ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall 'Development Tools' -y&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
yum install wget mysql-server pcre-devel libxml2-devel xmlrpc-c-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Desabilitando o SELINUX ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/bin/sed -i -e s,'SELINUX=enforcing','SELINUX=disabled', /etc/selinux/config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durante a instalação o sistema irá lhe perguntar a senha de root para o servidor MySQL é importante que você se lembre da mesma posteriormente pois utilizaremos a mesma.&lt;br /&gt;
&lt;br /&gt;
===Compilando o OpenSIPs===&lt;br /&gt;
Para manter um padrão onde os dados estao vamos utilizar o diretório /usr/src/ para o download de código fonte.&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/&lt;br /&gt;
 wget -c http://opensips.org/pub/opensips/1.9.1/src/opensips-1.9.1_src.tar.gz&lt;br /&gt;
 tar -xzvf opensips-1.9.1_src.tar.gz&lt;br /&gt;
 cd opensips-1.9.1-tls/&lt;br /&gt;
 make menuconfig&lt;br /&gt;
&lt;br /&gt;
Neste ponto o sistema irá abrir uma tela com algumas opções para selecionar, Acesse a primeira opção do menu, no submenu acesse a segunda opção ( Configure excluded modules ), selecione os módulos db_mysql , dialplan , mi_xmlrpc , presence e presence_xml&lt;br /&gt;
&lt;br /&gt;
Agora volte ao submenu, e selecione a opção Save Changes, volte para o menu principal e selecione '''Compile and Install OpenSips''' , deixe que o sistema execute suas funções.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ao finalizar a compilação você retornará ao menu, va na opção '''Exit and Save all changes'''&lt;br /&gt;
&lt;br /&gt;
===Preparando a Configuração===&lt;br /&gt;
&lt;br /&gt;
Antes de darmos inicio ao arquivo de configuração, vamos ajustar algumas questões, o opensips instala os arquivos (se voce nao alterar o parametro) em /usr/local, consequentemente as configurações ficam em /usr/local/etc , eu por padrão faço um link para o diretório /etc, assim acesso as configurações em /etc/opensips&lt;br /&gt;
&lt;br /&gt;
 ln -s /usr/etc/opensips/ /etc/&lt;br /&gt;
&lt;br /&gt;
Para o script de inicialização execute o comando abaixo&lt;br /&gt;
 cp packaging/fedora/opensips.init /etc/init.d/opensips&lt;br /&gt;
 chmod +x /etc/init.d/opensips&lt;br /&gt;
 chkconfig --add opensips&lt;br /&gt;
 cp packaging/fedora/opensips.sysconfig /etc/sysconfig&lt;br /&gt;
&lt;br /&gt;
 groupadd opensips&lt;br /&gt;
 mkdir /var/run/opensips&lt;br /&gt;
 useradd -d /var/run/opensips/ -s /bin/false -g opensips opensips&lt;br /&gt;
 chown -R opensips.opensips /var/run/opensips&lt;br /&gt;
&lt;br /&gt;
===Configurando o opensipsctl===&lt;br /&gt;
O opensipsctl (e opensipsdbctl) utilizam o arquivo de configuração /etc/opensips/opensipsctlrc, abaixo segue o conteúdo do arquivo. (Sugiro que você faça um backup dos arquivos originais para ter uma copia, existem parametros que você pode estudar depois).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DBENGINE=MYSQL&lt;br /&gt;
DBHOST=localhost&lt;br /&gt;
DBNAME=opensips&lt;br /&gt;
DBRWUSER=opensips&lt;br /&gt;
DBRWPW=&amp;quot;opensipsrw&amp;quot;&lt;br /&gt;
SIP_DOMAIN=10.254.254.6  ### caso voce esteja usando outro ip altere aqui&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DBROOTUSER=&amp;quot;root&amp;quot;&lt;br /&gt;
INSTALL_EXTRA_TABLES=ask&lt;br /&gt;
ALIASES_TYPE=&amp;quot;DB&amp;quot;&lt;br /&gt;
MI_CONNECTOR=FIFO:/tmp/opensips_fifo&lt;br /&gt;
# VERIFY_ACL=1&lt;br /&gt;
# ACL_GROUPS=&amp;quot;local ld int voicemail free-pstn&amp;quot;&lt;br /&gt;
# VERBOSE=1&lt;br /&gt;
# STORE_PLAINTEXT_PW=0&lt;br /&gt;
# NOHLPRINT=1&lt;br /&gt;
PID_FILE=/var/run/opensips/opensips.pid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Criando o banco de dados===&lt;br /&gt;
Agora que temos nosso arquivo configurado vamos fazer a criação do banco de dados, execute o comando abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
opensipsdbctl create opensips&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema irá lhe perguntar algumas coisas, responda Y (sim) para todas para que ele instale todas as tabelas, não usaremos todas elas, mas desta forma você fica com praticamente tudo criado para o caso de uma expansão dos recursos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Instalando o RTP Proxy===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/src/&lt;br /&gt;
wget -c http://b2bua.org/chrome/site/rtpproxy-1.2.1.tar.gz&lt;br /&gt;
tar -xzvf rtpproxy-1.2.1.tar.gz&lt;br /&gt;
cd rtpproxy-1.2.1&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
groupadd rtpproxy&lt;br /&gt;
useradd -d /var/run/rtpproxy -s /bin/true -g rtpproxy rtpproxy&lt;br /&gt;
mkdir /var/log/rtpproxy&lt;br /&gt;
mkdir /var/run/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/log/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/run/rtpproxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Arquivo de inicialização====&lt;br /&gt;
'''/etc/init.d/rtpproxy'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# Este script e de autoria de Mike Tesliuk&lt;br /&gt;
# qualquer falha no mesmo por favor informe &lt;br /&gt;
# atraves do email mike (a) tesliuk.com&lt;br /&gt;
#&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:          rtpproxy&lt;br /&gt;
# Required-Start:    $syslog $network $local_fs $time&lt;br /&gt;
# Required-Stop:     $syslog $network $local_fs&lt;br /&gt;
# Default-Start:     2 3 4 5&lt;br /&gt;
# Default-Stop:      0 1 6&lt;br /&gt;
# Short-Description: Start the RTPPROXY server&lt;br /&gt;
# Description:       Start the RTPPROXY server&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin&lt;br /&gt;
USELOG=1&lt;br /&gt;
USER=rtpproxy&lt;br /&gt;
# Altere o ip abaixo para o ip de seu sistema&lt;br /&gt;
IPADDR=&amp;quot;10.254.254.6&amp;quot;&lt;br /&gt;
&lt;br /&gt;
. /lib/lsb/init-functions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
start(){&lt;br /&gt;
        echo &amp;quot;Iniciando RTP PROXY &amp;quot;&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                if [ &amp;quot;${USELOG}&amp;quot; = &amp;quot;1&amp;quot; ]; then&lt;br /&gt;
                        echo &amp;quot;Iniciando com LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER -F -f d DBUG 2&amp;amp;&amp;gt; /var/log/rtpproxy/rtpproxy.log &amp;amp;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Iniciando sem LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER  -F -f d DBUG 2&amp;amp;&amp;gt; /dev/null&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;START OK&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
        else&lt;br /&gt;
                echo &amp;quot;Processo ja em execucao&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
stop(){&lt;br /&gt;
&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                echo &amp;quot;Processo nao encontrado&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
                kill -9 $(pidof rtpproxy)&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;STOP OK&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Falha em realizar stop do servico&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
case $1 in&lt;br /&gt;
        start)&lt;br /&gt;
                start&lt;br /&gt;
        ;;&lt;br /&gt;
        stop)&lt;br /&gt;
                stop&lt;br /&gt;
        ;;&lt;br /&gt;
        restart)&lt;br /&gt;
                stop&lt;br /&gt;
                start&lt;br /&gt;
&lt;br /&gt;
        ;;&lt;br /&gt;
        *)&lt;br /&gt;
                echo &amp;quot;Utilize: stop | start | restart&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos dar permissao e colocar na inicialização&lt;br /&gt;
 chmod +x /etc/init.d/rtpproxy &lt;br /&gt;
 chkconfig --add rtpproxy&lt;br /&gt;
 /etc/init.d/rtpproxy start&lt;br /&gt;
&lt;br /&gt;
===Criando o arquivo opensips.cfg===&lt;br /&gt;
O arquivo opensips.cfg é a onde a coisa toda acontece para o opensips, claro que ele dependerá de informações que estarão no banco de dados, mas é onde criamos todas as nossas rotas e validações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Este tutorial nao esta terminado, este arquivo ainda esta em testes &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
####### Global Parameters #########&lt;br /&gt;
debug=3&lt;br /&gt;
log_stderror=no&lt;br /&gt;
log_facility=LOG_LOCAL0&lt;br /&gt;
&lt;br /&gt;
fork=yes&lt;br /&gt;
children=4&lt;br /&gt;
&lt;br /&gt;
/* Descomente as linhas abaixo para ativar o debug */&lt;br /&gt;
#debug=7&lt;br /&gt;
#fork=no&lt;br /&gt;
#log_stderror=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Comente a linha abaixo para ativar a descoberta automatica de enderecos locais&lt;br /&gt;
 , isso significa que o sistema ira verificar todos os ips ativos e hosts e entao ativara&lt;br /&gt;
 o protocolo para todos eles */ &lt;br /&gt;
auto_aliases=no&lt;br /&gt;
&lt;br /&gt;
/* Defina aqui o ip a ser utilizado */&lt;br /&gt;
listen=udp:10.254.254.6:5060   # Altere este IP para o seu ambiente&lt;br /&gt;
&lt;br /&gt;
/* Nao usaremos sip por tcp nem tls neste script */&lt;br /&gt;
disable_tcp=yes&lt;br /&gt;
&lt;br /&gt;
disable_tls=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Secao de modulos ########&lt;br /&gt;
&lt;br /&gt;
#set module path&lt;br /&gt;
mpath=&amp;quot;/usr//lib64/opensips/modules/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;signaling.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sl.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;tm.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_timer&amp;quot;, 5)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_inv_timer&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;restart_fr_on_each_reply&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;onreply_avp_mode&amp;quot;, 1)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rr.so&amp;quot;&lt;br /&gt;
/* do not append from tag to the RR (no need for this script) */&lt;br /&gt;
modparam(&amp;quot;rr&amp;quot;, &amp;quot;append_fromtag&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;maxfwd.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sipmsgops.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;mi_fifo.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_name&amp;quot;, &amp;quot;/tmp/opensips_fifo&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_mode&amp;quot;, 0666)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;db_mysql.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;uri.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;uri&amp;quot;, &amp;quot;use_uri_table&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;usrloc.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;nat_bflag&amp;quot;, &amp;quot;FLB_NATB&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_mode&amp;quot;,   2)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;registrar.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;registrar&amp;quot;, &amp;quot;tcp_persistent_flag&amp;quot;, &amp;quot;TCP_PERSISTENT&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
/* Descomente a linha abaixo para nao permitir mais de 10 contatos por conta */&lt;br /&gt;
#modparam(&amp;quot;registrar&amp;quot;, &amp;quot;max_contacts&amp;quot;, 10)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;acc.so&amp;quot;&lt;br /&gt;
/* Quais eventos deverao ser registrados ? */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;early_media&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;report_cancels&amp;quot;, 0)&lt;br /&gt;
/* por padrao nos nao ajustamos a direcao em requisicoes sequencias, &lt;br /&gt;
 se voce deseja usar este recurso tenha certeza de ativar o &amp;quot;appen_fromtag&amp;quot; &lt;br /&gt;
 para o modulo &amp;quot;rr&amp;quot; */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;detect_direction&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;failed_transaction_flag&amp;quot;, &amp;quot;FLT_ACCFAILED&amp;quot;)&lt;br /&gt;
/* Gatilhos para accounting  (flags) */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_extra&amp;quot;, &lt;br /&gt;
	&amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_extra&amp;quot;, &amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;auth.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;auth_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;calculate_ha1&amp;quot;, yes)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;password_column&amp;quot;, &amp;quot;password&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;load_credentials&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;permissions.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;permissions&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;alias_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;alias_db&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;presence.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;presence&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
#loadmodule &amp;quot;presence_xml.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;dialog.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_mode&amp;quot;, 2)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_url&amp;quot;,&amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;dlg_match_mode&amp;quot;, 1)&lt;br /&gt;
#modparam(&amp;quot;dialog&amp;quot;, &amp;quot;default_timeout&amp;quot;, 60)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;siptrace.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;trace_flag&amp;quot;, 22)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;traced_user_avp&amp;quot;, &amp;quot;$avp(s:traceuser)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;nathelper.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;natping_interval&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;ping_nated_only&amp;quot;, 1)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_bflag&amp;quot;, &amp;quot;FLB_NATSIPPING&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_from&amp;quot;, &amp;quot;sip:pinger@10.254.254.6&amp;quot;) # Altere o ip para o ip do servidor&lt;br /&gt;
modparam(&amp;quot;nathelper|registrar&amp;quot;, &amp;quot;received_avp&amp;quot;, &amp;quot;$avp(RECEIVED)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rtpproxy.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;rtpproxy&amp;quot;, &amp;quot;rtpproxy_sock&amp;quot;, &amp;quot;udp:127.0.0.1:7722&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Logica de roteamento ########&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route {&lt;br /&gt;
&lt;br /&gt;
	if (!mf_process_maxfwd_header(&amp;quot;3&amp;quot;)) {&lt;br /&gt;
                send_reply(&amp;quot;483&amp;quot;,&amp;quot;looping&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;REQUISICAO RECEBIDA, ENVIANDO PARA REQINIT&amp;quot;);&lt;br /&gt;
	# Checagem inicial por requisicao&lt;br /&gt;
	route(REQINIT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA NAT&amp;quot;);&lt;br /&gt;
	# Deteccao de nat&lt;br /&gt;
	route(NAT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA WITHINDLG&amp;quot;);&lt;br /&gt;
	# Gerenciando requisicaoes com dialog&lt;br /&gt;
	route(WITHINDLG);&lt;br /&gt;
&lt;br /&gt;
	# Manipulando requisicoes iniciais (nao consta To tag)&lt;br /&gt;
	&lt;br /&gt;
	# Processando CANCEL&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;CANCEL&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD CANCEL&amp;quot;);&lt;br /&gt;
		if(t_check_trans()){&lt;br /&gt;
			t_relay();&lt;br /&gt;
		}&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	t_check_trans();&lt;br /&gt;
&lt;br /&gt;
	# Enviando para autenticacao&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA AUTENTICACAO&amp;quot;);&lt;br /&gt;
	route(AUTH);&lt;br /&gt;
&lt;br /&gt;
	# gravando rota para formacao dos dialogs (caso sejam roteados)&lt;br /&gt;
	# removemos qualquer cabecalho de rota pre carregado&lt;br /&gt;
	remove_hf(&amp;quot;Route&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE OU SIBSCRIBE&amp;quot;);&lt;br /&gt;
		record_route();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Contabilizando (acc) INVITES&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE, FAZENDOA ACC&amp;quot;);&lt;br /&gt;
		setflag(FLT_ACC);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando chamada para destinos externos&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA SIPOUT&amp;quot;);&lt;br /&gt;
	route(SIPOUT);&lt;br /&gt;
&lt;br /&gt;
	# Requisicoes para dominio local&lt;br /&gt;
	&lt;br /&gt;
	# Roteando requisicoes de PRESENCE&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PRESENCE&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	route(PRESENCE);&lt;br /&gt;
&lt;br /&gt;
	# Gerenciando pedidos de registro&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA REGISTRAR&amp;quot;);	&lt;br /&gt;
	route(REGISTRAR);&lt;br /&gt;
&lt;br /&gt;
	if($ru==&amp;quot;&amp;quot;){&lt;br /&gt;
		xlog(&amp;quot;ru --&amp;gt; vazio&amp;quot;);&lt;br /&gt;
		# Requisicao sem usuario na RURI&lt;br /&gt;
		sl_send_reply(&amp;quot;484&amp;quot;, &amp;quot;Address Incomplete&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando requisicao para PSTN&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PSTN&amp;quot;);&lt;br /&gt;
	route(PSTN);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Salvando informacao de quem originou a chamad&lt;br /&gt;
	$avp(callee)=$rU;&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA DISPATCH PSTN&amp;quot;);&lt;br /&gt;
	route(FSDISPATCH);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	# Servico de localizacao de usuario&lt;br /&gt;
	route(LOCATION);&lt;br /&gt;
&lt;br /&gt;
	# Efetuando o relay (encaminhamento)&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[RELAY] {&lt;br /&gt;
	if(check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
		setbflag(FLB_NATB);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(isflagset(FLT_NATS) || isbflagset(FLB_NATB)){&lt;br /&gt;
		#route(RTPPROXY);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
#		t_on_reply(&amp;quot;REPLY_ONE&amp;quot;);&lt;br /&gt;
#		t_on_failure(&amp;quot;FAIL_ONE&amp;quot;);&lt;br /&gt;
#	}&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;AQUI TENTAMOS ENVIAR A CHAMADA $fU $tU&amp;quot;);&lt;br /&gt;
	if(!t_relay()){&lt;br /&gt;
		xlog(&amp;quot;FALHA EM ENVIAR A CHAMADA, NAO FOI POSSIVEL FAZER O RELAY&amp;quot;);&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
	}&lt;br /&gt;
	xlog(&amp;quot;CHAMADA FOI ENVIADA AQUI, QUAL O ERRO ENTAO&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REQINIT] {&lt;br /&gt;
	if(!mf_process_maxfwd_header(&amp;quot;10&amp;quot;)){&lt;br /&gt;
		sl_send_reply(&amp;quot;483&amp;quot;, &amp;quot;Too Many Hops&amp;quot;);&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[WITHINDLG] {&lt;br /&gt;
	if(has_totag()){&lt;br /&gt;
		if(loose_route()){&lt;br /&gt;
			if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
				setflag(FLT_ACC);&lt;br /&gt;
				setflag(FLT_ACCFAILED);&lt;br /&gt;
			}&lt;br /&gt;
			route(RELAY);&lt;br /&gt;
		}else{&lt;br /&gt;
			if(is_method(&amp;quot;SUBSCRIBE&amp;quot;) &amp;amp;&amp;amp; uri==myself) {&lt;br /&gt;
				# requisicao de subscribe pre-estabelecida&lt;br /&gt;
				route(PRESENCE);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;ACK&amp;quot;)){&lt;br /&gt;
				if(t_check_trans()){&lt;br /&gt;
					t_relay();&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}else{&lt;br /&gt;
				# ACK para transacao nao encontrada, ignoramos...&lt;br /&gt;
				exit;&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			sl_send_reply(&amp;quot;404&amp;quot;, &amp;quot;Not Here&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		}	&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REGISTRAR] {&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		if(isflagset(FLT_NATS)){&lt;br /&gt;
			setbflag(FLB_NATB);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(!save(&amp;quot;location&amp;quot;)){&lt;br /&gt;
			sl_reply_error();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[LOCATION] {&lt;br /&gt;
&lt;br /&gt;
	alias_db_lookup(&amp;quot;dbaliases&amp;quot;);&lt;br /&gt;
	if(!lookup(&amp;quot;location&amp;quot;)){&lt;br /&gt;
		switch($rc) {&lt;br /&gt;
			case -1:&lt;br /&gt;
			case -3:&lt;br /&gt;
				t_newtran();&lt;br /&gt;
				t_reply(&amp;quot;404&amp;quot;,&amp;quot;Not Found&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			case -2:&lt;br /&gt;
				sl_send_reply(&amp;quot;405&amp;quot;, &amp;quot;Method Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		setflag(FLT_ACCMISSED);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PRESENCE] {&lt;br /&gt;
	if(!is_method(&amp;quot;PUBLISH|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!t_newtran()){&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
		handle_publish();&lt;br /&gt;
	}else if(is_method(&amp;quot;SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		handle_subscribe();&lt;br /&gt;
	}&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[AUTH]{&lt;br /&gt;
	xlog(&amp;quot;PEDIDO DE AUTENTICACAO&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		# atentica pedidos de registro&lt;br /&gt;
		if(!www_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
			www_challenge(&amp;quot;&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if($au!=$tU){&lt;br /&gt;
			sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	}else{&lt;br /&gt;
		if(route(FSINBOUND)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(check_source_address(&amp;quot;0&amp;quot;)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(from_uri==myself){&lt;br /&gt;
			if(!proxy_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
				proxy_challenge(&amp;quot;&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
				if($au!=$tU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}else{&lt;br /&gt;
				if($au!=$fU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			# Validamos (autenticamos) o usuario&lt;br /&gt;
			consume_credentials();&lt;br /&gt;
		}else{&lt;br /&gt;
		&lt;br /&gt;
			# usuario nao e local, vamos negar&lt;br /&gt;
			if(!uri==myself){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not relaying&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}	&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[NAT] {&lt;br /&gt;
	force_rport();&lt;br /&gt;
	if(nat_uac_test(&amp;quot;19&amp;quot;)){&lt;br /&gt;
		if(method==&amp;quot;REGISTER&amp;quot;){&lt;br /&gt;
			fix_nated_register();&lt;br /&gt;
		}else{&lt;br /&gt;
			fix_nated_contact();&lt;br /&gt;
		}&lt;br /&gt;
		setflag(FLT_NATS);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[RTPPROXY] {&lt;br /&gt;
	if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}else if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		engage_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!has_totag()){&lt;br /&gt;
&lt;br /&gt;
		if(!check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
			add_rr_param(&amp;quot;;nat=yes&amp;quot;);&lt;br /&gt;
			xlog(&amp;quot;NAT yes NAO ENCONTRADO&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[SIPOUT]{&lt;br /&gt;
	if(!uri==myself){&lt;br /&gt;
		append_hf(&amp;quot;P-hint: outbound\r\n&amp;quot;);&lt;br /&gt;
		route(RELAY);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PSTN]{&lt;br /&gt;
        # neste caso apenas para exemplificar um uso simples&lt;br /&gt;
        # vamos fazer o redirecionamento par ao asterisk&lt;br /&gt;
        # realizar a dicagem da chamada&lt;br /&gt;
&lt;br /&gt;
        if(!($rU=~&amp;quot;^(\+|00)[1-9][0-9]{3,20}$&amp;quot;))&lt;br /&gt;
                return;&lt;br /&gt;
&lt;br /&gt;
        ## a regra acima aceita para discagem externa qualquer numero&lt;br /&gt;
        # comecado com 00 ou +&lt;br /&gt;
        #&lt;br /&gt;
&lt;br /&gt;
        if(from_uri!=myself){&lt;br /&gt;
                sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $ru = &amp;quot;sip:&amp;quot; + $rU + &amp;quot;@&amp;quot; + &amp;quot;10.254.254.6:5090&amp;quot;;&lt;br /&gt;
        xlog(&amp;quot;NOVO DESTINO: $ru&amp;quot;);&lt;br /&gt;
        route(RELAY);&lt;br /&gt;
        exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[XMLRPC]{&lt;br /&gt;
	# nao vamos implementar esta funcionalidade&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSINBOUND] {&lt;br /&gt;
	# verificar para validar o ip do asterisk:porta&lt;br /&gt;
	# se bater , responder com return 1;&lt;br /&gt;
	if($si==&amp;quot;10.254.254.6&amp;quot; &amp;amp;&amp;amp; $sp==&amp;quot;5090&amp;quot;){&lt;br /&gt;
		return(1);&lt;br /&gt;
	}else{&lt;br /&gt;
		return(-1);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSDISPATCH] {&lt;br /&gt;
&lt;br /&gt;
	if(!is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(route(FSINBOUND)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;CAIMOS NO SWITCH, VAMOS LOCALIZAR O PERFIL DA CHAMADA $rU&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if($rU =~ &amp;quot;^41$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH expressa comeca e termina em 41&amp;quot;);&lt;br /&gt;
			#regra de menu de voicemail, apenas &lt;br /&gt;
			# usuarios autenticados&lt;br /&gt;
			if($au==&amp;quot;&amp;quot;){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$rU = &amp;quot;vma-&amp;quot; + $au;&lt;br /&gt;
	}else if($rU =~ &amp;quot;^441[0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCA 441XX &amp;quot;);&lt;br /&gt;
			# numero discado comeca com 441 seguido de dois digitos&lt;br /&gt;
			# chamada direta para inbox do voicemail&lt;br /&gt;
			strip(2);&lt;br /&gt;
			route(FSVBOX);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^433[01][0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH OPCAO 433[01]XX&amp;quot;);&lt;br /&gt;
			# numero comecado em 443, seguido de 0 ou 1, mais dois digitos&lt;br /&gt;
			# sistema de conferencia&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^45[0-9]+$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCAO 45X.&amp;quot;);&lt;br /&gt;
			#numero comecado com 45, seguindo de numeros;&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else{&lt;br /&gt;
			xlog(&amp;quot;OPCAO DEFAULT DO SWITCH&amp;quot;);&lt;br /&gt;
			# usuario offline, enviando para voicemail&lt;br /&gt;
			if(!registered(&amp;quot;location&amp;quot;)){&lt;br /&gt;
				route(FSVBOX);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			# usuario online, fazendo bridging&lt;br /&gt;
			xlog(&amp;quot;USUARIO ESTA ONLINE VAMOS FAZER BRIDGE&amp;quot;);&lt;br /&gt;
			prefix(&amp;quot;kb-&amp;quot;);&lt;br /&gt;
			if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
				t_on_failure(&amp;quot;FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
	}&lt;br /&gt;
	route(FSRELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSVBOX&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($rU =~ &amp;quot;^441[0-9][0-9]&amp;quot;){&lt;br /&gt;
		strip(2);&lt;br /&gt;
	}&lt;br /&gt;
	prefix(&amp;quot;vm-&amp;quot;);&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[FSRELAY] {&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSRELAY&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
branch_route[BRANCH_ONE]{&lt;br /&gt;
	xlog(&amp;quot;new branch at $ru&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
onreply_route[REPLY_ONE]{&lt;br /&gt;
	xlog(&amp;quot;Incoming reply&amp;quot;);&lt;br /&gt;
	if((isflagset(FLT_NATS) || isbflagset(FLB_NATB) &amp;amp;&amp;amp; status =~ &amp;quot;(183)|(2[0-9][0-9])&amp;quot;)){&lt;br /&gt;
		#rtpproxy_offer();&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	if(isbflagset(FLB_NATB)){&lt;br /&gt;
		fix_nated_contact();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_ONE]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_ONE&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_check_status(&amp;quot;486|408|480&amp;quot;)){&lt;br /&gt;
		$rU = $avp(callee);&lt;br /&gt;
		$var(newbranch) = 1;&lt;br /&gt;
		route(FSVBOX);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testes com Opensips (registro)==&lt;br /&gt;
&lt;br /&gt;
Antes de podermos testar precisamos iniciar o serviço, no momento estamos com ele operando em modo debug, então a inicialização deve ser realizada com o comando abaixo&lt;br /&gt;
 /etc/init.d/opensips debug&lt;br /&gt;
&lt;br /&gt;
Abra uma nova sessão no servidor e então vamos criar os usuários&lt;br /&gt;
 opensipsctl add 101 101&lt;br /&gt;
 opensipsctl add 102 102&lt;br /&gt;
 opensipsctl add 103 103&lt;br /&gt;
&lt;br /&gt;
usuario 101 com senha 101 e assim por diante&lt;br /&gt;
&lt;br /&gt;
Faça a onexão com seu softphone, aqui para testes utilizei o jitsi e o zoiper, neste momento vamos apenas fazer o registro do usuário para testar a autenticação, se você tentar realizar uma discagem não funcionará pois neste caso o processo depende do Asterisk que ainda não está configurado, vamos dar inicio nesta configuração agora.&lt;br /&gt;
&lt;br /&gt;
==Asterisk==&lt;br /&gt;
Não vamos dar muitos detalhes da instalação do asterisk aqui, a ideia é simplesmente ter o mesmo funcionando da forma que necessitamos.&lt;br /&gt;
&lt;br /&gt;
===Instalando dependências===&lt;br /&gt;
&lt;br /&gt;
Dependências necessárias para a instalação do Asterisk.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Asterisk 1.8===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget -c http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8-current.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Compilando o Asterisk 1.8====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar zxvf asterisk-1.8-current.tar.gz&lt;br /&gt;
cd asterisk-1.8-current.tar.gz&lt;br /&gt;
./configure  --disable-xmldoc&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make samples&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Após a instalação , abra o arquivo /etc/asterisk/sip.conf, localize a linha '''udpbindaddr=0.0.0.0''' e altere para '''udpbindaddr=0.0.0.0:5090'''  , depois ao fim do arquivo adicione.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
type=peer&lt;br /&gt;
host=10.254.254.6&lt;br /&gt;
port=5060&lt;br /&gt;
qualify=yes&lt;br /&gt;
context=opensips&lt;br /&gt;
insecure=port,invite&lt;br /&gt;
canreinvite=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora abra o arquivo '''/etc/asterisk/extensions.conf''' , crie no fim do arquivo a seguinte entrada.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _kb-1XX,1,NoOp(CHAMADA INTERNA - FAZER BRIDGE - ${CALLERID(num)} ${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Dial(SIP/opensips/${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Goto(opensips,vm-${EXTEN:3},1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vm-1XX,1,NoOp(CHAMADA PARA VOICEMAIL)&lt;br /&gt;
same =&amp;gt; n,Voicemail(${EXTEN:3}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vma-1XX,1,NoOp(CHAMADA PARA VOICEMAIL - ADMINISTRATIVO)&lt;br /&gt;
same =&amp;gt; n,VoicemailMain(${EXTEN:4}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _3[01]XX,1,NoOp(CHAMADA PARA CONFERENCIA)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,ConfBridge(${EXTEN},cM1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _00.,1,NoOp(CHAMADA PARA PSTN)&lt;br /&gt;
same =&amp;gt; n,Wait(2)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,Wait(1)&lt;br /&gt;
same =&amp;gt; n,PlayBack(tt-monkeys)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; h,1,Hangup()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finalmente precisamos criar as entradas do voicemail, para isso altere o arquivo '''/etc/asterisk/voicemail.conf''' localize o contexto '''[default]''' e então adicione as entradas para seu voicemail, segue dois exemplos abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
101 =&amp;gt; 123123,Mike Tesliuk&lt;br /&gt;
102 =&amp;gt; 123123,Mike Tesliuk 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Feito isso, faça um restart no asterisk&lt;br /&gt;
 /etc/init.d/asterisk restart&lt;br /&gt;
&lt;br /&gt;
Agora você ja poderá fazer os testes, basicamente criamos as seguintes situações para serem testadas.&lt;br /&gt;
&lt;br /&gt;
*1 Autenticação de usuários&lt;br /&gt;
*2 Chamada entre usuários&lt;br /&gt;
*3 Encaminhamento para caixa postal&lt;br /&gt;
*4 Acesso a caixa postal&lt;br /&gt;
*5 Acesso a conferência&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1406</id>
		<title>OpenSIPs e Asterisk - LIKE CentOS</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1406"/>
		<updated>2013-09-02T19:23:33Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: /* Preparando a Configuração */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=white&amp;gt; NÃO SIGA ESTE DOCUMENTO. O MESMO SE ENCONTRA EM DESEVOLVIMENTO&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este tutorial é baseado em um tutorial originalmente escrito pelo Mike, se quiser verificar o tutorial original acesse http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk&lt;br /&gt;
&lt;br /&gt;
Para esta implementação utilizamos CentOS 6.4 64 Bits , OpenSIPS 1.9 e Asterisk 1.8.23 &lt;br /&gt;
&lt;br /&gt;
==Funcionalidades==&lt;br /&gt;
Este tutorial tem por objetivo atingir as seguintes funcionalidades.&lt;br /&gt;
*Autenticação de usuário&lt;br /&gt;
*Registro de usuário&lt;br /&gt;
*Localização de usuário (encaminhamento de chamadas)&lt;br /&gt;
*Roteamento de chamadas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Através do Asterisk estenderemos estas funcionalidades agregando.&lt;br /&gt;
*Correio de voz (Voicemail)&lt;br /&gt;
*Conferencia &lt;br /&gt;
*SBC ( Pode ser utilizado para transcoding, esconder topologia, play de mensagens e tarifação )&lt;br /&gt;
*Outros serviços de media (Anuncios, Ura's e coisas do tipo)&lt;br /&gt;
&lt;br /&gt;
==Definições==&lt;br /&gt;
Para um melhor entendimento da solução vamos expor aqui algumas definições de nosso sistema.&lt;br /&gt;
*Usuários locais terão ramais com 3 digitos (ex: 101, 102, 103)&lt;br /&gt;
*Identidade do correio de voz será o mesmo do ramal&lt;br /&gt;
*Serviços de media (acesso a voicemail e outros) receberão rotas de 4 digitos&lt;br /&gt;
*Opensips e Asterisk utilizarão o mesmo servidor (Neste caso IP: 10.254.254.6)&lt;br /&gt;
*Os serviços rodarão nas portas 5060 (opensips) , 5090 (Asterisk)&lt;br /&gt;
&lt;br /&gt;
==Funcionamento==&lt;br /&gt;
A autenticação do usuário será realizada pelo OpenSIPs, quando uma chamada é autenticada então ela serguirá:&lt;br /&gt;
*Se o usuário de destino não está online a chamada será enviada para o Asterisk para função de correio de voz&lt;br /&gt;
*Se o usuário está online a chamada será encaminhada para o Asterisk, desta forma é possivel acionar funcionalidades como anuncios, definição de tempo de chamada, forçar codecs e outras funcionalidades.&lt;br /&gt;
*Asterisk envia a chamada novamente para o OpenSIPs que verificará no location e entregará a chamada para o usuário.&lt;br /&gt;
*Se a chamada não for atendida o Opensips irá re-encaminhar para o Asterisk direcionando para função de voicemail&lt;br /&gt;
&lt;br /&gt;
==OpenSIPs==&lt;br /&gt;
Vamos iniciar o processo de instalação com o OpenSIPs, siga os procedimentos abaixo para evitar qualquer dificuldade.&lt;br /&gt;
&lt;br /&gt;
===Dependencias===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====Atualizando o sistema====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum -y update&lt;br /&gt;
yum -y upgrade&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pacotes de desenvolvimento ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall 'Development Tools' -y&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
yum install wget mysql-server pcre-devel libxml2-devel xmlrpc-c-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Desabilitando o SELINUX ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/bin/sed -i -e s,'SELINUX=enforcing','SELINUX=disabled', /etc/selinux/config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durante a instalação o sistema irá lhe perguntar a senha de root para o servidor MySQL é importante que você se lembre da mesma posteriormente pois utilizaremos a mesma.&lt;br /&gt;
&lt;br /&gt;
===Compilando o OpenSIPs===&lt;br /&gt;
Para manter um padrão onde os dados estao vamos utilizar o diretório /usr/src/ para o download de código fonte.&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/&lt;br /&gt;
 wget -c http://opensips.org/pub/opensips/1.9.1/src/opensips-1.9.1_src.tar.gz&lt;br /&gt;
 tar -xzvf opensips-1.9.1_src.tar.gz&lt;br /&gt;
 cd opensips-1.9.1-tls/&lt;br /&gt;
 make menuconfig&lt;br /&gt;
&lt;br /&gt;
Neste ponto o sistema irá abrir uma tela com algumas opções para selecionar, Acesse a primeira opção do menu, no submenu acesse a segunda opção ( Configure excluded modules ), selecione os módulos db_mysql , dialplan , mi_xmlrpc , presence e presence_xml&lt;br /&gt;
&lt;br /&gt;
Agora volte ao submenu, e selecione a opção Save Changes, volte para o menu principal e selecione '''Compile and Install OpenSips''' , deixe que o sistema execute suas funções.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ao finalizar a compilação você retornará ao menu, va na opção '''Exit and Save all changes'''&lt;br /&gt;
&lt;br /&gt;
===Preparando a Configuração===&lt;br /&gt;
&lt;br /&gt;
Antes de darmos inicio ao arquivo de configuração, vamos ajustar algumas questões, o opensips instala os arquivos (se voce nao alterar o parametro) em /usr/local, consequentemente as configurações ficam em /usr/local/etc , eu por padrão faço um link para o diretório /etc, assim acesso as configurações em /etc/opensips&lt;br /&gt;
&lt;br /&gt;
 ln -s /usr/etc/opensips/ /etc/&lt;br /&gt;
&lt;br /&gt;
Para o script de inicialização execute o comando abaixo&lt;br /&gt;
 cp packaging/fedora/opensips.init /etc/init.d/opensips&lt;br /&gt;
 chmod +x /etc/init.d/opensips&lt;br /&gt;
 chkconfig --add opensips&lt;br /&gt;
 cp packaging/fedora/opensips.sysconfig /etc/sysconfig&lt;br /&gt;
&lt;br /&gt;
 groupadd opensips&lt;br /&gt;
 mkdir /var/run/opensips&lt;br /&gt;
 useradd -d /var/run/opensips/ -s /bin/false -g opensips opensips&lt;br /&gt;
 chown -R opensips.opensips /var/run/opensips&lt;br /&gt;
&lt;br /&gt;
===Configurando o opensipsctl===&lt;br /&gt;
O opensipsctl (e opensipsdbctl) utilizam o arquivo de configuração /etc/opensips/opensipsctlrc, abaixo segue o conteúdo do arquivo. (Sugiro que você faça um backup dos arquivos originais para ter uma copia, existem parametros que você pode estudar depois).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DBENGINE=MYSQL&lt;br /&gt;
DBHOST=localhost&lt;br /&gt;
DBNAME=opensips&lt;br /&gt;
DBRWUSER=opensips&lt;br /&gt;
DBRWPW=&amp;quot;opensipsrw&amp;quot;&lt;br /&gt;
SIP_DOMAIN=10.254.254.6  ### caso voce esteja usando outro ip altere aqui&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DBROOTUSER=&amp;quot;root&amp;quot;&lt;br /&gt;
INSTALL_EXTRA_TABLES=ask&lt;br /&gt;
ALIASES_TYPE=&amp;quot;DB&amp;quot;&lt;br /&gt;
MI_CONNECTOR=FIFO:/tmp/opensips_fifo&lt;br /&gt;
# VERIFY_ACL=1&lt;br /&gt;
# ACL_GROUPS=&amp;quot;local ld int voicemail free-pstn&amp;quot;&lt;br /&gt;
# VERBOSE=1&lt;br /&gt;
# STORE_PLAINTEXT_PW=0&lt;br /&gt;
# NOHLPRINT=1&lt;br /&gt;
PID_FILE=/var/run/opensips/opensips.pid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Criando o banco de dados===&lt;br /&gt;
Agora que temos nosso arquivo configurado vamos fazer a criação do banco de dados, execute o comando abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
opensipsdbctl create opensips&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema irá lhe perguntar algumas coisas, responda Y (sim) para todas para que ele instale todas as tabelas, não usaremos todas elas, mas desta forma você fica com praticamente tudo criado para o caso de uma expansão dos recursos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Instalando o RTP Proxy===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/src/&lt;br /&gt;
wget -c http://b2bua.org/chrome/site/rtpproxy-1.2.1.tar.gz&lt;br /&gt;
tar -xzvf rtpproxy-1.2.1.tar.gz&lt;br /&gt;
cd rtpproxy-1.2.1&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
groupadd rtpproxy&lt;br /&gt;
useradd -d /var/run/rtpproxy -s /bin/true -g rtpproxy rtpproxy&lt;br /&gt;
mkdir /var/log/rtpproxy&lt;br /&gt;
mkdir /var/run/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/log/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/run/rtpproxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Arquivo de inicialização====&lt;br /&gt;
'''/etc/init.d/rtpproxy'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# Este script e de autoria de Mike Tesliuk&lt;br /&gt;
# qualquer falha no mesmo por favor informe &lt;br /&gt;
# atraves do email mike (a) tesliuk.com&lt;br /&gt;
#&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:          rtpproxy&lt;br /&gt;
# Required-Start:    $syslog $network $local_fs $time&lt;br /&gt;
# Required-Stop:     $syslog $network $local_fs&lt;br /&gt;
# Default-Start:     2 3 4 5&lt;br /&gt;
# Default-Stop:      0 1 6&lt;br /&gt;
# Short-Description: Start the RTPPROXY server&lt;br /&gt;
# Description:       Start the RTPPROXY server&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin&lt;br /&gt;
USELOG=1&lt;br /&gt;
USER=rtpproxy&lt;br /&gt;
# Altere o ip abaixo para o ip de seu sistema&lt;br /&gt;
IPADDR=&amp;quot;10.254.254.6&amp;quot;&lt;br /&gt;
&lt;br /&gt;
. /lib/lsb/init-functions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
start(){&lt;br /&gt;
        echo &amp;quot;Iniciando RTP PROXY &amp;quot;&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                if [ &amp;quot;${USELOG}&amp;quot; = &amp;quot;1&amp;quot; ]; then&lt;br /&gt;
                        echo &amp;quot;Iniciando com LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER -F -f d DBUG 2&amp;amp;&amp;gt; /var/log/rtpproxy/rtpproxy.log &amp;amp;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Iniciando sem LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER  -F -f d DBUG 2&amp;amp;&amp;gt; /dev/null&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;START OK&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
        else&lt;br /&gt;
                echo &amp;quot;Processo ja em execucao&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
stop(){&lt;br /&gt;
&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                echo &amp;quot;Processo nao encontrado&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
                kill -9 $(pidof rtpproxy)&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;STOP OK&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Falha em realizar stop do servico&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
case $1 in&lt;br /&gt;
        start)&lt;br /&gt;
                start&lt;br /&gt;
        ;;&lt;br /&gt;
        stop)&lt;br /&gt;
                stop&lt;br /&gt;
        ;;&lt;br /&gt;
        restart)&lt;br /&gt;
                stop&lt;br /&gt;
                start&lt;br /&gt;
&lt;br /&gt;
        ;;&lt;br /&gt;
        *)&lt;br /&gt;
                echo &amp;quot;Utilize: stop | start | restart&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos dar permissao e colocar na inicialização&lt;br /&gt;
 chmod +x /etc/init.d/rtpproxy &lt;br /&gt;
 update-rc.d rtpproxy defaults&lt;br /&gt;
 /etc/init.d/rtpproxy start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Criando o arquivo opensips.cfg===&lt;br /&gt;
O arquivo opensips.cfg é a onde a coisa toda acontece para o opensips, claro que ele dependerá de informações que estarão no banco de dados, mas é onde criamos todas as nossas rotas e validações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Este tutorial nao esta terminado, este arquivo ainda esta em testes &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
####### Global Parameters #########&lt;br /&gt;
debug=3&lt;br /&gt;
log_stderror=no&lt;br /&gt;
log_facility=LOG_LOCAL0&lt;br /&gt;
&lt;br /&gt;
fork=yes&lt;br /&gt;
children=4&lt;br /&gt;
&lt;br /&gt;
/* Descomente as linhas abaixo para ativar o debug */&lt;br /&gt;
#debug=7&lt;br /&gt;
#fork=no&lt;br /&gt;
#log_stderror=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Comente a linha abaixo para ativar a descoberta automatica de enderecos locais&lt;br /&gt;
 , isso significa que o sistema ira verificar todos os ips ativos e hosts e entao ativara&lt;br /&gt;
 o protocolo para todos eles */ &lt;br /&gt;
auto_aliases=no&lt;br /&gt;
&lt;br /&gt;
/* Defina aqui o ip a ser utilizado */&lt;br /&gt;
listen=udp:10.254.254.6:5060   # Altere este IP para o seu ambiente&lt;br /&gt;
&lt;br /&gt;
/* Nao usaremos sip por tcp nem tls neste script */&lt;br /&gt;
disable_tcp=yes&lt;br /&gt;
&lt;br /&gt;
disable_tls=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Secao de modulos ########&lt;br /&gt;
&lt;br /&gt;
#set module path&lt;br /&gt;
mpath=&amp;quot;/usr//lib64/opensips/modules/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;signaling.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sl.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;tm.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_timer&amp;quot;, 5)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_inv_timer&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;restart_fr_on_each_reply&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;onreply_avp_mode&amp;quot;, 1)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rr.so&amp;quot;&lt;br /&gt;
/* do not append from tag to the RR (no need for this script) */&lt;br /&gt;
modparam(&amp;quot;rr&amp;quot;, &amp;quot;append_fromtag&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;maxfwd.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sipmsgops.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;mi_fifo.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_name&amp;quot;, &amp;quot;/tmp/opensips_fifo&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_mode&amp;quot;, 0666)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;db_mysql.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;uri.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;uri&amp;quot;, &amp;quot;use_uri_table&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;usrloc.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;nat_bflag&amp;quot;, &amp;quot;FLB_NATB&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_mode&amp;quot;,   2)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;registrar.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;registrar&amp;quot;, &amp;quot;tcp_persistent_flag&amp;quot;, &amp;quot;TCP_PERSISTENT&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
/* Descomente a linha abaixo para nao permitir mais de 10 contatos por conta */&lt;br /&gt;
#modparam(&amp;quot;registrar&amp;quot;, &amp;quot;max_contacts&amp;quot;, 10)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;acc.so&amp;quot;&lt;br /&gt;
/* Quais eventos deverao ser registrados ? */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;early_media&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;report_cancels&amp;quot;, 0)&lt;br /&gt;
/* por padrao nos nao ajustamos a direcao em requisicoes sequencias, &lt;br /&gt;
 se voce deseja usar este recurso tenha certeza de ativar o &amp;quot;appen_fromtag&amp;quot; &lt;br /&gt;
 para o modulo &amp;quot;rr&amp;quot; */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;detect_direction&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;failed_transaction_flag&amp;quot;, &amp;quot;FLT_ACCFAILED&amp;quot;)&lt;br /&gt;
/* Gatilhos para accounting  (flags) */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_extra&amp;quot;, &lt;br /&gt;
	&amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_extra&amp;quot;, &amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;auth.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;auth_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;calculate_ha1&amp;quot;, yes)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;password_column&amp;quot;, &amp;quot;password&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;load_credentials&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;permissions.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;permissions&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;alias_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;alias_db&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;presence.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;presence&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
#loadmodule &amp;quot;presence_xml.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;dialog.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_mode&amp;quot;, 2)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_url&amp;quot;,&amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;dlg_match_mode&amp;quot;, 1)&lt;br /&gt;
#modparam(&amp;quot;dialog&amp;quot;, &amp;quot;default_timeout&amp;quot;, 60)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;siptrace.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;trace_flag&amp;quot;, 22)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;traced_user_avp&amp;quot;, &amp;quot;$avp(s:traceuser)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;nathelper.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;natping_interval&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;ping_nated_only&amp;quot;, 1)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_bflag&amp;quot;, &amp;quot;FLB_NATSIPPING&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_from&amp;quot;, &amp;quot;sip:pinger@10.254.254.6&amp;quot;) # Altere o ip para o ip do servidor&lt;br /&gt;
modparam(&amp;quot;nathelper|registrar&amp;quot;, &amp;quot;received_avp&amp;quot;, &amp;quot;$avp(RECEIVED)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rtpproxy.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;rtpproxy&amp;quot;, &amp;quot;rtpproxy_sock&amp;quot;, &amp;quot;udp:127.0.0.1:7722&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Logica de roteamento ########&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route {&lt;br /&gt;
&lt;br /&gt;
	if (!mf_process_maxfwd_header(&amp;quot;3&amp;quot;)) {&lt;br /&gt;
                send_reply(&amp;quot;483&amp;quot;,&amp;quot;looping&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;REQUISICAO RECEBIDA, ENVIANDO PARA REQINIT&amp;quot;);&lt;br /&gt;
	# Checagem inicial por requisicao&lt;br /&gt;
	route(REQINIT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA NAT&amp;quot;);&lt;br /&gt;
	# Deteccao de nat&lt;br /&gt;
	route(NAT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA WITHINDLG&amp;quot;);&lt;br /&gt;
	# Gerenciando requisicaoes com dialog&lt;br /&gt;
	route(WITHINDLG);&lt;br /&gt;
&lt;br /&gt;
	# Manipulando requisicoes iniciais (nao consta To tag)&lt;br /&gt;
	&lt;br /&gt;
	# Processando CANCEL&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;CANCEL&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD CANCEL&amp;quot;);&lt;br /&gt;
		if(t_check_trans()){&lt;br /&gt;
			t_relay();&lt;br /&gt;
		}&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	t_check_trans();&lt;br /&gt;
&lt;br /&gt;
	# Enviando para autenticacao&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA AUTENTICACAO&amp;quot;);&lt;br /&gt;
	route(AUTH);&lt;br /&gt;
&lt;br /&gt;
	# gravando rota para formacao dos dialogs (caso sejam roteados)&lt;br /&gt;
	# removemos qualquer cabecalho de rota pre carregado&lt;br /&gt;
	remove_hf(&amp;quot;Route&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE OU SIBSCRIBE&amp;quot;);&lt;br /&gt;
		record_route();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Contabilizando (acc) INVITES&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE, FAZENDOA ACC&amp;quot;);&lt;br /&gt;
		setflag(FLT_ACC);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando chamada para destinos externos&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA SIPOUT&amp;quot;);&lt;br /&gt;
	route(SIPOUT);&lt;br /&gt;
&lt;br /&gt;
	# Requisicoes para dominio local&lt;br /&gt;
	&lt;br /&gt;
	# Roteando requisicoes de PRESENCE&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PRESENCE&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	route(PRESENCE);&lt;br /&gt;
&lt;br /&gt;
	# Gerenciando pedidos de registro&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA REGISTRAR&amp;quot;);	&lt;br /&gt;
	route(REGISTRAR);&lt;br /&gt;
&lt;br /&gt;
	if($ru==&amp;quot;&amp;quot;){&lt;br /&gt;
		xlog(&amp;quot;ru --&amp;gt; vazio&amp;quot;);&lt;br /&gt;
		# Requisicao sem usuario na RURI&lt;br /&gt;
		sl_send_reply(&amp;quot;484&amp;quot;, &amp;quot;Address Incomplete&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando requisicao para PSTN&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PSTN&amp;quot;);&lt;br /&gt;
	route(PSTN);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Salvando informacao de quem originou a chamad&lt;br /&gt;
	$avp(callee)=$rU;&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA DISPATCH PSTN&amp;quot;);&lt;br /&gt;
	route(FSDISPATCH);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	# Servico de localizacao de usuario&lt;br /&gt;
	route(LOCATION);&lt;br /&gt;
&lt;br /&gt;
	# Efetuando o relay (encaminhamento)&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[RELAY] {&lt;br /&gt;
	if(check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
		setbflag(FLB_NATB);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(isflagset(FLT_NATS) || isbflagset(FLB_NATB)){&lt;br /&gt;
		#route(RTPPROXY);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
#		t_on_reply(&amp;quot;REPLY_ONE&amp;quot;);&lt;br /&gt;
#		t_on_failure(&amp;quot;FAIL_ONE&amp;quot;);&lt;br /&gt;
#	}&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;AQUI TENTAMOS ENVIAR A CHAMADA $fU $tU&amp;quot;);&lt;br /&gt;
	if(!t_relay()){&lt;br /&gt;
		xlog(&amp;quot;FALHA EM ENVIAR A CHAMADA, NAO FOI POSSIVEL FAZER O RELAY&amp;quot;);&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
	}&lt;br /&gt;
	xlog(&amp;quot;CHAMADA FOI ENVIADA AQUI, QUAL O ERRO ENTAO&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REQINIT] {&lt;br /&gt;
	if(!mf_process_maxfwd_header(&amp;quot;10&amp;quot;)){&lt;br /&gt;
		sl_send_reply(&amp;quot;483&amp;quot;, &amp;quot;Too Many Hops&amp;quot;);&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[WITHINDLG] {&lt;br /&gt;
	if(has_totag()){&lt;br /&gt;
		if(loose_route()){&lt;br /&gt;
			if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
				setflag(FLT_ACC);&lt;br /&gt;
				setflag(FLT_ACCFAILED);&lt;br /&gt;
			}&lt;br /&gt;
			route(RELAY);&lt;br /&gt;
		}else{&lt;br /&gt;
			if(is_method(&amp;quot;SUBSCRIBE&amp;quot;) &amp;amp;&amp;amp; uri==myself) {&lt;br /&gt;
				# requisicao de subscribe pre-estabelecida&lt;br /&gt;
				route(PRESENCE);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;ACK&amp;quot;)){&lt;br /&gt;
				if(t_check_trans()){&lt;br /&gt;
					t_relay();&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}else{&lt;br /&gt;
				# ACK para transacao nao encontrada, ignoramos...&lt;br /&gt;
				exit;&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			sl_send_reply(&amp;quot;404&amp;quot;, &amp;quot;Not Here&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		}	&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REGISTRAR] {&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		if(isflagset(FLT_NATS)){&lt;br /&gt;
			setbflag(FLB_NATB);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(!save(&amp;quot;location&amp;quot;)){&lt;br /&gt;
			sl_reply_error();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[LOCATION] {&lt;br /&gt;
&lt;br /&gt;
	alias_db_lookup(&amp;quot;dbaliases&amp;quot;);&lt;br /&gt;
	if(!lookup(&amp;quot;location&amp;quot;)){&lt;br /&gt;
		switch($rc) {&lt;br /&gt;
			case -1:&lt;br /&gt;
			case -3:&lt;br /&gt;
				t_newtran();&lt;br /&gt;
				t_reply(&amp;quot;404&amp;quot;,&amp;quot;Not Found&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			case -2:&lt;br /&gt;
				sl_send_reply(&amp;quot;405&amp;quot;, &amp;quot;Method Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		setflag(FLT_ACCMISSED);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PRESENCE] {&lt;br /&gt;
	if(!is_method(&amp;quot;PUBLISH|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!t_newtran()){&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
		handle_publish();&lt;br /&gt;
	}else if(is_method(&amp;quot;SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		handle_subscribe();&lt;br /&gt;
	}&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[AUTH]{&lt;br /&gt;
	xlog(&amp;quot;PEDIDO DE AUTENTICACAO&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		# atentica pedidos de registro&lt;br /&gt;
		if(!www_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
			www_challenge(&amp;quot;&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if($au!=$tU){&lt;br /&gt;
			sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	}else{&lt;br /&gt;
		if(route(FSINBOUND)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(check_source_address(&amp;quot;0&amp;quot;)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(from_uri==myself){&lt;br /&gt;
			if(!proxy_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
				proxy_challenge(&amp;quot;&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
				if($au!=$tU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}else{&lt;br /&gt;
				if($au!=$fU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			# Validamos (autenticamos) o usuario&lt;br /&gt;
			consume_credentials();&lt;br /&gt;
		}else{&lt;br /&gt;
		&lt;br /&gt;
			# usuario nao e local, vamos negar&lt;br /&gt;
			if(!uri==myself){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not relaying&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}	&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[NAT] {&lt;br /&gt;
	force_rport();&lt;br /&gt;
	if(nat_uac_test(&amp;quot;19&amp;quot;)){&lt;br /&gt;
		if(method==&amp;quot;REGISTER&amp;quot;){&lt;br /&gt;
			fix_nated_register();&lt;br /&gt;
		}else{&lt;br /&gt;
			fix_nated_contact();&lt;br /&gt;
		}&lt;br /&gt;
		setflag(FLT_NATS);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[RTPPROXY] {&lt;br /&gt;
	if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}else if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		engage_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!has_totag()){&lt;br /&gt;
&lt;br /&gt;
		if(!check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
			add_rr_param(&amp;quot;;nat=yes&amp;quot;);&lt;br /&gt;
			xlog(&amp;quot;NAT yes NAO ENCONTRADO&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[SIPOUT]{&lt;br /&gt;
	if(!uri==myself){&lt;br /&gt;
		append_hf(&amp;quot;P-hint: outbound\r\n&amp;quot;);&lt;br /&gt;
		route(RELAY);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PSTN]{&lt;br /&gt;
        # neste caso apenas para exemplificar um uso simples&lt;br /&gt;
        # vamos fazer o redirecionamento par ao asterisk&lt;br /&gt;
        # realizar a dicagem da chamada&lt;br /&gt;
&lt;br /&gt;
        if(!($rU=~&amp;quot;^(\+|00)[1-9][0-9]{3,20}$&amp;quot;))&lt;br /&gt;
                return;&lt;br /&gt;
&lt;br /&gt;
        ## a regra acima aceita para discagem externa qualquer numero&lt;br /&gt;
        # comecado com 00 ou +&lt;br /&gt;
        #&lt;br /&gt;
&lt;br /&gt;
        if(from_uri!=myself){&lt;br /&gt;
                sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $ru = &amp;quot;sip:&amp;quot; + $rU + &amp;quot;@&amp;quot; + &amp;quot;10.254.254.6:5090&amp;quot;;&lt;br /&gt;
        xlog(&amp;quot;NOVO DESTINO: $ru&amp;quot;);&lt;br /&gt;
        route(RELAY);&lt;br /&gt;
        exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[XMLRPC]{&lt;br /&gt;
	# nao vamos implementar esta funcionalidade&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSINBOUND] {&lt;br /&gt;
	# verificar para validar o ip do asterisk:porta&lt;br /&gt;
	# se bater , responder com return 1;&lt;br /&gt;
	if($si==&amp;quot;10.254.254.6&amp;quot; &amp;amp;&amp;amp; $sp==&amp;quot;5090&amp;quot;){&lt;br /&gt;
		return(1);&lt;br /&gt;
	}else{&lt;br /&gt;
		return(-1);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSDISPATCH] {&lt;br /&gt;
&lt;br /&gt;
	if(!is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(route(FSINBOUND)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;CAIMOS NO SWITCH, VAMOS LOCALIZAR O PERFIL DA CHAMADA $rU&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if($rU =~ &amp;quot;^41$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH expressa comeca e termina em 41&amp;quot;);&lt;br /&gt;
			#regra de menu de voicemail, apenas &lt;br /&gt;
			# usuarios autenticados&lt;br /&gt;
			if($au==&amp;quot;&amp;quot;){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$rU = &amp;quot;vma-&amp;quot; + $au;&lt;br /&gt;
	}else if($rU =~ &amp;quot;^441[0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCA 441XX &amp;quot;);&lt;br /&gt;
			# numero discado comeca com 441 seguido de dois digitos&lt;br /&gt;
			# chamada direta para inbox do voicemail&lt;br /&gt;
			strip(2);&lt;br /&gt;
			route(FSVBOX);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^433[01][0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH OPCAO 433[01]XX&amp;quot;);&lt;br /&gt;
			# numero comecado em 443, seguido de 0 ou 1, mais dois digitos&lt;br /&gt;
			# sistema de conferencia&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^45[0-9]+$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCAO 45X.&amp;quot;);&lt;br /&gt;
			#numero comecado com 45, seguindo de numeros;&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else{&lt;br /&gt;
			xlog(&amp;quot;OPCAO DEFAULT DO SWITCH&amp;quot;);&lt;br /&gt;
			# usuario offline, enviando para voicemail&lt;br /&gt;
			if(!registered(&amp;quot;location&amp;quot;)){&lt;br /&gt;
				route(FSVBOX);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			# usuario online, fazendo bridging&lt;br /&gt;
			xlog(&amp;quot;USUARIO ESTA ONLINE VAMOS FAZER BRIDGE&amp;quot;);&lt;br /&gt;
			prefix(&amp;quot;kb-&amp;quot;);&lt;br /&gt;
			if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
				t_on_failure(&amp;quot;FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
	}&lt;br /&gt;
	route(FSRELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSVBOX&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($rU =~ &amp;quot;^441[0-9][0-9]&amp;quot;){&lt;br /&gt;
		strip(2);&lt;br /&gt;
	}&lt;br /&gt;
	prefix(&amp;quot;vm-&amp;quot;);&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[FSRELAY] {&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSRELAY&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
branch_route[BRANCH_ONE]{&lt;br /&gt;
	xlog(&amp;quot;new branch at $ru&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
onreply_route[REPLY_ONE]{&lt;br /&gt;
	xlog(&amp;quot;Incoming reply&amp;quot;);&lt;br /&gt;
	if((isflagset(FLT_NATS) || isbflagset(FLB_NATB) &amp;amp;&amp;amp; status =~ &amp;quot;(183)|(2[0-9][0-9])&amp;quot;)){&lt;br /&gt;
		#rtpproxy_offer();&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	if(isbflagset(FLB_NATB)){&lt;br /&gt;
		fix_nated_contact();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_ONE]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_ONE&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_check_status(&amp;quot;486|408|480&amp;quot;)){&lt;br /&gt;
		$rU = $avp(callee);&lt;br /&gt;
		$var(newbranch) = 1;&lt;br /&gt;
		route(FSVBOX);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testes com Opensips (registro)==&lt;br /&gt;
&lt;br /&gt;
Antes de podermos testar precisamos iniciar o serviço, no momento estamos com ele operando em modo debug, então a inicialização deve ser realizada com o comando abaixo&lt;br /&gt;
 /etc/init.d/opensips debug&lt;br /&gt;
&lt;br /&gt;
Abra uma nova sessão no servidor e então vamos criar os usuários&lt;br /&gt;
 opensipsctl add 101 101&lt;br /&gt;
 opensipsctl add 102 102&lt;br /&gt;
 opensipsctl add 103 103&lt;br /&gt;
&lt;br /&gt;
usuario 101 com senha 101 e assim por diante&lt;br /&gt;
&lt;br /&gt;
Faça a onexão com seu softphone, aqui para testes utilizei o jitsi e o zoiper, neste momento vamos apenas fazer o registro do usuário para testar a autenticação, se você tentar realizar uma discagem não funcionará pois neste caso o processo depende do Asterisk que ainda não está configurado, vamos dar inicio nesta configuração agora.&lt;br /&gt;
&lt;br /&gt;
==Asterisk==&lt;br /&gt;
Não vamos dar muitos detalhes da instalação do asterisk aqui, a ideia é simplesmente ter o mesmo funcionando da forma que necessitamos.&lt;br /&gt;
&lt;br /&gt;
===Instalando dependências===&lt;br /&gt;
&lt;br /&gt;
Dependências necessárias para a instalação do Asterisk.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Asterisk 1.8===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget -c http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8-current.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Compilando o Asterisk 1.8====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar zxvf asterisk-1.8-current.tar.gz&lt;br /&gt;
cd asterisk-1.8-current.tar.gz&lt;br /&gt;
./configure  --disable-xmldoc&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make samples&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Após a instalação , abra o arquivo /etc/asterisk/sip.conf, localize a linha '''udpbindaddr=0.0.0.0''' e altere para '''udpbindaddr=0.0.0.0:5090'''  , depois ao fim do arquivo adicione.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
type=peer&lt;br /&gt;
host=10.254.254.6&lt;br /&gt;
port=5060&lt;br /&gt;
qualify=yes&lt;br /&gt;
context=opensips&lt;br /&gt;
insecure=port,invite&lt;br /&gt;
canreinvite=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora abra o arquivo '''/etc/asterisk/extensions.conf''' , crie no fim do arquivo a seguinte entrada.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _kb-1XX,1,NoOp(CHAMADA INTERNA - FAZER BRIDGE - ${CALLERID(num)} ${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Dial(SIP/opensips/${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Goto(opensips,vm-${EXTEN:3},1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vm-1XX,1,NoOp(CHAMADA PARA VOICEMAIL)&lt;br /&gt;
same =&amp;gt; n,Voicemail(${EXTEN:3}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vma-1XX,1,NoOp(CHAMADA PARA VOICEMAIL - ADMINISTRATIVO)&lt;br /&gt;
same =&amp;gt; n,VoicemailMain(${EXTEN:4}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _3[01]XX,1,NoOp(CHAMADA PARA CONFERENCIA)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,ConfBridge(${EXTEN},cM1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _00.,1,NoOp(CHAMADA PARA PSTN)&lt;br /&gt;
same =&amp;gt; n,Wait(2)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,Wait(1)&lt;br /&gt;
same =&amp;gt; n,PlayBack(tt-monkeys)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; h,1,Hangup()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finalmente precisamos criar as entradas do voicemail, para isso altere o arquivo '''/etc/asterisk/voicemail.conf''' localize o contexto '''[default]''' e então adicione as entradas para seu voicemail, segue dois exemplos abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
101 =&amp;gt; 123123,Mike Tesliuk&lt;br /&gt;
102 =&amp;gt; 123123,Mike Tesliuk 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Feito isso, faça um restart no asterisk&lt;br /&gt;
 /etc/init.d/asterisk restart&lt;br /&gt;
&lt;br /&gt;
Agora você ja poderá fazer os testes, basicamente criamos as seguintes situações para serem testadas.&lt;br /&gt;
&lt;br /&gt;
*1 Autenticação de usuários&lt;br /&gt;
*2 Chamada entre usuários&lt;br /&gt;
*3 Encaminhamento para caixa postal&lt;br /&gt;
*4 Acesso a caixa postal&lt;br /&gt;
*5 Acesso a conferência&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1405</id>
		<title>OpenSIPs e Asterisk - LIKE CentOS</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1405"/>
		<updated>2013-09-02T19:20:08Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: /* Preparando a Configuração */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=white&amp;gt; NÃO SIGA ESTE DOCUMENTO. O MESMO SE ENCONTRA EM DESEVOLVIMENTO&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este tutorial é baseado em um tutorial originalmente escrito pelo Mike, se quiser verificar o tutorial original acesse http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk&lt;br /&gt;
&lt;br /&gt;
Para esta implementação utilizamos CentOS 6.4 64 Bits , OpenSIPS 1.9 e Asterisk 1.8.23 &lt;br /&gt;
&lt;br /&gt;
==Funcionalidades==&lt;br /&gt;
Este tutorial tem por objetivo atingir as seguintes funcionalidades.&lt;br /&gt;
*Autenticação de usuário&lt;br /&gt;
*Registro de usuário&lt;br /&gt;
*Localização de usuário (encaminhamento de chamadas)&lt;br /&gt;
*Roteamento de chamadas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Através do Asterisk estenderemos estas funcionalidades agregando.&lt;br /&gt;
*Correio de voz (Voicemail)&lt;br /&gt;
*Conferencia &lt;br /&gt;
*SBC ( Pode ser utilizado para transcoding, esconder topologia, play de mensagens e tarifação )&lt;br /&gt;
*Outros serviços de media (Anuncios, Ura's e coisas do tipo)&lt;br /&gt;
&lt;br /&gt;
==Definições==&lt;br /&gt;
Para um melhor entendimento da solução vamos expor aqui algumas definições de nosso sistema.&lt;br /&gt;
*Usuários locais terão ramais com 3 digitos (ex: 101, 102, 103)&lt;br /&gt;
*Identidade do correio de voz será o mesmo do ramal&lt;br /&gt;
*Serviços de media (acesso a voicemail e outros) receberão rotas de 4 digitos&lt;br /&gt;
*Opensips e Asterisk utilizarão o mesmo servidor (Neste caso IP: 10.254.254.6)&lt;br /&gt;
*Os serviços rodarão nas portas 5060 (opensips) , 5090 (Asterisk)&lt;br /&gt;
&lt;br /&gt;
==Funcionamento==&lt;br /&gt;
A autenticação do usuário será realizada pelo OpenSIPs, quando uma chamada é autenticada então ela serguirá:&lt;br /&gt;
*Se o usuário de destino não está online a chamada será enviada para o Asterisk para função de correio de voz&lt;br /&gt;
*Se o usuário está online a chamada será encaminhada para o Asterisk, desta forma é possivel acionar funcionalidades como anuncios, definição de tempo de chamada, forçar codecs e outras funcionalidades.&lt;br /&gt;
*Asterisk envia a chamada novamente para o OpenSIPs que verificará no location e entregará a chamada para o usuário.&lt;br /&gt;
*Se a chamada não for atendida o Opensips irá re-encaminhar para o Asterisk direcionando para função de voicemail&lt;br /&gt;
&lt;br /&gt;
==OpenSIPs==&lt;br /&gt;
Vamos iniciar o processo de instalação com o OpenSIPs, siga os procedimentos abaixo para evitar qualquer dificuldade.&lt;br /&gt;
&lt;br /&gt;
===Dependencias===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====Atualizando o sistema====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum -y update&lt;br /&gt;
yum -y upgrade&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pacotes de desenvolvimento ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall 'Development Tools' -y&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
yum install wget mysql-server pcre-devel libxml2-devel xmlrpc-c-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Desabilitando o SELINUX ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/bin/sed -i -e s,'SELINUX=enforcing','SELINUX=disabled', /etc/selinux/config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durante a instalação o sistema irá lhe perguntar a senha de root para o servidor MySQL é importante que você se lembre da mesma posteriormente pois utilizaremos a mesma.&lt;br /&gt;
&lt;br /&gt;
===Compilando o OpenSIPs===&lt;br /&gt;
Para manter um padrão onde os dados estao vamos utilizar o diretório /usr/src/ para o download de código fonte.&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/&lt;br /&gt;
 wget -c http://opensips.org/pub/opensips/1.9.1/src/opensips-1.9.1_src.tar.gz&lt;br /&gt;
 tar -xzvf opensips-1.9.1_src.tar.gz&lt;br /&gt;
 cd opensips-1.9.1-tls/&lt;br /&gt;
 make menuconfig&lt;br /&gt;
&lt;br /&gt;
Neste ponto o sistema irá abrir uma tela com algumas opções para selecionar, Acesse a primeira opção do menu, no submenu acesse a segunda opção ( Configure excluded modules ), selecione os módulos db_mysql , dialplan , mi_xmlrpc , presence e presence_xml&lt;br /&gt;
&lt;br /&gt;
Agora volte ao submenu, e selecione a opção Save Changes, volte para o menu principal e selecione '''Compile and Install OpenSips''' , deixe que o sistema execute suas funções.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ao finalizar a compilação você retornará ao menu, va na opção '''Exit and Save all changes'''&lt;br /&gt;
&lt;br /&gt;
===Preparando a Configuração===&lt;br /&gt;
&lt;br /&gt;
Antes de darmos inicio ao arquivo de configuração, vamos ajustar algumas questões, o opensips instala os arquivos (se voce nao alterar o parametro) em /usr/local, consequentemente as configurações ficam em /usr/local/etc , eu por padrão faço um link para o diretório /etc, assim acesso as configurações em /etc/opensips&lt;br /&gt;
&lt;br /&gt;
 ln -s /usr/local/etc/opensips/ /etc/&lt;br /&gt;
&lt;br /&gt;
Para o script de inicialização execute o comando abaixo&lt;br /&gt;
 cp packaging/fedora/opensips.init /etc/init.d/opensips&lt;br /&gt;
 chmod +x /etc/init.d/opensips&lt;br /&gt;
 chkconfig --add opensips&lt;br /&gt;
 cp packaging/fedora/opensips.sysconfig /etc/sysconfig&lt;br /&gt;
&lt;br /&gt;
 groupadd opensips&lt;br /&gt;
 mkdir /var/run/opensips&lt;br /&gt;
 useradd -d /var/run/opensips/ -s /bin/false -g opensips opensips&lt;br /&gt;
 chown -R opensips.opensips /var/run/opensips&lt;br /&gt;
&lt;br /&gt;
===Configurando o opensipsctl===&lt;br /&gt;
O opensipsctl (e opensipsdbctl) utilizam o arquivo de configuração /etc/opensips/opensipsctlrc, abaixo segue o conteúdo do arquivo. (Sugiro que você faça um backup dos arquivos originais para ter uma copia, existem parametros que você pode estudar depois).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DBENGINE=MYSQL&lt;br /&gt;
DBHOST=localhost&lt;br /&gt;
DBNAME=opensips&lt;br /&gt;
DBRWUSER=opensips&lt;br /&gt;
DBRWPW=&amp;quot;opensipsrw&amp;quot;&lt;br /&gt;
SIP_DOMAIN=10.254.254.6  ### caso voce esteja usando outro ip altere aqui&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DBROOTUSER=&amp;quot;root&amp;quot;&lt;br /&gt;
INSTALL_EXTRA_TABLES=ask&lt;br /&gt;
ALIASES_TYPE=&amp;quot;DB&amp;quot;&lt;br /&gt;
MI_CONNECTOR=FIFO:/tmp/opensips_fifo&lt;br /&gt;
# VERIFY_ACL=1&lt;br /&gt;
# ACL_GROUPS=&amp;quot;local ld int voicemail free-pstn&amp;quot;&lt;br /&gt;
# VERBOSE=1&lt;br /&gt;
# STORE_PLAINTEXT_PW=0&lt;br /&gt;
# NOHLPRINT=1&lt;br /&gt;
PID_FILE=/var/run/opensips/opensips.pid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Criando o banco de dados===&lt;br /&gt;
Agora que temos nosso arquivo configurado vamos fazer a criação do banco de dados, execute o comando abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
opensipsdbctl create opensips&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema irá lhe perguntar algumas coisas, responda Y (sim) para todas para que ele instale todas as tabelas, não usaremos todas elas, mas desta forma você fica com praticamente tudo criado para o caso de uma expansão dos recursos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Instalando o RTP Proxy===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/src/&lt;br /&gt;
wget -c http://b2bua.org/chrome/site/rtpproxy-1.2.1.tar.gz&lt;br /&gt;
tar -xzvf rtpproxy-1.2.1.tar.gz&lt;br /&gt;
cd rtpproxy-1.2.1&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
groupadd rtpproxy&lt;br /&gt;
useradd -d /var/run/rtpproxy -s /bin/true -g rtpproxy rtpproxy&lt;br /&gt;
mkdir /var/log/rtpproxy&lt;br /&gt;
mkdir /var/run/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/log/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/run/rtpproxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Arquivo de inicialização====&lt;br /&gt;
'''/etc/init.d/rtpproxy'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# Este script e de autoria de Mike Tesliuk&lt;br /&gt;
# qualquer falha no mesmo por favor informe &lt;br /&gt;
# atraves do email mike (a) tesliuk.com&lt;br /&gt;
#&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:          rtpproxy&lt;br /&gt;
# Required-Start:    $syslog $network $local_fs $time&lt;br /&gt;
# Required-Stop:     $syslog $network $local_fs&lt;br /&gt;
# Default-Start:     2 3 4 5&lt;br /&gt;
# Default-Stop:      0 1 6&lt;br /&gt;
# Short-Description: Start the RTPPROXY server&lt;br /&gt;
# Description:       Start the RTPPROXY server&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin&lt;br /&gt;
USELOG=1&lt;br /&gt;
USER=rtpproxy&lt;br /&gt;
# Altere o ip abaixo para o ip de seu sistema&lt;br /&gt;
IPADDR=&amp;quot;10.254.254.6&amp;quot;&lt;br /&gt;
&lt;br /&gt;
. /lib/lsb/init-functions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
start(){&lt;br /&gt;
        echo &amp;quot;Iniciando RTP PROXY &amp;quot;&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                if [ &amp;quot;${USELOG}&amp;quot; = &amp;quot;1&amp;quot; ]; then&lt;br /&gt;
                        echo &amp;quot;Iniciando com LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER -F -f d DBUG 2&amp;amp;&amp;gt; /var/log/rtpproxy/rtpproxy.log &amp;amp;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Iniciando sem LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER  -F -f d DBUG 2&amp;amp;&amp;gt; /dev/null&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;START OK&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
        else&lt;br /&gt;
                echo &amp;quot;Processo ja em execucao&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
stop(){&lt;br /&gt;
&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                echo &amp;quot;Processo nao encontrado&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
                kill -9 $(pidof rtpproxy)&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;STOP OK&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Falha em realizar stop do servico&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
case $1 in&lt;br /&gt;
        start)&lt;br /&gt;
                start&lt;br /&gt;
        ;;&lt;br /&gt;
        stop)&lt;br /&gt;
                stop&lt;br /&gt;
        ;;&lt;br /&gt;
        restart)&lt;br /&gt;
                stop&lt;br /&gt;
                start&lt;br /&gt;
&lt;br /&gt;
        ;;&lt;br /&gt;
        *)&lt;br /&gt;
                echo &amp;quot;Utilize: stop | start | restart&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos dar permissao e colocar na inicialização&lt;br /&gt;
 chmod +x /etc/init.d/rtpproxy &lt;br /&gt;
 update-rc.d rtpproxy defaults&lt;br /&gt;
 /etc/init.d/rtpproxy start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Criando o arquivo opensips.cfg===&lt;br /&gt;
O arquivo opensips.cfg é a onde a coisa toda acontece para o opensips, claro que ele dependerá de informações que estarão no banco de dados, mas é onde criamos todas as nossas rotas e validações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Este tutorial nao esta terminado, este arquivo ainda esta em testes &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
####### Global Parameters #########&lt;br /&gt;
debug=3&lt;br /&gt;
log_stderror=no&lt;br /&gt;
log_facility=LOG_LOCAL0&lt;br /&gt;
&lt;br /&gt;
fork=yes&lt;br /&gt;
children=4&lt;br /&gt;
&lt;br /&gt;
/* Descomente as linhas abaixo para ativar o debug */&lt;br /&gt;
#debug=7&lt;br /&gt;
#fork=no&lt;br /&gt;
#log_stderror=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Comente a linha abaixo para ativar a descoberta automatica de enderecos locais&lt;br /&gt;
 , isso significa que o sistema ira verificar todos os ips ativos e hosts e entao ativara&lt;br /&gt;
 o protocolo para todos eles */ &lt;br /&gt;
auto_aliases=no&lt;br /&gt;
&lt;br /&gt;
/* Defina aqui o ip a ser utilizado */&lt;br /&gt;
listen=udp:10.254.254.6:5060   # Altere este IP para o seu ambiente&lt;br /&gt;
&lt;br /&gt;
/* Nao usaremos sip por tcp nem tls neste script */&lt;br /&gt;
disable_tcp=yes&lt;br /&gt;
&lt;br /&gt;
disable_tls=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Secao de modulos ########&lt;br /&gt;
&lt;br /&gt;
#set module path&lt;br /&gt;
mpath=&amp;quot;/usr//lib64/opensips/modules/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;signaling.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sl.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;tm.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_timer&amp;quot;, 5)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_inv_timer&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;restart_fr_on_each_reply&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;onreply_avp_mode&amp;quot;, 1)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rr.so&amp;quot;&lt;br /&gt;
/* do not append from tag to the RR (no need for this script) */&lt;br /&gt;
modparam(&amp;quot;rr&amp;quot;, &amp;quot;append_fromtag&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;maxfwd.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sipmsgops.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;mi_fifo.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_name&amp;quot;, &amp;quot;/tmp/opensips_fifo&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_mode&amp;quot;, 0666)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;db_mysql.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;uri.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;uri&amp;quot;, &amp;quot;use_uri_table&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;usrloc.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;nat_bflag&amp;quot;, &amp;quot;FLB_NATB&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_mode&amp;quot;,   2)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;registrar.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;registrar&amp;quot;, &amp;quot;tcp_persistent_flag&amp;quot;, &amp;quot;TCP_PERSISTENT&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
/* Descomente a linha abaixo para nao permitir mais de 10 contatos por conta */&lt;br /&gt;
#modparam(&amp;quot;registrar&amp;quot;, &amp;quot;max_contacts&amp;quot;, 10)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;acc.so&amp;quot;&lt;br /&gt;
/* Quais eventos deverao ser registrados ? */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;early_media&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;report_cancels&amp;quot;, 0)&lt;br /&gt;
/* por padrao nos nao ajustamos a direcao em requisicoes sequencias, &lt;br /&gt;
 se voce deseja usar este recurso tenha certeza de ativar o &amp;quot;appen_fromtag&amp;quot; &lt;br /&gt;
 para o modulo &amp;quot;rr&amp;quot; */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;detect_direction&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;failed_transaction_flag&amp;quot;, &amp;quot;FLT_ACCFAILED&amp;quot;)&lt;br /&gt;
/* Gatilhos para accounting  (flags) */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_extra&amp;quot;, &lt;br /&gt;
	&amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_extra&amp;quot;, &amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;auth.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;auth_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;calculate_ha1&amp;quot;, yes)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;password_column&amp;quot;, &amp;quot;password&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;load_credentials&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;permissions.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;permissions&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;alias_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;alias_db&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;presence.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;presence&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
#loadmodule &amp;quot;presence_xml.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;dialog.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_mode&amp;quot;, 2)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_url&amp;quot;,&amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;dlg_match_mode&amp;quot;, 1)&lt;br /&gt;
#modparam(&amp;quot;dialog&amp;quot;, &amp;quot;default_timeout&amp;quot;, 60)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;siptrace.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;trace_flag&amp;quot;, 22)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;traced_user_avp&amp;quot;, &amp;quot;$avp(s:traceuser)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;nathelper.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;natping_interval&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;ping_nated_only&amp;quot;, 1)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_bflag&amp;quot;, &amp;quot;FLB_NATSIPPING&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_from&amp;quot;, &amp;quot;sip:pinger@10.254.254.6&amp;quot;) # Altere o ip para o ip do servidor&lt;br /&gt;
modparam(&amp;quot;nathelper|registrar&amp;quot;, &amp;quot;received_avp&amp;quot;, &amp;quot;$avp(RECEIVED)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rtpproxy.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;rtpproxy&amp;quot;, &amp;quot;rtpproxy_sock&amp;quot;, &amp;quot;udp:127.0.0.1:7722&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Logica de roteamento ########&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route {&lt;br /&gt;
&lt;br /&gt;
	if (!mf_process_maxfwd_header(&amp;quot;3&amp;quot;)) {&lt;br /&gt;
                send_reply(&amp;quot;483&amp;quot;,&amp;quot;looping&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;REQUISICAO RECEBIDA, ENVIANDO PARA REQINIT&amp;quot;);&lt;br /&gt;
	# Checagem inicial por requisicao&lt;br /&gt;
	route(REQINIT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA NAT&amp;quot;);&lt;br /&gt;
	# Deteccao de nat&lt;br /&gt;
	route(NAT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA WITHINDLG&amp;quot;);&lt;br /&gt;
	# Gerenciando requisicaoes com dialog&lt;br /&gt;
	route(WITHINDLG);&lt;br /&gt;
&lt;br /&gt;
	# Manipulando requisicoes iniciais (nao consta To tag)&lt;br /&gt;
	&lt;br /&gt;
	# Processando CANCEL&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;CANCEL&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD CANCEL&amp;quot;);&lt;br /&gt;
		if(t_check_trans()){&lt;br /&gt;
			t_relay();&lt;br /&gt;
		}&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	t_check_trans();&lt;br /&gt;
&lt;br /&gt;
	# Enviando para autenticacao&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA AUTENTICACAO&amp;quot;);&lt;br /&gt;
	route(AUTH);&lt;br /&gt;
&lt;br /&gt;
	# gravando rota para formacao dos dialogs (caso sejam roteados)&lt;br /&gt;
	# removemos qualquer cabecalho de rota pre carregado&lt;br /&gt;
	remove_hf(&amp;quot;Route&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE OU SIBSCRIBE&amp;quot;);&lt;br /&gt;
		record_route();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Contabilizando (acc) INVITES&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE, FAZENDOA ACC&amp;quot;);&lt;br /&gt;
		setflag(FLT_ACC);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando chamada para destinos externos&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA SIPOUT&amp;quot;);&lt;br /&gt;
	route(SIPOUT);&lt;br /&gt;
&lt;br /&gt;
	# Requisicoes para dominio local&lt;br /&gt;
	&lt;br /&gt;
	# Roteando requisicoes de PRESENCE&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PRESENCE&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	route(PRESENCE);&lt;br /&gt;
&lt;br /&gt;
	# Gerenciando pedidos de registro&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA REGISTRAR&amp;quot;);	&lt;br /&gt;
	route(REGISTRAR);&lt;br /&gt;
&lt;br /&gt;
	if($ru==&amp;quot;&amp;quot;){&lt;br /&gt;
		xlog(&amp;quot;ru --&amp;gt; vazio&amp;quot;);&lt;br /&gt;
		# Requisicao sem usuario na RURI&lt;br /&gt;
		sl_send_reply(&amp;quot;484&amp;quot;, &amp;quot;Address Incomplete&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando requisicao para PSTN&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PSTN&amp;quot;);&lt;br /&gt;
	route(PSTN);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Salvando informacao de quem originou a chamad&lt;br /&gt;
	$avp(callee)=$rU;&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA DISPATCH PSTN&amp;quot;);&lt;br /&gt;
	route(FSDISPATCH);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	# Servico de localizacao de usuario&lt;br /&gt;
	route(LOCATION);&lt;br /&gt;
&lt;br /&gt;
	# Efetuando o relay (encaminhamento)&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[RELAY] {&lt;br /&gt;
	if(check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
		setbflag(FLB_NATB);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(isflagset(FLT_NATS) || isbflagset(FLB_NATB)){&lt;br /&gt;
		#route(RTPPROXY);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
#		t_on_reply(&amp;quot;REPLY_ONE&amp;quot;);&lt;br /&gt;
#		t_on_failure(&amp;quot;FAIL_ONE&amp;quot;);&lt;br /&gt;
#	}&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;AQUI TENTAMOS ENVIAR A CHAMADA $fU $tU&amp;quot;);&lt;br /&gt;
	if(!t_relay()){&lt;br /&gt;
		xlog(&amp;quot;FALHA EM ENVIAR A CHAMADA, NAO FOI POSSIVEL FAZER O RELAY&amp;quot;);&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
	}&lt;br /&gt;
	xlog(&amp;quot;CHAMADA FOI ENVIADA AQUI, QUAL O ERRO ENTAO&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REQINIT] {&lt;br /&gt;
	if(!mf_process_maxfwd_header(&amp;quot;10&amp;quot;)){&lt;br /&gt;
		sl_send_reply(&amp;quot;483&amp;quot;, &amp;quot;Too Many Hops&amp;quot;);&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[WITHINDLG] {&lt;br /&gt;
	if(has_totag()){&lt;br /&gt;
		if(loose_route()){&lt;br /&gt;
			if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
				setflag(FLT_ACC);&lt;br /&gt;
				setflag(FLT_ACCFAILED);&lt;br /&gt;
			}&lt;br /&gt;
			route(RELAY);&lt;br /&gt;
		}else{&lt;br /&gt;
			if(is_method(&amp;quot;SUBSCRIBE&amp;quot;) &amp;amp;&amp;amp; uri==myself) {&lt;br /&gt;
				# requisicao de subscribe pre-estabelecida&lt;br /&gt;
				route(PRESENCE);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;ACK&amp;quot;)){&lt;br /&gt;
				if(t_check_trans()){&lt;br /&gt;
					t_relay();&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}else{&lt;br /&gt;
				# ACK para transacao nao encontrada, ignoramos...&lt;br /&gt;
				exit;&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			sl_send_reply(&amp;quot;404&amp;quot;, &amp;quot;Not Here&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		}	&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REGISTRAR] {&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		if(isflagset(FLT_NATS)){&lt;br /&gt;
			setbflag(FLB_NATB);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(!save(&amp;quot;location&amp;quot;)){&lt;br /&gt;
			sl_reply_error();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[LOCATION] {&lt;br /&gt;
&lt;br /&gt;
	alias_db_lookup(&amp;quot;dbaliases&amp;quot;);&lt;br /&gt;
	if(!lookup(&amp;quot;location&amp;quot;)){&lt;br /&gt;
		switch($rc) {&lt;br /&gt;
			case -1:&lt;br /&gt;
			case -3:&lt;br /&gt;
				t_newtran();&lt;br /&gt;
				t_reply(&amp;quot;404&amp;quot;,&amp;quot;Not Found&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			case -2:&lt;br /&gt;
				sl_send_reply(&amp;quot;405&amp;quot;, &amp;quot;Method Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		setflag(FLT_ACCMISSED);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PRESENCE] {&lt;br /&gt;
	if(!is_method(&amp;quot;PUBLISH|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!t_newtran()){&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
		handle_publish();&lt;br /&gt;
	}else if(is_method(&amp;quot;SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		handle_subscribe();&lt;br /&gt;
	}&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[AUTH]{&lt;br /&gt;
	xlog(&amp;quot;PEDIDO DE AUTENTICACAO&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		# atentica pedidos de registro&lt;br /&gt;
		if(!www_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
			www_challenge(&amp;quot;&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if($au!=$tU){&lt;br /&gt;
			sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	}else{&lt;br /&gt;
		if(route(FSINBOUND)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(check_source_address(&amp;quot;0&amp;quot;)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(from_uri==myself){&lt;br /&gt;
			if(!proxy_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
				proxy_challenge(&amp;quot;&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
				if($au!=$tU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}else{&lt;br /&gt;
				if($au!=$fU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			# Validamos (autenticamos) o usuario&lt;br /&gt;
			consume_credentials();&lt;br /&gt;
		}else{&lt;br /&gt;
		&lt;br /&gt;
			# usuario nao e local, vamos negar&lt;br /&gt;
			if(!uri==myself){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not relaying&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}	&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[NAT] {&lt;br /&gt;
	force_rport();&lt;br /&gt;
	if(nat_uac_test(&amp;quot;19&amp;quot;)){&lt;br /&gt;
		if(method==&amp;quot;REGISTER&amp;quot;){&lt;br /&gt;
			fix_nated_register();&lt;br /&gt;
		}else{&lt;br /&gt;
			fix_nated_contact();&lt;br /&gt;
		}&lt;br /&gt;
		setflag(FLT_NATS);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[RTPPROXY] {&lt;br /&gt;
	if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}else if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		engage_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!has_totag()){&lt;br /&gt;
&lt;br /&gt;
		if(!check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
			add_rr_param(&amp;quot;;nat=yes&amp;quot;);&lt;br /&gt;
			xlog(&amp;quot;NAT yes NAO ENCONTRADO&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[SIPOUT]{&lt;br /&gt;
	if(!uri==myself){&lt;br /&gt;
		append_hf(&amp;quot;P-hint: outbound\r\n&amp;quot;);&lt;br /&gt;
		route(RELAY);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PSTN]{&lt;br /&gt;
        # neste caso apenas para exemplificar um uso simples&lt;br /&gt;
        # vamos fazer o redirecionamento par ao asterisk&lt;br /&gt;
        # realizar a dicagem da chamada&lt;br /&gt;
&lt;br /&gt;
        if(!($rU=~&amp;quot;^(\+|00)[1-9][0-9]{3,20}$&amp;quot;))&lt;br /&gt;
                return;&lt;br /&gt;
&lt;br /&gt;
        ## a regra acima aceita para discagem externa qualquer numero&lt;br /&gt;
        # comecado com 00 ou +&lt;br /&gt;
        #&lt;br /&gt;
&lt;br /&gt;
        if(from_uri!=myself){&lt;br /&gt;
                sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $ru = &amp;quot;sip:&amp;quot; + $rU + &amp;quot;@&amp;quot; + &amp;quot;10.254.254.6:5090&amp;quot;;&lt;br /&gt;
        xlog(&amp;quot;NOVO DESTINO: $ru&amp;quot;);&lt;br /&gt;
        route(RELAY);&lt;br /&gt;
        exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[XMLRPC]{&lt;br /&gt;
	# nao vamos implementar esta funcionalidade&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSINBOUND] {&lt;br /&gt;
	# verificar para validar o ip do asterisk:porta&lt;br /&gt;
	# se bater , responder com return 1;&lt;br /&gt;
	if($si==&amp;quot;10.254.254.6&amp;quot; &amp;amp;&amp;amp; $sp==&amp;quot;5090&amp;quot;){&lt;br /&gt;
		return(1);&lt;br /&gt;
	}else{&lt;br /&gt;
		return(-1);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSDISPATCH] {&lt;br /&gt;
&lt;br /&gt;
	if(!is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(route(FSINBOUND)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;CAIMOS NO SWITCH, VAMOS LOCALIZAR O PERFIL DA CHAMADA $rU&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if($rU =~ &amp;quot;^41$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH expressa comeca e termina em 41&amp;quot;);&lt;br /&gt;
			#regra de menu de voicemail, apenas &lt;br /&gt;
			# usuarios autenticados&lt;br /&gt;
			if($au==&amp;quot;&amp;quot;){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$rU = &amp;quot;vma-&amp;quot; + $au;&lt;br /&gt;
	}else if($rU =~ &amp;quot;^441[0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCA 441XX &amp;quot;);&lt;br /&gt;
			# numero discado comeca com 441 seguido de dois digitos&lt;br /&gt;
			# chamada direta para inbox do voicemail&lt;br /&gt;
			strip(2);&lt;br /&gt;
			route(FSVBOX);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^433[01][0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH OPCAO 433[01]XX&amp;quot;);&lt;br /&gt;
			# numero comecado em 443, seguido de 0 ou 1, mais dois digitos&lt;br /&gt;
			# sistema de conferencia&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^45[0-9]+$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCAO 45X.&amp;quot;);&lt;br /&gt;
			#numero comecado com 45, seguindo de numeros;&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else{&lt;br /&gt;
			xlog(&amp;quot;OPCAO DEFAULT DO SWITCH&amp;quot;);&lt;br /&gt;
			# usuario offline, enviando para voicemail&lt;br /&gt;
			if(!registered(&amp;quot;location&amp;quot;)){&lt;br /&gt;
				route(FSVBOX);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			# usuario online, fazendo bridging&lt;br /&gt;
			xlog(&amp;quot;USUARIO ESTA ONLINE VAMOS FAZER BRIDGE&amp;quot;);&lt;br /&gt;
			prefix(&amp;quot;kb-&amp;quot;);&lt;br /&gt;
			if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
				t_on_failure(&amp;quot;FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
	}&lt;br /&gt;
	route(FSRELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSVBOX&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($rU =~ &amp;quot;^441[0-9][0-9]&amp;quot;){&lt;br /&gt;
		strip(2);&lt;br /&gt;
	}&lt;br /&gt;
	prefix(&amp;quot;vm-&amp;quot;);&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[FSRELAY] {&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSRELAY&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
branch_route[BRANCH_ONE]{&lt;br /&gt;
	xlog(&amp;quot;new branch at $ru&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
onreply_route[REPLY_ONE]{&lt;br /&gt;
	xlog(&amp;quot;Incoming reply&amp;quot;);&lt;br /&gt;
	if((isflagset(FLT_NATS) || isbflagset(FLB_NATB) &amp;amp;&amp;amp; status =~ &amp;quot;(183)|(2[0-9][0-9])&amp;quot;)){&lt;br /&gt;
		#rtpproxy_offer();&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	if(isbflagset(FLB_NATB)){&lt;br /&gt;
		fix_nated_contact();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_ONE]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_ONE&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_check_status(&amp;quot;486|408|480&amp;quot;)){&lt;br /&gt;
		$rU = $avp(callee);&lt;br /&gt;
		$var(newbranch) = 1;&lt;br /&gt;
		route(FSVBOX);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testes com Opensips (registro)==&lt;br /&gt;
&lt;br /&gt;
Antes de podermos testar precisamos iniciar o serviço, no momento estamos com ele operando em modo debug, então a inicialização deve ser realizada com o comando abaixo&lt;br /&gt;
 /etc/init.d/opensips debug&lt;br /&gt;
&lt;br /&gt;
Abra uma nova sessão no servidor e então vamos criar os usuários&lt;br /&gt;
 opensipsctl add 101 101&lt;br /&gt;
 opensipsctl add 102 102&lt;br /&gt;
 opensipsctl add 103 103&lt;br /&gt;
&lt;br /&gt;
usuario 101 com senha 101 e assim por diante&lt;br /&gt;
&lt;br /&gt;
Faça a onexão com seu softphone, aqui para testes utilizei o jitsi e o zoiper, neste momento vamos apenas fazer o registro do usuário para testar a autenticação, se você tentar realizar uma discagem não funcionará pois neste caso o processo depende do Asterisk que ainda não está configurado, vamos dar inicio nesta configuração agora.&lt;br /&gt;
&lt;br /&gt;
==Asterisk==&lt;br /&gt;
Não vamos dar muitos detalhes da instalação do asterisk aqui, a ideia é simplesmente ter o mesmo funcionando da forma que necessitamos.&lt;br /&gt;
&lt;br /&gt;
===Instalando dependências===&lt;br /&gt;
&lt;br /&gt;
Dependências necessárias para a instalação do Asterisk.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Asterisk 1.8===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget -c http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8-current.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Compilando o Asterisk 1.8====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar zxvf asterisk-1.8-current.tar.gz&lt;br /&gt;
cd asterisk-1.8-current.tar.gz&lt;br /&gt;
./configure  --disable-xmldoc&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make samples&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Após a instalação , abra o arquivo /etc/asterisk/sip.conf, localize a linha '''udpbindaddr=0.0.0.0''' e altere para '''udpbindaddr=0.0.0.0:5090'''  , depois ao fim do arquivo adicione.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
type=peer&lt;br /&gt;
host=10.254.254.6&lt;br /&gt;
port=5060&lt;br /&gt;
qualify=yes&lt;br /&gt;
context=opensips&lt;br /&gt;
insecure=port,invite&lt;br /&gt;
canreinvite=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora abra o arquivo '''/etc/asterisk/extensions.conf''' , crie no fim do arquivo a seguinte entrada.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _kb-1XX,1,NoOp(CHAMADA INTERNA - FAZER BRIDGE - ${CALLERID(num)} ${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Dial(SIP/opensips/${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Goto(opensips,vm-${EXTEN:3},1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vm-1XX,1,NoOp(CHAMADA PARA VOICEMAIL)&lt;br /&gt;
same =&amp;gt; n,Voicemail(${EXTEN:3}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vma-1XX,1,NoOp(CHAMADA PARA VOICEMAIL - ADMINISTRATIVO)&lt;br /&gt;
same =&amp;gt; n,VoicemailMain(${EXTEN:4}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _3[01]XX,1,NoOp(CHAMADA PARA CONFERENCIA)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,ConfBridge(${EXTEN},cM1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _00.,1,NoOp(CHAMADA PARA PSTN)&lt;br /&gt;
same =&amp;gt; n,Wait(2)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,Wait(1)&lt;br /&gt;
same =&amp;gt; n,PlayBack(tt-monkeys)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; h,1,Hangup()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finalmente precisamos criar as entradas do voicemail, para isso altere o arquivo '''/etc/asterisk/voicemail.conf''' localize o contexto '''[default]''' e então adicione as entradas para seu voicemail, segue dois exemplos abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
101 =&amp;gt; 123123,Mike Tesliuk&lt;br /&gt;
102 =&amp;gt; 123123,Mike Tesliuk 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Feito isso, faça um restart no asterisk&lt;br /&gt;
 /etc/init.d/asterisk restart&lt;br /&gt;
&lt;br /&gt;
Agora você ja poderá fazer os testes, basicamente criamos as seguintes situações para serem testadas.&lt;br /&gt;
&lt;br /&gt;
*1 Autenticação de usuários&lt;br /&gt;
*2 Chamada entre usuários&lt;br /&gt;
*3 Encaminhamento para caixa postal&lt;br /&gt;
*4 Acesso a caixa postal&lt;br /&gt;
*5 Acesso a conferência&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1404</id>
		<title>OpenSIPs e Asterisk - LIKE CentOS</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1404"/>
		<updated>2013-09-02T18:48:05Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: /* Compilando o OpenSIPs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=white&amp;gt; NÃO SIGA ESTE DOCUMENTO. O MESMO SE ENCONTRA EM DESEVOLVIMENTO&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este tutorial é baseado em um tutorial originalmente escrito pelo Mike, se quiser verificar o tutorial original acesse http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk&lt;br /&gt;
&lt;br /&gt;
Para esta implementação utilizamos CentOS 6.4 64 Bits , OpenSIPS 1.9 e Asterisk 1.8.23 &lt;br /&gt;
&lt;br /&gt;
==Funcionalidades==&lt;br /&gt;
Este tutorial tem por objetivo atingir as seguintes funcionalidades.&lt;br /&gt;
*Autenticação de usuário&lt;br /&gt;
*Registro de usuário&lt;br /&gt;
*Localização de usuário (encaminhamento de chamadas)&lt;br /&gt;
*Roteamento de chamadas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Através do Asterisk estenderemos estas funcionalidades agregando.&lt;br /&gt;
*Correio de voz (Voicemail)&lt;br /&gt;
*Conferencia &lt;br /&gt;
*SBC ( Pode ser utilizado para transcoding, esconder topologia, play de mensagens e tarifação )&lt;br /&gt;
*Outros serviços de media (Anuncios, Ura's e coisas do tipo)&lt;br /&gt;
&lt;br /&gt;
==Definições==&lt;br /&gt;
Para um melhor entendimento da solução vamos expor aqui algumas definições de nosso sistema.&lt;br /&gt;
*Usuários locais terão ramais com 3 digitos (ex: 101, 102, 103)&lt;br /&gt;
*Identidade do correio de voz será o mesmo do ramal&lt;br /&gt;
*Serviços de media (acesso a voicemail e outros) receberão rotas de 4 digitos&lt;br /&gt;
*Opensips e Asterisk utilizarão o mesmo servidor (Neste caso IP: 10.254.254.6)&lt;br /&gt;
*Os serviços rodarão nas portas 5060 (opensips) , 5090 (Asterisk)&lt;br /&gt;
&lt;br /&gt;
==Funcionamento==&lt;br /&gt;
A autenticação do usuário será realizada pelo OpenSIPs, quando uma chamada é autenticada então ela serguirá:&lt;br /&gt;
*Se o usuário de destino não está online a chamada será enviada para o Asterisk para função de correio de voz&lt;br /&gt;
*Se o usuário está online a chamada será encaminhada para o Asterisk, desta forma é possivel acionar funcionalidades como anuncios, definição de tempo de chamada, forçar codecs e outras funcionalidades.&lt;br /&gt;
*Asterisk envia a chamada novamente para o OpenSIPs que verificará no location e entregará a chamada para o usuário.&lt;br /&gt;
*Se a chamada não for atendida o Opensips irá re-encaminhar para o Asterisk direcionando para função de voicemail&lt;br /&gt;
&lt;br /&gt;
==OpenSIPs==&lt;br /&gt;
Vamos iniciar o processo de instalação com o OpenSIPs, siga os procedimentos abaixo para evitar qualquer dificuldade.&lt;br /&gt;
&lt;br /&gt;
===Dependencias===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====Atualizando o sistema====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum -y update&lt;br /&gt;
yum -y upgrade&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pacotes de desenvolvimento ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall 'Development Tools' -y&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
yum install wget mysql-server pcre-devel libxml2-devel xmlrpc-c-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Desabilitando o SELINUX ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/bin/sed -i -e s,'SELINUX=enforcing','SELINUX=disabled', /etc/selinux/config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durante a instalação o sistema irá lhe perguntar a senha de root para o servidor MySQL é importante que você se lembre da mesma posteriormente pois utilizaremos a mesma.&lt;br /&gt;
&lt;br /&gt;
===Compilando o OpenSIPs===&lt;br /&gt;
Para manter um padrão onde os dados estao vamos utilizar o diretório /usr/src/ para o download de código fonte.&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/&lt;br /&gt;
 wget -c http://opensips.org/pub/opensips/1.9.1/src/opensips-1.9.1_src.tar.gz&lt;br /&gt;
 tar -xzvf opensips-1.9.1_src.tar.gz&lt;br /&gt;
 cd opensips-1.9.1-tls/&lt;br /&gt;
 make menuconfig&lt;br /&gt;
&lt;br /&gt;
Neste ponto o sistema irá abrir uma tela com algumas opções para selecionar, Acesse a primeira opção do menu, no submenu acesse a segunda opção ( Configure excluded modules ), selecione os módulos db_mysql , dialplan , mi_xmlrpc , presence e presence_xml&lt;br /&gt;
&lt;br /&gt;
Agora volte ao submenu, e selecione a opção Save Changes, volte para o menu principal e selecione '''Compile and Install OpenSips''' , deixe que o sistema execute suas funções.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ao finalizar a compilação você retornará ao menu, va na opção '''Exit and Save all changes'''&lt;br /&gt;
&lt;br /&gt;
===Preparando a Configuração===&lt;br /&gt;
&lt;br /&gt;
Antes de darmos inicio ao arquivo de configuração, vamos ajustar algumas questões, o opensips instala os arquivos (se voce nao alterar o parametro) em /usr/local, consequentemente as configurações ficam em /usr/local/etc , eu por padrão faço um link para o diretório /etc, assim acesso as configurações em /etc/opensips&lt;br /&gt;
&lt;br /&gt;
ln -s /usr/local/etc/opensips/ /etc/&lt;br /&gt;
&lt;br /&gt;
Para o script de inicialização execute o comando abaixo&lt;br /&gt;
 cp packaging/fedora/opensips.init /etc/init.d/opensips&lt;br /&gt;
 chmod +x /etc/init.d/opensips&lt;br /&gt;
 chkconfig --add opensips&lt;br /&gt;
 cp packaging/fedora/opensips.sysconfig /etc/sysconfig&lt;br /&gt;
&lt;br /&gt;
 groupadd opensips&lt;br /&gt;
 mkdir /var/run/opensips&lt;br /&gt;
 useradd -d /var/run/opensips/ -s /bin/false -g opensips opensips&lt;br /&gt;
 chown -R opensips.opensips /var/run/opensips&lt;br /&gt;
&lt;br /&gt;
===Configurando o opensipsctl===&lt;br /&gt;
O opensipsctl (e opensipsdbctl) utilizam o arquivo de configuração /etc/opensips/opensipsctlrc, abaixo segue o conteúdo do arquivo. (Sugiro que você faça um backup dos arquivos originais para ter uma copia, existem parametros que você pode estudar depois).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DBENGINE=MYSQL&lt;br /&gt;
DBHOST=localhost&lt;br /&gt;
DBNAME=opensips&lt;br /&gt;
DBRWUSER=opensips&lt;br /&gt;
DBRWPW=&amp;quot;opensipsrw&amp;quot;&lt;br /&gt;
SIP_DOMAIN=10.254.254.6  ### caso voce esteja usando outro ip altere aqui&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DBROOTUSER=&amp;quot;root&amp;quot;&lt;br /&gt;
INSTALL_EXTRA_TABLES=ask&lt;br /&gt;
ALIASES_TYPE=&amp;quot;DB&amp;quot;&lt;br /&gt;
MI_CONNECTOR=FIFO:/tmp/opensips_fifo&lt;br /&gt;
# VERIFY_ACL=1&lt;br /&gt;
# ACL_GROUPS=&amp;quot;local ld int voicemail free-pstn&amp;quot;&lt;br /&gt;
# VERBOSE=1&lt;br /&gt;
# STORE_PLAINTEXT_PW=0&lt;br /&gt;
# NOHLPRINT=1&lt;br /&gt;
PID_FILE=/var/run/opensips/opensips.pid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Criando o banco de dados===&lt;br /&gt;
Agora que temos nosso arquivo configurado vamos fazer a criação do banco de dados, execute o comando abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
opensipsdbctl create opensips&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema irá lhe perguntar algumas coisas, responda Y (sim) para todas para que ele instale todas as tabelas, não usaremos todas elas, mas desta forma você fica com praticamente tudo criado para o caso de uma expansão dos recursos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Instalando o RTP Proxy===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/src/&lt;br /&gt;
wget -c http://b2bua.org/chrome/site/rtpproxy-1.2.1.tar.gz&lt;br /&gt;
tar -xzvf rtpproxy-1.2.1.tar.gz&lt;br /&gt;
cd rtpproxy-1.2.1&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
groupadd rtpproxy&lt;br /&gt;
useradd -d /var/run/rtpproxy -s /bin/true -g rtpproxy rtpproxy&lt;br /&gt;
mkdir /var/log/rtpproxy&lt;br /&gt;
mkdir /var/run/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/log/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/run/rtpproxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Arquivo de inicialização====&lt;br /&gt;
'''/etc/init.d/rtpproxy'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# Este script e de autoria de Mike Tesliuk&lt;br /&gt;
# qualquer falha no mesmo por favor informe &lt;br /&gt;
# atraves do email mike (a) tesliuk.com&lt;br /&gt;
#&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:          rtpproxy&lt;br /&gt;
# Required-Start:    $syslog $network $local_fs $time&lt;br /&gt;
# Required-Stop:     $syslog $network $local_fs&lt;br /&gt;
# Default-Start:     2 3 4 5&lt;br /&gt;
# Default-Stop:      0 1 6&lt;br /&gt;
# Short-Description: Start the RTPPROXY server&lt;br /&gt;
# Description:       Start the RTPPROXY server&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin&lt;br /&gt;
USELOG=1&lt;br /&gt;
USER=rtpproxy&lt;br /&gt;
# Altere o ip abaixo para o ip de seu sistema&lt;br /&gt;
IPADDR=&amp;quot;10.254.254.6&amp;quot;&lt;br /&gt;
&lt;br /&gt;
. /lib/lsb/init-functions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
start(){&lt;br /&gt;
        echo &amp;quot;Iniciando RTP PROXY &amp;quot;&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                if [ &amp;quot;${USELOG}&amp;quot; = &amp;quot;1&amp;quot; ]; then&lt;br /&gt;
                        echo &amp;quot;Iniciando com LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER -F -f d DBUG 2&amp;amp;&amp;gt; /var/log/rtpproxy/rtpproxy.log &amp;amp;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Iniciando sem LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER  -F -f d DBUG 2&amp;amp;&amp;gt; /dev/null&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;START OK&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
        else&lt;br /&gt;
                echo &amp;quot;Processo ja em execucao&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
stop(){&lt;br /&gt;
&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                echo &amp;quot;Processo nao encontrado&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
                kill -9 $(pidof rtpproxy)&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;STOP OK&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Falha em realizar stop do servico&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
case $1 in&lt;br /&gt;
        start)&lt;br /&gt;
                start&lt;br /&gt;
        ;;&lt;br /&gt;
        stop)&lt;br /&gt;
                stop&lt;br /&gt;
        ;;&lt;br /&gt;
        restart)&lt;br /&gt;
                stop&lt;br /&gt;
                start&lt;br /&gt;
&lt;br /&gt;
        ;;&lt;br /&gt;
        *)&lt;br /&gt;
                echo &amp;quot;Utilize: stop | start | restart&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos dar permissao e colocar na inicialização&lt;br /&gt;
 chmod +x /etc/init.d/rtpproxy &lt;br /&gt;
 update-rc.d rtpproxy defaults&lt;br /&gt;
 /etc/init.d/rtpproxy start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Criando o arquivo opensips.cfg===&lt;br /&gt;
O arquivo opensips.cfg é a onde a coisa toda acontece para o opensips, claro que ele dependerá de informações que estarão no banco de dados, mas é onde criamos todas as nossas rotas e validações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Este tutorial nao esta terminado, este arquivo ainda esta em testes &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
####### Global Parameters #########&lt;br /&gt;
debug=3&lt;br /&gt;
log_stderror=no&lt;br /&gt;
log_facility=LOG_LOCAL0&lt;br /&gt;
&lt;br /&gt;
fork=yes&lt;br /&gt;
children=4&lt;br /&gt;
&lt;br /&gt;
/* Descomente as linhas abaixo para ativar o debug */&lt;br /&gt;
#debug=7&lt;br /&gt;
#fork=no&lt;br /&gt;
#log_stderror=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Comente a linha abaixo para ativar a descoberta automatica de enderecos locais&lt;br /&gt;
 , isso significa que o sistema ira verificar todos os ips ativos e hosts e entao ativara&lt;br /&gt;
 o protocolo para todos eles */ &lt;br /&gt;
auto_aliases=no&lt;br /&gt;
&lt;br /&gt;
/* Defina aqui o ip a ser utilizado */&lt;br /&gt;
listen=udp:10.254.254.6:5060   # Altere este IP para o seu ambiente&lt;br /&gt;
&lt;br /&gt;
/* Nao usaremos sip por tcp nem tls neste script */&lt;br /&gt;
disable_tcp=yes&lt;br /&gt;
&lt;br /&gt;
disable_tls=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Secao de modulos ########&lt;br /&gt;
&lt;br /&gt;
#set module path&lt;br /&gt;
mpath=&amp;quot;/usr//lib64/opensips/modules/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;signaling.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sl.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;tm.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_timer&amp;quot;, 5)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_inv_timer&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;restart_fr_on_each_reply&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;onreply_avp_mode&amp;quot;, 1)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rr.so&amp;quot;&lt;br /&gt;
/* do not append from tag to the RR (no need for this script) */&lt;br /&gt;
modparam(&amp;quot;rr&amp;quot;, &amp;quot;append_fromtag&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;maxfwd.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sipmsgops.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;mi_fifo.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_name&amp;quot;, &amp;quot;/tmp/opensips_fifo&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_mode&amp;quot;, 0666)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;db_mysql.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;uri.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;uri&amp;quot;, &amp;quot;use_uri_table&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;usrloc.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;nat_bflag&amp;quot;, &amp;quot;FLB_NATB&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_mode&amp;quot;,   2)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;registrar.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;registrar&amp;quot;, &amp;quot;tcp_persistent_flag&amp;quot;, &amp;quot;TCP_PERSISTENT&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
/* Descomente a linha abaixo para nao permitir mais de 10 contatos por conta */&lt;br /&gt;
#modparam(&amp;quot;registrar&amp;quot;, &amp;quot;max_contacts&amp;quot;, 10)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;acc.so&amp;quot;&lt;br /&gt;
/* Quais eventos deverao ser registrados ? */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;early_media&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;report_cancels&amp;quot;, 0)&lt;br /&gt;
/* por padrao nos nao ajustamos a direcao em requisicoes sequencias, &lt;br /&gt;
 se voce deseja usar este recurso tenha certeza de ativar o &amp;quot;appen_fromtag&amp;quot; &lt;br /&gt;
 para o modulo &amp;quot;rr&amp;quot; */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;detect_direction&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;failed_transaction_flag&amp;quot;, &amp;quot;FLT_ACCFAILED&amp;quot;)&lt;br /&gt;
/* Gatilhos para accounting  (flags) */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_extra&amp;quot;, &lt;br /&gt;
	&amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_extra&amp;quot;, &amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;auth.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;auth_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;calculate_ha1&amp;quot;, yes)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;password_column&amp;quot;, &amp;quot;password&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;load_credentials&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;permissions.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;permissions&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;alias_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;alias_db&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;presence.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;presence&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
#loadmodule &amp;quot;presence_xml.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;dialog.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_mode&amp;quot;, 2)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_url&amp;quot;,&amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;dlg_match_mode&amp;quot;, 1)&lt;br /&gt;
#modparam(&amp;quot;dialog&amp;quot;, &amp;quot;default_timeout&amp;quot;, 60)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;siptrace.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;trace_flag&amp;quot;, 22)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;traced_user_avp&amp;quot;, &amp;quot;$avp(s:traceuser)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;nathelper.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;natping_interval&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;ping_nated_only&amp;quot;, 1)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_bflag&amp;quot;, &amp;quot;FLB_NATSIPPING&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_from&amp;quot;, &amp;quot;sip:pinger@10.254.254.6&amp;quot;) # Altere o ip para o ip do servidor&lt;br /&gt;
modparam(&amp;quot;nathelper|registrar&amp;quot;, &amp;quot;received_avp&amp;quot;, &amp;quot;$avp(RECEIVED)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rtpproxy.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;rtpproxy&amp;quot;, &amp;quot;rtpproxy_sock&amp;quot;, &amp;quot;udp:127.0.0.1:7722&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Logica de roteamento ########&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route {&lt;br /&gt;
&lt;br /&gt;
	if (!mf_process_maxfwd_header(&amp;quot;3&amp;quot;)) {&lt;br /&gt;
                send_reply(&amp;quot;483&amp;quot;,&amp;quot;looping&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;REQUISICAO RECEBIDA, ENVIANDO PARA REQINIT&amp;quot;);&lt;br /&gt;
	# Checagem inicial por requisicao&lt;br /&gt;
	route(REQINIT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA NAT&amp;quot;);&lt;br /&gt;
	# Deteccao de nat&lt;br /&gt;
	route(NAT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA WITHINDLG&amp;quot;);&lt;br /&gt;
	# Gerenciando requisicaoes com dialog&lt;br /&gt;
	route(WITHINDLG);&lt;br /&gt;
&lt;br /&gt;
	# Manipulando requisicoes iniciais (nao consta To tag)&lt;br /&gt;
	&lt;br /&gt;
	# Processando CANCEL&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;CANCEL&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD CANCEL&amp;quot;);&lt;br /&gt;
		if(t_check_trans()){&lt;br /&gt;
			t_relay();&lt;br /&gt;
		}&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	t_check_trans();&lt;br /&gt;
&lt;br /&gt;
	# Enviando para autenticacao&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA AUTENTICACAO&amp;quot;);&lt;br /&gt;
	route(AUTH);&lt;br /&gt;
&lt;br /&gt;
	# gravando rota para formacao dos dialogs (caso sejam roteados)&lt;br /&gt;
	# removemos qualquer cabecalho de rota pre carregado&lt;br /&gt;
	remove_hf(&amp;quot;Route&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE OU SIBSCRIBE&amp;quot;);&lt;br /&gt;
		record_route();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Contabilizando (acc) INVITES&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE, FAZENDOA ACC&amp;quot;);&lt;br /&gt;
		setflag(FLT_ACC);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando chamada para destinos externos&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA SIPOUT&amp;quot;);&lt;br /&gt;
	route(SIPOUT);&lt;br /&gt;
&lt;br /&gt;
	# Requisicoes para dominio local&lt;br /&gt;
	&lt;br /&gt;
	# Roteando requisicoes de PRESENCE&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PRESENCE&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	route(PRESENCE);&lt;br /&gt;
&lt;br /&gt;
	# Gerenciando pedidos de registro&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA REGISTRAR&amp;quot;);	&lt;br /&gt;
	route(REGISTRAR);&lt;br /&gt;
&lt;br /&gt;
	if($ru==&amp;quot;&amp;quot;){&lt;br /&gt;
		xlog(&amp;quot;ru --&amp;gt; vazio&amp;quot;);&lt;br /&gt;
		# Requisicao sem usuario na RURI&lt;br /&gt;
		sl_send_reply(&amp;quot;484&amp;quot;, &amp;quot;Address Incomplete&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando requisicao para PSTN&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PSTN&amp;quot;);&lt;br /&gt;
	route(PSTN);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Salvando informacao de quem originou a chamad&lt;br /&gt;
	$avp(callee)=$rU;&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA DISPATCH PSTN&amp;quot;);&lt;br /&gt;
	route(FSDISPATCH);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	# Servico de localizacao de usuario&lt;br /&gt;
	route(LOCATION);&lt;br /&gt;
&lt;br /&gt;
	# Efetuando o relay (encaminhamento)&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[RELAY] {&lt;br /&gt;
	if(check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
		setbflag(FLB_NATB);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(isflagset(FLT_NATS) || isbflagset(FLB_NATB)){&lt;br /&gt;
		#route(RTPPROXY);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
#		t_on_reply(&amp;quot;REPLY_ONE&amp;quot;);&lt;br /&gt;
#		t_on_failure(&amp;quot;FAIL_ONE&amp;quot;);&lt;br /&gt;
#	}&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;AQUI TENTAMOS ENVIAR A CHAMADA $fU $tU&amp;quot;);&lt;br /&gt;
	if(!t_relay()){&lt;br /&gt;
		xlog(&amp;quot;FALHA EM ENVIAR A CHAMADA, NAO FOI POSSIVEL FAZER O RELAY&amp;quot;);&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
	}&lt;br /&gt;
	xlog(&amp;quot;CHAMADA FOI ENVIADA AQUI, QUAL O ERRO ENTAO&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REQINIT] {&lt;br /&gt;
	if(!mf_process_maxfwd_header(&amp;quot;10&amp;quot;)){&lt;br /&gt;
		sl_send_reply(&amp;quot;483&amp;quot;, &amp;quot;Too Many Hops&amp;quot;);&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[WITHINDLG] {&lt;br /&gt;
	if(has_totag()){&lt;br /&gt;
		if(loose_route()){&lt;br /&gt;
			if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
				setflag(FLT_ACC);&lt;br /&gt;
				setflag(FLT_ACCFAILED);&lt;br /&gt;
			}&lt;br /&gt;
			route(RELAY);&lt;br /&gt;
		}else{&lt;br /&gt;
			if(is_method(&amp;quot;SUBSCRIBE&amp;quot;) &amp;amp;&amp;amp; uri==myself) {&lt;br /&gt;
				# requisicao de subscribe pre-estabelecida&lt;br /&gt;
				route(PRESENCE);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;ACK&amp;quot;)){&lt;br /&gt;
				if(t_check_trans()){&lt;br /&gt;
					t_relay();&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}else{&lt;br /&gt;
				# ACK para transacao nao encontrada, ignoramos...&lt;br /&gt;
				exit;&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			sl_send_reply(&amp;quot;404&amp;quot;, &amp;quot;Not Here&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		}	&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REGISTRAR] {&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		if(isflagset(FLT_NATS)){&lt;br /&gt;
			setbflag(FLB_NATB);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(!save(&amp;quot;location&amp;quot;)){&lt;br /&gt;
			sl_reply_error();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[LOCATION] {&lt;br /&gt;
&lt;br /&gt;
	alias_db_lookup(&amp;quot;dbaliases&amp;quot;);&lt;br /&gt;
	if(!lookup(&amp;quot;location&amp;quot;)){&lt;br /&gt;
		switch($rc) {&lt;br /&gt;
			case -1:&lt;br /&gt;
			case -3:&lt;br /&gt;
				t_newtran();&lt;br /&gt;
				t_reply(&amp;quot;404&amp;quot;,&amp;quot;Not Found&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			case -2:&lt;br /&gt;
				sl_send_reply(&amp;quot;405&amp;quot;, &amp;quot;Method Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		setflag(FLT_ACCMISSED);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PRESENCE] {&lt;br /&gt;
	if(!is_method(&amp;quot;PUBLISH|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!t_newtran()){&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
		handle_publish();&lt;br /&gt;
	}else if(is_method(&amp;quot;SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		handle_subscribe();&lt;br /&gt;
	}&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[AUTH]{&lt;br /&gt;
	xlog(&amp;quot;PEDIDO DE AUTENTICACAO&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		# atentica pedidos de registro&lt;br /&gt;
		if(!www_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
			www_challenge(&amp;quot;&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if($au!=$tU){&lt;br /&gt;
			sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	}else{&lt;br /&gt;
		if(route(FSINBOUND)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(check_source_address(&amp;quot;0&amp;quot;)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(from_uri==myself){&lt;br /&gt;
			if(!proxy_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
				proxy_challenge(&amp;quot;&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
				if($au!=$tU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}else{&lt;br /&gt;
				if($au!=$fU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			# Validamos (autenticamos) o usuario&lt;br /&gt;
			consume_credentials();&lt;br /&gt;
		}else{&lt;br /&gt;
		&lt;br /&gt;
			# usuario nao e local, vamos negar&lt;br /&gt;
			if(!uri==myself){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not relaying&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}	&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[NAT] {&lt;br /&gt;
	force_rport();&lt;br /&gt;
	if(nat_uac_test(&amp;quot;19&amp;quot;)){&lt;br /&gt;
		if(method==&amp;quot;REGISTER&amp;quot;){&lt;br /&gt;
			fix_nated_register();&lt;br /&gt;
		}else{&lt;br /&gt;
			fix_nated_contact();&lt;br /&gt;
		}&lt;br /&gt;
		setflag(FLT_NATS);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[RTPPROXY] {&lt;br /&gt;
	if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}else if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		engage_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!has_totag()){&lt;br /&gt;
&lt;br /&gt;
		if(!check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
			add_rr_param(&amp;quot;;nat=yes&amp;quot;);&lt;br /&gt;
			xlog(&amp;quot;NAT yes NAO ENCONTRADO&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[SIPOUT]{&lt;br /&gt;
	if(!uri==myself){&lt;br /&gt;
		append_hf(&amp;quot;P-hint: outbound\r\n&amp;quot;);&lt;br /&gt;
		route(RELAY);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PSTN]{&lt;br /&gt;
        # neste caso apenas para exemplificar um uso simples&lt;br /&gt;
        # vamos fazer o redirecionamento par ao asterisk&lt;br /&gt;
        # realizar a dicagem da chamada&lt;br /&gt;
&lt;br /&gt;
        if(!($rU=~&amp;quot;^(\+|00)[1-9][0-9]{3,20}$&amp;quot;))&lt;br /&gt;
                return;&lt;br /&gt;
&lt;br /&gt;
        ## a regra acima aceita para discagem externa qualquer numero&lt;br /&gt;
        # comecado com 00 ou +&lt;br /&gt;
        #&lt;br /&gt;
&lt;br /&gt;
        if(from_uri!=myself){&lt;br /&gt;
                sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $ru = &amp;quot;sip:&amp;quot; + $rU + &amp;quot;@&amp;quot; + &amp;quot;10.254.254.6:5090&amp;quot;;&lt;br /&gt;
        xlog(&amp;quot;NOVO DESTINO: $ru&amp;quot;);&lt;br /&gt;
        route(RELAY);&lt;br /&gt;
        exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[XMLRPC]{&lt;br /&gt;
	# nao vamos implementar esta funcionalidade&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSINBOUND] {&lt;br /&gt;
	# verificar para validar o ip do asterisk:porta&lt;br /&gt;
	# se bater , responder com return 1;&lt;br /&gt;
	if($si==&amp;quot;10.254.254.6&amp;quot; &amp;amp;&amp;amp; $sp==&amp;quot;5090&amp;quot;){&lt;br /&gt;
		return(1);&lt;br /&gt;
	}else{&lt;br /&gt;
		return(-1);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSDISPATCH] {&lt;br /&gt;
&lt;br /&gt;
	if(!is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(route(FSINBOUND)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;CAIMOS NO SWITCH, VAMOS LOCALIZAR O PERFIL DA CHAMADA $rU&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if($rU =~ &amp;quot;^41$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH expressa comeca e termina em 41&amp;quot;);&lt;br /&gt;
			#regra de menu de voicemail, apenas &lt;br /&gt;
			# usuarios autenticados&lt;br /&gt;
			if($au==&amp;quot;&amp;quot;){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$rU = &amp;quot;vma-&amp;quot; + $au;&lt;br /&gt;
	}else if($rU =~ &amp;quot;^441[0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCA 441XX &amp;quot;);&lt;br /&gt;
			# numero discado comeca com 441 seguido de dois digitos&lt;br /&gt;
			# chamada direta para inbox do voicemail&lt;br /&gt;
			strip(2);&lt;br /&gt;
			route(FSVBOX);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^433[01][0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH OPCAO 433[01]XX&amp;quot;);&lt;br /&gt;
			# numero comecado em 443, seguido de 0 ou 1, mais dois digitos&lt;br /&gt;
			# sistema de conferencia&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^45[0-9]+$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCAO 45X.&amp;quot;);&lt;br /&gt;
			#numero comecado com 45, seguindo de numeros;&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else{&lt;br /&gt;
			xlog(&amp;quot;OPCAO DEFAULT DO SWITCH&amp;quot;);&lt;br /&gt;
			# usuario offline, enviando para voicemail&lt;br /&gt;
			if(!registered(&amp;quot;location&amp;quot;)){&lt;br /&gt;
				route(FSVBOX);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			# usuario online, fazendo bridging&lt;br /&gt;
			xlog(&amp;quot;USUARIO ESTA ONLINE VAMOS FAZER BRIDGE&amp;quot;);&lt;br /&gt;
			prefix(&amp;quot;kb-&amp;quot;);&lt;br /&gt;
			if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
				t_on_failure(&amp;quot;FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
	}&lt;br /&gt;
	route(FSRELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSVBOX&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($rU =~ &amp;quot;^441[0-9][0-9]&amp;quot;){&lt;br /&gt;
		strip(2);&lt;br /&gt;
	}&lt;br /&gt;
	prefix(&amp;quot;vm-&amp;quot;);&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[FSRELAY] {&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSRELAY&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
branch_route[BRANCH_ONE]{&lt;br /&gt;
	xlog(&amp;quot;new branch at $ru&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
onreply_route[REPLY_ONE]{&lt;br /&gt;
	xlog(&amp;quot;Incoming reply&amp;quot;);&lt;br /&gt;
	if((isflagset(FLT_NATS) || isbflagset(FLB_NATB) &amp;amp;&amp;amp; status =~ &amp;quot;(183)|(2[0-9][0-9])&amp;quot;)){&lt;br /&gt;
		#rtpproxy_offer();&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	if(isbflagset(FLB_NATB)){&lt;br /&gt;
		fix_nated_contact();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_ONE]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_ONE&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_check_status(&amp;quot;486|408|480&amp;quot;)){&lt;br /&gt;
		$rU = $avp(callee);&lt;br /&gt;
		$var(newbranch) = 1;&lt;br /&gt;
		route(FSVBOX);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testes com Opensips (registro)==&lt;br /&gt;
&lt;br /&gt;
Antes de podermos testar precisamos iniciar o serviço, no momento estamos com ele operando em modo debug, então a inicialização deve ser realizada com o comando abaixo&lt;br /&gt;
 /etc/init.d/opensips debug&lt;br /&gt;
&lt;br /&gt;
Abra uma nova sessão no servidor e então vamos criar os usuários&lt;br /&gt;
 opensipsctl add 101 101&lt;br /&gt;
 opensipsctl add 102 102&lt;br /&gt;
 opensipsctl add 103 103&lt;br /&gt;
&lt;br /&gt;
usuario 101 com senha 101 e assim por diante&lt;br /&gt;
&lt;br /&gt;
Faça a onexão com seu softphone, aqui para testes utilizei o jitsi e o zoiper, neste momento vamos apenas fazer o registro do usuário para testar a autenticação, se você tentar realizar uma discagem não funcionará pois neste caso o processo depende do Asterisk que ainda não está configurado, vamos dar inicio nesta configuração agora.&lt;br /&gt;
&lt;br /&gt;
==Asterisk==&lt;br /&gt;
Não vamos dar muitos detalhes da instalação do asterisk aqui, a ideia é simplesmente ter o mesmo funcionando da forma que necessitamos.&lt;br /&gt;
&lt;br /&gt;
===Instalando dependências===&lt;br /&gt;
&lt;br /&gt;
Dependências necessárias para a instalação do Asterisk.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Asterisk 1.8===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget -c http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8-current.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Compilando o Asterisk 1.8====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar zxvf asterisk-1.8-current.tar.gz&lt;br /&gt;
cd asterisk-1.8-current.tar.gz&lt;br /&gt;
./configure  --disable-xmldoc&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make samples&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Após a instalação , abra o arquivo /etc/asterisk/sip.conf, localize a linha '''udpbindaddr=0.0.0.0''' e altere para '''udpbindaddr=0.0.0.0:5090'''  , depois ao fim do arquivo adicione.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
type=peer&lt;br /&gt;
host=10.254.254.6&lt;br /&gt;
port=5060&lt;br /&gt;
qualify=yes&lt;br /&gt;
context=opensips&lt;br /&gt;
insecure=port,invite&lt;br /&gt;
canreinvite=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora abra o arquivo '''/etc/asterisk/extensions.conf''' , crie no fim do arquivo a seguinte entrada.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _kb-1XX,1,NoOp(CHAMADA INTERNA - FAZER BRIDGE - ${CALLERID(num)} ${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Dial(SIP/opensips/${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Goto(opensips,vm-${EXTEN:3},1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vm-1XX,1,NoOp(CHAMADA PARA VOICEMAIL)&lt;br /&gt;
same =&amp;gt; n,Voicemail(${EXTEN:3}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vma-1XX,1,NoOp(CHAMADA PARA VOICEMAIL - ADMINISTRATIVO)&lt;br /&gt;
same =&amp;gt; n,VoicemailMain(${EXTEN:4}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _3[01]XX,1,NoOp(CHAMADA PARA CONFERENCIA)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,ConfBridge(${EXTEN},cM1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _00.,1,NoOp(CHAMADA PARA PSTN)&lt;br /&gt;
same =&amp;gt; n,Wait(2)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,Wait(1)&lt;br /&gt;
same =&amp;gt; n,PlayBack(tt-monkeys)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; h,1,Hangup()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finalmente precisamos criar as entradas do voicemail, para isso altere o arquivo '''/etc/asterisk/voicemail.conf''' localize o contexto '''[default]''' e então adicione as entradas para seu voicemail, segue dois exemplos abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
101 =&amp;gt; 123123,Mike Tesliuk&lt;br /&gt;
102 =&amp;gt; 123123,Mike Tesliuk 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Feito isso, faça um restart no asterisk&lt;br /&gt;
 /etc/init.d/asterisk restart&lt;br /&gt;
&lt;br /&gt;
Agora você ja poderá fazer os testes, basicamente criamos as seguintes situações para serem testadas.&lt;br /&gt;
&lt;br /&gt;
*1 Autenticação de usuários&lt;br /&gt;
*2 Chamada entre usuários&lt;br /&gt;
*3 Encaminhamento para caixa postal&lt;br /&gt;
*4 Acesso a caixa postal&lt;br /&gt;
*5 Acesso a conferência&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1403</id>
		<title>OpenSIPs e Asterisk - LIKE CentOS</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1403"/>
		<updated>2013-09-02T18:25:59Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: /* Compilando o OpenSIPs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=white&amp;gt; NÃO SIGA ESTE DOCUMENTO. O MESMO SE ENCONTRA EM DESEVOLVIMENTO&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este tutorial é baseado em um tutorial originalmente escrito pelo Mike, se quiser verificar o tutorial original acesse http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk&lt;br /&gt;
&lt;br /&gt;
Para esta implementação utilizamos CentOS 6.4 64 Bits , OpenSIPS 1.9 e Asterisk 1.8.23 &lt;br /&gt;
&lt;br /&gt;
==Funcionalidades==&lt;br /&gt;
Este tutorial tem por objetivo atingir as seguintes funcionalidades.&lt;br /&gt;
*Autenticação de usuário&lt;br /&gt;
*Registro de usuário&lt;br /&gt;
*Localização de usuário (encaminhamento de chamadas)&lt;br /&gt;
*Roteamento de chamadas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Através do Asterisk estenderemos estas funcionalidades agregando.&lt;br /&gt;
*Correio de voz (Voicemail)&lt;br /&gt;
*Conferencia &lt;br /&gt;
*SBC ( Pode ser utilizado para transcoding, esconder topologia, play de mensagens e tarifação )&lt;br /&gt;
*Outros serviços de media (Anuncios, Ura's e coisas do tipo)&lt;br /&gt;
&lt;br /&gt;
==Definições==&lt;br /&gt;
Para um melhor entendimento da solução vamos expor aqui algumas definições de nosso sistema.&lt;br /&gt;
*Usuários locais terão ramais com 3 digitos (ex: 101, 102, 103)&lt;br /&gt;
*Identidade do correio de voz será o mesmo do ramal&lt;br /&gt;
*Serviços de media (acesso a voicemail e outros) receberão rotas de 4 digitos&lt;br /&gt;
*Opensips e Asterisk utilizarão o mesmo servidor (Neste caso IP: 10.254.254.6)&lt;br /&gt;
*Os serviços rodarão nas portas 5060 (opensips) , 5090 (Asterisk)&lt;br /&gt;
&lt;br /&gt;
==Funcionamento==&lt;br /&gt;
A autenticação do usuário será realizada pelo OpenSIPs, quando uma chamada é autenticada então ela serguirá:&lt;br /&gt;
*Se o usuário de destino não está online a chamada será enviada para o Asterisk para função de correio de voz&lt;br /&gt;
*Se o usuário está online a chamada será encaminhada para o Asterisk, desta forma é possivel acionar funcionalidades como anuncios, definição de tempo de chamada, forçar codecs e outras funcionalidades.&lt;br /&gt;
*Asterisk envia a chamada novamente para o OpenSIPs que verificará no location e entregará a chamada para o usuário.&lt;br /&gt;
*Se a chamada não for atendida o Opensips irá re-encaminhar para o Asterisk direcionando para função de voicemail&lt;br /&gt;
&lt;br /&gt;
==OpenSIPs==&lt;br /&gt;
Vamos iniciar o processo de instalação com o OpenSIPs, siga os procedimentos abaixo para evitar qualquer dificuldade.&lt;br /&gt;
&lt;br /&gt;
===Dependencias===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====Atualizando o sistema====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum -y update&lt;br /&gt;
yum -y upgrade&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pacotes de desenvolvimento ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall 'Development Tools' -y&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
yum install wget mysql-server pcre-devel libxml2-devel xmlrpc-c-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Desabilitando o SELINUX ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/bin/sed -i -e s,'SELINUX=enforcing','SELINUX=disabled', /etc/selinux/config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durante a instalação o sistema irá lhe perguntar a senha de root para o servidor MySQL é importante que você se lembre da mesma posteriormente pois utilizaremos a mesma.&lt;br /&gt;
&lt;br /&gt;
===Compilando o OpenSIPs===&lt;br /&gt;
Para manter um padrão onde os dados estao vamos utilizar o diretório /usr/src/ para o download de código fonte.&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/&lt;br /&gt;
 wget -c http://opensips.org/pub/opensips/1.9.1/src/opensips-1.9.1_src.tar.gz&lt;br /&gt;
 tar -xzvf opensips-1.9.1_src.tar.gz&lt;br /&gt;
 cd opensips-1.9.1-tls/&lt;br /&gt;
make menuconfig&lt;br /&gt;
&lt;br /&gt;
===Preparando a Configuração===&lt;br /&gt;
&lt;br /&gt;
Antes de darmos inicio ao arquivo de configuração, vamos ajustar algumas questões, o opensips instala os arquivos (se voce nao alterar o parametro) em /usr/local, consequentemente as configurações ficam em /usr/local/etc , eu por padrão faço um link para o diretório /etc, assim acesso as configurações em /etc/opensips&lt;br /&gt;
&lt;br /&gt;
ln -s /usr/local/etc/opensips/ /etc/&lt;br /&gt;
&lt;br /&gt;
Para o script de inicialização execute o comando abaixo&lt;br /&gt;
 cp packaging/fedora/opensips.init /etc/init.d/opensips&lt;br /&gt;
 chmod +x /etc/init.d/opensips&lt;br /&gt;
 chkconfig --add opensips&lt;br /&gt;
 cp packaging/fedora/opensips.sysconfig /etc/sysconfig&lt;br /&gt;
&lt;br /&gt;
 groupadd opensips&lt;br /&gt;
 mkdir /var/run/opensips&lt;br /&gt;
 useradd -d /var/run/opensips/ -s /bin/false -g opensips opensips&lt;br /&gt;
 chown -R opensips.opensips /var/run/opensips&lt;br /&gt;
&lt;br /&gt;
===Configurando o opensipsctl===&lt;br /&gt;
O opensipsctl (e opensipsdbctl) utilizam o arquivo de configuração /etc/opensips/opensipsctlrc, abaixo segue o conteúdo do arquivo. (Sugiro que você faça um backup dos arquivos originais para ter uma copia, existem parametros que você pode estudar depois).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DBENGINE=MYSQL&lt;br /&gt;
DBHOST=localhost&lt;br /&gt;
DBNAME=opensips&lt;br /&gt;
DBRWUSER=opensips&lt;br /&gt;
DBRWPW=&amp;quot;opensipsrw&amp;quot;&lt;br /&gt;
SIP_DOMAIN=10.254.254.6  ### caso voce esteja usando outro ip altere aqui&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DBROOTUSER=&amp;quot;root&amp;quot;&lt;br /&gt;
INSTALL_EXTRA_TABLES=ask&lt;br /&gt;
ALIASES_TYPE=&amp;quot;DB&amp;quot;&lt;br /&gt;
MI_CONNECTOR=FIFO:/tmp/opensips_fifo&lt;br /&gt;
# VERIFY_ACL=1&lt;br /&gt;
# ACL_GROUPS=&amp;quot;local ld int voicemail free-pstn&amp;quot;&lt;br /&gt;
# VERBOSE=1&lt;br /&gt;
# STORE_PLAINTEXT_PW=0&lt;br /&gt;
# NOHLPRINT=1&lt;br /&gt;
PID_FILE=/var/run/opensips/opensips.pid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Criando o banco de dados===&lt;br /&gt;
Agora que temos nosso arquivo configurado vamos fazer a criação do banco de dados, execute o comando abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
opensipsdbctl create opensips&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema irá lhe perguntar algumas coisas, responda Y (sim) para todas para que ele instale todas as tabelas, não usaremos todas elas, mas desta forma você fica com praticamente tudo criado para o caso de uma expansão dos recursos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Instalando o RTP Proxy===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/src/&lt;br /&gt;
wget -c http://b2bua.org/chrome/site/rtpproxy-1.2.1.tar.gz&lt;br /&gt;
tar -xzvf rtpproxy-1.2.1.tar.gz&lt;br /&gt;
cd rtpproxy-1.2.1&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
groupadd rtpproxy&lt;br /&gt;
useradd -d /var/run/rtpproxy -s /bin/true -g rtpproxy rtpproxy&lt;br /&gt;
mkdir /var/log/rtpproxy&lt;br /&gt;
mkdir /var/run/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/log/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/run/rtpproxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Arquivo de inicialização====&lt;br /&gt;
'''/etc/init.d/rtpproxy'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# Este script e de autoria de Mike Tesliuk&lt;br /&gt;
# qualquer falha no mesmo por favor informe &lt;br /&gt;
# atraves do email mike (a) tesliuk.com&lt;br /&gt;
#&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:          rtpproxy&lt;br /&gt;
# Required-Start:    $syslog $network $local_fs $time&lt;br /&gt;
# Required-Stop:     $syslog $network $local_fs&lt;br /&gt;
# Default-Start:     2 3 4 5&lt;br /&gt;
# Default-Stop:      0 1 6&lt;br /&gt;
# Short-Description: Start the RTPPROXY server&lt;br /&gt;
# Description:       Start the RTPPROXY server&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin&lt;br /&gt;
USELOG=1&lt;br /&gt;
USER=rtpproxy&lt;br /&gt;
# Altere o ip abaixo para o ip de seu sistema&lt;br /&gt;
IPADDR=&amp;quot;10.254.254.6&amp;quot;&lt;br /&gt;
&lt;br /&gt;
. /lib/lsb/init-functions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
start(){&lt;br /&gt;
        echo &amp;quot;Iniciando RTP PROXY &amp;quot;&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                if [ &amp;quot;${USELOG}&amp;quot; = &amp;quot;1&amp;quot; ]; then&lt;br /&gt;
                        echo &amp;quot;Iniciando com LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER -F -f d DBUG 2&amp;amp;&amp;gt; /var/log/rtpproxy/rtpproxy.log &amp;amp;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Iniciando sem LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER  -F -f d DBUG 2&amp;amp;&amp;gt; /dev/null&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;START OK&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
        else&lt;br /&gt;
                echo &amp;quot;Processo ja em execucao&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
stop(){&lt;br /&gt;
&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                echo &amp;quot;Processo nao encontrado&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
                kill -9 $(pidof rtpproxy)&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;STOP OK&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Falha em realizar stop do servico&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
case $1 in&lt;br /&gt;
        start)&lt;br /&gt;
                start&lt;br /&gt;
        ;;&lt;br /&gt;
        stop)&lt;br /&gt;
                stop&lt;br /&gt;
        ;;&lt;br /&gt;
        restart)&lt;br /&gt;
                stop&lt;br /&gt;
                start&lt;br /&gt;
&lt;br /&gt;
        ;;&lt;br /&gt;
        *)&lt;br /&gt;
                echo &amp;quot;Utilize: stop | start | restart&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos dar permissao e colocar na inicialização&lt;br /&gt;
 chmod +x /etc/init.d/rtpproxy &lt;br /&gt;
 update-rc.d rtpproxy defaults&lt;br /&gt;
 /etc/init.d/rtpproxy start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Criando o arquivo opensips.cfg===&lt;br /&gt;
O arquivo opensips.cfg é a onde a coisa toda acontece para o opensips, claro que ele dependerá de informações que estarão no banco de dados, mas é onde criamos todas as nossas rotas e validações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Este tutorial nao esta terminado, este arquivo ainda esta em testes &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
####### Global Parameters #########&lt;br /&gt;
debug=3&lt;br /&gt;
log_stderror=no&lt;br /&gt;
log_facility=LOG_LOCAL0&lt;br /&gt;
&lt;br /&gt;
fork=yes&lt;br /&gt;
children=4&lt;br /&gt;
&lt;br /&gt;
/* Descomente as linhas abaixo para ativar o debug */&lt;br /&gt;
#debug=7&lt;br /&gt;
#fork=no&lt;br /&gt;
#log_stderror=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Comente a linha abaixo para ativar a descoberta automatica de enderecos locais&lt;br /&gt;
 , isso significa que o sistema ira verificar todos os ips ativos e hosts e entao ativara&lt;br /&gt;
 o protocolo para todos eles */ &lt;br /&gt;
auto_aliases=no&lt;br /&gt;
&lt;br /&gt;
/* Defina aqui o ip a ser utilizado */&lt;br /&gt;
listen=udp:10.254.254.6:5060   # Altere este IP para o seu ambiente&lt;br /&gt;
&lt;br /&gt;
/* Nao usaremos sip por tcp nem tls neste script */&lt;br /&gt;
disable_tcp=yes&lt;br /&gt;
&lt;br /&gt;
disable_tls=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Secao de modulos ########&lt;br /&gt;
&lt;br /&gt;
#set module path&lt;br /&gt;
mpath=&amp;quot;/usr//lib64/opensips/modules/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;signaling.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sl.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;tm.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_timer&amp;quot;, 5)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_inv_timer&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;restart_fr_on_each_reply&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;onreply_avp_mode&amp;quot;, 1)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rr.so&amp;quot;&lt;br /&gt;
/* do not append from tag to the RR (no need for this script) */&lt;br /&gt;
modparam(&amp;quot;rr&amp;quot;, &amp;quot;append_fromtag&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;maxfwd.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sipmsgops.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;mi_fifo.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_name&amp;quot;, &amp;quot;/tmp/opensips_fifo&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_mode&amp;quot;, 0666)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;db_mysql.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;uri.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;uri&amp;quot;, &amp;quot;use_uri_table&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;usrloc.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;nat_bflag&amp;quot;, &amp;quot;FLB_NATB&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_mode&amp;quot;,   2)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;registrar.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;registrar&amp;quot;, &amp;quot;tcp_persistent_flag&amp;quot;, &amp;quot;TCP_PERSISTENT&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
/* Descomente a linha abaixo para nao permitir mais de 10 contatos por conta */&lt;br /&gt;
#modparam(&amp;quot;registrar&amp;quot;, &amp;quot;max_contacts&amp;quot;, 10)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;acc.so&amp;quot;&lt;br /&gt;
/* Quais eventos deverao ser registrados ? */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;early_media&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;report_cancels&amp;quot;, 0)&lt;br /&gt;
/* por padrao nos nao ajustamos a direcao em requisicoes sequencias, &lt;br /&gt;
 se voce deseja usar este recurso tenha certeza de ativar o &amp;quot;appen_fromtag&amp;quot; &lt;br /&gt;
 para o modulo &amp;quot;rr&amp;quot; */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;detect_direction&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;failed_transaction_flag&amp;quot;, &amp;quot;FLT_ACCFAILED&amp;quot;)&lt;br /&gt;
/* Gatilhos para accounting  (flags) */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_extra&amp;quot;, &lt;br /&gt;
	&amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_extra&amp;quot;, &amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;auth.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;auth_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;calculate_ha1&amp;quot;, yes)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;password_column&amp;quot;, &amp;quot;password&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;load_credentials&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;permissions.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;permissions&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;alias_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;alias_db&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;presence.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;presence&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
#loadmodule &amp;quot;presence_xml.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;dialog.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_mode&amp;quot;, 2)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_url&amp;quot;,&amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;dlg_match_mode&amp;quot;, 1)&lt;br /&gt;
#modparam(&amp;quot;dialog&amp;quot;, &amp;quot;default_timeout&amp;quot;, 60)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;siptrace.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;trace_flag&amp;quot;, 22)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;traced_user_avp&amp;quot;, &amp;quot;$avp(s:traceuser)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;nathelper.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;natping_interval&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;ping_nated_only&amp;quot;, 1)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_bflag&amp;quot;, &amp;quot;FLB_NATSIPPING&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_from&amp;quot;, &amp;quot;sip:pinger@10.254.254.6&amp;quot;) # Altere o ip para o ip do servidor&lt;br /&gt;
modparam(&amp;quot;nathelper|registrar&amp;quot;, &amp;quot;received_avp&amp;quot;, &amp;quot;$avp(RECEIVED)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rtpproxy.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;rtpproxy&amp;quot;, &amp;quot;rtpproxy_sock&amp;quot;, &amp;quot;udp:127.0.0.1:7722&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Logica de roteamento ########&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route {&lt;br /&gt;
&lt;br /&gt;
	if (!mf_process_maxfwd_header(&amp;quot;3&amp;quot;)) {&lt;br /&gt;
                send_reply(&amp;quot;483&amp;quot;,&amp;quot;looping&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;REQUISICAO RECEBIDA, ENVIANDO PARA REQINIT&amp;quot;);&lt;br /&gt;
	# Checagem inicial por requisicao&lt;br /&gt;
	route(REQINIT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA NAT&amp;quot;);&lt;br /&gt;
	# Deteccao de nat&lt;br /&gt;
	route(NAT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA WITHINDLG&amp;quot;);&lt;br /&gt;
	# Gerenciando requisicaoes com dialog&lt;br /&gt;
	route(WITHINDLG);&lt;br /&gt;
&lt;br /&gt;
	# Manipulando requisicoes iniciais (nao consta To tag)&lt;br /&gt;
	&lt;br /&gt;
	# Processando CANCEL&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;CANCEL&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD CANCEL&amp;quot;);&lt;br /&gt;
		if(t_check_trans()){&lt;br /&gt;
			t_relay();&lt;br /&gt;
		}&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	t_check_trans();&lt;br /&gt;
&lt;br /&gt;
	# Enviando para autenticacao&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA AUTENTICACAO&amp;quot;);&lt;br /&gt;
	route(AUTH);&lt;br /&gt;
&lt;br /&gt;
	# gravando rota para formacao dos dialogs (caso sejam roteados)&lt;br /&gt;
	# removemos qualquer cabecalho de rota pre carregado&lt;br /&gt;
	remove_hf(&amp;quot;Route&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE OU SIBSCRIBE&amp;quot;);&lt;br /&gt;
		record_route();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Contabilizando (acc) INVITES&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE, FAZENDOA ACC&amp;quot;);&lt;br /&gt;
		setflag(FLT_ACC);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando chamada para destinos externos&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA SIPOUT&amp;quot;);&lt;br /&gt;
	route(SIPOUT);&lt;br /&gt;
&lt;br /&gt;
	# Requisicoes para dominio local&lt;br /&gt;
	&lt;br /&gt;
	# Roteando requisicoes de PRESENCE&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PRESENCE&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	route(PRESENCE);&lt;br /&gt;
&lt;br /&gt;
	# Gerenciando pedidos de registro&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA REGISTRAR&amp;quot;);	&lt;br /&gt;
	route(REGISTRAR);&lt;br /&gt;
&lt;br /&gt;
	if($ru==&amp;quot;&amp;quot;){&lt;br /&gt;
		xlog(&amp;quot;ru --&amp;gt; vazio&amp;quot;);&lt;br /&gt;
		# Requisicao sem usuario na RURI&lt;br /&gt;
		sl_send_reply(&amp;quot;484&amp;quot;, &amp;quot;Address Incomplete&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando requisicao para PSTN&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PSTN&amp;quot;);&lt;br /&gt;
	route(PSTN);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Salvando informacao de quem originou a chamad&lt;br /&gt;
	$avp(callee)=$rU;&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA DISPATCH PSTN&amp;quot;);&lt;br /&gt;
	route(FSDISPATCH);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	# Servico de localizacao de usuario&lt;br /&gt;
	route(LOCATION);&lt;br /&gt;
&lt;br /&gt;
	# Efetuando o relay (encaminhamento)&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[RELAY] {&lt;br /&gt;
	if(check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
		setbflag(FLB_NATB);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(isflagset(FLT_NATS) || isbflagset(FLB_NATB)){&lt;br /&gt;
		#route(RTPPROXY);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
#		t_on_reply(&amp;quot;REPLY_ONE&amp;quot;);&lt;br /&gt;
#		t_on_failure(&amp;quot;FAIL_ONE&amp;quot;);&lt;br /&gt;
#	}&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;AQUI TENTAMOS ENVIAR A CHAMADA $fU $tU&amp;quot;);&lt;br /&gt;
	if(!t_relay()){&lt;br /&gt;
		xlog(&amp;quot;FALHA EM ENVIAR A CHAMADA, NAO FOI POSSIVEL FAZER O RELAY&amp;quot;);&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
	}&lt;br /&gt;
	xlog(&amp;quot;CHAMADA FOI ENVIADA AQUI, QUAL O ERRO ENTAO&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REQINIT] {&lt;br /&gt;
	if(!mf_process_maxfwd_header(&amp;quot;10&amp;quot;)){&lt;br /&gt;
		sl_send_reply(&amp;quot;483&amp;quot;, &amp;quot;Too Many Hops&amp;quot;);&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[WITHINDLG] {&lt;br /&gt;
	if(has_totag()){&lt;br /&gt;
		if(loose_route()){&lt;br /&gt;
			if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
				setflag(FLT_ACC);&lt;br /&gt;
				setflag(FLT_ACCFAILED);&lt;br /&gt;
			}&lt;br /&gt;
			route(RELAY);&lt;br /&gt;
		}else{&lt;br /&gt;
			if(is_method(&amp;quot;SUBSCRIBE&amp;quot;) &amp;amp;&amp;amp; uri==myself) {&lt;br /&gt;
				# requisicao de subscribe pre-estabelecida&lt;br /&gt;
				route(PRESENCE);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;ACK&amp;quot;)){&lt;br /&gt;
				if(t_check_trans()){&lt;br /&gt;
					t_relay();&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}else{&lt;br /&gt;
				# ACK para transacao nao encontrada, ignoramos...&lt;br /&gt;
				exit;&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			sl_send_reply(&amp;quot;404&amp;quot;, &amp;quot;Not Here&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		}	&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REGISTRAR] {&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		if(isflagset(FLT_NATS)){&lt;br /&gt;
			setbflag(FLB_NATB);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(!save(&amp;quot;location&amp;quot;)){&lt;br /&gt;
			sl_reply_error();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[LOCATION] {&lt;br /&gt;
&lt;br /&gt;
	alias_db_lookup(&amp;quot;dbaliases&amp;quot;);&lt;br /&gt;
	if(!lookup(&amp;quot;location&amp;quot;)){&lt;br /&gt;
		switch($rc) {&lt;br /&gt;
			case -1:&lt;br /&gt;
			case -3:&lt;br /&gt;
				t_newtran();&lt;br /&gt;
				t_reply(&amp;quot;404&amp;quot;,&amp;quot;Not Found&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			case -2:&lt;br /&gt;
				sl_send_reply(&amp;quot;405&amp;quot;, &amp;quot;Method Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		setflag(FLT_ACCMISSED);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PRESENCE] {&lt;br /&gt;
	if(!is_method(&amp;quot;PUBLISH|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!t_newtran()){&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
		handle_publish();&lt;br /&gt;
	}else if(is_method(&amp;quot;SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		handle_subscribe();&lt;br /&gt;
	}&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[AUTH]{&lt;br /&gt;
	xlog(&amp;quot;PEDIDO DE AUTENTICACAO&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		# atentica pedidos de registro&lt;br /&gt;
		if(!www_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
			www_challenge(&amp;quot;&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if($au!=$tU){&lt;br /&gt;
			sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	}else{&lt;br /&gt;
		if(route(FSINBOUND)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(check_source_address(&amp;quot;0&amp;quot;)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(from_uri==myself){&lt;br /&gt;
			if(!proxy_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
				proxy_challenge(&amp;quot;&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
				if($au!=$tU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}else{&lt;br /&gt;
				if($au!=$fU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			# Validamos (autenticamos) o usuario&lt;br /&gt;
			consume_credentials();&lt;br /&gt;
		}else{&lt;br /&gt;
		&lt;br /&gt;
			# usuario nao e local, vamos negar&lt;br /&gt;
			if(!uri==myself){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not relaying&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}	&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[NAT] {&lt;br /&gt;
	force_rport();&lt;br /&gt;
	if(nat_uac_test(&amp;quot;19&amp;quot;)){&lt;br /&gt;
		if(method==&amp;quot;REGISTER&amp;quot;){&lt;br /&gt;
			fix_nated_register();&lt;br /&gt;
		}else{&lt;br /&gt;
			fix_nated_contact();&lt;br /&gt;
		}&lt;br /&gt;
		setflag(FLT_NATS);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[RTPPROXY] {&lt;br /&gt;
	if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}else if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		engage_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!has_totag()){&lt;br /&gt;
&lt;br /&gt;
		if(!check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
			add_rr_param(&amp;quot;;nat=yes&amp;quot;);&lt;br /&gt;
			xlog(&amp;quot;NAT yes NAO ENCONTRADO&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[SIPOUT]{&lt;br /&gt;
	if(!uri==myself){&lt;br /&gt;
		append_hf(&amp;quot;P-hint: outbound\r\n&amp;quot;);&lt;br /&gt;
		route(RELAY);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PSTN]{&lt;br /&gt;
        # neste caso apenas para exemplificar um uso simples&lt;br /&gt;
        # vamos fazer o redirecionamento par ao asterisk&lt;br /&gt;
        # realizar a dicagem da chamada&lt;br /&gt;
&lt;br /&gt;
        if(!($rU=~&amp;quot;^(\+|00)[1-9][0-9]{3,20}$&amp;quot;))&lt;br /&gt;
                return;&lt;br /&gt;
&lt;br /&gt;
        ## a regra acima aceita para discagem externa qualquer numero&lt;br /&gt;
        # comecado com 00 ou +&lt;br /&gt;
        #&lt;br /&gt;
&lt;br /&gt;
        if(from_uri!=myself){&lt;br /&gt;
                sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $ru = &amp;quot;sip:&amp;quot; + $rU + &amp;quot;@&amp;quot; + &amp;quot;10.254.254.6:5090&amp;quot;;&lt;br /&gt;
        xlog(&amp;quot;NOVO DESTINO: $ru&amp;quot;);&lt;br /&gt;
        route(RELAY);&lt;br /&gt;
        exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[XMLRPC]{&lt;br /&gt;
	# nao vamos implementar esta funcionalidade&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSINBOUND] {&lt;br /&gt;
	# verificar para validar o ip do asterisk:porta&lt;br /&gt;
	# se bater , responder com return 1;&lt;br /&gt;
	if($si==&amp;quot;10.254.254.6&amp;quot; &amp;amp;&amp;amp; $sp==&amp;quot;5090&amp;quot;){&lt;br /&gt;
		return(1);&lt;br /&gt;
	}else{&lt;br /&gt;
		return(-1);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSDISPATCH] {&lt;br /&gt;
&lt;br /&gt;
	if(!is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(route(FSINBOUND)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;CAIMOS NO SWITCH, VAMOS LOCALIZAR O PERFIL DA CHAMADA $rU&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if($rU =~ &amp;quot;^41$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH expressa comeca e termina em 41&amp;quot;);&lt;br /&gt;
			#regra de menu de voicemail, apenas &lt;br /&gt;
			# usuarios autenticados&lt;br /&gt;
			if($au==&amp;quot;&amp;quot;){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$rU = &amp;quot;vma-&amp;quot; + $au;&lt;br /&gt;
	}else if($rU =~ &amp;quot;^441[0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCA 441XX &amp;quot;);&lt;br /&gt;
			# numero discado comeca com 441 seguido de dois digitos&lt;br /&gt;
			# chamada direta para inbox do voicemail&lt;br /&gt;
			strip(2);&lt;br /&gt;
			route(FSVBOX);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^433[01][0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH OPCAO 433[01]XX&amp;quot;);&lt;br /&gt;
			# numero comecado em 443, seguido de 0 ou 1, mais dois digitos&lt;br /&gt;
			# sistema de conferencia&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^45[0-9]+$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCAO 45X.&amp;quot;);&lt;br /&gt;
			#numero comecado com 45, seguindo de numeros;&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else{&lt;br /&gt;
			xlog(&amp;quot;OPCAO DEFAULT DO SWITCH&amp;quot;);&lt;br /&gt;
			# usuario offline, enviando para voicemail&lt;br /&gt;
			if(!registered(&amp;quot;location&amp;quot;)){&lt;br /&gt;
				route(FSVBOX);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			# usuario online, fazendo bridging&lt;br /&gt;
			xlog(&amp;quot;USUARIO ESTA ONLINE VAMOS FAZER BRIDGE&amp;quot;);&lt;br /&gt;
			prefix(&amp;quot;kb-&amp;quot;);&lt;br /&gt;
			if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
				t_on_failure(&amp;quot;FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
	}&lt;br /&gt;
	route(FSRELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSVBOX&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($rU =~ &amp;quot;^441[0-9][0-9]&amp;quot;){&lt;br /&gt;
		strip(2);&lt;br /&gt;
	}&lt;br /&gt;
	prefix(&amp;quot;vm-&amp;quot;);&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[FSRELAY] {&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSRELAY&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
branch_route[BRANCH_ONE]{&lt;br /&gt;
	xlog(&amp;quot;new branch at $ru&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
onreply_route[REPLY_ONE]{&lt;br /&gt;
	xlog(&amp;quot;Incoming reply&amp;quot;);&lt;br /&gt;
	if((isflagset(FLT_NATS) || isbflagset(FLB_NATB) &amp;amp;&amp;amp; status =~ &amp;quot;(183)|(2[0-9][0-9])&amp;quot;)){&lt;br /&gt;
		#rtpproxy_offer();&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	if(isbflagset(FLB_NATB)){&lt;br /&gt;
		fix_nated_contact();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_ONE]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_ONE&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_check_status(&amp;quot;486|408|480&amp;quot;)){&lt;br /&gt;
		$rU = $avp(callee);&lt;br /&gt;
		$var(newbranch) = 1;&lt;br /&gt;
		route(FSVBOX);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testes com Opensips (registro)==&lt;br /&gt;
&lt;br /&gt;
Antes de podermos testar precisamos iniciar o serviço, no momento estamos com ele operando em modo debug, então a inicialização deve ser realizada com o comando abaixo&lt;br /&gt;
 /etc/init.d/opensips debug&lt;br /&gt;
&lt;br /&gt;
Abra uma nova sessão no servidor e então vamos criar os usuários&lt;br /&gt;
 opensipsctl add 101 101&lt;br /&gt;
 opensipsctl add 102 102&lt;br /&gt;
 opensipsctl add 103 103&lt;br /&gt;
&lt;br /&gt;
usuario 101 com senha 101 e assim por diante&lt;br /&gt;
&lt;br /&gt;
Faça a onexão com seu softphone, aqui para testes utilizei o jitsi e o zoiper, neste momento vamos apenas fazer o registro do usuário para testar a autenticação, se você tentar realizar uma discagem não funcionará pois neste caso o processo depende do Asterisk que ainda não está configurado, vamos dar inicio nesta configuração agora.&lt;br /&gt;
&lt;br /&gt;
==Asterisk==&lt;br /&gt;
Não vamos dar muitos detalhes da instalação do asterisk aqui, a ideia é simplesmente ter o mesmo funcionando da forma que necessitamos.&lt;br /&gt;
&lt;br /&gt;
===Instalando dependências===&lt;br /&gt;
&lt;br /&gt;
Dependências necessárias para a instalação do Asterisk.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Asterisk 1.8===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget -c http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8-current.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Compilando o Asterisk 1.8====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar zxvf asterisk-1.8-current.tar.gz&lt;br /&gt;
cd asterisk-1.8-current.tar.gz&lt;br /&gt;
./configure  --disable-xmldoc&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make samples&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Após a instalação , abra o arquivo /etc/asterisk/sip.conf, localize a linha '''udpbindaddr=0.0.0.0''' e altere para '''udpbindaddr=0.0.0.0:5090'''  , depois ao fim do arquivo adicione.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
type=peer&lt;br /&gt;
host=10.254.254.6&lt;br /&gt;
port=5060&lt;br /&gt;
qualify=yes&lt;br /&gt;
context=opensips&lt;br /&gt;
insecure=port,invite&lt;br /&gt;
canreinvite=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora abra o arquivo '''/etc/asterisk/extensions.conf''' , crie no fim do arquivo a seguinte entrada.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _kb-1XX,1,NoOp(CHAMADA INTERNA - FAZER BRIDGE - ${CALLERID(num)} ${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Dial(SIP/opensips/${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Goto(opensips,vm-${EXTEN:3},1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vm-1XX,1,NoOp(CHAMADA PARA VOICEMAIL)&lt;br /&gt;
same =&amp;gt; n,Voicemail(${EXTEN:3}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vma-1XX,1,NoOp(CHAMADA PARA VOICEMAIL - ADMINISTRATIVO)&lt;br /&gt;
same =&amp;gt; n,VoicemailMain(${EXTEN:4}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _3[01]XX,1,NoOp(CHAMADA PARA CONFERENCIA)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,ConfBridge(${EXTEN},cM1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _00.,1,NoOp(CHAMADA PARA PSTN)&lt;br /&gt;
same =&amp;gt; n,Wait(2)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,Wait(1)&lt;br /&gt;
same =&amp;gt; n,PlayBack(tt-monkeys)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; h,1,Hangup()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finalmente precisamos criar as entradas do voicemail, para isso altere o arquivo '''/etc/asterisk/voicemail.conf''' localize o contexto '''[default]''' e então adicione as entradas para seu voicemail, segue dois exemplos abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
101 =&amp;gt; 123123,Mike Tesliuk&lt;br /&gt;
102 =&amp;gt; 123123,Mike Tesliuk 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Feito isso, faça um restart no asterisk&lt;br /&gt;
 /etc/init.d/asterisk restart&lt;br /&gt;
&lt;br /&gt;
Agora você ja poderá fazer os testes, basicamente criamos as seguintes situações para serem testadas.&lt;br /&gt;
&lt;br /&gt;
*1 Autenticação de usuários&lt;br /&gt;
*2 Chamada entre usuários&lt;br /&gt;
*3 Encaminhamento para caixa postal&lt;br /&gt;
*4 Acesso a caixa postal&lt;br /&gt;
*5 Acesso a conferência&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1402</id>
		<title>OpenSIPs e Asterisk - LIKE CentOS</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1402"/>
		<updated>2013-09-02T18:15:48Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: /* Preparando a Configuração */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=white&amp;gt; NÃO SIGA ESTE DOCUMENTO. O MESMO SE ENCONTRA EM DESEVOLVIMENTO&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este tutorial é baseado em um tutorial originalmente escrito pelo Mike, se quiser verificar o tutorial original acesse http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk&lt;br /&gt;
&lt;br /&gt;
Para esta implementação utilizamos CentOS 6.4 64 Bits , OpenSIPS 1.9 e Asterisk 1.8.23 &lt;br /&gt;
&lt;br /&gt;
==Funcionalidades==&lt;br /&gt;
Este tutorial tem por objetivo atingir as seguintes funcionalidades.&lt;br /&gt;
*Autenticação de usuário&lt;br /&gt;
*Registro de usuário&lt;br /&gt;
*Localização de usuário (encaminhamento de chamadas)&lt;br /&gt;
*Roteamento de chamadas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Através do Asterisk estenderemos estas funcionalidades agregando.&lt;br /&gt;
*Correio de voz (Voicemail)&lt;br /&gt;
*Conferencia &lt;br /&gt;
*SBC ( Pode ser utilizado para transcoding, esconder topologia, play de mensagens e tarifação )&lt;br /&gt;
*Outros serviços de media (Anuncios, Ura's e coisas do tipo)&lt;br /&gt;
&lt;br /&gt;
==Definições==&lt;br /&gt;
Para um melhor entendimento da solução vamos expor aqui algumas definições de nosso sistema.&lt;br /&gt;
*Usuários locais terão ramais com 3 digitos (ex: 101, 102, 103)&lt;br /&gt;
*Identidade do correio de voz será o mesmo do ramal&lt;br /&gt;
*Serviços de media (acesso a voicemail e outros) receberão rotas de 4 digitos&lt;br /&gt;
*Opensips e Asterisk utilizarão o mesmo servidor (Neste caso IP: 10.254.254.6)&lt;br /&gt;
*Os serviços rodarão nas portas 5060 (opensips) , 5090 (Asterisk)&lt;br /&gt;
&lt;br /&gt;
==Funcionamento==&lt;br /&gt;
A autenticação do usuário será realizada pelo OpenSIPs, quando uma chamada é autenticada então ela serguirá:&lt;br /&gt;
*Se o usuário de destino não está online a chamada será enviada para o Asterisk para função de correio de voz&lt;br /&gt;
*Se o usuário está online a chamada será encaminhada para o Asterisk, desta forma é possivel acionar funcionalidades como anuncios, definição de tempo de chamada, forçar codecs e outras funcionalidades.&lt;br /&gt;
*Asterisk envia a chamada novamente para o OpenSIPs que verificará no location e entregará a chamada para o usuário.&lt;br /&gt;
*Se a chamada não for atendida o Opensips irá re-encaminhar para o Asterisk direcionando para função de voicemail&lt;br /&gt;
&lt;br /&gt;
==OpenSIPs==&lt;br /&gt;
Vamos iniciar o processo de instalação com o OpenSIPs, siga os procedimentos abaixo para evitar qualquer dificuldade.&lt;br /&gt;
&lt;br /&gt;
===Dependencias===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====Atualizando o sistema====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum -y update&lt;br /&gt;
yum -y upgrade&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pacotes de desenvolvimento ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall 'Development Tools' -y&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
yum install wget mysql-server pcre-devel libxml2-devel xmlrpc-c-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Desabilitando o SELINUX ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/bin/sed -i -e s,'SELINUX=enforcing','SELINUX=disabled', /etc/selinux/config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durante a instalação o sistema irá lhe perguntar a senha de root para o servidor MySQL é importante que você se lembre da mesma posteriormente pois utilizaremos a mesma.&lt;br /&gt;
&lt;br /&gt;
===Compilando o OpenSIPs===&lt;br /&gt;
Para manter um padrão onde os dados estao vamos utilizar o diretório /usr/src/ para o download de código fonte.&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/&lt;br /&gt;
 wget -c http://opensips.org/pub/opensips/1.9.1/src/opensips-1.9.1_src.tar.gz&lt;br /&gt;
 tar -xzvf opensips-1.9.1_src.tar.gz&lt;br /&gt;
 cd opensips-1.9.1-tls/&lt;br /&gt;
 make all&lt;br /&gt;
&lt;br /&gt;
===Preparando a Configuração===&lt;br /&gt;
&lt;br /&gt;
Antes de darmos inicio ao arquivo de configuração, vamos ajustar algumas questões, o opensips instala os arquivos (se voce nao alterar o parametro) em /usr/local, consequentemente as configurações ficam em /usr/local/etc , eu por padrão faço um link para o diretório /etc, assim acesso as configurações em /etc/opensips&lt;br /&gt;
&lt;br /&gt;
ln -s /usr/local/etc/opensips/ /etc/&lt;br /&gt;
&lt;br /&gt;
Para o script de inicialização execute o comando abaixo&lt;br /&gt;
 cp packaging/fedora/opensips.init /etc/init.d/opensips&lt;br /&gt;
 chmod +x /etc/init.d/opensips&lt;br /&gt;
 chkconfig --add opensips&lt;br /&gt;
 cp packaging/fedora/opensips.sysconfig /etc/sysconfig&lt;br /&gt;
&lt;br /&gt;
 groupadd opensips&lt;br /&gt;
 mkdir /var/run/opensips&lt;br /&gt;
 useradd -d /var/run/opensips/ -s /bin/false -g opensips opensips&lt;br /&gt;
 chown -R opensips.opensips /var/run/opensips&lt;br /&gt;
&lt;br /&gt;
===Configurando o opensipsctl===&lt;br /&gt;
O opensipsctl (e opensipsdbctl) utilizam o arquivo de configuração /etc/opensips/opensipsctlrc, abaixo segue o conteúdo do arquivo. (Sugiro que você faça um backup dos arquivos originais para ter uma copia, existem parametros que você pode estudar depois).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DBENGINE=MYSQL&lt;br /&gt;
DBHOST=localhost&lt;br /&gt;
DBNAME=opensips&lt;br /&gt;
DBRWUSER=opensips&lt;br /&gt;
DBRWPW=&amp;quot;opensipsrw&amp;quot;&lt;br /&gt;
SIP_DOMAIN=10.254.254.6  ### caso voce esteja usando outro ip altere aqui&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DBROOTUSER=&amp;quot;root&amp;quot;&lt;br /&gt;
INSTALL_EXTRA_TABLES=ask&lt;br /&gt;
ALIASES_TYPE=&amp;quot;DB&amp;quot;&lt;br /&gt;
MI_CONNECTOR=FIFO:/tmp/opensips_fifo&lt;br /&gt;
# VERIFY_ACL=1&lt;br /&gt;
# ACL_GROUPS=&amp;quot;local ld int voicemail free-pstn&amp;quot;&lt;br /&gt;
# VERBOSE=1&lt;br /&gt;
# STORE_PLAINTEXT_PW=0&lt;br /&gt;
# NOHLPRINT=1&lt;br /&gt;
PID_FILE=/var/run/opensips/opensips.pid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Criando o banco de dados===&lt;br /&gt;
Agora que temos nosso arquivo configurado vamos fazer a criação do banco de dados, execute o comando abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
opensipsdbctl create opensips&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema irá lhe perguntar algumas coisas, responda Y (sim) para todas para que ele instale todas as tabelas, não usaremos todas elas, mas desta forma você fica com praticamente tudo criado para o caso de uma expansão dos recursos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Instalando o RTP Proxy===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/src/&lt;br /&gt;
wget -c http://b2bua.org/chrome/site/rtpproxy-1.2.1.tar.gz&lt;br /&gt;
tar -xzvf rtpproxy-1.2.1.tar.gz&lt;br /&gt;
cd rtpproxy-1.2.1&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
groupadd rtpproxy&lt;br /&gt;
useradd -d /var/run/rtpproxy -s /bin/true -g rtpproxy rtpproxy&lt;br /&gt;
mkdir /var/log/rtpproxy&lt;br /&gt;
mkdir /var/run/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/log/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/run/rtpproxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Arquivo de inicialização====&lt;br /&gt;
'''/etc/init.d/rtpproxy'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# Este script e de autoria de Mike Tesliuk&lt;br /&gt;
# qualquer falha no mesmo por favor informe &lt;br /&gt;
# atraves do email mike (a) tesliuk.com&lt;br /&gt;
#&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:          rtpproxy&lt;br /&gt;
# Required-Start:    $syslog $network $local_fs $time&lt;br /&gt;
# Required-Stop:     $syslog $network $local_fs&lt;br /&gt;
# Default-Start:     2 3 4 5&lt;br /&gt;
# Default-Stop:      0 1 6&lt;br /&gt;
# Short-Description: Start the RTPPROXY server&lt;br /&gt;
# Description:       Start the RTPPROXY server&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin&lt;br /&gt;
USELOG=1&lt;br /&gt;
USER=rtpproxy&lt;br /&gt;
# Altere o ip abaixo para o ip de seu sistema&lt;br /&gt;
IPADDR=&amp;quot;10.254.254.6&amp;quot;&lt;br /&gt;
&lt;br /&gt;
. /lib/lsb/init-functions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
start(){&lt;br /&gt;
        echo &amp;quot;Iniciando RTP PROXY &amp;quot;&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                if [ &amp;quot;${USELOG}&amp;quot; = &amp;quot;1&amp;quot; ]; then&lt;br /&gt;
                        echo &amp;quot;Iniciando com LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER -F -f d DBUG 2&amp;amp;&amp;gt; /var/log/rtpproxy/rtpproxy.log &amp;amp;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Iniciando sem LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER  -F -f d DBUG 2&amp;amp;&amp;gt; /dev/null&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;START OK&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
        else&lt;br /&gt;
                echo &amp;quot;Processo ja em execucao&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
stop(){&lt;br /&gt;
&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                echo &amp;quot;Processo nao encontrado&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
                kill -9 $(pidof rtpproxy)&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;STOP OK&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Falha em realizar stop do servico&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
case $1 in&lt;br /&gt;
        start)&lt;br /&gt;
                start&lt;br /&gt;
        ;;&lt;br /&gt;
        stop)&lt;br /&gt;
                stop&lt;br /&gt;
        ;;&lt;br /&gt;
        restart)&lt;br /&gt;
                stop&lt;br /&gt;
                start&lt;br /&gt;
&lt;br /&gt;
        ;;&lt;br /&gt;
        *)&lt;br /&gt;
                echo &amp;quot;Utilize: stop | start | restart&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos dar permissao e colocar na inicialização&lt;br /&gt;
 chmod +x /etc/init.d/rtpproxy &lt;br /&gt;
 update-rc.d rtpproxy defaults&lt;br /&gt;
 /etc/init.d/rtpproxy start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Criando o arquivo opensips.cfg===&lt;br /&gt;
O arquivo opensips.cfg é a onde a coisa toda acontece para o opensips, claro que ele dependerá de informações que estarão no banco de dados, mas é onde criamos todas as nossas rotas e validações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Este tutorial nao esta terminado, este arquivo ainda esta em testes &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
####### Global Parameters #########&lt;br /&gt;
debug=3&lt;br /&gt;
log_stderror=no&lt;br /&gt;
log_facility=LOG_LOCAL0&lt;br /&gt;
&lt;br /&gt;
fork=yes&lt;br /&gt;
children=4&lt;br /&gt;
&lt;br /&gt;
/* Descomente as linhas abaixo para ativar o debug */&lt;br /&gt;
#debug=7&lt;br /&gt;
#fork=no&lt;br /&gt;
#log_stderror=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Comente a linha abaixo para ativar a descoberta automatica de enderecos locais&lt;br /&gt;
 , isso significa que o sistema ira verificar todos os ips ativos e hosts e entao ativara&lt;br /&gt;
 o protocolo para todos eles */ &lt;br /&gt;
auto_aliases=no&lt;br /&gt;
&lt;br /&gt;
/* Defina aqui o ip a ser utilizado */&lt;br /&gt;
listen=udp:10.254.254.6:5060   # Altere este IP para o seu ambiente&lt;br /&gt;
&lt;br /&gt;
/* Nao usaremos sip por tcp nem tls neste script */&lt;br /&gt;
disable_tcp=yes&lt;br /&gt;
&lt;br /&gt;
disable_tls=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Secao de modulos ########&lt;br /&gt;
&lt;br /&gt;
#set module path&lt;br /&gt;
mpath=&amp;quot;/usr//lib64/opensips/modules/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;signaling.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sl.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;tm.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_timer&amp;quot;, 5)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_inv_timer&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;restart_fr_on_each_reply&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;onreply_avp_mode&amp;quot;, 1)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rr.so&amp;quot;&lt;br /&gt;
/* do not append from tag to the RR (no need for this script) */&lt;br /&gt;
modparam(&amp;quot;rr&amp;quot;, &amp;quot;append_fromtag&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;maxfwd.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sipmsgops.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;mi_fifo.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_name&amp;quot;, &amp;quot;/tmp/opensips_fifo&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_mode&amp;quot;, 0666)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;db_mysql.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;uri.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;uri&amp;quot;, &amp;quot;use_uri_table&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;usrloc.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;nat_bflag&amp;quot;, &amp;quot;FLB_NATB&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_mode&amp;quot;,   2)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;registrar.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;registrar&amp;quot;, &amp;quot;tcp_persistent_flag&amp;quot;, &amp;quot;TCP_PERSISTENT&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
/* Descomente a linha abaixo para nao permitir mais de 10 contatos por conta */&lt;br /&gt;
#modparam(&amp;quot;registrar&amp;quot;, &amp;quot;max_contacts&amp;quot;, 10)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;acc.so&amp;quot;&lt;br /&gt;
/* Quais eventos deverao ser registrados ? */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;early_media&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;report_cancels&amp;quot;, 0)&lt;br /&gt;
/* por padrao nos nao ajustamos a direcao em requisicoes sequencias, &lt;br /&gt;
 se voce deseja usar este recurso tenha certeza de ativar o &amp;quot;appen_fromtag&amp;quot; &lt;br /&gt;
 para o modulo &amp;quot;rr&amp;quot; */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;detect_direction&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;failed_transaction_flag&amp;quot;, &amp;quot;FLT_ACCFAILED&amp;quot;)&lt;br /&gt;
/* Gatilhos para accounting  (flags) */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_extra&amp;quot;, &lt;br /&gt;
	&amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_extra&amp;quot;, &amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;auth.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;auth_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;calculate_ha1&amp;quot;, yes)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;password_column&amp;quot;, &amp;quot;password&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;load_credentials&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;permissions.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;permissions&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;alias_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;alias_db&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;presence.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;presence&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
#loadmodule &amp;quot;presence_xml.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;dialog.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_mode&amp;quot;, 2)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_url&amp;quot;,&amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;dlg_match_mode&amp;quot;, 1)&lt;br /&gt;
#modparam(&amp;quot;dialog&amp;quot;, &amp;quot;default_timeout&amp;quot;, 60)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;siptrace.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;trace_flag&amp;quot;, 22)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;traced_user_avp&amp;quot;, &amp;quot;$avp(s:traceuser)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;nathelper.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;natping_interval&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;ping_nated_only&amp;quot;, 1)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_bflag&amp;quot;, &amp;quot;FLB_NATSIPPING&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_from&amp;quot;, &amp;quot;sip:pinger@10.254.254.6&amp;quot;) # Altere o ip para o ip do servidor&lt;br /&gt;
modparam(&amp;quot;nathelper|registrar&amp;quot;, &amp;quot;received_avp&amp;quot;, &amp;quot;$avp(RECEIVED)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rtpproxy.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;rtpproxy&amp;quot;, &amp;quot;rtpproxy_sock&amp;quot;, &amp;quot;udp:127.0.0.1:7722&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Logica de roteamento ########&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route {&lt;br /&gt;
&lt;br /&gt;
	if (!mf_process_maxfwd_header(&amp;quot;3&amp;quot;)) {&lt;br /&gt;
                send_reply(&amp;quot;483&amp;quot;,&amp;quot;looping&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;REQUISICAO RECEBIDA, ENVIANDO PARA REQINIT&amp;quot;);&lt;br /&gt;
	# Checagem inicial por requisicao&lt;br /&gt;
	route(REQINIT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA NAT&amp;quot;);&lt;br /&gt;
	# Deteccao de nat&lt;br /&gt;
	route(NAT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA WITHINDLG&amp;quot;);&lt;br /&gt;
	# Gerenciando requisicaoes com dialog&lt;br /&gt;
	route(WITHINDLG);&lt;br /&gt;
&lt;br /&gt;
	# Manipulando requisicoes iniciais (nao consta To tag)&lt;br /&gt;
	&lt;br /&gt;
	# Processando CANCEL&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;CANCEL&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD CANCEL&amp;quot;);&lt;br /&gt;
		if(t_check_trans()){&lt;br /&gt;
			t_relay();&lt;br /&gt;
		}&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	t_check_trans();&lt;br /&gt;
&lt;br /&gt;
	# Enviando para autenticacao&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA AUTENTICACAO&amp;quot;);&lt;br /&gt;
	route(AUTH);&lt;br /&gt;
&lt;br /&gt;
	# gravando rota para formacao dos dialogs (caso sejam roteados)&lt;br /&gt;
	# removemos qualquer cabecalho de rota pre carregado&lt;br /&gt;
	remove_hf(&amp;quot;Route&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE OU SIBSCRIBE&amp;quot;);&lt;br /&gt;
		record_route();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Contabilizando (acc) INVITES&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE, FAZENDOA ACC&amp;quot;);&lt;br /&gt;
		setflag(FLT_ACC);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando chamada para destinos externos&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA SIPOUT&amp;quot;);&lt;br /&gt;
	route(SIPOUT);&lt;br /&gt;
&lt;br /&gt;
	# Requisicoes para dominio local&lt;br /&gt;
	&lt;br /&gt;
	# Roteando requisicoes de PRESENCE&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PRESENCE&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	route(PRESENCE);&lt;br /&gt;
&lt;br /&gt;
	# Gerenciando pedidos de registro&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA REGISTRAR&amp;quot;);	&lt;br /&gt;
	route(REGISTRAR);&lt;br /&gt;
&lt;br /&gt;
	if($ru==&amp;quot;&amp;quot;){&lt;br /&gt;
		xlog(&amp;quot;ru --&amp;gt; vazio&amp;quot;);&lt;br /&gt;
		# Requisicao sem usuario na RURI&lt;br /&gt;
		sl_send_reply(&amp;quot;484&amp;quot;, &amp;quot;Address Incomplete&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando requisicao para PSTN&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PSTN&amp;quot;);&lt;br /&gt;
	route(PSTN);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Salvando informacao de quem originou a chamad&lt;br /&gt;
	$avp(callee)=$rU;&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA DISPATCH PSTN&amp;quot;);&lt;br /&gt;
	route(FSDISPATCH);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	# Servico de localizacao de usuario&lt;br /&gt;
	route(LOCATION);&lt;br /&gt;
&lt;br /&gt;
	# Efetuando o relay (encaminhamento)&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[RELAY] {&lt;br /&gt;
	if(check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
		setbflag(FLB_NATB);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(isflagset(FLT_NATS) || isbflagset(FLB_NATB)){&lt;br /&gt;
		#route(RTPPROXY);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
#		t_on_reply(&amp;quot;REPLY_ONE&amp;quot;);&lt;br /&gt;
#		t_on_failure(&amp;quot;FAIL_ONE&amp;quot;);&lt;br /&gt;
#	}&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;AQUI TENTAMOS ENVIAR A CHAMADA $fU $tU&amp;quot;);&lt;br /&gt;
	if(!t_relay()){&lt;br /&gt;
		xlog(&amp;quot;FALHA EM ENVIAR A CHAMADA, NAO FOI POSSIVEL FAZER O RELAY&amp;quot;);&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
	}&lt;br /&gt;
	xlog(&amp;quot;CHAMADA FOI ENVIADA AQUI, QUAL O ERRO ENTAO&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REQINIT] {&lt;br /&gt;
	if(!mf_process_maxfwd_header(&amp;quot;10&amp;quot;)){&lt;br /&gt;
		sl_send_reply(&amp;quot;483&amp;quot;, &amp;quot;Too Many Hops&amp;quot;);&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[WITHINDLG] {&lt;br /&gt;
	if(has_totag()){&lt;br /&gt;
		if(loose_route()){&lt;br /&gt;
			if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
				setflag(FLT_ACC);&lt;br /&gt;
				setflag(FLT_ACCFAILED);&lt;br /&gt;
			}&lt;br /&gt;
			route(RELAY);&lt;br /&gt;
		}else{&lt;br /&gt;
			if(is_method(&amp;quot;SUBSCRIBE&amp;quot;) &amp;amp;&amp;amp; uri==myself) {&lt;br /&gt;
				# requisicao de subscribe pre-estabelecida&lt;br /&gt;
				route(PRESENCE);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;ACK&amp;quot;)){&lt;br /&gt;
				if(t_check_trans()){&lt;br /&gt;
					t_relay();&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}else{&lt;br /&gt;
				# ACK para transacao nao encontrada, ignoramos...&lt;br /&gt;
				exit;&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			sl_send_reply(&amp;quot;404&amp;quot;, &amp;quot;Not Here&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		}	&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REGISTRAR] {&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		if(isflagset(FLT_NATS)){&lt;br /&gt;
			setbflag(FLB_NATB);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(!save(&amp;quot;location&amp;quot;)){&lt;br /&gt;
			sl_reply_error();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[LOCATION] {&lt;br /&gt;
&lt;br /&gt;
	alias_db_lookup(&amp;quot;dbaliases&amp;quot;);&lt;br /&gt;
	if(!lookup(&amp;quot;location&amp;quot;)){&lt;br /&gt;
		switch($rc) {&lt;br /&gt;
			case -1:&lt;br /&gt;
			case -3:&lt;br /&gt;
				t_newtran();&lt;br /&gt;
				t_reply(&amp;quot;404&amp;quot;,&amp;quot;Not Found&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			case -2:&lt;br /&gt;
				sl_send_reply(&amp;quot;405&amp;quot;, &amp;quot;Method Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		setflag(FLT_ACCMISSED);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PRESENCE] {&lt;br /&gt;
	if(!is_method(&amp;quot;PUBLISH|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!t_newtran()){&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
		handle_publish();&lt;br /&gt;
	}else if(is_method(&amp;quot;SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		handle_subscribe();&lt;br /&gt;
	}&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[AUTH]{&lt;br /&gt;
	xlog(&amp;quot;PEDIDO DE AUTENTICACAO&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		# atentica pedidos de registro&lt;br /&gt;
		if(!www_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
			www_challenge(&amp;quot;&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if($au!=$tU){&lt;br /&gt;
			sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	}else{&lt;br /&gt;
		if(route(FSINBOUND)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(check_source_address(&amp;quot;0&amp;quot;)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(from_uri==myself){&lt;br /&gt;
			if(!proxy_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
				proxy_challenge(&amp;quot;&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
				if($au!=$tU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}else{&lt;br /&gt;
				if($au!=$fU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			# Validamos (autenticamos) o usuario&lt;br /&gt;
			consume_credentials();&lt;br /&gt;
		}else{&lt;br /&gt;
		&lt;br /&gt;
			# usuario nao e local, vamos negar&lt;br /&gt;
			if(!uri==myself){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not relaying&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}	&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[NAT] {&lt;br /&gt;
	force_rport();&lt;br /&gt;
	if(nat_uac_test(&amp;quot;19&amp;quot;)){&lt;br /&gt;
		if(method==&amp;quot;REGISTER&amp;quot;){&lt;br /&gt;
			fix_nated_register();&lt;br /&gt;
		}else{&lt;br /&gt;
			fix_nated_contact();&lt;br /&gt;
		}&lt;br /&gt;
		setflag(FLT_NATS);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[RTPPROXY] {&lt;br /&gt;
	if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}else if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		engage_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!has_totag()){&lt;br /&gt;
&lt;br /&gt;
		if(!check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
			add_rr_param(&amp;quot;;nat=yes&amp;quot;);&lt;br /&gt;
			xlog(&amp;quot;NAT yes NAO ENCONTRADO&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[SIPOUT]{&lt;br /&gt;
	if(!uri==myself){&lt;br /&gt;
		append_hf(&amp;quot;P-hint: outbound\r\n&amp;quot;);&lt;br /&gt;
		route(RELAY);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PSTN]{&lt;br /&gt;
        # neste caso apenas para exemplificar um uso simples&lt;br /&gt;
        # vamos fazer o redirecionamento par ao asterisk&lt;br /&gt;
        # realizar a dicagem da chamada&lt;br /&gt;
&lt;br /&gt;
        if(!($rU=~&amp;quot;^(\+|00)[1-9][0-9]{3,20}$&amp;quot;))&lt;br /&gt;
                return;&lt;br /&gt;
&lt;br /&gt;
        ## a regra acima aceita para discagem externa qualquer numero&lt;br /&gt;
        # comecado com 00 ou +&lt;br /&gt;
        #&lt;br /&gt;
&lt;br /&gt;
        if(from_uri!=myself){&lt;br /&gt;
                sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $ru = &amp;quot;sip:&amp;quot; + $rU + &amp;quot;@&amp;quot; + &amp;quot;10.254.254.6:5090&amp;quot;;&lt;br /&gt;
        xlog(&amp;quot;NOVO DESTINO: $ru&amp;quot;);&lt;br /&gt;
        route(RELAY);&lt;br /&gt;
        exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[XMLRPC]{&lt;br /&gt;
	# nao vamos implementar esta funcionalidade&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSINBOUND] {&lt;br /&gt;
	# verificar para validar o ip do asterisk:porta&lt;br /&gt;
	# se bater , responder com return 1;&lt;br /&gt;
	if($si==&amp;quot;10.254.254.6&amp;quot; &amp;amp;&amp;amp; $sp==&amp;quot;5090&amp;quot;){&lt;br /&gt;
		return(1);&lt;br /&gt;
	}else{&lt;br /&gt;
		return(-1);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSDISPATCH] {&lt;br /&gt;
&lt;br /&gt;
	if(!is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(route(FSINBOUND)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;CAIMOS NO SWITCH, VAMOS LOCALIZAR O PERFIL DA CHAMADA $rU&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if($rU =~ &amp;quot;^41$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH expressa comeca e termina em 41&amp;quot;);&lt;br /&gt;
			#regra de menu de voicemail, apenas &lt;br /&gt;
			# usuarios autenticados&lt;br /&gt;
			if($au==&amp;quot;&amp;quot;){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$rU = &amp;quot;vma-&amp;quot; + $au;&lt;br /&gt;
	}else if($rU =~ &amp;quot;^441[0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCA 441XX &amp;quot;);&lt;br /&gt;
			# numero discado comeca com 441 seguido de dois digitos&lt;br /&gt;
			# chamada direta para inbox do voicemail&lt;br /&gt;
			strip(2);&lt;br /&gt;
			route(FSVBOX);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^433[01][0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH OPCAO 433[01]XX&amp;quot;);&lt;br /&gt;
			# numero comecado em 443, seguido de 0 ou 1, mais dois digitos&lt;br /&gt;
			# sistema de conferencia&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^45[0-9]+$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCAO 45X.&amp;quot;);&lt;br /&gt;
			#numero comecado com 45, seguindo de numeros;&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else{&lt;br /&gt;
			xlog(&amp;quot;OPCAO DEFAULT DO SWITCH&amp;quot;);&lt;br /&gt;
			# usuario offline, enviando para voicemail&lt;br /&gt;
			if(!registered(&amp;quot;location&amp;quot;)){&lt;br /&gt;
				route(FSVBOX);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			# usuario online, fazendo bridging&lt;br /&gt;
			xlog(&amp;quot;USUARIO ESTA ONLINE VAMOS FAZER BRIDGE&amp;quot;);&lt;br /&gt;
			prefix(&amp;quot;kb-&amp;quot;);&lt;br /&gt;
			if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
				t_on_failure(&amp;quot;FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
	}&lt;br /&gt;
	route(FSRELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSVBOX&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($rU =~ &amp;quot;^441[0-9][0-9]&amp;quot;){&lt;br /&gt;
		strip(2);&lt;br /&gt;
	}&lt;br /&gt;
	prefix(&amp;quot;vm-&amp;quot;);&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[FSRELAY] {&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSRELAY&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
branch_route[BRANCH_ONE]{&lt;br /&gt;
	xlog(&amp;quot;new branch at $ru&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
onreply_route[REPLY_ONE]{&lt;br /&gt;
	xlog(&amp;quot;Incoming reply&amp;quot;);&lt;br /&gt;
	if((isflagset(FLT_NATS) || isbflagset(FLB_NATB) &amp;amp;&amp;amp; status =~ &amp;quot;(183)|(2[0-9][0-9])&amp;quot;)){&lt;br /&gt;
		#rtpproxy_offer();&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	if(isbflagset(FLB_NATB)){&lt;br /&gt;
		fix_nated_contact();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_ONE]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_ONE&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_check_status(&amp;quot;486|408|480&amp;quot;)){&lt;br /&gt;
		$rU = $avp(callee);&lt;br /&gt;
		$var(newbranch) = 1;&lt;br /&gt;
		route(FSVBOX);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testes com Opensips (registro)==&lt;br /&gt;
&lt;br /&gt;
Antes de podermos testar precisamos iniciar o serviço, no momento estamos com ele operando em modo debug, então a inicialização deve ser realizada com o comando abaixo&lt;br /&gt;
 /etc/init.d/opensips debug&lt;br /&gt;
&lt;br /&gt;
Abra uma nova sessão no servidor e então vamos criar os usuários&lt;br /&gt;
 opensipsctl add 101 101&lt;br /&gt;
 opensipsctl add 102 102&lt;br /&gt;
 opensipsctl add 103 103&lt;br /&gt;
&lt;br /&gt;
usuario 101 com senha 101 e assim por diante&lt;br /&gt;
&lt;br /&gt;
Faça a onexão com seu softphone, aqui para testes utilizei o jitsi e o zoiper, neste momento vamos apenas fazer o registro do usuário para testar a autenticação, se você tentar realizar uma discagem não funcionará pois neste caso o processo depende do Asterisk que ainda não está configurado, vamos dar inicio nesta configuração agora.&lt;br /&gt;
&lt;br /&gt;
==Asterisk==&lt;br /&gt;
Não vamos dar muitos detalhes da instalação do asterisk aqui, a ideia é simplesmente ter o mesmo funcionando da forma que necessitamos.&lt;br /&gt;
&lt;br /&gt;
===Instalando dependências===&lt;br /&gt;
&lt;br /&gt;
Dependências necessárias para a instalação do Asterisk.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Asterisk 1.8===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget -c http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8-current.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Compilando o Asterisk 1.8====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar zxvf asterisk-1.8-current.tar.gz&lt;br /&gt;
cd asterisk-1.8-current.tar.gz&lt;br /&gt;
./configure  --disable-xmldoc&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make samples&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Após a instalação , abra o arquivo /etc/asterisk/sip.conf, localize a linha '''udpbindaddr=0.0.0.0''' e altere para '''udpbindaddr=0.0.0.0:5090'''  , depois ao fim do arquivo adicione.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
type=peer&lt;br /&gt;
host=10.254.254.6&lt;br /&gt;
port=5060&lt;br /&gt;
qualify=yes&lt;br /&gt;
context=opensips&lt;br /&gt;
insecure=port,invite&lt;br /&gt;
canreinvite=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora abra o arquivo '''/etc/asterisk/extensions.conf''' , crie no fim do arquivo a seguinte entrada.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _kb-1XX,1,NoOp(CHAMADA INTERNA - FAZER BRIDGE - ${CALLERID(num)} ${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Dial(SIP/opensips/${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Goto(opensips,vm-${EXTEN:3},1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vm-1XX,1,NoOp(CHAMADA PARA VOICEMAIL)&lt;br /&gt;
same =&amp;gt; n,Voicemail(${EXTEN:3}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vma-1XX,1,NoOp(CHAMADA PARA VOICEMAIL - ADMINISTRATIVO)&lt;br /&gt;
same =&amp;gt; n,VoicemailMain(${EXTEN:4}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _3[01]XX,1,NoOp(CHAMADA PARA CONFERENCIA)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,ConfBridge(${EXTEN},cM1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _00.,1,NoOp(CHAMADA PARA PSTN)&lt;br /&gt;
same =&amp;gt; n,Wait(2)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,Wait(1)&lt;br /&gt;
same =&amp;gt; n,PlayBack(tt-monkeys)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; h,1,Hangup()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finalmente precisamos criar as entradas do voicemail, para isso altere o arquivo '''/etc/asterisk/voicemail.conf''' localize o contexto '''[default]''' e então adicione as entradas para seu voicemail, segue dois exemplos abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
101 =&amp;gt; 123123,Mike Tesliuk&lt;br /&gt;
102 =&amp;gt; 123123,Mike Tesliuk 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Feito isso, faça um restart no asterisk&lt;br /&gt;
 /etc/init.d/asterisk restart&lt;br /&gt;
&lt;br /&gt;
Agora você ja poderá fazer os testes, basicamente criamos as seguintes situações para serem testadas.&lt;br /&gt;
&lt;br /&gt;
*1 Autenticação de usuários&lt;br /&gt;
*2 Chamada entre usuários&lt;br /&gt;
*3 Encaminhamento para caixa postal&lt;br /&gt;
*4 Acesso a caixa postal&lt;br /&gt;
*5 Acesso a conferência&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1401</id>
		<title>OpenSIPs e Asterisk - LIKE CentOS</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1401"/>
		<updated>2013-09-02T17:59:50Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: /* Compilando o OpenSIPs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=white&amp;gt; NÃO SIGA ESTE DOCUMENTO. O MESMO SE ENCONTRA EM DESEVOLVIMENTO&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este tutorial é baseado em um tutorial originalmente escrito pelo Mike, se quiser verificar o tutorial original acesse http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk&lt;br /&gt;
&lt;br /&gt;
Para esta implementação utilizamos CentOS 6.4 64 Bits , OpenSIPS 1.9 e Asterisk 1.8.23 &lt;br /&gt;
&lt;br /&gt;
==Funcionalidades==&lt;br /&gt;
Este tutorial tem por objetivo atingir as seguintes funcionalidades.&lt;br /&gt;
*Autenticação de usuário&lt;br /&gt;
*Registro de usuário&lt;br /&gt;
*Localização de usuário (encaminhamento de chamadas)&lt;br /&gt;
*Roteamento de chamadas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Através do Asterisk estenderemos estas funcionalidades agregando.&lt;br /&gt;
*Correio de voz (Voicemail)&lt;br /&gt;
*Conferencia &lt;br /&gt;
*SBC ( Pode ser utilizado para transcoding, esconder topologia, play de mensagens e tarifação )&lt;br /&gt;
*Outros serviços de media (Anuncios, Ura's e coisas do tipo)&lt;br /&gt;
&lt;br /&gt;
==Definições==&lt;br /&gt;
Para um melhor entendimento da solução vamos expor aqui algumas definições de nosso sistema.&lt;br /&gt;
*Usuários locais terão ramais com 3 digitos (ex: 101, 102, 103)&lt;br /&gt;
*Identidade do correio de voz será o mesmo do ramal&lt;br /&gt;
*Serviços de media (acesso a voicemail e outros) receberão rotas de 4 digitos&lt;br /&gt;
*Opensips e Asterisk utilizarão o mesmo servidor (Neste caso IP: 10.254.254.6)&lt;br /&gt;
*Os serviços rodarão nas portas 5060 (opensips) , 5090 (Asterisk)&lt;br /&gt;
&lt;br /&gt;
==Funcionamento==&lt;br /&gt;
A autenticação do usuário será realizada pelo OpenSIPs, quando uma chamada é autenticada então ela serguirá:&lt;br /&gt;
*Se o usuário de destino não está online a chamada será enviada para o Asterisk para função de correio de voz&lt;br /&gt;
*Se o usuário está online a chamada será encaminhada para o Asterisk, desta forma é possivel acionar funcionalidades como anuncios, definição de tempo de chamada, forçar codecs e outras funcionalidades.&lt;br /&gt;
*Asterisk envia a chamada novamente para o OpenSIPs que verificará no location e entregará a chamada para o usuário.&lt;br /&gt;
*Se a chamada não for atendida o Opensips irá re-encaminhar para o Asterisk direcionando para função de voicemail&lt;br /&gt;
&lt;br /&gt;
==OpenSIPs==&lt;br /&gt;
Vamos iniciar o processo de instalação com o OpenSIPs, siga os procedimentos abaixo para evitar qualquer dificuldade.&lt;br /&gt;
&lt;br /&gt;
===Dependencias===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====Atualizando o sistema====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum -y update&lt;br /&gt;
yum -y upgrade&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pacotes de desenvolvimento ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall 'Development Tools' -y&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
yum install wget mysql-server pcre-devel libxml2-devel xmlrpc-c-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Desabilitando o SELINUX ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/bin/sed -i -e s,'SELINUX=enforcing','SELINUX=disabled', /etc/selinux/config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durante a instalação o sistema irá lhe perguntar a senha de root para o servidor MySQL é importante que você se lembre da mesma posteriormente pois utilizaremos a mesma.&lt;br /&gt;
&lt;br /&gt;
===Compilando o OpenSIPs===&lt;br /&gt;
Para manter um padrão onde os dados estao vamos utilizar o diretório /usr/src/ para o download de código fonte.&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/&lt;br /&gt;
 wget -c http://opensips.org/pub/opensips/1.9.1/src/opensips-1.9.1_src.tar.gz&lt;br /&gt;
 tar -xzvf opensips-1.9.1_src.tar.gz&lt;br /&gt;
 cd opensips-1.9.1-tls/&lt;br /&gt;
 make all&lt;br /&gt;
&lt;br /&gt;
===Preparando a Configuração===&lt;br /&gt;
&lt;br /&gt;
Antes de darmos inicio ao arquivo de configuração, vamos ajustar algumas questões, o opensips instala os arquivos (se voce nao alterar o parametro) em /usr, consequentemente as configurações ficam em /usr/etc , eu por padrão faço um link para o diretório /etc, assim acesso as configurações em /etc/opensips&lt;br /&gt;
&lt;br /&gt;
 ln -s /usr/etc/opensips /etc/&lt;br /&gt;
&lt;br /&gt;
Para o script de inicialização execute o comando abaixo&lt;br /&gt;
 cp packaging/fedora/opensips.init /etc/init.d/opensips&lt;br /&gt;
 chmod +x /etc/init.d/opensips&lt;br /&gt;
 chkconfig --add opensips&lt;br /&gt;
 cp packaging/fedora/opensips.sysconfig /etc/sysconfig&lt;br /&gt;
&lt;br /&gt;
 groupadd opensips&lt;br /&gt;
 mkdir /var/run/opensips&lt;br /&gt;
 useradd -d /var/run/opensips/ -s /bin/false -g opensips opensips&lt;br /&gt;
 chown -R opensips.opensips /var/run/opensips&lt;br /&gt;
&lt;br /&gt;
===Configurando o opensipsctl===&lt;br /&gt;
O opensipsctl (e opensipsdbctl) utilizam o arquivo de configuração /etc/opensips/opensipsctlrc, abaixo segue o conteúdo do arquivo. (Sugiro que você faça um backup dos arquivos originais para ter uma copia, existem parametros que você pode estudar depois).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DBENGINE=MYSQL&lt;br /&gt;
DBHOST=localhost&lt;br /&gt;
DBNAME=opensips&lt;br /&gt;
DBRWUSER=opensips&lt;br /&gt;
DBRWPW=&amp;quot;opensipsrw&amp;quot;&lt;br /&gt;
SIP_DOMAIN=10.254.254.6  ### caso voce esteja usando outro ip altere aqui&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DBROOTUSER=&amp;quot;root&amp;quot;&lt;br /&gt;
INSTALL_EXTRA_TABLES=ask&lt;br /&gt;
ALIASES_TYPE=&amp;quot;DB&amp;quot;&lt;br /&gt;
MI_CONNECTOR=FIFO:/tmp/opensips_fifo&lt;br /&gt;
# VERIFY_ACL=1&lt;br /&gt;
# ACL_GROUPS=&amp;quot;local ld int voicemail free-pstn&amp;quot;&lt;br /&gt;
# VERBOSE=1&lt;br /&gt;
# STORE_PLAINTEXT_PW=0&lt;br /&gt;
# NOHLPRINT=1&lt;br /&gt;
PID_FILE=/var/run/opensips/opensips.pid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Criando o banco de dados===&lt;br /&gt;
Agora que temos nosso arquivo configurado vamos fazer a criação do banco de dados, execute o comando abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
opensipsdbctl create opensips&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema irá lhe perguntar algumas coisas, responda Y (sim) para todas para que ele instale todas as tabelas, não usaremos todas elas, mas desta forma você fica com praticamente tudo criado para o caso de uma expansão dos recursos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Instalando o RTP Proxy===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/src/&lt;br /&gt;
wget -c http://b2bua.org/chrome/site/rtpproxy-1.2.1.tar.gz&lt;br /&gt;
tar -xzvf rtpproxy-1.2.1.tar.gz&lt;br /&gt;
cd rtpproxy-1.2.1&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
groupadd rtpproxy&lt;br /&gt;
useradd -d /var/run/rtpproxy -s /bin/true -g rtpproxy rtpproxy&lt;br /&gt;
mkdir /var/log/rtpproxy&lt;br /&gt;
mkdir /var/run/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/log/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/run/rtpproxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Arquivo de inicialização====&lt;br /&gt;
'''/etc/init.d/rtpproxy'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# Este script e de autoria de Mike Tesliuk&lt;br /&gt;
# qualquer falha no mesmo por favor informe &lt;br /&gt;
# atraves do email mike (a) tesliuk.com&lt;br /&gt;
#&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:          rtpproxy&lt;br /&gt;
# Required-Start:    $syslog $network $local_fs $time&lt;br /&gt;
# Required-Stop:     $syslog $network $local_fs&lt;br /&gt;
# Default-Start:     2 3 4 5&lt;br /&gt;
# Default-Stop:      0 1 6&lt;br /&gt;
# Short-Description: Start the RTPPROXY server&lt;br /&gt;
# Description:       Start the RTPPROXY server&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin&lt;br /&gt;
USELOG=1&lt;br /&gt;
USER=rtpproxy&lt;br /&gt;
# Altere o ip abaixo para o ip de seu sistema&lt;br /&gt;
IPADDR=&amp;quot;10.254.254.6&amp;quot;&lt;br /&gt;
&lt;br /&gt;
. /lib/lsb/init-functions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
start(){&lt;br /&gt;
        echo &amp;quot;Iniciando RTP PROXY &amp;quot;&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                if [ &amp;quot;${USELOG}&amp;quot; = &amp;quot;1&amp;quot; ]; then&lt;br /&gt;
                        echo &amp;quot;Iniciando com LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER -F -f d DBUG 2&amp;amp;&amp;gt; /var/log/rtpproxy/rtpproxy.log &amp;amp;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Iniciando sem LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER  -F -f d DBUG 2&amp;amp;&amp;gt; /dev/null&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;START OK&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
        else&lt;br /&gt;
                echo &amp;quot;Processo ja em execucao&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
stop(){&lt;br /&gt;
&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                echo &amp;quot;Processo nao encontrado&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
                kill -9 $(pidof rtpproxy)&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;STOP OK&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Falha em realizar stop do servico&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
case $1 in&lt;br /&gt;
        start)&lt;br /&gt;
                start&lt;br /&gt;
        ;;&lt;br /&gt;
        stop)&lt;br /&gt;
                stop&lt;br /&gt;
        ;;&lt;br /&gt;
        restart)&lt;br /&gt;
                stop&lt;br /&gt;
                start&lt;br /&gt;
&lt;br /&gt;
        ;;&lt;br /&gt;
        *)&lt;br /&gt;
                echo &amp;quot;Utilize: stop | start | restart&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos dar permissao e colocar na inicialização&lt;br /&gt;
 chmod +x /etc/init.d/rtpproxy &lt;br /&gt;
 update-rc.d rtpproxy defaults&lt;br /&gt;
 /etc/init.d/rtpproxy start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Criando o arquivo opensips.cfg===&lt;br /&gt;
O arquivo opensips.cfg é a onde a coisa toda acontece para o opensips, claro que ele dependerá de informações que estarão no banco de dados, mas é onde criamos todas as nossas rotas e validações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Este tutorial nao esta terminado, este arquivo ainda esta em testes &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
####### Global Parameters #########&lt;br /&gt;
debug=3&lt;br /&gt;
log_stderror=no&lt;br /&gt;
log_facility=LOG_LOCAL0&lt;br /&gt;
&lt;br /&gt;
fork=yes&lt;br /&gt;
children=4&lt;br /&gt;
&lt;br /&gt;
/* Descomente as linhas abaixo para ativar o debug */&lt;br /&gt;
#debug=7&lt;br /&gt;
#fork=no&lt;br /&gt;
#log_stderror=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Comente a linha abaixo para ativar a descoberta automatica de enderecos locais&lt;br /&gt;
 , isso significa que o sistema ira verificar todos os ips ativos e hosts e entao ativara&lt;br /&gt;
 o protocolo para todos eles */ &lt;br /&gt;
auto_aliases=no&lt;br /&gt;
&lt;br /&gt;
/* Defina aqui o ip a ser utilizado */&lt;br /&gt;
listen=udp:10.254.254.6:5060   # Altere este IP para o seu ambiente&lt;br /&gt;
&lt;br /&gt;
/* Nao usaremos sip por tcp nem tls neste script */&lt;br /&gt;
disable_tcp=yes&lt;br /&gt;
&lt;br /&gt;
disable_tls=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Secao de modulos ########&lt;br /&gt;
&lt;br /&gt;
#set module path&lt;br /&gt;
mpath=&amp;quot;/usr//lib64/opensips/modules/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;signaling.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sl.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;tm.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_timer&amp;quot;, 5)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_inv_timer&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;restart_fr_on_each_reply&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;onreply_avp_mode&amp;quot;, 1)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rr.so&amp;quot;&lt;br /&gt;
/* do not append from tag to the RR (no need for this script) */&lt;br /&gt;
modparam(&amp;quot;rr&amp;quot;, &amp;quot;append_fromtag&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;maxfwd.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sipmsgops.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;mi_fifo.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_name&amp;quot;, &amp;quot;/tmp/opensips_fifo&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_mode&amp;quot;, 0666)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;db_mysql.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;uri.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;uri&amp;quot;, &amp;quot;use_uri_table&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;usrloc.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;nat_bflag&amp;quot;, &amp;quot;FLB_NATB&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_mode&amp;quot;,   2)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;registrar.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;registrar&amp;quot;, &amp;quot;tcp_persistent_flag&amp;quot;, &amp;quot;TCP_PERSISTENT&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
/* Descomente a linha abaixo para nao permitir mais de 10 contatos por conta */&lt;br /&gt;
#modparam(&amp;quot;registrar&amp;quot;, &amp;quot;max_contacts&amp;quot;, 10)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;acc.so&amp;quot;&lt;br /&gt;
/* Quais eventos deverao ser registrados ? */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;early_media&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;report_cancels&amp;quot;, 0)&lt;br /&gt;
/* por padrao nos nao ajustamos a direcao em requisicoes sequencias, &lt;br /&gt;
 se voce deseja usar este recurso tenha certeza de ativar o &amp;quot;appen_fromtag&amp;quot; &lt;br /&gt;
 para o modulo &amp;quot;rr&amp;quot; */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;detect_direction&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;failed_transaction_flag&amp;quot;, &amp;quot;FLT_ACCFAILED&amp;quot;)&lt;br /&gt;
/* Gatilhos para accounting  (flags) */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_extra&amp;quot;, &lt;br /&gt;
	&amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_extra&amp;quot;, &amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;auth.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;auth_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;calculate_ha1&amp;quot;, yes)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;password_column&amp;quot;, &amp;quot;password&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;load_credentials&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;permissions.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;permissions&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;alias_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;alias_db&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;presence.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;presence&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
#loadmodule &amp;quot;presence_xml.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;dialog.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_mode&amp;quot;, 2)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_url&amp;quot;,&amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;dlg_match_mode&amp;quot;, 1)&lt;br /&gt;
#modparam(&amp;quot;dialog&amp;quot;, &amp;quot;default_timeout&amp;quot;, 60)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;siptrace.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;trace_flag&amp;quot;, 22)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;traced_user_avp&amp;quot;, &amp;quot;$avp(s:traceuser)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;nathelper.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;natping_interval&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;ping_nated_only&amp;quot;, 1)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_bflag&amp;quot;, &amp;quot;FLB_NATSIPPING&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_from&amp;quot;, &amp;quot;sip:pinger@10.254.254.6&amp;quot;) # Altere o ip para o ip do servidor&lt;br /&gt;
modparam(&amp;quot;nathelper|registrar&amp;quot;, &amp;quot;received_avp&amp;quot;, &amp;quot;$avp(RECEIVED)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rtpproxy.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;rtpproxy&amp;quot;, &amp;quot;rtpproxy_sock&amp;quot;, &amp;quot;udp:127.0.0.1:7722&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Logica de roteamento ########&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route {&lt;br /&gt;
&lt;br /&gt;
	if (!mf_process_maxfwd_header(&amp;quot;3&amp;quot;)) {&lt;br /&gt;
                send_reply(&amp;quot;483&amp;quot;,&amp;quot;looping&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;REQUISICAO RECEBIDA, ENVIANDO PARA REQINIT&amp;quot;);&lt;br /&gt;
	# Checagem inicial por requisicao&lt;br /&gt;
	route(REQINIT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA NAT&amp;quot;);&lt;br /&gt;
	# Deteccao de nat&lt;br /&gt;
	route(NAT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA WITHINDLG&amp;quot;);&lt;br /&gt;
	# Gerenciando requisicaoes com dialog&lt;br /&gt;
	route(WITHINDLG);&lt;br /&gt;
&lt;br /&gt;
	# Manipulando requisicoes iniciais (nao consta To tag)&lt;br /&gt;
	&lt;br /&gt;
	# Processando CANCEL&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;CANCEL&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD CANCEL&amp;quot;);&lt;br /&gt;
		if(t_check_trans()){&lt;br /&gt;
			t_relay();&lt;br /&gt;
		}&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	t_check_trans();&lt;br /&gt;
&lt;br /&gt;
	# Enviando para autenticacao&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA AUTENTICACAO&amp;quot;);&lt;br /&gt;
	route(AUTH);&lt;br /&gt;
&lt;br /&gt;
	# gravando rota para formacao dos dialogs (caso sejam roteados)&lt;br /&gt;
	# removemos qualquer cabecalho de rota pre carregado&lt;br /&gt;
	remove_hf(&amp;quot;Route&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE OU SIBSCRIBE&amp;quot;);&lt;br /&gt;
		record_route();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Contabilizando (acc) INVITES&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE, FAZENDOA ACC&amp;quot;);&lt;br /&gt;
		setflag(FLT_ACC);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando chamada para destinos externos&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA SIPOUT&amp;quot;);&lt;br /&gt;
	route(SIPOUT);&lt;br /&gt;
&lt;br /&gt;
	# Requisicoes para dominio local&lt;br /&gt;
	&lt;br /&gt;
	# Roteando requisicoes de PRESENCE&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PRESENCE&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	route(PRESENCE);&lt;br /&gt;
&lt;br /&gt;
	# Gerenciando pedidos de registro&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA REGISTRAR&amp;quot;);	&lt;br /&gt;
	route(REGISTRAR);&lt;br /&gt;
&lt;br /&gt;
	if($ru==&amp;quot;&amp;quot;){&lt;br /&gt;
		xlog(&amp;quot;ru --&amp;gt; vazio&amp;quot;);&lt;br /&gt;
		# Requisicao sem usuario na RURI&lt;br /&gt;
		sl_send_reply(&amp;quot;484&amp;quot;, &amp;quot;Address Incomplete&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando requisicao para PSTN&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PSTN&amp;quot;);&lt;br /&gt;
	route(PSTN);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Salvando informacao de quem originou a chamad&lt;br /&gt;
	$avp(callee)=$rU;&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA DISPATCH PSTN&amp;quot;);&lt;br /&gt;
	route(FSDISPATCH);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	# Servico de localizacao de usuario&lt;br /&gt;
	route(LOCATION);&lt;br /&gt;
&lt;br /&gt;
	# Efetuando o relay (encaminhamento)&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[RELAY] {&lt;br /&gt;
	if(check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
		setbflag(FLB_NATB);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(isflagset(FLT_NATS) || isbflagset(FLB_NATB)){&lt;br /&gt;
		#route(RTPPROXY);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
#		t_on_reply(&amp;quot;REPLY_ONE&amp;quot;);&lt;br /&gt;
#		t_on_failure(&amp;quot;FAIL_ONE&amp;quot;);&lt;br /&gt;
#	}&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;AQUI TENTAMOS ENVIAR A CHAMADA $fU $tU&amp;quot;);&lt;br /&gt;
	if(!t_relay()){&lt;br /&gt;
		xlog(&amp;quot;FALHA EM ENVIAR A CHAMADA, NAO FOI POSSIVEL FAZER O RELAY&amp;quot;);&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
	}&lt;br /&gt;
	xlog(&amp;quot;CHAMADA FOI ENVIADA AQUI, QUAL O ERRO ENTAO&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REQINIT] {&lt;br /&gt;
	if(!mf_process_maxfwd_header(&amp;quot;10&amp;quot;)){&lt;br /&gt;
		sl_send_reply(&amp;quot;483&amp;quot;, &amp;quot;Too Many Hops&amp;quot;);&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[WITHINDLG] {&lt;br /&gt;
	if(has_totag()){&lt;br /&gt;
		if(loose_route()){&lt;br /&gt;
			if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
				setflag(FLT_ACC);&lt;br /&gt;
				setflag(FLT_ACCFAILED);&lt;br /&gt;
			}&lt;br /&gt;
			route(RELAY);&lt;br /&gt;
		}else{&lt;br /&gt;
			if(is_method(&amp;quot;SUBSCRIBE&amp;quot;) &amp;amp;&amp;amp; uri==myself) {&lt;br /&gt;
				# requisicao de subscribe pre-estabelecida&lt;br /&gt;
				route(PRESENCE);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;ACK&amp;quot;)){&lt;br /&gt;
				if(t_check_trans()){&lt;br /&gt;
					t_relay();&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}else{&lt;br /&gt;
				# ACK para transacao nao encontrada, ignoramos...&lt;br /&gt;
				exit;&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			sl_send_reply(&amp;quot;404&amp;quot;, &amp;quot;Not Here&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		}	&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REGISTRAR] {&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		if(isflagset(FLT_NATS)){&lt;br /&gt;
			setbflag(FLB_NATB);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(!save(&amp;quot;location&amp;quot;)){&lt;br /&gt;
			sl_reply_error();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[LOCATION] {&lt;br /&gt;
&lt;br /&gt;
	alias_db_lookup(&amp;quot;dbaliases&amp;quot;);&lt;br /&gt;
	if(!lookup(&amp;quot;location&amp;quot;)){&lt;br /&gt;
		switch($rc) {&lt;br /&gt;
			case -1:&lt;br /&gt;
			case -3:&lt;br /&gt;
				t_newtran();&lt;br /&gt;
				t_reply(&amp;quot;404&amp;quot;,&amp;quot;Not Found&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			case -2:&lt;br /&gt;
				sl_send_reply(&amp;quot;405&amp;quot;, &amp;quot;Method Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		setflag(FLT_ACCMISSED);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PRESENCE] {&lt;br /&gt;
	if(!is_method(&amp;quot;PUBLISH|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!t_newtran()){&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
		handle_publish();&lt;br /&gt;
	}else if(is_method(&amp;quot;SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		handle_subscribe();&lt;br /&gt;
	}&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[AUTH]{&lt;br /&gt;
	xlog(&amp;quot;PEDIDO DE AUTENTICACAO&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		# atentica pedidos de registro&lt;br /&gt;
		if(!www_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
			www_challenge(&amp;quot;&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if($au!=$tU){&lt;br /&gt;
			sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	}else{&lt;br /&gt;
		if(route(FSINBOUND)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(check_source_address(&amp;quot;0&amp;quot;)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(from_uri==myself){&lt;br /&gt;
			if(!proxy_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
				proxy_challenge(&amp;quot;&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
				if($au!=$tU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}else{&lt;br /&gt;
				if($au!=$fU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			# Validamos (autenticamos) o usuario&lt;br /&gt;
			consume_credentials();&lt;br /&gt;
		}else{&lt;br /&gt;
		&lt;br /&gt;
			# usuario nao e local, vamos negar&lt;br /&gt;
			if(!uri==myself){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not relaying&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}	&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[NAT] {&lt;br /&gt;
	force_rport();&lt;br /&gt;
	if(nat_uac_test(&amp;quot;19&amp;quot;)){&lt;br /&gt;
		if(method==&amp;quot;REGISTER&amp;quot;){&lt;br /&gt;
			fix_nated_register();&lt;br /&gt;
		}else{&lt;br /&gt;
			fix_nated_contact();&lt;br /&gt;
		}&lt;br /&gt;
		setflag(FLT_NATS);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[RTPPROXY] {&lt;br /&gt;
	if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}else if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		engage_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!has_totag()){&lt;br /&gt;
&lt;br /&gt;
		if(!check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
			add_rr_param(&amp;quot;;nat=yes&amp;quot;);&lt;br /&gt;
			xlog(&amp;quot;NAT yes NAO ENCONTRADO&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[SIPOUT]{&lt;br /&gt;
	if(!uri==myself){&lt;br /&gt;
		append_hf(&amp;quot;P-hint: outbound\r\n&amp;quot;);&lt;br /&gt;
		route(RELAY);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PSTN]{&lt;br /&gt;
        # neste caso apenas para exemplificar um uso simples&lt;br /&gt;
        # vamos fazer o redirecionamento par ao asterisk&lt;br /&gt;
        # realizar a dicagem da chamada&lt;br /&gt;
&lt;br /&gt;
        if(!($rU=~&amp;quot;^(\+|00)[1-9][0-9]{3,20}$&amp;quot;))&lt;br /&gt;
                return;&lt;br /&gt;
&lt;br /&gt;
        ## a regra acima aceita para discagem externa qualquer numero&lt;br /&gt;
        # comecado com 00 ou +&lt;br /&gt;
        #&lt;br /&gt;
&lt;br /&gt;
        if(from_uri!=myself){&lt;br /&gt;
                sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $ru = &amp;quot;sip:&amp;quot; + $rU + &amp;quot;@&amp;quot; + &amp;quot;10.254.254.6:5090&amp;quot;;&lt;br /&gt;
        xlog(&amp;quot;NOVO DESTINO: $ru&amp;quot;);&lt;br /&gt;
        route(RELAY);&lt;br /&gt;
        exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[XMLRPC]{&lt;br /&gt;
	# nao vamos implementar esta funcionalidade&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSINBOUND] {&lt;br /&gt;
	# verificar para validar o ip do asterisk:porta&lt;br /&gt;
	# se bater , responder com return 1;&lt;br /&gt;
	if($si==&amp;quot;10.254.254.6&amp;quot; &amp;amp;&amp;amp; $sp==&amp;quot;5090&amp;quot;){&lt;br /&gt;
		return(1);&lt;br /&gt;
	}else{&lt;br /&gt;
		return(-1);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSDISPATCH] {&lt;br /&gt;
&lt;br /&gt;
	if(!is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(route(FSINBOUND)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;CAIMOS NO SWITCH, VAMOS LOCALIZAR O PERFIL DA CHAMADA $rU&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if($rU =~ &amp;quot;^41$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH expressa comeca e termina em 41&amp;quot;);&lt;br /&gt;
			#regra de menu de voicemail, apenas &lt;br /&gt;
			# usuarios autenticados&lt;br /&gt;
			if($au==&amp;quot;&amp;quot;){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$rU = &amp;quot;vma-&amp;quot; + $au;&lt;br /&gt;
	}else if($rU =~ &amp;quot;^441[0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCA 441XX &amp;quot;);&lt;br /&gt;
			# numero discado comeca com 441 seguido de dois digitos&lt;br /&gt;
			# chamada direta para inbox do voicemail&lt;br /&gt;
			strip(2);&lt;br /&gt;
			route(FSVBOX);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^433[01][0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH OPCAO 433[01]XX&amp;quot;);&lt;br /&gt;
			# numero comecado em 443, seguido de 0 ou 1, mais dois digitos&lt;br /&gt;
			# sistema de conferencia&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^45[0-9]+$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCAO 45X.&amp;quot;);&lt;br /&gt;
			#numero comecado com 45, seguindo de numeros;&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else{&lt;br /&gt;
			xlog(&amp;quot;OPCAO DEFAULT DO SWITCH&amp;quot;);&lt;br /&gt;
			# usuario offline, enviando para voicemail&lt;br /&gt;
			if(!registered(&amp;quot;location&amp;quot;)){&lt;br /&gt;
				route(FSVBOX);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			# usuario online, fazendo bridging&lt;br /&gt;
			xlog(&amp;quot;USUARIO ESTA ONLINE VAMOS FAZER BRIDGE&amp;quot;);&lt;br /&gt;
			prefix(&amp;quot;kb-&amp;quot;);&lt;br /&gt;
			if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
				t_on_failure(&amp;quot;FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
	}&lt;br /&gt;
	route(FSRELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSVBOX&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($rU =~ &amp;quot;^441[0-9][0-9]&amp;quot;){&lt;br /&gt;
		strip(2);&lt;br /&gt;
	}&lt;br /&gt;
	prefix(&amp;quot;vm-&amp;quot;);&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[FSRELAY] {&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSRELAY&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
branch_route[BRANCH_ONE]{&lt;br /&gt;
	xlog(&amp;quot;new branch at $ru&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
onreply_route[REPLY_ONE]{&lt;br /&gt;
	xlog(&amp;quot;Incoming reply&amp;quot;);&lt;br /&gt;
	if((isflagset(FLT_NATS) || isbflagset(FLB_NATB) &amp;amp;&amp;amp; status =~ &amp;quot;(183)|(2[0-9][0-9])&amp;quot;)){&lt;br /&gt;
		#rtpproxy_offer();&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	if(isbflagset(FLB_NATB)){&lt;br /&gt;
		fix_nated_contact();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_ONE]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_ONE&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_check_status(&amp;quot;486|408|480&amp;quot;)){&lt;br /&gt;
		$rU = $avp(callee);&lt;br /&gt;
		$var(newbranch) = 1;&lt;br /&gt;
		route(FSVBOX);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testes com Opensips (registro)==&lt;br /&gt;
&lt;br /&gt;
Antes de podermos testar precisamos iniciar o serviço, no momento estamos com ele operando em modo debug, então a inicialização deve ser realizada com o comando abaixo&lt;br /&gt;
 /etc/init.d/opensips debug&lt;br /&gt;
&lt;br /&gt;
Abra uma nova sessão no servidor e então vamos criar os usuários&lt;br /&gt;
 opensipsctl add 101 101&lt;br /&gt;
 opensipsctl add 102 102&lt;br /&gt;
 opensipsctl add 103 103&lt;br /&gt;
&lt;br /&gt;
usuario 101 com senha 101 e assim por diante&lt;br /&gt;
&lt;br /&gt;
Faça a onexão com seu softphone, aqui para testes utilizei o jitsi e o zoiper, neste momento vamos apenas fazer o registro do usuário para testar a autenticação, se você tentar realizar uma discagem não funcionará pois neste caso o processo depende do Asterisk que ainda não está configurado, vamos dar inicio nesta configuração agora.&lt;br /&gt;
&lt;br /&gt;
==Asterisk==&lt;br /&gt;
Não vamos dar muitos detalhes da instalação do asterisk aqui, a ideia é simplesmente ter o mesmo funcionando da forma que necessitamos.&lt;br /&gt;
&lt;br /&gt;
===Instalando dependências===&lt;br /&gt;
&lt;br /&gt;
Dependências necessárias para a instalação do Asterisk.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Asterisk 1.8===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget -c http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8-current.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Compilando o Asterisk 1.8====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar zxvf asterisk-1.8-current.tar.gz&lt;br /&gt;
cd asterisk-1.8-current.tar.gz&lt;br /&gt;
./configure  --disable-xmldoc&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make samples&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Após a instalação , abra o arquivo /etc/asterisk/sip.conf, localize a linha '''udpbindaddr=0.0.0.0''' e altere para '''udpbindaddr=0.0.0.0:5090'''  , depois ao fim do arquivo adicione.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
type=peer&lt;br /&gt;
host=10.254.254.6&lt;br /&gt;
port=5060&lt;br /&gt;
qualify=yes&lt;br /&gt;
context=opensips&lt;br /&gt;
insecure=port,invite&lt;br /&gt;
canreinvite=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora abra o arquivo '''/etc/asterisk/extensions.conf''' , crie no fim do arquivo a seguinte entrada.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _kb-1XX,1,NoOp(CHAMADA INTERNA - FAZER BRIDGE - ${CALLERID(num)} ${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Dial(SIP/opensips/${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Goto(opensips,vm-${EXTEN:3},1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vm-1XX,1,NoOp(CHAMADA PARA VOICEMAIL)&lt;br /&gt;
same =&amp;gt; n,Voicemail(${EXTEN:3}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vma-1XX,1,NoOp(CHAMADA PARA VOICEMAIL - ADMINISTRATIVO)&lt;br /&gt;
same =&amp;gt; n,VoicemailMain(${EXTEN:4}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _3[01]XX,1,NoOp(CHAMADA PARA CONFERENCIA)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,ConfBridge(${EXTEN},cM1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _00.,1,NoOp(CHAMADA PARA PSTN)&lt;br /&gt;
same =&amp;gt; n,Wait(2)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,Wait(1)&lt;br /&gt;
same =&amp;gt; n,PlayBack(tt-monkeys)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; h,1,Hangup()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finalmente precisamos criar as entradas do voicemail, para isso altere o arquivo '''/etc/asterisk/voicemail.conf''' localize o contexto '''[default]''' e então adicione as entradas para seu voicemail, segue dois exemplos abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
101 =&amp;gt; 123123,Mike Tesliuk&lt;br /&gt;
102 =&amp;gt; 123123,Mike Tesliuk 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Feito isso, faça um restart no asterisk&lt;br /&gt;
 /etc/init.d/asterisk restart&lt;br /&gt;
&lt;br /&gt;
Agora você ja poderá fazer os testes, basicamente criamos as seguintes situações para serem testadas.&lt;br /&gt;
&lt;br /&gt;
*1 Autenticação de usuários&lt;br /&gt;
*2 Chamada entre usuários&lt;br /&gt;
*3 Encaminhamento para caixa postal&lt;br /&gt;
*4 Acesso a caixa postal&lt;br /&gt;
*5 Acesso a conferência&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1400</id>
		<title>OpenSIPs e Asterisk - LIKE CentOS</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1400"/>
		<updated>2013-09-02T17:51:35Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: /* Funcionamento */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=white&amp;gt; NÃO SIGA ESTE DOCUMENTO. O MESMO SE ENCONTRA EM DESEVOLVIMENTO&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este tutorial é baseado em um tutorial originalmente escrito pelo Mike, se quiser verificar o tutorial original acesse http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk&lt;br /&gt;
&lt;br /&gt;
Para esta implementação utilizamos CentOS 6.4 64 Bits , OpenSIPS 1.9 e Asterisk 1.8.23 &lt;br /&gt;
&lt;br /&gt;
==Funcionalidades==&lt;br /&gt;
Este tutorial tem por objetivo atingir as seguintes funcionalidades.&lt;br /&gt;
*Autenticação de usuário&lt;br /&gt;
*Registro de usuário&lt;br /&gt;
*Localização de usuário (encaminhamento de chamadas)&lt;br /&gt;
*Roteamento de chamadas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Através do Asterisk estenderemos estas funcionalidades agregando.&lt;br /&gt;
*Correio de voz (Voicemail)&lt;br /&gt;
*Conferencia &lt;br /&gt;
*SBC ( Pode ser utilizado para transcoding, esconder topologia, play de mensagens e tarifação )&lt;br /&gt;
*Outros serviços de media (Anuncios, Ura's e coisas do tipo)&lt;br /&gt;
&lt;br /&gt;
==Definições==&lt;br /&gt;
Para um melhor entendimento da solução vamos expor aqui algumas definições de nosso sistema.&lt;br /&gt;
*Usuários locais terão ramais com 3 digitos (ex: 101, 102, 103)&lt;br /&gt;
*Identidade do correio de voz será o mesmo do ramal&lt;br /&gt;
*Serviços de media (acesso a voicemail e outros) receberão rotas de 4 digitos&lt;br /&gt;
*Opensips e Asterisk utilizarão o mesmo servidor (Neste caso IP: 10.254.254.6)&lt;br /&gt;
*Os serviços rodarão nas portas 5060 (opensips) , 5090 (Asterisk)&lt;br /&gt;
&lt;br /&gt;
==Funcionamento==&lt;br /&gt;
A autenticação do usuário será realizada pelo OpenSIPs, quando uma chamada é autenticada então ela serguirá:&lt;br /&gt;
*Se o usuário de destino não está online a chamada será enviada para o Asterisk para função de correio de voz&lt;br /&gt;
*Se o usuário está online a chamada será encaminhada para o Asterisk, desta forma é possivel acionar funcionalidades como anuncios, definição de tempo de chamada, forçar codecs e outras funcionalidades.&lt;br /&gt;
*Asterisk envia a chamada novamente para o OpenSIPs que verificará no location e entregará a chamada para o usuário.&lt;br /&gt;
*Se a chamada não for atendida o Opensips irá re-encaminhar para o Asterisk direcionando para função de voicemail&lt;br /&gt;
&lt;br /&gt;
==OpenSIPs==&lt;br /&gt;
Vamos iniciar o processo de instalação com o OpenSIPs, siga os procedimentos abaixo para evitar qualquer dificuldade.&lt;br /&gt;
&lt;br /&gt;
===Dependencias===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====Atualizando o sistema====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum -y update&lt;br /&gt;
yum -y upgrade&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pacotes de desenvolvimento ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall 'Development Tools' -y&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
yum install wget mysql-server pcre-devel libxml2-devel xmlrpc-c-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Desabilitando o SELINUX ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/bin/sed -i -e s,'SELINUX=enforcing','SELINUX=disabled', /etc/selinux/config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durante a instalação o sistema irá lhe perguntar a senha de root para o servidor MySQL é importante que você se lembre da mesma posteriormente pois utilizaremos a mesma.&lt;br /&gt;
&lt;br /&gt;
===Compilando o OpenSIPs===&lt;br /&gt;
Para manter um padrão onde os dados estao vamos utilizar o diretório /usr/src/ para o download de código fonte.&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/&lt;br /&gt;
 wget -c http://opensips.org/pub/opensips/1.9.1/src/opensips-1.9.1_src.tar.gz&lt;br /&gt;
 tar -xzvf opensips-1.9.1_src.tar.gz&lt;br /&gt;
 cd opensips-1.9.1-tls/&lt;br /&gt;
 make menuconfig&lt;br /&gt;
&lt;br /&gt;
===Preparando a Configuração===&lt;br /&gt;
&lt;br /&gt;
Antes de darmos inicio ao arquivo de configuração, vamos ajustar algumas questões, o opensips instala os arquivos (se voce nao alterar o parametro) em /usr, consequentemente as configurações ficam em /usr/etc , eu por padrão faço um link para o diretório /etc, assim acesso as configurações em /etc/opensips&lt;br /&gt;
&lt;br /&gt;
 ln -s /usr/etc/opensips /etc/&lt;br /&gt;
&lt;br /&gt;
Para o script de inicialização execute o comando abaixo&lt;br /&gt;
 cp packaging/fedora/opensips.init /etc/init.d/opensips&lt;br /&gt;
 chmod +x /etc/init.d/opensips&lt;br /&gt;
 chkconfig --add opensips&lt;br /&gt;
 cp packaging/fedora/opensips.sysconfig /etc/sysconfig&lt;br /&gt;
&lt;br /&gt;
 groupadd opensips&lt;br /&gt;
 mkdir /var/run/opensips&lt;br /&gt;
 useradd -d /var/run/opensips/ -s /bin/false -g opensips opensips&lt;br /&gt;
 chown -R opensips.opensips /var/run/opensips&lt;br /&gt;
&lt;br /&gt;
===Configurando o opensipsctl===&lt;br /&gt;
O opensipsctl (e opensipsdbctl) utilizam o arquivo de configuração /etc/opensips/opensipsctlrc, abaixo segue o conteúdo do arquivo. (Sugiro que você faça um backup dos arquivos originais para ter uma copia, existem parametros que você pode estudar depois).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DBENGINE=MYSQL&lt;br /&gt;
DBHOST=localhost&lt;br /&gt;
DBNAME=opensips&lt;br /&gt;
DBRWUSER=opensips&lt;br /&gt;
DBRWPW=&amp;quot;opensipsrw&amp;quot;&lt;br /&gt;
SIP_DOMAIN=10.254.254.6  ### caso voce esteja usando outro ip altere aqui&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DBROOTUSER=&amp;quot;root&amp;quot;&lt;br /&gt;
INSTALL_EXTRA_TABLES=ask&lt;br /&gt;
ALIASES_TYPE=&amp;quot;DB&amp;quot;&lt;br /&gt;
MI_CONNECTOR=FIFO:/tmp/opensips_fifo&lt;br /&gt;
# VERIFY_ACL=1&lt;br /&gt;
# ACL_GROUPS=&amp;quot;local ld int voicemail free-pstn&amp;quot;&lt;br /&gt;
# VERBOSE=1&lt;br /&gt;
# STORE_PLAINTEXT_PW=0&lt;br /&gt;
# NOHLPRINT=1&lt;br /&gt;
PID_FILE=/var/run/opensips/opensips.pid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Criando o banco de dados===&lt;br /&gt;
Agora que temos nosso arquivo configurado vamos fazer a criação do banco de dados, execute o comando abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
opensipsdbctl create opensips&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema irá lhe perguntar algumas coisas, responda Y (sim) para todas para que ele instale todas as tabelas, não usaremos todas elas, mas desta forma você fica com praticamente tudo criado para o caso de uma expansão dos recursos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Instalando o RTP Proxy===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/src/&lt;br /&gt;
wget -c http://b2bua.org/chrome/site/rtpproxy-1.2.1.tar.gz&lt;br /&gt;
tar -xzvf rtpproxy-1.2.1.tar.gz&lt;br /&gt;
cd rtpproxy-1.2.1&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
groupadd rtpproxy&lt;br /&gt;
useradd -d /var/run/rtpproxy -s /bin/true -g rtpproxy rtpproxy&lt;br /&gt;
mkdir /var/log/rtpproxy&lt;br /&gt;
mkdir /var/run/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/log/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/run/rtpproxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Arquivo de inicialização====&lt;br /&gt;
'''/etc/init.d/rtpproxy'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# Este script e de autoria de Mike Tesliuk&lt;br /&gt;
# qualquer falha no mesmo por favor informe &lt;br /&gt;
# atraves do email mike (a) tesliuk.com&lt;br /&gt;
#&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:          rtpproxy&lt;br /&gt;
# Required-Start:    $syslog $network $local_fs $time&lt;br /&gt;
# Required-Stop:     $syslog $network $local_fs&lt;br /&gt;
# Default-Start:     2 3 4 5&lt;br /&gt;
# Default-Stop:      0 1 6&lt;br /&gt;
# Short-Description: Start the RTPPROXY server&lt;br /&gt;
# Description:       Start the RTPPROXY server&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin&lt;br /&gt;
USELOG=1&lt;br /&gt;
USER=rtpproxy&lt;br /&gt;
# Altere o ip abaixo para o ip de seu sistema&lt;br /&gt;
IPADDR=&amp;quot;10.254.254.6&amp;quot;&lt;br /&gt;
&lt;br /&gt;
. /lib/lsb/init-functions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
start(){&lt;br /&gt;
        echo &amp;quot;Iniciando RTP PROXY &amp;quot;&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                if [ &amp;quot;${USELOG}&amp;quot; = &amp;quot;1&amp;quot; ]; then&lt;br /&gt;
                        echo &amp;quot;Iniciando com LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER -F -f d DBUG 2&amp;amp;&amp;gt; /var/log/rtpproxy/rtpproxy.log &amp;amp;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Iniciando sem LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER  -F -f d DBUG 2&amp;amp;&amp;gt; /dev/null&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;START OK&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
        else&lt;br /&gt;
                echo &amp;quot;Processo ja em execucao&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
stop(){&lt;br /&gt;
&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                echo &amp;quot;Processo nao encontrado&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
                kill -9 $(pidof rtpproxy)&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;STOP OK&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Falha em realizar stop do servico&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
case $1 in&lt;br /&gt;
        start)&lt;br /&gt;
                start&lt;br /&gt;
        ;;&lt;br /&gt;
        stop)&lt;br /&gt;
                stop&lt;br /&gt;
        ;;&lt;br /&gt;
        restart)&lt;br /&gt;
                stop&lt;br /&gt;
                start&lt;br /&gt;
&lt;br /&gt;
        ;;&lt;br /&gt;
        *)&lt;br /&gt;
                echo &amp;quot;Utilize: stop | start | restart&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos dar permissao e colocar na inicialização&lt;br /&gt;
 chmod +x /etc/init.d/rtpproxy &lt;br /&gt;
 update-rc.d rtpproxy defaults&lt;br /&gt;
 /etc/init.d/rtpproxy start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Criando o arquivo opensips.cfg===&lt;br /&gt;
O arquivo opensips.cfg é a onde a coisa toda acontece para o opensips, claro que ele dependerá de informações que estarão no banco de dados, mas é onde criamos todas as nossas rotas e validações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Este tutorial nao esta terminado, este arquivo ainda esta em testes &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
####### Global Parameters #########&lt;br /&gt;
debug=3&lt;br /&gt;
log_stderror=no&lt;br /&gt;
log_facility=LOG_LOCAL0&lt;br /&gt;
&lt;br /&gt;
fork=yes&lt;br /&gt;
children=4&lt;br /&gt;
&lt;br /&gt;
/* Descomente as linhas abaixo para ativar o debug */&lt;br /&gt;
#debug=7&lt;br /&gt;
#fork=no&lt;br /&gt;
#log_stderror=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Comente a linha abaixo para ativar a descoberta automatica de enderecos locais&lt;br /&gt;
 , isso significa que o sistema ira verificar todos os ips ativos e hosts e entao ativara&lt;br /&gt;
 o protocolo para todos eles */ &lt;br /&gt;
auto_aliases=no&lt;br /&gt;
&lt;br /&gt;
/* Defina aqui o ip a ser utilizado */&lt;br /&gt;
listen=udp:10.254.254.6:5060   # Altere este IP para o seu ambiente&lt;br /&gt;
&lt;br /&gt;
/* Nao usaremos sip por tcp nem tls neste script */&lt;br /&gt;
disable_tcp=yes&lt;br /&gt;
&lt;br /&gt;
disable_tls=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Secao de modulos ########&lt;br /&gt;
&lt;br /&gt;
#set module path&lt;br /&gt;
mpath=&amp;quot;/usr//lib64/opensips/modules/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;signaling.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sl.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;tm.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_timer&amp;quot;, 5)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_inv_timer&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;restart_fr_on_each_reply&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;onreply_avp_mode&amp;quot;, 1)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rr.so&amp;quot;&lt;br /&gt;
/* do not append from tag to the RR (no need for this script) */&lt;br /&gt;
modparam(&amp;quot;rr&amp;quot;, &amp;quot;append_fromtag&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;maxfwd.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sipmsgops.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;mi_fifo.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_name&amp;quot;, &amp;quot;/tmp/opensips_fifo&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_mode&amp;quot;, 0666)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;db_mysql.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;uri.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;uri&amp;quot;, &amp;quot;use_uri_table&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;usrloc.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;nat_bflag&amp;quot;, &amp;quot;FLB_NATB&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_mode&amp;quot;,   2)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;registrar.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;registrar&amp;quot;, &amp;quot;tcp_persistent_flag&amp;quot;, &amp;quot;TCP_PERSISTENT&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
/* Descomente a linha abaixo para nao permitir mais de 10 contatos por conta */&lt;br /&gt;
#modparam(&amp;quot;registrar&amp;quot;, &amp;quot;max_contacts&amp;quot;, 10)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;acc.so&amp;quot;&lt;br /&gt;
/* Quais eventos deverao ser registrados ? */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;early_media&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;report_cancels&amp;quot;, 0)&lt;br /&gt;
/* por padrao nos nao ajustamos a direcao em requisicoes sequencias, &lt;br /&gt;
 se voce deseja usar este recurso tenha certeza de ativar o &amp;quot;appen_fromtag&amp;quot; &lt;br /&gt;
 para o modulo &amp;quot;rr&amp;quot; */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;detect_direction&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;failed_transaction_flag&amp;quot;, &amp;quot;FLT_ACCFAILED&amp;quot;)&lt;br /&gt;
/* Gatilhos para accounting  (flags) */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_extra&amp;quot;, &lt;br /&gt;
	&amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_extra&amp;quot;, &amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;auth.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;auth_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;calculate_ha1&amp;quot;, yes)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;password_column&amp;quot;, &amp;quot;password&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;load_credentials&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;permissions.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;permissions&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;alias_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;alias_db&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;presence.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;presence&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
#loadmodule &amp;quot;presence_xml.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;dialog.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_mode&amp;quot;, 2)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_url&amp;quot;,&amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;dlg_match_mode&amp;quot;, 1)&lt;br /&gt;
#modparam(&amp;quot;dialog&amp;quot;, &amp;quot;default_timeout&amp;quot;, 60)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;siptrace.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;trace_flag&amp;quot;, 22)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;traced_user_avp&amp;quot;, &amp;quot;$avp(s:traceuser)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;nathelper.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;natping_interval&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;ping_nated_only&amp;quot;, 1)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_bflag&amp;quot;, &amp;quot;FLB_NATSIPPING&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_from&amp;quot;, &amp;quot;sip:pinger@10.254.254.6&amp;quot;) # Altere o ip para o ip do servidor&lt;br /&gt;
modparam(&amp;quot;nathelper|registrar&amp;quot;, &amp;quot;received_avp&amp;quot;, &amp;quot;$avp(RECEIVED)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rtpproxy.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;rtpproxy&amp;quot;, &amp;quot;rtpproxy_sock&amp;quot;, &amp;quot;udp:127.0.0.1:7722&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Logica de roteamento ########&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route {&lt;br /&gt;
&lt;br /&gt;
	if (!mf_process_maxfwd_header(&amp;quot;3&amp;quot;)) {&lt;br /&gt;
                send_reply(&amp;quot;483&amp;quot;,&amp;quot;looping&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;REQUISICAO RECEBIDA, ENVIANDO PARA REQINIT&amp;quot;);&lt;br /&gt;
	# Checagem inicial por requisicao&lt;br /&gt;
	route(REQINIT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA NAT&amp;quot;);&lt;br /&gt;
	# Deteccao de nat&lt;br /&gt;
	route(NAT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA WITHINDLG&amp;quot;);&lt;br /&gt;
	# Gerenciando requisicaoes com dialog&lt;br /&gt;
	route(WITHINDLG);&lt;br /&gt;
&lt;br /&gt;
	# Manipulando requisicoes iniciais (nao consta To tag)&lt;br /&gt;
	&lt;br /&gt;
	# Processando CANCEL&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;CANCEL&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD CANCEL&amp;quot;);&lt;br /&gt;
		if(t_check_trans()){&lt;br /&gt;
			t_relay();&lt;br /&gt;
		}&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	t_check_trans();&lt;br /&gt;
&lt;br /&gt;
	# Enviando para autenticacao&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA AUTENTICACAO&amp;quot;);&lt;br /&gt;
	route(AUTH);&lt;br /&gt;
&lt;br /&gt;
	# gravando rota para formacao dos dialogs (caso sejam roteados)&lt;br /&gt;
	# removemos qualquer cabecalho de rota pre carregado&lt;br /&gt;
	remove_hf(&amp;quot;Route&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE OU SIBSCRIBE&amp;quot;);&lt;br /&gt;
		record_route();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Contabilizando (acc) INVITES&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE, FAZENDOA ACC&amp;quot;);&lt;br /&gt;
		setflag(FLT_ACC);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando chamada para destinos externos&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA SIPOUT&amp;quot;);&lt;br /&gt;
	route(SIPOUT);&lt;br /&gt;
&lt;br /&gt;
	# Requisicoes para dominio local&lt;br /&gt;
	&lt;br /&gt;
	# Roteando requisicoes de PRESENCE&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PRESENCE&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	route(PRESENCE);&lt;br /&gt;
&lt;br /&gt;
	# Gerenciando pedidos de registro&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA REGISTRAR&amp;quot;);	&lt;br /&gt;
	route(REGISTRAR);&lt;br /&gt;
&lt;br /&gt;
	if($ru==&amp;quot;&amp;quot;){&lt;br /&gt;
		xlog(&amp;quot;ru --&amp;gt; vazio&amp;quot;);&lt;br /&gt;
		# Requisicao sem usuario na RURI&lt;br /&gt;
		sl_send_reply(&amp;quot;484&amp;quot;, &amp;quot;Address Incomplete&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando requisicao para PSTN&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PSTN&amp;quot;);&lt;br /&gt;
	route(PSTN);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Salvando informacao de quem originou a chamad&lt;br /&gt;
	$avp(callee)=$rU;&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA DISPATCH PSTN&amp;quot;);&lt;br /&gt;
	route(FSDISPATCH);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	# Servico de localizacao de usuario&lt;br /&gt;
	route(LOCATION);&lt;br /&gt;
&lt;br /&gt;
	# Efetuando o relay (encaminhamento)&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[RELAY] {&lt;br /&gt;
	if(check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
		setbflag(FLB_NATB);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(isflagset(FLT_NATS) || isbflagset(FLB_NATB)){&lt;br /&gt;
		#route(RTPPROXY);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
#		t_on_reply(&amp;quot;REPLY_ONE&amp;quot;);&lt;br /&gt;
#		t_on_failure(&amp;quot;FAIL_ONE&amp;quot;);&lt;br /&gt;
#	}&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;AQUI TENTAMOS ENVIAR A CHAMADA $fU $tU&amp;quot;);&lt;br /&gt;
	if(!t_relay()){&lt;br /&gt;
		xlog(&amp;quot;FALHA EM ENVIAR A CHAMADA, NAO FOI POSSIVEL FAZER O RELAY&amp;quot;);&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
	}&lt;br /&gt;
	xlog(&amp;quot;CHAMADA FOI ENVIADA AQUI, QUAL O ERRO ENTAO&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REQINIT] {&lt;br /&gt;
	if(!mf_process_maxfwd_header(&amp;quot;10&amp;quot;)){&lt;br /&gt;
		sl_send_reply(&amp;quot;483&amp;quot;, &amp;quot;Too Many Hops&amp;quot;);&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[WITHINDLG] {&lt;br /&gt;
	if(has_totag()){&lt;br /&gt;
		if(loose_route()){&lt;br /&gt;
			if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
				setflag(FLT_ACC);&lt;br /&gt;
				setflag(FLT_ACCFAILED);&lt;br /&gt;
			}&lt;br /&gt;
			route(RELAY);&lt;br /&gt;
		}else{&lt;br /&gt;
			if(is_method(&amp;quot;SUBSCRIBE&amp;quot;) &amp;amp;&amp;amp; uri==myself) {&lt;br /&gt;
				# requisicao de subscribe pre-estabelecida&lt;br /&gt;
				route(PRESENCE);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;ACK&amp;quot;)){&lt;br /&gt;
				if(t_check_trans()){&lt;br /&gt;
					t_relay();&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}else{&lt;br /&gt;
				# ACK para transacao nao encontrada, ignoramos...&lt;br /&gt;
				exit;&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			sl_send_reply(&amp;quot;404&amp;quot;, &amp;quot;Not Here&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		}	&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REGISTRAR] {&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		if(isflagset(FLT_NATS)){&lt;br /&gt;
			setbflag(FLB_NATB);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(!save(&amp;quot;location&amp;quot;)){&lt;br /&gt;
			sl_reply_error();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[LOCATION] {&lt;br /&gt;
&lt;br /&gt;
	alias_db_lookup(&amp;quot;dbaliases&amp;quot;);&lt;br /&gt;
	if(!lookup(&amp;quot;location&amp;quot;)){&lt;br /&gt;
		switch($rc) {&lt;br /&gt;
			case -1:&lt;br /&gt;
			case -3:&lt;br /&gt;
				t_newtran();&lt;br /&gt;
				t_reply(&amp;quot;404&amp;quot;,&amp;quot;Not Found&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			case -2:&lt;br /&gt;
				sl_send_reply(&amp;quot;405&amp;quot;, &amp;quot;Method Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		setflag(FLT_ACCMISSED);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PRESENCE] {&lt;br /&gt;
	if(!is_method(&amp;quot;PUBLISH|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!t_newtran()){&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
		handle_publish();&lt;br /&gt;
	}else if(is_method(&amp;quot;SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		handle_subscribe();&lt;br /&gt;
	}&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[AUTH]{&lt;br /&gt;
	xlog(&amp;quot;PEDIDO DE AUTENTICACAO&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		# atentica pedidos de registro&lt;br /&gt;
		if(!www_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
			www_challenge(&amp;quot;&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if($au!=$tU){&lt;br /&gt;
			sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	}else{&lt;br /&gt;
		if(route(FSINBOUND)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(check_source_address(&amp;quot;0&amp;quot;)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(from_uri==myself){&lt;br /&gt;
			if(!proxy_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
				proxy_challenge(&amp;quot;&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
				if($au!=$tU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}else{&lt;br /&gt;
				if($au!=$fU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			# Validamos (autenticamos) o usuario&lt;br /&gt;
			consume_credentials();&lt;br /&gt;
		}else{&lt;br /&gt;
		&lt;br /&gt;
			# usuario nao e local, vamos negar&lt;br /&gt;
			if(!uri==myself){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not relaying&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}	&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[NAT] {&lt;br /&gt;
	force_rport();&lt;br /&gt;
	if(nat_uac_test(&amp;quot;19&amp;quot;)){&lt;br /&gt;
		if(method==&amp;quot;REGISTER&amp;quot;){&lt;br /&gt;
			fix_nated_register();&lt;br /&gt;
		}else{&lt;br /&gt;
			fix_nated_contact();&lt;br /&gt;
		}&lt;br /&gt;
		setflag(FLT_NATS);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[RTPPROXY] {&lt;br /&gt;
	if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}else if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		engage_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!has_totag()){&lt;br /&gt;
&lt;br /&gt;
		if(!check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
			add_rr_param(&amp;quot;;nat=yes&amp;quot;);&lt;br /&gt;
			xlog(&amp;quot;NAT yes NAO ENCONTRADO&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[SIPOUT]{&lt;br /&gt;
	if(!uri==myself){&lt;br /&gt;
		append_hf(&amp;quot;P-hint: outbound\r\n&amp;quot;);&lt;br /&gt;
		route(RELAY);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PSTN]{&lt;br /&gt;
        # neste caso apenas para exemplificar um uso simples&lt;br /&gt;
        # vamos fazer o redirecionamento par ao asterisk&lt;br /&gt;
        # realizar a dicagem da chamada&lt;br /&gt;
&lt;br /&gt;
        if(!($rU=~&amp;quot;^(\+|00)[1-9][0-9]{3,20}$&amp;quot;))&lt;br /&gt;
                return;&lt;br /&gt;
&lt;br /&gt;
        ## a regra acima aceita para discagem externa qualquer numero&lt;br /&gt;
        # comecado com 00 ou +&lt;br /&gt;
        #&lt;br /&gt;
&lt;br /&gt;
        if(from_uri!=myself){&lt;br /&gt;
                sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $ru = &amp;quot;sip:&amp;quot; + $rU + &amp;quot;@&amp;quot; + &amp;quot;10.254.254.6:5090&amp;quot;;&lt;br /&gt;
        xlog(&amp;quot;NOVO DESTINO: $ru&amp;quot;);&lt;br /&gt;
        route(RELAY);&lt;br /&gt;
        exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[XMLRPC]{&lt;br /&gt;
	# nao vamos implementar esta funcionalidade&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSINBOUND] {&lt;br /&gt;
	# verificar para validar o ip do asterisk:porta&lt;br /&gt;
	# se bater , responder com return 1;&lt;br /&gt;
	if($si==&amp;quot;10.254.254.6&amp;quot; &amp;amp;&amp;amp; $sp==&amp;quot;5090&amp;quot;){&lt;br /&gt;
		return(1);&lt;br /&gt;
	}else{&lt;br /&gt;
		return(-1);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSDISPATCH] {&lt;br /&gt;
&lt;br /&gt;
	if(!is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(route(FSINBOUND)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;CAIMOS NO SWITCH, VAMOS LOCALIZAR O PERFIL DA CHAMADA $rU&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if($rU =~ &amp;quot;^41$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH expressa comeca e termina em 41&amp;quot;);&lt;br /&gt;
			#regra de menu de voicemail, apenas &lt;br /&gt;
			# usuarios autenticados&lt;br /&gt;
			if($au==&amp;quot;&amp;quot;){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$rU = &amp;quot;vma-&amp;quot; + $au;&lt;br /&gt;
	}else if($rU =~ &amp;quot;^441[0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCA 441XX &amp;quot;);&lt;br /&gt;
			# numero discado comeca com 441 seguido de dois digitos&lt;br /&gt;
			# chamada direta para inbox do voicemail&lt;br /&gt;
			strip(2);&lt;br /&gt;
			route(FSVBOX);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^433[01][0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH OPCAO 433[01]XX&amp;quot;);&lt;br /&gt;
			# numero comecado em 443, seguido de 0 ou 1, mais dois digitos&lt;br /&gt;
			# sistema de conferencia&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^45[0-9]+$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCAO 45X.&amp;quot;);&lt;br /&gt;
			#numero comecado com 45, seguindo de numeros;&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else{&lt;br /&gt;
			xlog(&amp;quot;OPCAO DEFAULT DO SWITCH&amp;quot;);&lt;br /&gt;
			# usuario offline, enviando para voicemail&lt;br /&gt;
			if(!registered(&amp;quot;location&amp;quot;)){&lt;br /&gt;
				route(FSVBOX);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			# usuario online, fazendo bridging&lt;br /&gt;
			xlog(&amp;quot;USUARIO ESTA ONLINE VAMOS FAZER BRIDGE&amp;quot;);&lt;br /&gt;
			prefix(&amp;quot;kb-&amp;quot;);&lt;br /&gt;
			if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
				t_on_failure(&amp;quot;FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
	}&lt;br /&gt;
	route(FSRELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSVBOX&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($rU =~ &amp;quot;^441[0-9][0-9]&amp;quot;){&lt;br /&gt;
		strip(2);&lt;br /&gt;
	}&lt;br /&gt;
	prefix(&amp;quot;vm-&amp;quot;);&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[FSRELAY] {&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSRELAY&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
branch_route[BRANCH_ONE]{&lt;br /&gt;
	xlog(&amp;quot;new branch at $ru&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
onreply_route[REPLY_ONE]{&lt;br /&gt;
	xlog(&amp;quot;Incoming reply&amp;quot;);&lt;br /&gt;
	if((isflagset(FLT_NATS) || isbflagset(FLB_NATB) &amp;amp;&amp;amp; status =~ &amp;quot;(183)|(2[0-9][0-9])&amp;quot;)){&lt;br /&gt;
		#rtpproxy_offer();&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	if(isbflagset(FLB_NATB)){&lt;br /&gt;
		fix_nated_contact();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_ONE]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_ONE&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_check_status(&amp;quot;486|408|480&amp;quot;)){&lt;br /&gt;
		$rU = $avp(callee);&lt;br /&gt;
		$var(newbranch) = 1;&lt;br /&gt;
		route(FSVBOX);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testes com Opensips (registro)==&lt;br /&gt;
&lt;br /&gt;
Antes de podermos testar precisamos iniciar o serviço, no momento estamos com ele operando em modo debug, então a inicialização deve ser realizada com o comando abaixo&lt;br /&gt;
 /etc/init.d/opensips debug&lt;br /&gt;
&lt;br /&gt;
Abra uma nova sessão no servidor e então vamos criar os usuários&lt;br /&gt;
 opensipsctl add 101 101&lt;br /&gt;
 opensipsctl add 102 102&lt;br /&gt;
 opensipsctl add 103 103&lt;br /&gt;
&lt;br /&gt;
usuario 101 com senha 101 e assim por diante&lt;br /&gt;
&lt;br /&gt;
Faça a onexão com seu softphone, aqui para testes utilizei o jitsi e o zoiper, neste momento vamos apenas fazer o registro do usuário para testar a autenticação, se você tentar realizar uma discagem não funcionará pois neste caso o processo depende do Asterisk que ainda não está configurado, vamos dar inicio nesta configuração agora.&lt;br /&gt;
&lt;br /&gt;
==Asterisk==&lt;br /&gt;
Não vamos dar muitos detalhes da instalação do asterisk aqui, a ideia é simplesmente ter o mesmo funcionando da forma que necessitamos.&lt;br /&gt;
&lt;br /&gt;
===Instalando dependências===&lt;br /&gt;
&lt;br /&gt;
Dependências necessárias para a instalação do Asterisk.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Asterisk 1.8===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget -c http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8-current.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Compilando o Asterisk 1.8====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar zxvf asterisk-1.8-current.tar.gz&lt;br /&gt;
cd asterisk-1.8-current.tar.gz&lt;br /&gt;
./configure  --disable-xmldoc&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make samples&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Após a instalação , abra o arquivo /etc/asterisk/sip.conf, localize a linha '''udpbindaddr=0.0.0.0''' e altere para '''udpbindaddr=0.0.0.0:5090'''  , depois ao fim do arquivo adicione.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
type=peer&lt;br /&gt;
host=10.254.254.6&lt;br /&gt;
port=5060&lt;br /&gt;
qualify=yes&lt;br /&gt;
context=opensips&lt;br /&gt;
insecure=port,invite&lt;br /&gt;
canreinvite=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora abra o arquivo '''/etc/asterisk/extensions.conf''' , crie no fim do arquivo a seguinte entrada.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _kb-1XX,1,NoOp(CHAMADA INTERNA - FAZER BRIDGE - ${CALLERID(num)} ${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Dial(SIP/opensips/${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Goto(opensips,vm-${EXTEN:3},1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vm-1XX,1,NoOp(CHAMADA PARA VOICEMAIL)&lt;br /&gt;
same =&amp;gt; n,Voicemail(${EXTEN:3}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vma-1XX,1,NoOp(CHAMADA PARA VOICEMAIL - ADMINISTRATIVO)&lt;br /&gt;
same =&amp;gt; n,VoicemailMain(${EXTEN:4}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _3[01]XX,1,NoOp(CHAMADA PARA CONFERENCIA)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,ConfBridge(${EXTEN},cM1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _00.,1,NoOp(CHAMADA PARA PSTN)&lt;br /&gt;
same =&amp;gt; n,Wait(2)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,Wait(1)&lt;br /&gt;
same =&amp;gt; n,PlayBack(tt-monkeys)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; h,1,Hangup()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finalmente precisamos criar as entradas do voicemail, para isso altere o arquivo '''/etc/asterisk/voicemail.conf''' localize o contexto '''[default]''' e então adicione as entradas para seu voicemail, segue dois exemplos abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
101 =&amp;gt; 123123,Mike Tesliuk&lt;br /&gt;
102 =&amp;gt; 123123,Mike Tesliuk 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Feito isso, faça um restart no asterisk&lt;br /&gt;
 /etc/init.d/asterisk restart&lt;br /&gt;
&lt;br /&gt;
Agora você ja poderá fazer os testes, basicamente criamos as seguintes situações para serem testadas.&lt;br /&gt;
&lt;br /&gt;
*1 Autenticação de usuários&lt;br /&gt;
*2 Chamada entre usuários&lt;br /&gt;
*3 Encaminhamento para caixa postal&lt;br /&gt;
*4 Acesso a caixa postal&lt;br /&gt;
*5 Acesso a conferência&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1399</id>
		<title>OpenSIPs e Asterisk - LIKE CentOS</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1399"/>
		<updated>2013-08-27T21:51:44Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: /* Preparando a Configuração */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=white&amp;gt; NÃO SIGA ESTE DOCUMENTO. O MESMO SE ENCONTRA EM DESEVOLVIMENTO&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este tutorial é baseado em um tutorial originalmente escrito pelo Mike, se quiser verificar o tutorial original acesse http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk&lt;br /&gt;
&lt;br /&gt;
Para esta implementação utilizamos CentOS 6.4 64 Bits , OpenSIPS 1.9 e Asterisk 1.8.23 &lt;br /&gt;
&lt;br /&gt;
==Funcionalidades==&lt;br /&gt;
Este tutorial tem por objetivo atingir as seguintes funcionalidades.&lt;br /&gt;
*Autenticação de usuário&lt;br /&gt;
*Registro de usuário&lt;br /&gt;
*Localização de usuário (encaminhamento de chamadas)&lt;br /&gt;
*Roteamento de chamadas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Através do Asterisk estenderemos estas funcionalidades agregando.&lt;br /&gt;
*Correio de voz (Voicemail)&lt;br /&gt;
*Conferencia &lt;br /&gt;
*SBC ( Pode ser utilizado para transcoding, esconder topologia, play de mensagens e tarifação )&lt;br /&gt;
*Outros serviços de media (Anuncios, Ura's e coisas do tipo)&lt;br /&gt;
&lt;br /&gt;
==Definições==&lt;br /&gt;
Para um melhor entendimento da solução vamos expor aqui algumas definições de nosso sistema.&lt;br /&gt;
*Usuários locais terão ramais com 3 digitos (ex: 101, 102, 103)&lt;br /&gt;
*Identidade do correio de voz será o mesmo do ramal&lt;br /&gt;
*Serviços de media (acesso a voicemail e outros) receberão rotas de 4 digitos&lt;br /&gt;
*Opensips e Asterisk utilizarão o mesmo servidor (Neste caso IP: 10.254.254.6)&lt;br /&gt;
*Os serviços rodarão nas portas 5060 (opensips) , 5090 (Asterisk)&lt;br /&gt;
&lt;br /&gt;
==Funcionamento==&lt;br /&gt;
A autenticação do usuário será realizada pelo OpenSIPs, quando uma chamada é autenticada então ela serguirá:&lt;br /&gt;
*Se o usuário de destino não está online a chamada será enviada para o Asterisk para função de correio de voz&lt;br /&gt;
*Se o usuário está online a chamada será encaminhada para o Asterisk, dest forma é possivel acionar funcionalidades como anuncios, definição de tempo de chamada, forçar codecs e outras funcionalidades.&lt;br /&gt;
*Asterisk envia a chamada novamente para o OpenSIPs que verificará no location e entregará a chamada para o usuário.&lt;br /&gt;
*Se a chamada não for atendida o Opensips irá re-encaminhar para o Asterisk direcionando para função de voicemail&lt;br /&gt;
&lt;br /&gt;
==OpenSIPs==&lt;br /&gt;
Vamos iniciar o processo de instalação com o OpenSIPs, siga os procedimentos abaixo para evitar qualquer dificuldade.&lt;br /&gt;
&lt;br /&gt;
===Dependencias===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====Atualizando o sistema====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum -y update&lt;br /&gt;
yum -y upgrade&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pacotes de desenvolvimento ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall 'Development Tools' -y&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
yum install wget mysql-server pcre-devel libxml2-devel xmlrpc-c-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Desabilitando o SELINUX ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/bin/sed -i -e s,'SELINUX=enforcing','SELINUX=disabled', /etc/selinux/config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durante a instalação o sistema irá lhe perguntar a senha de root para o servidor MySQL é importante que você se lembre da mesma posteriormente pois utilizaremos a mesma.&lt;br /&gt;
&lt;br /&gt;
===Compilando o OpenSIPs===&lt;br /&gt;
Para manter um padrão onde os dados estao vamos utilizar o diretório /usr/src/ para o download de código fonte.&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/&lt;br /&gt;
 wget -c http://opensips.org/pub/opensips/1.9.1/src/opensips-1.9.1_src.tar.gz&lt;br /&gt;
 tar -xzvf opensips-1.9.1_src.tar.gz&lt;br /&gt;
 cd opensips-1.9.1-tls/&lt;br /&gt;
 make menuconfig&lt;br /&gt;
&lt;br /&gt;
===Preparando a Configuração===&lt;br /&gt;
&lt;br /&gt;
Antes de darmos inicio ao arquivo de configuração, vamos ajustar algumas questões, o opensips instala os arquivos (se voce nao alterar o parametro) em /usr, consequentemente as configurações ficam em /usr/etc , eu por padrão faço um link para o diretório /etc, assim acesso as configurações em /etc/opensips&lt;br /&gt;
&lt;br /&gt;
 ln -s /usr/etc/opensips /etc/&lt;br /&gt;
&lt;br /&gt;
Para o script de inicialização execute o comando abaixo&lt;br /&gt;
 cp packaging/fedora/opensips.init /etc/init.d/opensips&lt;br /&gt;
 chmod +x /etc/init.d/opensips&lt;br /&gt;
 chkconfig --add opensips&lt;br /&gt;
 cp packaging/fedora/opensips.sysconfig /etc/sysconfig&lt;br /&gt;
&lt;br /&gt;
 groupadd opensips&lt;br /&gt;
 mkdir /var/run/opensips&lt;br /&gt;
 useradd -d /var/run/opensips/ -s /bin/false -g opensips opensips&lt;br /&gt;
 chown -R opensips.opensips /var/run/opensips&lt;br /&gt;
&lt;br /&gt;
===Configurando o opensipsctl===&lt;br /&gt;
O opensipsctl (e opensipsdbctl) utilizam o arquivo de configuração /etc/opensips/opensipsctlrc, abaixo segue o conteúdo do arquivo. (Sugiro que você faça um backup dos arquivos originais para ter uma copia, existem parametros que você pode estudar depois).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DBENGINE=MYSQL&lt;br /&gt;
DBHOST=localhost&lt;br /&gt;
DBNAME=opensips&lt;br /&gt;
DBRWUSER=opensips&lt;br /&gt;
DBRWPW=&amp;quot;opensipsrw&amp;quot;&lt;br /&gt;
SIP_DOMAIN=10.254.254.6  ### caso voce esteja usando outro ip altere aqui&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DBROOTUSER=&amp;quot;root&amp;quot;&lt;br /&gt;
INSTALL_EXTRA_TABLES=ask&lt;br /&gt;
ALIASES_TYPE=&amp;quot;DB&amp;quot;&lt;br /&gt;
MI_CONNECTOR=FIFO:/tmp/opensips_fifo&lt;br /&gt;
# VERIFY_ACL=1&lt;br /&gt;
# ACL_GROUPS=&amp;quot;local ld int voicemail free-pstn&amp;quot;&lt;br /&gt;
# VERBOSE=1&lt;br /&gt;
# STORE_PLAINTEXT_PW=0&lt;br /&gt;
# NOHLPRINT=1&lt;br /&gt;
PID_FILE=/var/run/opensips/opensips.pid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Criando o banco de dados===&lt;br /&gt;
Agora que temos nosso arquivo configurado vamos fazer a criação do banco de dados, execute o comando abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
opensipsdbctl create opensips&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema irá lhe perguntar algumas coisas, responda Y (sim) para todas para que ele instale todas as tabelas, não usaremos todas elas, mas desta forma você fica com praticamente tudo criado para o caso de uma expansão dos recursos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Instalando o RTP Proxy===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/src/&lt;br /&gt;
wget -c http://b2bua.org/chrome/site/rtpproxy-1.2.1.tar.gz&lt;br /&gt;
tar -xzvf rtpproxy-1.2.1.tar.gz&lt;br /&gt;
cd rtpproxy-1.2.1&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
groupadd rtpproxy&lt;br /&gt;
useradd -d /var/run/rtpproxy -s /bin/true -g rtpproxy rtpproxy&lt;br /&gt;
mkdir /var/log/rtpproxy&lt;br /&gt;
mkdir /var/run/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/log/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/run/rtpproxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Arquivo de inicialização====&lt;br /&gt;
'''/etc/init.d/rtpproxy'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# Este script e de autoria de Mike Tesliuk&lt;br /&gt;
# qualquer falha no mesmo por favor informe &lt;br /&gt;
# atraves do email mike (a) tesliuk.com&lt;br /&gt;
#&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:          rtpproxy&lt;br /&gt;
# Required-Start:    $syslog $network $local_fs $time&lt;br /&gt;
# Required-Stop:     $syslog $network $local_fs&lt;br /&gt;
# Default-Start:     2 3 4 5&lt;br /&gt;
# Default-Stop:      0 1 6&lt;br /&gt;
# Short-Description: Start the RTPPROXY server&lt;br /&gt;
# Description:       Start the RTPPROXY server&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin&lt;br /&gt;
USELOG=1&lt;br /&gt;
USER=rtpproxy&lt;br /&gt;
# Altere o ip abaixo para o ip de seu sistema&lt;br /&gt;
IPADDR=&amp;quot;10.254.254.6&amp;quot;&lt;br /&gt;
&lt;br /&gt;
. /lib/lsb/init-functions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
start(){&lt;br /&gt;
        echo &amp;quot;Iniciando RTP PROXY &amp;quot;&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                if [ &amp;quot;${USELOG}&amp;quot; = &amp;quot;1&amp;quot; ]; then&lt;br /&gt;
                        echo &amp;quot;Iniciando com LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER -F -f d DBUG 2&amp;amp;&amp;gt; /var/log/rtpproxy/rtpproxy.log &amp;amp;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Iniciando sem LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER  -F -f d DBUG 2&amp;amp;&amp;gt; /dev/null&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;START OK&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
        else&lt;br /&gt;
                echo &amp;quot;Processo ja em execucao&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
stop(){&lt;br /&gt;
&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                echo &amp;quot;Processo nao encontrado&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
                kill -9 $(pidof rtpproxy)&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;STOP OK&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Falha em realizar stop do servico&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
case $1 in&lt;br /&gt;
        start)&lt;br /&gt;
                start&lt;br /&gt;
        ;;&lt;br /&gt;
        stop)&lt;br /&gt;
                stop&lt;br /&gt;
        ;;&lt;br /&gt;
        restart)&lt;br /&gt;
                stop&lt;br /&gt;
                start&lt;br /&gt;
&lt;br /&gt;
        ;;&lt;br /&gt;
        *)&lt;br /&gt;
                echo &amp;quot;Utilize: stop | start | restart&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos dar permissao e colocar na inicialização&lt;br /&gt;
 chmod +x /etc/init.d/rtpproxy &lt;br /&gt;
 update-rc.d rtpproxy defaults&lt;br /&gt;
 /etc/init.d/rtpproxy start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Criando o arquivo opensips.cfg===&lt;br /&gt;
O arquivo opensips.cfg é a onde a coisa toda acontece para o opensips, claro que ele dependerá de informações que estarão no banco de dados, mas é onde criamos todas as nossas rotas e validações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Este tutorial nao esta terminado, este arquivo ainda esta em testes &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
####### Global Parameters #########&lt;br /&gt;
debug=3&lt;br /&gt;
log_stderror=no&lt;br /&gt;
log_facility=LOG_LOCAL0&lt;br /&gt;
&lt;br /&gt;
fork=yes&lt;br /&gt;
children=4&lt;br /&gt;
&lt;br /&gt;
/* Descomente as linhas abaixo para ativar o debug */&lt;br /&gt;
#debug=7&lt;br /&gt;
#fork=no&lt;br /&gt;
#log_stderror=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Comente a linha abaixo para ativar a descoberta automatica de enderecos locais&lt;br /&gt;
 , isso significa que o sistema ira verificar todos os ips ativos e hosts e entao ativara&lt;br /&gt;
 o protocolo para todos eles */ &lt;br /&gt;
auto_aliases=no&lt;br /&gt;
&lt;br /&gt;
/* Defina aqui o ip a ser utilizado */&lt;br /&gt;
listen=udp:10.254.254.6:5060   # Altere este IP para o seu ambiente&lt;br /&gt;
&lt;br /&gt;
/* Nao usaremos sip por tcp nem tls neste script */&lt;br /&gt;
disable_tcp=yes&lt;br /&gt;
&lt;br /&gt;
disable_tls=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Secao de modulos ########&lt;br /&gt;
&lt;br /&gt;
#set module path&lt;br /&gt;
mpath=&amp;quot;/usr//lib64/opensips/modules/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;signaling.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sl.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;tm.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_timer&amp;quot;, 5)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_inv_timer&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;restart_fr_on_each_reply&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;onreply_avp_mode&amp;quot;, 1)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rr.so&amp;quot;&lt;br /&gt;
/* do not append from tag to the RR (no need for this script) */&lt;br /&gt;
modparam(&amp;quot;rr&amp;quot;, &amp;quot;append_fromtag&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;maxfwd.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sipmsgops.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;mi_fifo.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_name&amp;quot;, &amp;quot;/tmp/opensips_fifo&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_mode&amp;quot;, 0666)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;db_mysql.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;uri.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;uri&amp;quot;, &amp;quot;use_uri_table&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;usrloc.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;nat_bflag&amp;quot;, &amp;quot;FLB_NATB&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_mode&amp;quot;,   2)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;registrar.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;registrar&amp;quot;, &amp;quot;tcp_persistent_flag&amp;quot;, &amp;quot;TCP_PERSISTENT&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
/* Descomente a linha abaixo para nao permitir mais de 10 contatos por conta */&lt;br /&gt;
#modparam(&amp;quot;registrar&amp;quot;, &amp;quot;max_contacts&amp;quot;, 10)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;acc.so&amp;quot;&lt;br /&gt;
/* Quais eventos deverao ser registrados ? */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;early_media&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;report_cancels&amp;quot;, 0)&lt;br /&gt;
/* por padrao nos nao ajustamos a direcao em requisicoes sequencias, &lt;br /&gt;
 se voce deseja usar este recurso tenha certeza de ativar o &amp;quot;appen_fromtag&amp;quot; &lt;br /&gt;
 para o modulo &amp;quot;rr&amp;quot; */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;detect_direction&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;failed_transaction_flag&amp;quot;, &amp;quot;FLT_ACCFAILED&amp;quot;)&lt;br /&gt;
/* Gatilhos para accounting  (flags) */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_extra&amp;quot;, &lt;br /&gt;
	&amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_extra&amp;quot;, &amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;auth.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;auth_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;calculate_ha1&amp;quot;, yes)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;password_column&amp;quot;, &amp;quot;password&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;load_credentials&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;permissions.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;permissions&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;alias_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;alias_db&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;presence.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;presence&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
#loadmodule &amp;quot;presence_xml.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;dialog.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_mode&amp;quot;, 2)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_url&amp;quot;,&amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;dlg_match_mode&amp;quot;, 1)&lt;br /&gt;
#modparam(&amp;quot;dialog&amp;quot;, &amp;quot;default_timeout&amp;quot;, 60)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;siptrace.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;trace_flag&amp;quot;, 22)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;traced_user_avp&amp;quot;, &amp;quot;$avp(s:traceuser)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;nathelper.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;natping_interval&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;ping_nated_only&amp;quot;, 1)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_bflag&amp;quot;, &amp;quot;FLB_NATSIPPING&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_from&amp;quot;, &amp;quot;sip:pinger@10.254.254.6&amp;quot;) # Altere o ip para o ip do servidor&lt;br /&gt;
modparam(&amp;quot;nathelper|registrar&amp;quot;, &amp;quot;received_avp&amp;quot;, &amp;quot;$avp(RECEIVED)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rtpproxy.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;rtpproxy&amp;quot;, &amp;quot;rtpproxy_sock&amp;quot;, &amp;quot;udp:127.0.0.1:7722&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Logica de roteamento ########&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route {&lt;br /&gt;
&lt;br /&gt;
	if (!mf_process_maxfwd_header(&amp;quot;3&amp;quot;)) {&lt;br /&gt;
                send_reply(&amp;quot;483&amp;quot;,&amp;quot;looping&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;REQUISICAO RECEBIDA, ENVIANDO PARA REQINIT&amp;quot;);&lt;br /&gt;
	# Checagem inicial por requisicao&lt;br /&gt;
	route(REQINIT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA NAT&amp;quot;);&lt;br /&gt;
	# Deteccao de nat&lt;br /&gt;
	route(NAT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA WITHINDLG&amp;quot;);&lt;br /&gt;
	# Gerenciando requisicaoes com dialog&lt;br /&gt;
	route(WITHINDLG);&lt;br /&gt;
&lt;br /&gt;
	# Manipulando requisicoes iniciais (nao consta To tag)&lt;br /&gt;
	&lt;br /&gt;
	# Processando CANCEL&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;CANCEL&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD CANCEL&amp;quot;);&lt;br /&gt;
		if(t_check_trans()){&lt;br /&gt;
			t_relay();&lt;br /&gt;
		}&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	t_check_trans();&lt;br /&gt;
&lt;br /&gt;
	# Enviando para autenticacao&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA AUTENTICACAO&amp;quot;);&lt;br /&gt;
	route(AUTH);&lt;br /&gt;
&lt;br /&gt;
	# gravando rota para formacao dos dialogs (caso sejam roteados)&lt;br /&gt;
	# removemos qualquer cabecalho de rota pre carregado&lt;br /&gt;
	remove_hf(&amp;quot;Route&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE OU SIBSCRIBE&amp;quot;);&lt;br /&gt;
		record_route();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Contabilizando (acc) INVITES&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE, FAZENDOA ACC&amp;quot;);&lt;br /&gt;
		setflag(FLT_ACC);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando chamada para destinos externos&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA SIPOUT&amp;quot;);&lt;br /&gt;
	route(SIPOUT);&lt;br /&gt;
&lt;br /&gt;
	# Requisicoes para dominio local&lt;br /&gt;
	&lt;br /&gt;
	# Roteando requisicoes de PRESENCE&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PRESENCE&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	route(PRESENCE);&lt;br /&gt;
&lt;br /&gt;
	# Gerenciando pedidos de registro&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA REGISTRAR&amp;quot;);	&lt;br /&gt;
	route(REGISTRAR);&lt;br /&gt;
&lt;br /&gt;
	if($ru==&amp;quot;&amp;quot;){&lt;br /&gt;
		xlog(&amp;quot;ru --&amp;gt; vazio&amp;quot;);&lt;br /&gt;
		# Requisicao sem usuario na RURI&lt;br /&gt;
		sl_send_reply(&amp;quot;484&amp;quot;, &amp;quot;Address Incomplete&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando requisicao para PSTN&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PSTN&amp;quot;);&lt;br /&gt;
	route(PSTN);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Salvando informacao de quem originou a chamad&lt;br /&gt;
	$avp(callee)=$rU;&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA DISPATCH PSTN&amp;quot;);&lt;br /&gt;
	route(FSDISPATCH);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	# Servico de localizacao de usuario&lt;br /&gt;
	route(LOCATION);&lt;br /&gt;
&lt;br /&gt;
	# Efetuando o relay (encaminhamento)&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[RELAY] {&lt;br /&gt;
	if(check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
		setbflag(FLB_NATB);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(isflagset(FLT_NATS) || isbflagset(FLB_NATB)){&lt;br /&gt;
		#route(RTPPROXY);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
#		t_on_reply(&amp;quot;REPLY_ONE&amp;quot;);&lt;br /&gt;
#		t_on_failure(&amp;quot;FAIL_ONE&amp;quot;);&lt;br /&gt;
#	}&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;AQUI TENTAMOS ENVIAR A CHAMADA $fU $tU&amp;quot;);&lt;br /&gt;
	if(!t_relay()){&lt;br /&gt;
		xlog(&amp;quot;FALHA EM ENVIAR A CHAMADA, NAO FOI POSSIVEL FAZER O RELAY&amp;quot;);&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
	}&lt;br /&gt;
	xlog(&amp;quot;CHAMADA FOI ENVIADA AQUI, QUAL O ERRO ENTAO&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REQINIT] {&lt;br /&gt;
	if(!mf_process_maxfwd_header(&amp;quot;10&amp;quot;)){&lt;br /&gt;
		sl_send_reply(&amp;quot;483&amp;quot;, &amp;quot;Too Many Hops&amp;quot;);&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[WITHINDLG] {&lt;br /&gt;
	if(has_totag()){&lt;br /&gt;
		if(loose_route()){&lt;br /&gt;
			if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
				setflag(FLT_ACC);&lt;br /&gt;
				setflag(FLT_ACCFAILED);&lt;br /&gt;
			}&lt;br /&gt;
			route(RELAY);&lt;br /&gt;
		}else{&lt;br /&gt;
			if(is_method(&amp;quot;SUBSCRIBE&amp;quot;) &amp;amp;&amp;amp; uri==myself) {&lt;br /&gt;
				# requisicao de subscribe pre-estabelecida&lt;br /&gt;
				route(PRESENCE);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;ACK&amp;quot;)){&lt;br /&gt;
				if(t_check_trans()){&lt;br /&gt;
					t_relay();&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}else{&lt;br /&gt;
				# ACK para transacao nao encontrada, ignoramos...&lt;br /&gt;
				exit;&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			sl_send_reply(&amp;quot;404&amp;quot;, &amp;quot;Not Here&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		}	&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REGISTRAR] {&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		if(isflagset(FLT_NATS)){&lt;br /&gt;
			setbflag(FLB_NATB);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(!save(&amp;quot;location&amp;quot;)){&lt;br /&gt;
			sl_reply_error();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[LOCATION] {&lt;br /&gt;
&lt;br /&gt;
	alias_db_lookup(&amp;quot;dbaliases&amp;quot;);&lt;br /&gt;
	if(!lookup(&amp;quot;location&amp;quot;)){&lt;br /&gt;
		switch($rc) {&lt;br /&gt;
			case -1:&lt;br /&gt;
			case -3:&lt;br /&gt;
				t_newtran();&lt;br /&gt;
				t_reply(&amp;quot;404&amp;quot;,&amp;quot;Not Found&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			case -2:&lt;br /&gt;
				sl_send_reply(&amp;quot;405&amp;quot;, &amp;quot;Method Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		setflag(FLT_ACCMISSED);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PRESENCE] {&lt;br /&gt;
	if(!is_method(&amp;quot;PUBLISH|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!t_newtran()){&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
		handle_publish();&lt;br /&gt;
	}else if(is_method(&amp;quot;SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		handle_subscribe();&lt;br /&gt;
	}&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[AUTH]{&lt;br /&gt;
	xlog(&amp;quot;PEDIDO DE AUTENTICACAO&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		# atentica pedidos de registro&lt;br /&gt;
		if(!www_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
			www_challenge(&amp;quot;&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if($au!=$tU){&lt;br /&gt;
			sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	}else{&lt;br /&gt;
		if(route(FSINBOUND)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(check_source_address(&amp;quot;0&amp;quot;)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(from_uri==myself){&lt;br /&gt;
			if(!proxy_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
				proxy_challenge(&amp;quot;&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
				if($au!=$tU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}else{&lt;br /&gt;
				if($au!=$fU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			# Validamos (autenticamos) o usuario&lt;br /&gt;
			consume_credentials();&lt;br /&gt;
		}else{&lt;br /&gt;
		&lt;br /&gt;
			# usuario nao e local, vamos negar&lt;br /&gt;
			if(!uri==myself){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not relaying&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}	&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[NAT] {&lt;br /&gt;
	force_rport();&lt;br /&gt;
	if(nat_uac_test(&amp;quot;19&amp;quot;)){&lt;br /&gt;
		if(method==&amp;quot;REGISTER&amp;quot;){&lt;br /&gt;
			fix_nated_register();&lt;br /&gt;
		}else{&lt;br /&gt;
			fix_nated_contact();&lt;br /&gt;
		}&lt;br /&gt;
		setflag(FLT_NATS);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[RTPPROXY] {&lt;br /&gt;
	if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}else if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		engage_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!has_totag()){&lt;br /&gt;
&lt;br /&gt;
		if(!check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
			add_rr_param(&amp;quot;;nat=yes&amp;quot;);&lt;br /&gt;
			xlog(&amp;quot;NAT yes NAO ENCONTRADO&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[SIPOUT]{&lt;br /&gt;
	if(!uri==myself){&lt;br /&gt;
		append_hf(&amp;quot;P-hint: outbound\r\n&amp;quot;);&lt;br /&gt;
		route(RELAY);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PSTN]{&lt;br /&gt;
        # neste caso apenas para exemplificar um uso simples&lt;br /&gt;
        # vamos fazer o redirecionamento par ao asterisk&lt;br /&gt;
        # realizar a dicagem da chamada&lt;br /&gt;
&lt;br /&gt;
        if(!($rU=~&amp;quot;^(\+|00)[1-9][0-9]{3,20}$&amp;quot;))&lt;br /&gt;
                return;&lt;br /&gt;
&lt;br /&gt;
        ## a regra acima aceita para discagem externa qualquer numero&lt;br /&gt;
        # comecado com 00 ou +&lt;br /&gt;
        #&lt;br /&gt;
&lt;br /&gt;
        if(from_uri!=myself){&lt;br /&gt;
                sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $ru = &amp;quot;sip:&amp;quot; + $rU + &amp;quot;@&amp;quot; + &amp;quot;10.254.254.6:5090&amp;quot;;&lt;br /&gt;
        xlog(&amp;quot;NOVO DESTINO: $ru&amp;quot;);&lt;br /&gt;
        route(RELAY);&lt;br /&gt;
        exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[XMLRPC]{&lt;br /&gt;
	# nao vamos implementar esta funcionalidade&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSINBOUND] {&lt;br /&gt;
	# verificar para validar o ip do asterisk:porta&lt;br /&gt;
	# se bater , responder com return 1;&lt;br /&gt;
	if($si==&amp;quot;10.254.254.6&amp;quot; &amp;amp;&amp;amp; $sp==&amp;quot;5090&amp;quot;){&lt;br /&gt;
		return(1);&lt;br /&gt;
	}else{&lt;br /&gt;
		return(-1);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSDISPATCH] {&lt;br /&gt;
&lt;br /&gt;
	if(!is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(route(FSINBOUND)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;CAIMOS NO SWITCH, VAMOS LOCALIZAR O PERFIL DA CHAMADA $rU&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if($rU =~ &amp;quot;^41$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH expressa comeca e termina em 41&amp;quot;);&lt;br /&gt;
			#regra de menu de voicemail, apenas &lt;br /&gt;
			# usuarios autenticados&lt;br /&gt;
			if($au==&amp;quot;&amp;quot;){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$rU = &amp;quot;vma-&amp;quot; + $au;&lt;br /&gt;
	}else if($rU =~ &amp;quot;^441[0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCA 441XX &amp;quot;);&lt;br /&gt;
			# numero discado comeca com 441 seguido de dois digitos&lt;br /&gt;
			# chamada direta para inbox do voicemail&lt;br /&gt;
			strip(2);&lt;br /&gt;
			route(FSVBOX);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^433[01][0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH OPCAO 433[01]XX&amp;quot;);&lt;br /&gt;
			# numero comecado em 443, seguido de 0 ou 1, mais dois digitos&lt;br /&gt;
			# sistema de conferencia&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^45[0-9]+$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCAO 45X.&amp;quot;);&lt;br /&gt;
			#numero comecado com 45, seguindo de numeros;&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else{&lt;br /&gt;
			xlog(&amp;quot;OPCAO DEFAULT DO SWITCH&amp;quot;);&lt;br /&gt;
			# usuario offline, enviando para voicemail&lt;br /&gt;
			if(!registered(&amp;quot;location&amp;quot;)){&lt;br /&gt;
				route(FSVBOX);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			# usuario online, fazendo bridging&lt;br /&gt;
			xlog(&amp;quot;USUARIO ESTA ONLINE VAMOS FAZER BRIDGE&amp;quot;);&lt;br /&gt;
			prefix(&amp;quot;kb-&amp;quot;);&lt;br /&gt;
			if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
				t_on_failure(&amp;quot;FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
	}&lt;br /&gt;
	route(FSRELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSVBOX&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($rU =~ &amp;quot;^441[0-9][0-9]&amp;quot;){&lt;br /&gt;
		strip(2);&lt;br /&gt;
	}&lt;br /&gt;
	prefix(&amp;quot;vm-&amp;quot;);&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[FSRELAY] {&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSRELAY&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
branch_route[BRANCH_ONE]{&lt;br /&gt;
	xlog(&amp;quot;new branch at $ru&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
onreply_route[REPLY_ONE]{&lt;br /&gt;
	xlog(&amp;quot;Incoming reply&amp;quot;);&lt;br /&gt;
	if((isflagset(FLT_NATS) || isbflagset(FLB_NATB) &amp;amp;&amp;amp; status =~ &amp;quot;(183)|(2[0-9][0-9])&amp;quot;)){&lt;br /&gt;
		#rtpproxy_offer();&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	if(isbflagset(FLB_NATB)){&lt;br /&gt;
		fix_nated_contact();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_ONE]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_ONE&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_check_status(&amp;quot;486|408|480&amp;quot;)){&lt;br /&gt;
		$rU = $avp(callee);&lt;br /&gt;
		$var(newbranch) = 1;&lt;br /&gt;
		route(FSVBOX);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testes com Opensips (registro)==&lt;br /&gt;
&lt;br /&gt;
Antes de podermos testar precisamos iniciar o serviço, no momento estamos com ele operando em modo debug, então a inicialização deve ser realizada com o comando abaixo&lt;br /&gt;
 /etc/init.d/opensips debug&lt;br /&gt;
&lt;br /&gt;
Abra uma nova sessão no servidor e então vamos criar os usuários&lt;br /&gt;
 opensipsctl add 101 101&lt;br /&gt;
 opensipsctl add 102 102&lt;br /&gt;
 opensipsctl add 103 103&lt;br /&gt;
&lt;br /&gt;
usuario 101 com senha 101 e assim por diante&lt;br /&gt;
&lt;br /&gt;
Faça a onexão com seu softphone, aqui para testes utilizei o jitsi e o zoiper, neste momento vamos apenas fazer o registro do usuário para testar a autenticação, se você tentar realizar uma discagem não funcionará pois neste caso o processo depende do Asterisk que ainda não está configurado, vamos dar inicio nesta configuração agora.&lt;br /&gt;
&lt;br /&gt;
==Asterisk==&lt;br /&gt;
Não vamos dar muitos detalhes da instalação do asterisk aqui, a ideia é simplesmente ter o mesmo funcionando da forma que necessitamos.&lt;br /&gt;
&lt;br /&gt;
===Instalando dependências===&lt;br /&gt;
&lt;br /&gt;
Dependências necessárias para a instalação do Asterisk.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Asterisk 1.8===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget -c http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8-current.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Compilando o Asterisk 1.8====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar zxvf asterisk-1.8-current.tar.gz&lt;br /&gt;
cd asterisk-1.8-current.tar.gz&lt;br /&gt;
./configure  --disable-xmldoc&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make samples&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Após a instalação , abra o arquivo /etc/asterisk/sip.conf, localize a linha '''udpbindaddr=0.0.0.0''' e altere para '''udpbindaddr=0.0.0.0:5090'''  , depois ao fim do arquivo adicione.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
type=peer&lt;br /&gt;
host=10.254.254.6&lt;br /&gt;
port=5060&lt;br /&gt;
qualify=yes&lt;br /&gt;
context=opensips&lt;br /&gt;
insecure=port,invite&lt;br /&gt;
canreinvite=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora abra o arquivo '''/etc/asterisk/extensions.conf''' , crie no fim do arquivo a seguinte entrada.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _kb-1XX,1,NoOp(CHAMADA INTERNA - FAZER BRIDGE - ${CALLERID(num)} ${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Dial(SIP/opensips/${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Goto(opensips,vm-${EXTEN:3},1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vm-1XX,1,NoOp(CHAMADA PARA VOICEMAIL)&lt;br /&gt;
same =&amp;gt; n,Voicemail(${EXTEN:3}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vma-1XX,1,NoOp(CHAMADA PARA VOICEMAIL - ADMINISTRATIVO)&lt;br /&gt;
same =&amp;gt; n,VoicemailMain(${EXTEN:4}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _3[01]XX,1,NoOp(CHAMADA PARA CONFERENCIA)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,ConfBridge(${EXTEN},cM1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _00.,1,NoOp(CHAMADA PARA PSTN)&lt;br /&gt;
same =&amp;gt; n,Wait(2)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,Wait(1)&lt;br /&gt;
same =&amp;gt; n,PlayBack(tt-monkeys)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; h,1,Hangup()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finalmente precisamos criar as entradas do voicemail, para isso altere o arquivo '''/etc/asterisk/voicemail.conf''' localize o contexto '''[default]''' e então adicione as entradas para seu voicemail, segue dois exemplos abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
101 =&amp;gt; 123123,Mike Tesliuk&lt;br /&gt;
102 =&amp;gt; 123123,Mike Tesliuk 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Feito isso, faça um restart no asterisk&lt;br /&gt;
 /etc/init.d/asterisk restart&lt;br /&gt;
&lt;br /&gt;
Agora você ja poderá fazer os testes, basicamente criamos as seguintes situações para serem testadas.&lt;br /&gt;
&lt;br /&gt;
*1 Autenticação de usuários&lt;br /&gt;
*2 Chamada entre usuários&lt;br /&gt;
*3 Encaminhamento para caixa postal&lt;br /&gt;
*4 Acesso a caixa postal&lt;br /&gt;
*5 Acesso a conferência&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1398</id>
		<title>OpenSIPs e Asterisk - LIKE CentOS</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1398"/>
		<updated>2013-08-27T21:51:25Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: /* Preparando a Configuração */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=white&amp;gt; NÃO SIGA ESTE DOCUMENTO. O MESMO SE ENCONTRA EM DESEVOLVIMENTO&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este tutorial é baseado em um tutorial originalmente escrito pelo Mike, se quiser verificar o tutorial original acesse http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk&lt;br /&gt;
&lt;br /&gt;
Para esta implementação utilizamos CentOS 6.4 64 Bits , OpenSIPS 1.9 e Asterisk 1.8.23 &lt;br /&gt;
&lt;br /&gt;
==Funcionalidades==&lt;br /&gt;
Este tutorial tem por objetivo atingir as seguintes funcionalidades.&lt;br /&gt;
*Autenticação de usuário&lt;br /&gt;
*Registro de usuário&lt;br /&gt;
*Localização de usuário (encaminhamento de chamadas)&lt;br /&gt;
*Roteamento de chamadas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Através do Asterisk estenderemos estas funcionalidades agregando.&lt;br /&gt;
*Correio de voz (Voicemail)&lt;br /&gt;
*Conferencia &lt;br /&gt;
*SBC ( Pode ser utilizado para transcoding, esconder topologia, play de mensagens e tarifação )&lt;br /&gt;
*Outros serviços de media (Anuncios, Ura's e coisas do tipo)&lt;br /&gt;
&lt;br /&gt;
==Definições==&lt;br /&gt;
Para um melhor entendimento da solução vamos expor aqui algumas definições de nosso sistema.&lt;br /&gt;
*Usuários locais terão ramais com 3 digitos (ex: 101, 102, 103)&lt;br /&gt;
*Identidade do correio de voz será o mesmo do ramal&lt;br /&gt;
*Serviços de media (acesso a voicemail e outros) receberão rotas de 4 digitos&lt;br /&gt;
*Opensips e Asterisk utilizarão o mesmo servidor (Neste caso IP: 10.254.254.6)&lt;br /&gt;
*Os serviços rodarão nas portas 5060 (opensips) , 5090 (Asterisk)&lt;br /&gt;
&lt;br /&gt;
==Funcionamento==&lt;br /&gt;
A autenticação do usuário será realizada pelo OpenSIPs, quando uma chamada é autenticada então ela serguirá:&lt;br /&gt;
*Se o usuário de destino não está online a chamada será enviada para o Asterisk para função de correio de voz&lt;br /&gt;
*Se o usuário está online a chamada será encaminhada para o Asterisk, dest forma é possivel acionar funcionalidades como anuncios, definição de tempo de chamada, forçar codecs e outras funcionalidades.&lt;br /&gt;
*Asterisk envia a chamada novamente para o OpenSIPs que verificará no location e entregará a chamada para o usuário.&lt;br /&gt;
*Se a chamada não for atendida o Opensips irá re-encaminhar para o Asterisk direcionando para função de voicemail&lt;br /&gt;
&lt;br /&gt;
==OpenSIPs==&lt;br /&gt;
Vamos iniciar o processo de instalação com o OpenSIPs, siga os procedimentos abaixo para evitar qualquer dificuldade.&lt;br /&gt;
&lt;br /&gt;
===Dependencias===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====Atualizando o sistema====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum -y update&lt;br /&gt;
yum -y upgrade&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pacotes de desenvolvimento ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall 'Development Tools' -y&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
yum install wget mysql-server pcre-devel libxml2-devel xmlrpc-c-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Desabilitando o SELINUX ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/bin/sed -i -e s,'SELINUX=enforcing','SELINUX=disabled', /etc/selinux/config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durante a instalação o sistema irá lhe perguntar a senha de root para o servidor MySQL é importante que você se lembre da mesma posteriormente pois utilizaremos a mesma.&lt;br /&gt;
&lt;br /&gt;
===Compilando o OpenSIPs===&lt;br /&gt;
Para manter um padrão onde os dados estao vamos utilizar o diretório /usr/src/ para o download de código fonte.&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/&lt;br /&gt;
 wget -c http://opensips.org/pub/opensips/1.9.1/src/opensips-1.9.1_src.tar.gz&lt;br /&gt;
 tar -xzvf opensips-1.9.1_src.tar.gz&lt;br /&gt;
 cd opensips-1.9.1-tls/&lt;br /&gt;
 make menuconfig&lt;br /&gt;
&lt;br /&gt;
===Preparando a Configuração===&lt;br /&gt;
&lt;br /&gt;
Antes de darmos inicio ao arquivo de configuração, vamos ajustar algumas questões, o opensips instala os arquivos (se voce nao alterar o parametro) em /usr, consequentemente as configurações ficam em /usr/etc , eu por padrão faço um link para o diretório /etc, assim acesso as configurações em /etc/opensips&lt;br /&gt;
&lt;br /&gt;
 ln -s /usr/etc/opensips /etc/&lt;br /&gt;
&lt;br /&gt;
Para o script de inicialização execute o comando abaixo&lt;br /&gt;
 cp packaging/fedora/opensips.init /etc/init.d/opensips&lt;br /&gt;
 chmod +x /etc/init.d/opensips&lt;br /&gt;
 chkconfig --add opensips&lt;br /&gt;
&lt;br /&gt;
 cp packaging/fedora/opensips.sysconfig /etc/sysconfig&lt;br /&gt;
&lt;br /&gt;
 groupadd opensips&lt;br /&gt;
 mkdir /var/run/opensips&lt;br /&gt;
 useradd -d /var/run/opensips/ -s /bin/false -g opensips opensips&lt;br /&gt;
 chown -R opensips.opensips /var/run/opensips&lt;br /&gt;
&lt;br /&gt;
===Configurando o opensipsctl===&lt;br /&gt;
O opensipsctl (e opensipsdbctl) utilizam o arquivo de configuração /etc/opensips/opensipsctlrc, abaixo segue o conteúdo do arquivo. (Sugiro que você faça um backup dos arquivos originais para ter uma copia, existem parametros que você pode estudar depois).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DBENGINE=MYSQL&lt;br /&gt;
DBHOST=localhost&lt;br /&gt;
DBNAME=opensips&lt;br /&gt;
DBRWUSER=opensips&lt;br /&gt;
DBRWPW=&amp;quot;opensipsrw&amp;quot;&lt;br /&gt;
SIP_DOMAIN=10.254.254.6  ### caso voce esteja usando outro ip altere aqui&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DBROOTUSER=&amp;quot;root&amp;quot;&lt;br /&gt;
INSTALL_EXTRA_TABLES=ask&lt;br /&gt;
ALIASES_TYPE=&amp;quot;DB&amp;quot;&lt;br /&gt;
MI_CONNECTOR=FIFO:/tmp/opensips_fifo&lt;br /&gt;
# VERIFY_ACL=1&lt;br /&gt;
# ACL_GROUPS=&amp;quot;local ld int voicemail free-pstn&amp;quot;&lt;br /&gt;
# VERBOSE=1&lt;br /&gt;
# STORE_PLAINTEXT_PW=0&lt;br /&gt;
# NOHLPRINT=1&lt;br /&gt;
PID_FILE=/var/run/opensips/opensips.pid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Criando o banco de dados===&lt;br /&gt;
Agora que temos nosso arquivo configurado vamos fazer a criação do banco de dados, execute o comando abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
opensipsdbctl create opensips&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema irá lhe perguntar algumas coisas, responda Y (sim) para todas para que ele instale todas as tabelas, não usaremos todas elas, mas desta forma você fica com praticamente tudo criado para o caso de uma expansão dos recursos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Instalando o RTP Proxy===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/src/&lt;br /&gt;
wget -c http://b2bua.org/chrome/site/rtpproxy-1.2.1.tar.gz&lt;br /&gt;
tar -xzvf rtpproxy-1.2.1.tar.gz&lt;br /&gt;
cd rtpproxy-1.2.1&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
groupadd rtpproxy&lt;br /&gt;
useradd -d /var/run/rtpproxy -s /bin/true -g rtpproxy rtpproxy&lt;br /&gt;
mkdir /var/log/rtpproxy&lt;br /&gt;
mkdir /var/run/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/log/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/run/rtpproxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Arquivo de inicialização====&lt;br /&gt;
'''/etc/init.d/rtpproxy'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# Este script e de autoria de Mike Tesliuk&lt;br /&gt;
# qualquer falha no mesmo por favor informe &lt;br /&gt;
# atraves do email mike (a) tesliuk.com&lt;br /&gt;
#&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:          rtpproxy&lt;br /&gt;
# Required-Start:    $syslog $network $local_fs $time&lt;br /&gt;
# Required-Stop:     $syslog $network $local_fs&lt;br /&gt;
# Default-Start:     2 3 4 5&lt;br /&gt;
# Default-Stop:      0 1 6&lt;br /&gt;
# Short-Description: Start the RTPPROXY server&lt;br /&gt;
# Description:       Start the RTPPROXY server&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin&lt;br /&gt;
USELOG=1&lt;br /&gt;
USER=rtpproxy&lt;br /&gt;
# Altere o ip abaixo para o ip de seu sistema&lt;br /&gt;
IPADDR=&amp;quot;10.254.254.6&amp;quot;&lt;br /&gt;
&lt;br /&gt;
. /lib/lsb/init-functions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
start(){&lt;br /&gt;
        echo &amp;quot;Iniciando RTP PROXY &amp;quot;&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                if [ &amp;quot;${USELOG}&amp;quot; = &amp;quot;1&amp;quot; ]; then&lt;br /&gt;
                        echo &amp;quot;Iniciando com LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER -F -f d DBUG 2&amp;amp;&amp;gt; /var/log/rtpproxy/rtpproxy.log &amp;amp;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Iniciando sem LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER  -F -f d DBUG 2&amp;amp;&amp;gt; /dev/null&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;START OK&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
        else&lt;br /&gt;
                echo &amp;quot;Processo ja em execucao&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
stop(){&lt;br /&gt;
&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                echo &amp;quot;Processo nao encontrado&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
                kill -9 $(pidof rtpproxy)&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;STOP OK&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Falha em realizar stop do servico&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
case $1 in&lt;br /&gt;
        start)&lt;br /&gt;
                start&lt;br /&gt;
        ;;&lt;br /&gt;
        stop)&lt;br /&gt;
                stop&lt;br /&gt;
        ;;&lt;br /&gt;
        restart)&lt;br /&gt;
                stop&lt;br /&gt;
                start&lt;br /&gt;
&lt;br /&gt;
        ;;&lt;br /&gt;
        *)&lt;br /&gt;
                echo &amp;quot;Utilize: stop | start | restart&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos dar permissao e colocar na inicialização&lt;br /&gt;
 chmod +x /etc/init.d/rtpproxy &lt;br /&gt;
 update-rc.d rtpproxy defaults&lt;br /&gt;
 /etc/init.d/rtpproxy start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Criando o arquivo opensips.cfg===&lt;br /&gt;
O arquivo opensips.cfg é a onde a coisa toda acontece para o opensips, claro que ele dependerá de informações que estarão no banco de dados, mas é onde criamos todas as nossas rotas e validações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Este tutorial nao esta terminado, este arquivo ainda esta em testes &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
####### Global Parameters #########&lt;br /&gt;
debug=3&lt;br /&gt;
log_stderror=no&lt;br /&gt;
log_facility=LOG_LOCAL0&lt;br /&gt;
&lt;br /&gt;
fork=yes&lt;br /&gt;
children=4&lt;br /&gt;
&lt;br /&gt;
/* Descomente as linhas abaixo para ativar o debug */&lt;br /&gt;
#debug=7&lt;br /&gt;
#fork=no&lt;br /&gt;
#log_stderror=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Comente a linha abaixo para ativar a descoberta automatica de enderecos locais&lt;br /&gt;
 , isso significa que o sistema ira verificar todos os ips ativos e hosts e entao ativara&lt;br /&gt;
 o protocolo para todos eles */ &lt;br /&gt;
auto_aliases=no&lt;br /&gt;
&lt;br /&gt;
/* Defina aqui o ip a ser utilizado */&lt;br /&gt;
listen=udp:10.254.254.6:5060   # Altere este IP para o seu ambiente&lt;br /&gt;
&lt;br /&gt;
/* Nao usaremos sip por tcp nem tls neste script */&lt;br /&gt;
disable_tcp=yes&lt;br /&gt;
&lt;br /&gt;
disable_tls=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Secao de modulos ########&lt;br /&gt;
&lt;br /&gt;
#set module path&lt;br /&gt;
mpath=&amp;quot;/usr//lib64/opensips/modules/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;signaling.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sl.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;tm.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_timer&amp;quot;, 5)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_inv_timer&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;restart_fr_on_each_reply&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;onreply_avp_mode&amp;quot;, 1)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rr.so&amp;quot;&lt;br /&gt;
/* do not append from tag to the RR (no need for this script) */&lt;br /&gt;
modparam(&amp;quot;rr&amp;quot;, &amp;quot;append_fromtag&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;maxfwd.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sipmsgops.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;mi_fifo.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_name&amp;quot;, &amp;quot;/tmp/opensips_fifo&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_mode&amp;quot;, 0666)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;db_mysql.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;uri.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;uri&amp;quot;, &amp;quot;use_uri_table&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;usrloc.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;nat_bflag&amp;quot;, &amp;quot;FLB_NATB&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_mode&amp;quot;,   2)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;registrar.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;registrar&amp;quot;, &amp;quot;tcp_persistent_flag&amp;quot;, &amp;quot;TCP_PERSISTENT&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
/* Descomente a linha abaixo para nao permitir mais de 10 contatos por conta */&lt;br /&gt;
#modparam(&amp;quot;registrar&amp;quot;, &amp;quot;max_contacts&amp;quot;, 10)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;acc.so&amp;quot;&lt;br /&gt;
/* Quais eventos deverao ser registrados ? */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;early_media&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;report_cancels&amp;quot;, 0)&lt;br /&gt;
/* por padrao nos nao ajustamos a direcao em requisicoes sequencias, &lt;br /&gt;
 se voce deseja usar este recurso tenha certeza de ativar o &amp;quot;appen_fromtag&amp;quot; &lt;br /&gt;
 para o modulo &amp;quot;rr&amp;quot; */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;detect_direction&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;failed_transaction_flag&amp;quot;, &amp;quot;FLT_ACCFAILED&amp;quot;)&lt;br /&gt;
/* Gatilhos para accounting  (flags) */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_extra&amp;quot;, &lt;br /&gt;
	&amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_extra&amp;quot;, &amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;auth.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;auth_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;calculate_ha1&amp;quot;, yes)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;password_column&amp;quot;, &amp;quot;password&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;load_credentials&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;permissions.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;permissions&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;alias_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;alias_db&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;presence.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;presence&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
#loadmodule &amp;quot;presence_xml.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;dialog.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_mode&amp;quot;, 2)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_url&amp;quot;,&amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;dlg_match_mode&amp;quot;, 1)&lt;br /&gt;
#modparam(&amp;quot;dialog&amp;quot;, &amp;quot;default_timeout&amp;quot;, 60)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;siptrace.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;trace_flag&amp;quot;, 22)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;traced_user_avp&amp;quot;, &amp;quot;$avp(s:traceuser)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;nathelper.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;natping_interval&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;ping_nated_only&amp;quot;, 1)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_bflag&amp;quot;, &amp;quot;FLB_NATSIPPING&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_from&amp;quot;, &amp;quot;sip:pinger@10.254.254.6&amp;quot;) # Altere o ip para o ip do servidor&lt;br /&gt;
modparam(&amp;quot;nathelper|registrar&amp;quot;, &amp;quot;received_avp&amp;quot;, &amp;quot;$avp(RECEIVED)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rtpproxy.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;rtpproxy&amp;quot;, &amp;quot;rtpproxy_sock&amp;quot;, &amp;quot;udp:127.0.0.1:7722&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Logica de roteamento ########&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route {&lt;br /&gt;
&lt;br /&gt;
	if (!mf_process_maxfwd_header(&amp;quot;3&amp;quot;)) {&lt;br /&gt;
                send_reply(&amp;quot;483&amp;quot;,&amp;quot;looping&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;REQUISICAO RECEBIDA, ENVIANDO PARA REQINIT&amp;quot;);&lt;br /&gt;
	# Checagem inicial por requisicao&lt;br /&gt;
	route(REQINIT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA NAT&amp;quot;);&lt;br /&gt;
	# Deteccao de nat&lt;br /&gt;
	route(NAT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA WITHINDLG&amp;quot;);&lt;br /&gt;
	# Gerenciando requisicaoes com dialog&lt;br /&gt;
	route(WITHINDLG);&lt;br /&gt;
&lt;br /&gt;
	# Manipulando requisicoes iniciais (nao consta To tag)&lt;br /&gt;
	&lt;br /&gt;
	# Processando CANCEL&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;CANCEL&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD CANCEL&amp;quot;);&lt;br /&gt;
		if(t_check_trans()){&lt;br /&gt;
			t_relay();&lt;br /&gt;
		}&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	t_check_trans();&lt;br /&gt;
&lt;br /&gt;
	# Enviando para autenticacao&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA AUTENTICACAO&amp;quot;);&lt;br /&gt;
	route(AUTH);&lt;br /&gt;
&lt;br /&gt;
	# gravando rota para formacao dos dialogs (caso sejam roteados)&lt;br /&gt;
	# removemos qualquer cabecalho de rota pre carregado&lt;br /&gt;
	remove_hf(&amp;quot;Route&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE OU SIBSCRIBE&amp;quot;);&lt;br /&gt;
		record_route();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Contabilizando (acc) INVITES&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE, FAZENDOA ACC&amp;quot;);&lt;br /&gt;
		setflag(FLT_ACC);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando chamada para destinos externos&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA SIPOUT&amp;quot;);&lt;br /&gt;
	route(SIPOUT);&lt;br /&gt;
&lt;br /&gt;
	# Requisicoes para dominio local&lt;br /&gt;
	&lt;br /&gt;
	# Roteando requisicoes de PRESENCE&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PRESENCE&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	route(PRESENCE);&lt;br /&gt;
&lt;br /&gt;
	# Gerenciando pedidos de registro&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA REGISTRAR&amp;quot;);	&lt;br /&gt;
	route(REGISTRAR);&lt;br /&gt;
&lt;br /&gt;
	if($ru==&amp;quot;&amp;quot;){&lt;br /&gt;
		xlog(&amp;quot;ru --&amp;gt; vazio&amp;quot;);&lt;br /&gt;
		# Requisicao sem usuario na RURI&lt;br /&gt;
		sl_send_reply(&amp;quot;484&amp;quot;, &amp;quot;Address Incomplete&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando requisicao para PSTN&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PSTN&amp;quot;);&lt;br /&gt;
	route(PSTN);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Salvando informacao de quem originou a chamad&lt;br /&gt;
	$avp(callee)=$rU;&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA DISPATCH PSTN&amp;quot;);&lt;br /&gt;
	route(FSDISPATCH);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	# Servico de localizacao de usuario&lt;br /&gt;
	route(LOCATION);&lt;br /&gt;
&lt;br /&gt;
	# Efetuando o relay (encaminhamento)&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[RELAY] {&lt;br /&gt;
	if(check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
		setbflag(FLB_NATB);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(isflagset(FLT_NATS) || isbflagset(FLB_NATB)){&lt;br /&gt;
		#route(RTPPROXY);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
#		t_on_reply(&amp;quot;REPLY_ONE&amp;quot;);&lt;br /&gt;
#		t_on_failure(&amp;quot;FAIL_ONE&amp;quot;);&lt;br /&gt;
#	}&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;AQUI TENTAMOS ENVIAR A CHAMADA $fU $tU&amp;quot;);&lt;br /&gt;
	if(!t_relay()){&lt;br /&gt;
		xlog(&amp;quot;FALHA EM ENVIAR A CHAMADA, NAO FOI POSSIVEL FAZER O RELAY&amp;quot;);&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
	}&lt;br /&gt;
	xlog(&amp;quot;CHAMADA FOI ENVIADA AQUI, QUAL O ERRO ENTAO&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REQINIT] {&lt;br /&gt;
	if(!mf_process_maxfwd_header(&amp;quot;10&amp;quot;)){&lt;br /&gt;
		sl_send_reply(&amp;quot;483&amp;quot;, &amp;quot;Too Many Hops&amp;quot;);&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[WITHINDLG] {&lt;br /&gt;
	if(has_totag()){&lt;br /&gt;
		if(loose_route()){&lt;br /&gt;
			if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
				setflag(FLT_ACC);&lt;br /&gt;
				setflag(FLT_ACCFAILED);&lt;br /&gt;
			}&lt;br /&gt;
			route(RELAY);&lt;br /&gt;
		}else{&lt;br /&gt;
			if(is_method(&amp;quot;SUBSCRIBE&amp;quot;) &amp;amp;&amp;amp; uri==myself) {&lt;br /&gt;
				# requisicao de subscribe pre-estabelecida&lt;br /&gt;
				route(PRESENCE);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;ACK&amp;quot;)){&lt;br /&gt;
				if(t_check_trans()){&lt;br /&gt;
					t_relay();&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}else{&lt;br /&gt;
				# ACK para transacao nao encontrada, ignoramos...&lt;br /&gt;
				exit;&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			sl_send_reply(&amp;quot;404&amp;quot;, &amp;quot;Not Here&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		}	&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REGISTRAR] {&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		if(isflagset(FLT_NATS)){&lt;br /&gt;
			setbflag(FLB_NATB);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(!save(&amp;quot;location&amp;quot;)){&lt;br /&gt;
			sl_reply_error();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[LOCATION] {&lt;br /&gt;
&lt;br /&gt;
	alias_db_lookup(&amp;quot;dbaliases&amp;quot;);&lt;br /&gt;
	if(!lookup(&amp;quot;location&amp;quot;)){&lt;br /&gt;
		switch($rc) {&lt;br /&gt;
			case -1:&lt;br /&gt;
			case -3:&lt;br /&gt;
				t_newtran();&lt;br /&gt;
				t_reply(&amp;quot;404&amp;quot;,&amp;quot;Not Found&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			case -2:&lt;br /&gt;
				sl_send_reply(&amp;quot;405&amp;quot;, &amp;quot;Method Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		setflag(FLT_ACCMISSED);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PRESENCE] {&lt;br /&gt;
	if(!is_method(&amp;quot;PUBLISH|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!t_newtran()){&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
		handle_publish();&lt;br /&gt;
	}else if(is_method(&amp;quot;SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		handle_subscribe();&lt;br /&gt;
	}&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[AUTH]{&lt;br /&gt;
	xlog(&amp;quot;PEDIDO DE AUTENTICACAO&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		# atentica pedidos de registro&lt;br /&gt;
		if(!www_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
			www_challenge(&amp;quot;&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if($au!=$tU){&lt;br /&gt;
			sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	}else{&lt;br /&gt;
		if(route(FSINBOUND)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(check_source_address(&amp;quot;0&amp;quot;)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(from_uri==myself){&lt;br /&gt;
			if(!proxy_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
				proxy_challenge(&amp;quot;&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
				if($au!=$tU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}else{&lt;br /&gt;
				if($au!=$fU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			# Validamos (autenticamos) o usuario&lt;br /&gt;
			consume_credentials();&lt;br /&gt;
		}else{&lt;br /&gt;
		&lt;br /&gt;
			# usuario nao e local, vamos negar&lt;br /&gt;
			if(!uri==myself){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not relaying&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}	&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[NAT] {&lt;br /&gt;
	force_rport();&lt;br /&gt;
	if(nat_uac_test(&amp;quot;19&amp;quot;)){&lt;br /&gt;
		if(method==&amp;quot;REGISTER&amp;quot;){&lt;br /&gt;
			fix_nated_register();&lt;br /&gt;
		}else{&lt;br /&gt;
			fix_nated_contact();&lt;br /&gt;
		}&lt;br /&gt;
		setflag(FLT_NATS);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[RTPPROXY] {&lt;br /&gt;
	if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}else if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		engage_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!has_totag()){&lt;br /&gt;
&lt;br /&gt;
		if(!check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
			add_rr_param(&amp;quot;;nat=yes&amp;quot;);&lt;br /&gt;
			xlog(&amp;quot;NAT yes NAO ENCONTRADO&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[SIPOUT]{&lt;br /&gt;
	if(!uri==myself){&lt;br /&gt;
		append_hf(&amp;quot;P-hint: outbound\r\n&amp;quot;);&lt;br /&gt;
		route(RELAY);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PSTN]{&lt;br /&gt;
        # neste caso apenas para exemplificar um uso simples&lt;br /&gt;
        # vamos fazer o redirecionamento par ao asterisk&lt;br /&gt;
        # realizar a dicagem da chamada&lt;br /&gt;
&lt;br /&gt;
        if(!($rU=~&amp;quot;^(\+|00)[1-9][0-9]{3,20}$&amp;quot;))&lt;br /&gt;
                return;&lt;br /&gt;
&lt;br /&gt;
        ## a regra acima aceita para discagem externa qualquer numero&lt;br /&gt;
        # comecado com 00 ou +&lt;br /&gt;
        #&lt;br /&gt;
&lt;br /&gt;
        if(from_uri!=myself){&lt;br /&gt;
                sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $ru = &amp;quot;sip:&amp;quot; + $rU + &amp;quot;@&amp;quot; + &amp;quot;10.254.254.6:5090&amp;quot;;&lt;br /&gt;
        xlog(&amp;quot;NOVO DESTINO: $ru&amp;quot;);&lt;br /&gt;
        route(RELAY);&lt;br /&gt;
        exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[XMLRPC]{&lt;br /&gt;
	# nao vamos implementar esta funcionalidade&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSINBOUND] {&lt;br /&gt;
	# verificar para validar o ip do asterisk:porta&lt;br /&gt;
	# se bater , responder com return 1;&lt;br /&gt;
	if($si==&amp;quot;10.254.254.6&amp;quot; &amp;amp;&amp;amp; $sp==&amp;quot;5090&amp;quot;){&lt;br /&gt;
		return(1);&lt;br /&gt;
	}else{&lt;br /&gt;
		return(-1);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSDISPATCH] {&lt;br /&gt;
&lt;br /&gt;
	if(!is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(route(FSINBOUND)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;CAIMOS NO SWITCH, VAMOS LOCALIZAR O PERFIL DA CHAMADA $rU&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if($rU =~ &amp;quot;^41$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH expressa comeca e termina em 41&amp;quot;);&lt;br /&gt;
			#regra de menu de voicemail, apenas &lt;br /&gt;
			# usuarios autenticados&lt;br /&gt;
			if($au==&amp;quot;&amp;quot;){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$rU = &amp;quot;vma-&amp;quot; + $au;&lt;br /&gt;
	}else if($rU =~ &amp;quot;^441[0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCA 441XX &amp;quot;);&lt;br /&gt;
			# numero discado comeca com 441 seguido de dois digitos&lt;br /&gt;
			# chamada direta para inbox do voicemail&lt;br /&gt;
			strip(2);&lt;br /&gt;
			route(FSVBOX);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^433[01][0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH OPCAO 433[01]XX&amp;quot;);&lt;br /&gt;
			# numero comecado em 443, seguido de 0 ou 1, mais dois digitos&lt;br /&gt;
			# sistema de conferencia&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^45[0-9]+$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCAO 45X.&amp;quot;);&lt;br /&gt;
			#numero comecado com 45, seguindo de numeros;&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else{&lt;br /&gt;
			xlog(&amp;quot;OPCAO DEFAULT DO SWITCH&amp;quot;);&lt;br /&gt;
			# usuario offline, enviando para voicemail&lt;br /&gt;
			if(!registered(&amp;quot;location&amp;quot;)){&lt;br /&gt;
				route(FSVBOX);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			# usuario online, fazendo bridging&lt;br /&gt;
			xlog(&amp;quot;USUARIO ESTA ONLINE VAMOS FAZER BRIDGE&amp;quot;);&lt;br /&gt;
			prefix(&amp;quot;kb-&amp;quot;);&lt;br /&gt;
			if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
				t_on_failure(&amp;quot;FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
	}&lt;br /&gt;
	route(FSRELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSVBOX&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($rU =~ &amp;quot;^441[0-9][0-9]&amp;quot;){&lt;br /&gt;
		strip(2);&lt;br /&gt;
	}&lt;br /&gt;
	prefix(&amp;quot;vm-&amp;quot;);&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[FSRELAY] {&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSRELAY&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
branch_route[BRANCH_ONE]{&lt;br /&gt;
	xlog(&amp;quot;new branch at $ru&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
onreply_route[REPLY_ONE]{&lt;br /&gt;
	xlog(&amp;quot;Incoming reply&amp;quot;);&lt;br /&gt;
	if((isflagset(FLT_NATS) || isbflagset(FLB_NATB) &amp;amp;&amp;amp; status =~ &amp;quot;(183)|(2[0-9][0-9])&amp;quot;)){&lt;br /&gt;
		#rtpproxy_offer();&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	if(isbflagset(FLB_NATB)){&lt;br /&gt;
		fix_nated_contact();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_ONE]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_ONE&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_check_status(&amp;quot;486|408|480&amp;quot;)){&lt;br /&gt;
		$rU = $avp(callee);&lt;br /&gt;
		$var(newbranch) = 1;&lt;br /&gt;
		route(FSVBOX);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testes com Opensips (registro)==&lt;br /&gt;
&lt;br /&gt;
Antes de podermos testar precisamos iniciar o serviço, no momento estamos com ele operando em modo debug, então a inicialização deve ser realizada com o comando abaixo&lt;br /&gt;
 /etc/init.d/opensips debug&lt;br /&gt;
&lt;br /&gt;
Abra uma nova sessão no servidor e então vamos criar os usuários&lt;br /&gt;
 opensipsctl add 101 101&lt;br /&gt;
 opensipsctl add 102 102&lt;br /&gt;
 opensipsctl add 103 103&lt;br /&gt;
&lt;br /&gt;
usuario 101 com senha 101 e assim por diante&lt;br /&gt;
&lt;br /&gt;
Faça a onexão com seu softphone, aqui para testes utilizei o jitsi e o zoiper, neste momento vamos apenas fazer o registro do usuário para testar a autenticação, se você tentar realizar uma discagem não funcionará pois neste caso o processo depende do Asterisk que ainda não está configurado, vamos dar inicio nesta configuração agora.&lt;br /&gt;
&lt;br /&gt;
==Asterisk==&lt;br /&gt;
Não vamos dar muitos detalhes da instalação do asterisk aqui, a ideia é simplesmente ter o mesmo funcionando da forma que necessitamos.&lt;br /&gt;
&lt;br /&gt;
===Instalando dependências===&lt;br /&gt;
&lt;br /&gt;
Dependências necessárias para a instalação do Asterisk.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Asterisk 1.8===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget -c http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8-current.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Compilando o Asterisk 1.8====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar zxvf asterisk-1.8-current.tar.gz&lt;br /&gt;
cd asterisk-1.8-current.tar.gz&lt;br /&gt;
./configure  --disable-xmldoc&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make samples&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Após a instalação , abra o arquivo /etc/asterisk/sip.conf, localize a linha '''udpbindaddr=0.0.0.0''' e altere para '''udpbindaddr=0.0.0.0:5090'''  , depois ao fim do arquivo adicione.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
type=peer&lt;br /&gt;
host=10.254.254.6&lt;br /&gt;
port=5060&lt;br /&gt;
qualify=yes&lt;br /&gt;
context=opensips&lt;br /&gt;
insecure=port,invite&lt;br /&gt;
canreinvite=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora abra o arquivo '''/etc/asterisk/extensions.conf''' , crie no fim do arquivo a seguinte entrada.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _kb-1XX,1,NoOp(CHAMADA INTERNA - FAZER BRIDGE - ${CALLERID(num)} ${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Dial(SIP/opensips/${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Goto(opensips,vm-${EXTEN:3},1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vm-1XX,1,NoOp(CHAMADA PARA VOICEMAIL)&lt;br /&gt;
same =&amp;gt; n,Voicemail(${EXTEN:3}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vma-1XX,1,NoOp(CHAMADA PARA VOICEMAIL - ADMINISTRATIVO)&lt;br /&gt;
same =&amp;gt; n,VoicemailMain(${EXTEN:4}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _3[01]XX,1,NoOp(CHAMADA PARA CONFERENCIA)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,ConfBridge(${EXTEN},cM1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _00.,1,NoOp(CHAMADA PARA PSTN)&lt;br /&gt;
same =&amp;gt; n,Wait(2)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,Wait(1)&lt;br /&gt;
same =&amp;gt; n,PlayBack(tt-monkeys)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; h,1,Hangup()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finalmente precisamos criar as entradas do voicemail, para isso altere o arquivo '''/etc/asterisk/voicemail.conf''' localize o contexto '''[default]''' e então adicione as entradas para seu voicemail, segue dois exemplos abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
101 =&amp;gt; 123123,Mike Tesliuk&lt;br /&gt;
102 =&amp;gt; 123123,Mike Tesliuk 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Feito isso, faça um restart no asterisk&lt;br /&gt;
 /etc/init.d/asterisk restart&lt;br /&gt;
&lt;br /&gt;
Agora você ja poderá fazer os testes, basicamente criamos as seguintes situações para serem testadas.&lt;br /&gt;
&lt;br /&gt;
*1 Autenticação de usuários&lt;br /&gt;
*2 Chamada entre usuários&lt;br /&gt;
*3 Encaminhamento para caixa postal&lt;br /&gt;
*4 Acesso a caixa postal&lt;br /&gt;
*5 Acesso a conferência&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1397</id>
		<title>OpenSIPs e Asterisk - LIKE CentOS</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1397"/>
		<updated>2013-08-27T21:50:29Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: /* Preparando a Configuração */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=white&amp;gt; NÃO SIGA ESTE DOCUMENTO. O MESMO SE ENCONTRA EM DESEVOLVIMENTO&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este tutorial é baseado em um tutorial originalmente escrito pelo Mike, se quiser verificar o tutorial original acesse http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk&lt;br /&gt;
&lt;br /&gt;
Para esta implementação utilizamos CentOS 6.4 64 Bits , OpenSIPS 1.9 e Asterisk 1.8.23 &lt;br /&gt;
&lt;br /&gt;
==Funcionalidades==&lt;br /&gt;
Este tutorial tem por objetivo atingir as seguintes funcionalidades.&lt;br /&gt;
*Autenticação de usuário&lt;br /&gt;
*Registro de usuário&lt;br /&gt;
*Localização de usuário (encaminhamento de chamadas)&lt;br /&gt;
*Roteamento de chamadas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Através do Asterisk estenderemos estas funcionalidades agregando.&lt;br /&gt;
*Correio de voz (Voicemail)&lt;br /&gt;
*Conferencia &lt;br /&gt;
*SBC ( Pode ser utilizado para transcoding, esconder topologia, play de mensagens e tarifação )&lt;br /&gt;
*Outros serviços de media (Anuncios, Ura's e coisas do tipo)&lt;br /&gt;
&lt;br /&gt;
==Definições==&lt;br /&gt;
Para um melhor entendimento da solução vamos expor aqui algumas definições de nosso sistema.&lt;br /&gt;
*Usuários locais terão ramais com 3 digitos (ex: 101, 102, 103)&lt;br /&gt;
*Identidade do correio de voz será o mesmo do ramal&lt;br /&gt;
*Serviços de media (acesso a voicemail e outros) receberão rotas de 4 digitos&lt;br /&gt;
*Opensips e Asterisk utilizarão o mesmo servidor (Neste caso IP: 10.254.254.6)&lt;br /&gt;
*Os serviços rodarão nas portas 5060 (opensips) , 5090 (Asterisk)&lt;br /&gt;
&lt;br /&gt;
==Funcionamento==&lt;br /&gt;
A autenticação do usuário será realizada pelo OpenSIPs, quando uma chamada é autenticada então ela serguirá:&lt;br /&gt;
*Se o usuário de destino não está online a chamada será enviada para o Asterisk para função de correio de voz&lt;br /&gt;
*Se o usuário está online a chamada será encaminhada para o Asterisk, dest forma é possivel acionar funcionalidades como anuncios, definição de tempo de chamada, forçar codecs e outras funcionalidades.&lt;br /&gt;
*Asterisk envia a chamada novamente para o OpenSIPs que verificará no location e entregará a chamada para o usuário.&lt;br /&gt;
*Se a chamada não for atendida o Opensips irá re-encaminhar para o Asterisk direcionando para função de voicemail&lt;br /&gt;
&lt;br /&gt;
==OpenSIPs==&lt;br /&gt;
Vamos iniciar o processo de instalação com o OpenSIPs, siga os procedimentos abaixo para evitar qualquer dificuldade.&lt;br /&gt;
&lt;br /&gt;
===Dependencias===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====Atualizando o sistema====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum -y update&lt;br /&gt;
yum -y upgrade&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pacotes de desenvolvimento ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall 'Development Tools' -y&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
yum install wget mysql-server pcre-devel libxml2-devel xmlrpc-c-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Desabilitando o SELINUX ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/bin/sed -i -e s,'SELINUX=enforcing','SELINUX=disabled', /etc/selinux/config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durante a instalação o sistema irá lhe perguntar a senha de root para o servidor MySQL é importante que você se lembre da mesma posteriormente pois utilizaremos a mesma.&lt;br /&gt;
&lt;br /&gt;
===Compilando o OpenSIPs===&lt;br /&gt;
Para manter um padrão onde os dados estao vamos utilizar o diretório /usr/src/ para o download de código fonte.&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/&lt;br /&gt;
 wget -c http://opensips.org/pub/opensips/1.9.1/src/opensips-1.9.1_src.tar.gz&lt;br /&gt;
 tar -xzvf opensips-1.9.1_src.tar.gz&lt;br /&gt;
 cd opensips-1.9.1-tls/&lt;br /&gt;
 make menuconfig&lt;br /&gt;
&lt;br /&gt;
===Preparando a Configuração===&lt;br /&gt;
&lt;br /&gt;
Antes de darmos inicio ao arquivo de configuração, vamos ajustar algumas questões, o opensips instala os arquivos (se voce nao alterar o parametro) em /usr, consequentemente as configurações ficam em /usr/etc , eu por padrão faço um link para o diretório /etc, assim acesso as configurações em /etc/opensips&lt;br /&gt;
&lt;br /&gt;
 ln -s /usr/etc/opensips /etc/&lt;br /&gt;
&lt;br /&gt;
No caso do debian o script de inicialização utiliza um arquivo extra de configuração&lt;br /&gt;
 cp packaging/debian/opensips.default /etc/default/opensips&lt;br /&gt;
&lt;br /&gt;
Para o script de inicialização execute o comando abaixo&lt;br /&gt;
 cp packaging/fedora/opensips.init /etc/init.d/opensips&lt;br /&gt;
 chmod +x /etc/init.d/opensips&lt;br /&gt;
 chkconfig --add opensips&lt;br /&gt;
&lt;br /&gt;
 cp packaging/fedora/opensips.sysconfig /etc/sysconfig&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 groupadd opensips&lt;br /&gt;
 mkdir /var/run/opensips&lt;br /&gt;
 useradd -d /var/run/opensips/ -s /bin/false -g opensips opensips&lt;br /&gt;
 chown -R opensips.opensips /var/run/opensips&lt;br /&gt;
&lt;br /&gt;
===Configurando o opensipsctl===&lt;br /&gt;
O opensipsctl (e opensipsdbctl) utilizam o arquivo de configuração /etc/opensips/opensipsctlrc, abaixo segue o conteúdo do arquivo. (Sugiro que você faça um backup dos arquivos originais para ter uma copia, existem parametros que você pode estudar depois).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DBENGINE=MYSQL&lt;br /&gt;
DBHOST=localhost&lt;br /&gt;
DBNAME=opensips&lt;br /&gt;
DBRWUSER=opensips&lt;br /&gt;
DBRWPW=&amp;quot;opensipsrw&amp;quot;&lt;br /&gt;
SIP_DOMAIN=10.254.254.6  ### caso voce esteja usando outro ip altere aqui&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DBROOTUSER=&amp;quot;root&amp;quot;&lt;br /&gt;
INSTALL_EXTRA_TABLES=ask&lt;br /&gt;
ALIASES_TYPE=&amp;quot;DB&amp;quot;&lt;br /&gt;
MI_CONNECTOR=FIFO:/tmp/opensips_fifo&lt;br /&gt;
# VERIFY_ACL=1&lt;br /&gt;
# ACL_GROUPS=&amp;quot;local ld int voicemail free-pstn&amp;quot;&lt;br /&gt;
# VERBOSE=1&lt;br /&gt;
# STORE_PLAINTEXT_PW=0&lt;br /&gt;
# NOHLPRINT=1&lt;br /&gt;
PID_FILE=/var/run/opensips/opensips.pid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Criando o banco de dados===&lt;br /&gt;
Agora que temos nosso arquivo configurado vamos fazer a criação do banco de dados, execute o comando abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
opensipsdbctl create opensips&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema irá lhe perguntar algumas coisas, responda Y (sim) para todas para que ele instale todas as tabelas, não usaremos todas elas, mas desta forma você fica com praticamente tudo criado para o caso de uma expansão dos recursos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Instalando o RTP Proxy===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/src/&lt;br /&gt;
wget -c http://b2bua.org/chrome/site/rtpproxy-1.2.1.tar.gz&lt;br /&gt;
tar -xzvf rtpproxy-1.2.1.tar.gz&lt;br /&gt;
cd rtpproxy-1.2.1&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
groupadd rtpproxy&lt;br /&gt;
useradd -d /var/run/rtpproxy -s /bin/true -g rtpproxy rtpproxy&lt;br /&gt;
mkdir /var/log/rtpproxy&lt;br /&gt;
mkdir /var/run/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/log/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/run/rtpproxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Arquivo de inicialização====&lt;br /&gt;
'''/etc/init.d/rtpproxy'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# Este script e de autoria de Mike Tesliuk&lt;br /&gt;
# qualquer falha no mesmo por favor informe &lt;br /&gt;
# atraves do email mike (a) tesliuk.com&lt;br /&gt;
#&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:          rtpproxy&lt;br /&gt;
# Required-Start:    $syslog $network $local_fs $time&lt;br /&gt;
# Required-Stop:     $syslog $network $local_fs&lt;br /&gt;
# Default-Start:     2 3 4 5&lt;br /&gt;
# Default-Stop:      0 1 6&lt;br /&gt;
# Short-Description: Start the RTPPROXY server&lt;br /&gt;
# Description:       Start the RTPPROXY server&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin&lt;br /&gt;
USELOG=1&lt;br /&gt;
USER=rtpproxy&lt;br /&gt;
# Altere o ip abaixo para o ip de seu sistema&lt;br /&gt;
IPADDR=&amp;quot;10.254.254.6&amp;quot;&lt;br /&gt;
&lt;br /&gt;
. /lib/lsb/init-functions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
start(){&lt;br /&gt;
        echo &amp;quot;Iniciando RTP PROXY &amp;quot;&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                if [ &amp;quot;${USELOG}&amp;quot; = &amp;quot;1&amp;quot; ]; then&lt;br /&gt;
                        echo &amp;quot;Iniciando com LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER -F -f d DBUG 2&amp;amp;&amp;gt; /var/log/rtpproxy/rtpproxy.log &amp;amp;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Iniciando sem LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER  -F -f d DBUG 2&amp;amp;&amp;gt; /dev/null&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;START OK&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
        else&lt;br /&gt;
                echo &amp;quot;Processo ja em execucao&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
stop(){&lt;br /&gt;
&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                echo &amp;quot;Processo nao encontrado&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
                kill -9 $(pidof rtpproxy)&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;STOP OK&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Falha em realizar stop do servico&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
case $1 in&lt;br /&gt;
        start)&lt;br /&gt;
                start&lt;br /&gt;
        ;;&lt;br /&gt;
        stop)&lt;br /&gt;
                stop&lt;br /&gt;
        ;;&lt;br /&gt;
        restart)&lt;br /&gt;
                stop&lt;br /&gt;
                start&lt;br /&gt;
&lt;br /&gt;
        ;;&lt;br /&gt;
        *)&lt;br /&gt;
                echo &amp;quot;Utilize: stop | start | restart&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos dar permissao e colocar na inicialização&lt;br /&gt;
 chmod +x /etc/init.d/rtpproxy &lt;br /&gt;
 update-rc.d rtpproxy defaults&lt;br /&gt;
 /etc/init.d/rtpproxy start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Criando o arquivo opensips.cfg===&lt;br /&gt;
O arquivo opensips.cfg é a onde a coisa toda acontece para o opensips, claro que ele dependerá de informações que estarão no banco de dados, mas é onde criamos todas as nossas rotas e validações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Este tutorial nao esta terminado, este arquivo ainda esta em testes &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
####### Global Parameters #########&lt;br /&gt;
debug=3&lt;br /&gt;
log_stderror=no&lt;br /&gt;
log_facility=LOG_LOCAL0&lt;br /&gt;
&lt;br /&gt;
fork=yes&lt;br /&gt;
children=4&lt;br /&gt;
&lt;br /&gt;
/* Descomente as linhas abaixo para ativar o debug */&lt;br /&gt;
#debug=7&lt;br /&gt;
#fork=no&lt;br /&gt;
#log_stderror=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Comente a linha abaixo para ativar a descoberta automatica de enderecos locais&lt;br /&gt;
 , isso significa que o sistema ira verificar todos os ips ativos e hosts e entao ativara&lt;br /&gt;
 o protocolo para todos eles */ &lt;br /&gt;
auto_aliases=no&lt;br /&gt;
&lt;br /&gt;
/* Defina aqui o ip a ser utilizado */&lt;br /&gt;
listen=udp:10.254.254.6:5060   # Altere este IP para o seu ambiente&lt;br /&gt;
&lt;br /&gt;
/* Nao usaremos sip por tcp nem tls neste script */&lt;br /&gt;
disable_tcp=yes&lt;br /&gt;
&lt;br /&gt;
disable_tls=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Secao de modulos ########&lt;br /&gt;
&lt;br /&gt;
#set module path&lt;br /&gt;
mpath=&amp;quot;/usr//lib64/opensips/modules/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;signaling.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sl.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;tm.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_timer&amp;quot;, 5)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_inv_timer&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;restart_fr_on_each_reply&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;onreply_avp_mode&amp;quot;, 1)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rr.so&amp;quot;&lt;br /&gt;
/* do not append from tag to the RR (no need for this script) */&lt;br /&gt;
modparam(&amp;quot;rr&amp;quot;, &amp;quot;append_fromtag&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;maxfwd.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sipmsgops.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;mi_fifo.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_name&amp;quot;, &amp;quot;/tmp/opensips_fifo&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_mode&amp;quot;, 0666)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;db_mysql.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;uri.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;uri&amp;quot;, &amp;quot;use_uri_table&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;usrloc.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;nat_bflag&amp;quot;, &amp;quot;FLB_NATB&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_mode&amp;quot;,   2)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;registrar.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;registrar&amp;quot;, &amp;quot;tcp_persistent_flag&amp;quot;, &amp;quot;TCP_PERSISTENT&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
/* Descomente a linha abaixo para nao permitir mais de 10 contatos por conta */&lt;br /&gt;
#modparam(&amp;quot;registrar&amp;quot;, &amp;quot;max_contacts&amp;quot;, 10)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;acc.so&amp;quot;&lt;br /&gt;
/* Quais eventos deverao ser registrados ? */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;early_media&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;report_cancels&amp;quot;, 0)&lt;br /&gt;
/* por padrao nos nao ajustamos a direcao em requisicoes sequencias, &lt;br /&gt;
 se voce deseja usar este recurso tenha certeza de ativar o &amp;quot;appen_fromtag&amp;quot; &lt;br /&gt;
 para o modulo &amp;quot;rr&amp;quot; */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;detect_direction&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;failed_transaction_flag&amp;quot;, &amp;quot;FLT_ACCFAILED&amp;quot;)&lt;br /&gt;
/* Gatilhos para accounting  (flags) */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_extra&amp;quot;, &lt;br /&gt;
	&amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_extra&amp;quot;, &amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;auth.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;auth_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;calculate_ha1&amp;quot;, yes)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;password_column&amp;quot;, &amp;quot;password&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;load_credentials&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;permissions.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;permissions&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;alias_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;alias_db&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;presence.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;presence&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
#loadmodule &amp;quot;presence_xml.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;dialog.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_mode&amp;quot;, 2)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_url&amp;quot;,&amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;dlg_match_mode&amp;quot;, 1)&lt;br /&gt;
#modparam(&amp;quot;dialog&amp;quot;, &amp;quot;default_timeout&amp;quot;, 60)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;siptrace.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;trace_flag&amp;quot;, 22)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;traced_user_avp&amp;quot;, &amp;quot;$avp(s:traceuser)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;nathelper.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;natping_interval&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;ping_nated_only&amp;quot;, 1)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_bflag&amp;quot;, &amp;quot;FLB_NATSIPPING&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_from&amp;quot;, &amp;quot;sip:pinger@10.254.254.6&amp;quot;) # Altere o ip para o ip do servidor&lt;br /&gt;
modparam(&amp;quot;nathelper|registrar&amp;quot;, &amp;quot;received_avp&amp;quot;, &amp;quot;$avp(RECEIVED)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rtpproxy.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;rtpproxy&amp;quot;, &amp;quot;rtpproxy_sock&amp;quot;, &amp;quot;udp:127.0.0.1:7722&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Logica de roteamento ########&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route {&lt;br /&gt;
&lt;br /&gt;
	if (!mf_process_maxfwd_header(&amp;quot;3&amp;quot;)) {&lt;br /&gt;
                send_reply(&amp;quot;483&amp;quot;,&amp;quot;looping&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;REQUISICAO RECEBIDA, ENVIANDO PARA REQINIT&amp;quot;);&lt;br /&gt;
	# Checagem inicial por requisicao&lt;br /&gt;
	route(REQINIT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA NAT&amp;quot;);&lt;br /&gt;
	# Deteccao de nat&lt;br /&gt;
	route(NAT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA WITHINDLG&amp;quot;);&lt;br /&gt;
	# Gerenciando requisicaoes com dialog&lt;br /&gt;
	route(WITHINDLG);&lt;br /&gt;
&lt;br /&gt;
	# Manipulando requisicoes iniciais (nao consta To tag)&lt;br /&gt;
	&lt;br /&gt;
	# Processando CANCEL&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;CANCEL&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD CANCEL&amp;quot;);&lt;br /&gt;
		if(t_check_trans()){&lt;br /&gt;
			t_relay();&lt;br /&gt;
		}&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	t_check_trans();&lt;br /&gt;
&lt;br /&gt;
	# Enviando para autenticacao&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA AUTENTICACAO&amp;quot;);&lt;br /&gt;
	route(AUTH);&lt;br /&gt;
&lt;br /&gt;
	# gravando rota para formacao dos dialogs (caso sejam roteados)&lt;br /&gt;
	# removemos qualquer cabecalho de rota pre carregado&lt;br /&gt;
	remove_hf(&amp;quot;Route&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE OU SIBSCRIBE&amp;quot;);&lt;br /&gt;
		record_route();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Contabilizando (acc) INVITES&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE, FAZENDOA ACC&amp;quot;);&lt;br /&gt;
		setflag(FLT_ACC);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando chamada para destinos externos&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA SIPOUT&amp;quot;);&lt;br /&gt;
	route(SIPOUT);&lt;br /&gt;
&lt;br /&gt;
	# Requisicoes para dominio local&lt;br /&gt;
	&lt;br /&gt;
	# Roteando requisicoes de PRESENCE&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PRESENCE&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	route(PRESENCE);&lt;br /&gt;
&lt;br /&gt;
	# Gerenciando pedidos de registro&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA REGISTRAR&amp;quot;);	&lt;br /&gt;
	route(REGISTRAR);&lt;br /&gt;
&lt;br /&gt;
	if($ru==&amp;quot;&amp;quot;){&lt;br /&gt;
		xlog(&amp;quot;ru --&amp;gt; vazio&amp;quot;);&lt;br /&gt;
		# Requisicao sem usuario na RURI&lt;br /&gt;
		sl_send_reply(&amp;quot;484&amp;quot;, &amp;quot;Address Incomplete&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando requisicao para PSTN&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PSTN&amp;quot;);&lt;br /&gt;
	route(PSTN);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Salvando informacao de quem originou a chamad&lt;br /&gt;
	$avp(callee)=$rU;&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA DISPATCH PSTN&amp;quot;);&lt;br /&gt;
	route(FSDISPATCH);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	# Servico de localizacao de usuario&lt;br /&gt;
	route(LOCATION);&lt;br /&gt;
&lt;br /&gt;
	# Efetuando o relay (encaminhamento)&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[RELAY] {&lt;br /&gt;
	if(check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
		setbflag(FLB_NATB);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(isflagset(FLT_NATS) || isbflagset(FLB_NATB)){&lt;br /&gt;
		#route(RTPPROXY);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
#		t_on_reply(&amp;quot;REPLY_ONE&amp;quot;);&lt;br /&gt;
#		t_on_failure(&amp;quot;FAIL_ONE&amp;quot;);&lt;br /&gt;
#	}&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;AQUI TENTAMOS ENVIAR A CHAMADA $fU $tU&amp;quot;);&lt;br /&gt;
	if(!t_relay()){&lt;br /&gt;
		xlog(&amp;quot;FALHA EM ENVIAR A CHAMADA, NAO FOI POSSIVEL FAZER O RELAY&amp;quot;);&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
	}&lt;br /&gt;
	xlog(&amp;quot;CHAMADA FOI ENVIADA AQUI, QUAL O ERRO ENTAO&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REQINIT] {&lt;br /&gt;
	if(!mf_process_maxfwd_header(&amp;quot;10&amp;quot;)){&lt;br /&gt;
		sl_send_reply(&amp;quot;483&amp;quot;, &amp;quot;Too Many Hops&amp;quot;);&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[WITHINDLG] {&lt;br /&gt;
	if(has_totag()){&lt;br /&gt;
		if(loose_route()){&lt;br /&gt;
			if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
				setflag(FLT_ACC);&lt;br /&gt;
				setflag(FLT_ACCFAILED);&lt;br /&gt;
			}&lt;br /&gt;
			route(RELAY);&lt;br /&gt;
		}else{&lt;br /&gt;
			if(is_method(&amp;quot;SUBSCRIBE&amp;quot;) &amp;amp;&amp;amp; uri==myself) {&lt;br /&gt;
				# requisicao de subscribe pre-estabelecida&lt;br /&gt;
				route(PRESENCE);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;ACK&amp;quot;)){&lt;br /&gt;
				if(t_check_trans()){&lt;br /&gt;
					t_relay();&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}else{&lt;br /&gt;
				# ACK para transacao nao encontrada, ignoramos...&lt;br /&gt;
				exit;&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			sl_send_reply(&amp;quot;404&amp;quot;, &amp;quot;Not Here&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		}	&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REGISTRAR] {&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		if(isflagset(FLT_NATS)){&lt;br /&gt;
			setbflag(FLB_NATB);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(!save(&amp;quot;location&amp;quot;)){&lt;br /&gt;
			sl_reply_error();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[LOCATION] {&lt;br /&gt;
&lt;br /&gt;
	alias_db_lookup(&amp;quot;dbaliases&amp;quot;);&lt;br /&gt;
	if(!lookup(&amp;quot;location&amp;quot;)){&lt;br /&gt;
		switch($rc) {&lt;br /&gt;
			case -1:&lt;br /&gt;
			case -3:&lt;br /&gt;
				t_newtran();&lt;br /&gt;
				t_reply(&amp;quot;404&amp;quot;,&amp;quot;Not Found&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			case -2:&lt;br /&gt;
				sl_send_reply(&amp;quot;405&amp;quot;, &amp;quot;Method Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		setflag(FLT_ACCMISSED);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PRESENCE] {&lt;br /&gt;
	if(!is_method(&amp;quot;PUBLISH|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!t_newtran()){&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
		handle_publish();&lt;br /&gt;
	}else if(is_method(&amp;quot;SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		handle_subscribe();&lt;br /&gt;
	}&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[AUTH]{&lt;br /&gt;
	xlog(&amp;quot;PEDIDO DE AUTENTICACAO&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		# atentica pedidos de registro&lt;br /&gt;
		if(!www_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
			www_challenge(&amp;quot;&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if($au!=$tU){&lt;br /&gt;
			sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	}else{&lt;br /&gt;
		if(route(FSINBOUND)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(check_source_address(&amp;quot;0&amp;quot;)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(from_uri==myself){&lt;br /&gt;
			if(!proxy_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
				proxy_challenge(&amp;quot;&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
				if($au!=$tU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}else{&lt;br /&gt;
				if($au!=$fU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			# Validamos (autenticamos) o usuario&lt;br /&gt;
			consume_credentials();&lt;br /&gt;
		}else{&lt;br /&gt;
		&lt;br /&gt;
			# usuario nao e local, vamos negar&lt;br /&gt;
			if(!uri==myself){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not relaying&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}	&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[NAT] {&lt;br /&gt;
	force_rport();&lt;br /&gt;
	if(nat_uac_test(&amp;quot;19&amp;quot;)){&lt;br /&gt;
		if(method==&amp;quot;REGISTER&amp;quot;){&lt;br /&gt;
			fix_nated_register();&lt;br /&gt;
		}else{&lt;br /&gt;
			fix_nated_contact();&lt;br /&gt;
		}&lt;br /&gt;
		setflag(FLT_NATS);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[RTPPROXY] {&lt;br /&gt;
	if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}else if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		engage_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!has_totag()){&lt;br /&gt;
&lt;br /&gt;
		if(!check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
			add_rr_param(&amp;quot;;nat=yes&amp;quot;);&lt;br /&gt;
			xlog(&amp;quot;NAT yes NAO ENCONTRADO&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[SIPOUT]{&lt;br /&gt;
	if(!uri==myself){&lt;br /&gt;
		append_hf(&amp;quot;P-hint: outbound\r\n&amp;quot;);&lt;br /&gt;
		route(RELAY);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PSTN]{&lt;br /&gt;
        # neste caso apenas para exemplificar um uso simples&lt;br /&gt;
        # vamos fazer o redirecionamento par ao asterisk&lt;br /&gt;
        # realizar a dicagem da chamada&lt;br /&gt;
&lt;br /&gt;
        if(!($rU=~&amp;quot;^(\+|00)[1-9][0-9]{3,20}$&amp;quot;))&lt;br /&gt;
                return;&lt;br /&gt;
&lt;br /&gt;
        ## a regra acima aceita para discagem externa qualquer numero&lt;br /&gt;
        # comecado com 00 ou +&lt;br /&gt;
        #&lt;br /&gt;
&lt;br /&gt;
        if(from_uri!=myself){&lt;br /&gt;
                sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $ru = &amp;quot;sip:&amp;quot; + $rU + &amp;quot;@&amp;quot; + &amp;quot;10.254.254.6:5090&amp;quot;;&lt;br /&gt;
        xlog(&amp;quot;NOVO DESTINO: $ru&amp;quot;);&lt;br /&gt;
        route(RELAY);&lt;br /&gt;
        exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[XMLRPC]{&lt;br /&gt;
	# nao vamos implementar esta funcionalidade&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSINBOUND] {&lt;br /&gt;
	# verificar para validar o ip do asterisk:porta&lt;br /&gt;
	# se bater , responder com return 1;&lt;br /&gt;
	if($si==&amp;quot;10.254.254.6&amp;quot; &amp;amp;&amp;amp; $sp==&amp;quot;5090&amp;quot;){&lt;br /&gt;
		return(1);&lt;br /&gt;
	}else{&lt;br /&gt;
		return(-1);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSDISPATCH] {&lt;br /&gt;
&lt;br /&gt;
	if(!is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(route(FSINBOUND)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;CAIMOS NO SWITCH, VAMOS LOCALIZAR O PERFIL DA CHAMADA $rU&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if($rU =~ &amp;quot;^41$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH expressa comeca e termina em 41&amp;quot;);&lt;br /&gt;
			#regra de menu de voicemail, apenas &lt;br /&gt;
			# usuarios autenticados&lt;br /&gt;
			if($au==&amp;quot;&amp;quot;){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$rU = &amp;quot;vma-&amp;quot; + $au;&lt;br /&gt;
	}else if($rU =~ &amp;quot;^441[0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCA 441XX &amp;quot;);&lt;br /&gt;
			# numero discado comeca com 441 seguido de dois digitos&lt;br /&gt;
			# chamada direta para inbox do voicemail&lt;br /&gt;
			strip(2);&lt;br /&gt;
			route(FSVBOX);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^433[01][0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH OPCAO 433[01]XX&amp;quot;);&lt;br /&gt;
			# numero comecado em 443, seguido de 0 ou 1, mais dois digitos&lt;br /&gt;
			# sistema de conferencia&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^45[0-9]+$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCAO 45X.&amp;quot;);&lt;br /&gt;
			#numero comecado com 45, seguindo de numeros;&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else{&lt;br /&gt;
			xlog(&amp;quot;OPCAO DEFAULT DO SWITCH&amp;quot;);&lt;br /&gt;
			# usuario offline, enviando para voicemail&lt;br /&gt;
			if(!registered(&amp;quot;location&amp;quot;)){&lt;br /&gt;
				route(FSVBOX);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			# usuario online, fazendo bridging&lt;br /&gt;
			xlog(&amp;quot;USUARIO ESTA ONLINE VAMOS FAZER BRIDGE&amp;quot;);&lt;br /&gt;
			prefix(&amp;quot;kb-&amp;quot;);&lt;br /&gt;
			if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
				t_on_failure(&amp;quot;FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
	}&lt;br /&gt;
	route(FSRELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSVBOX&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($rU =~ &amp;quot;^441[0-9][0-9]&amp;quot;){&lt;br /&gt;
		strip(2);&lt;br /&gt;
	}&lt;br /&gt;
	prefix(&amp;quot;vm-&amp;quot;);&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[FSRELAY] {&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSRELAY&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
branch_route[BRANCH_ONE]{&lt;br /&gt;
	xlog(&amp;quot;new branch at $ru&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
onreply_route[REPLY_ONE]{&lt;br /&gt;
	xlog(&amp;quot;Incoming reply&amp;quot;);&lt;br /&gt;
	if((isflagset(FLT_NATS) || isbflagset(FLB_NATB) &amp;amp;&amp;amp; status =~ &amp;quot;(183)|(2[0-9][0-9])&amp;quot;)){&lt;br /&gt;
		#rtpproxy_offer();&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	if(isbflagset(FLB_NATB)){&lt;br /&gt;
		fix_nated_contact();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_ONE]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_ONE&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_check_status(&amp;quot;486|408|480&amp;quot;)){&lt;br /&gt;
		$rU = $avp(callee);&lt;br /&gt;
		$var(newbranch) = 1;&lt;br /&gt;
		route(FSVBOX);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testes com Opensips (registro)==&lt;br /&gt;
&lt;br /&gt;
Antes de podermos testar precisamos iniciar o serviço, no momento estamos com ele operando em modo debug, então a inicialização deve ser realizada com o comando abaixo&lt;br /&gt;
 /etc/init.d/opensips debug&lt;br /&gt;
&lt;br /&gt;
Abra uma nova sessão no servidor e então vamos criar os usuários&lt;br /&gt;
 opensipsctl add 101 101&lt;br /&gt;
 opensipsctl add 102 102&lt;br /&gt;
 opensipsctl add 103 103&lt;br /&gt;
&lt;br /&gt;
usuario 101 com senha 101 e assim por diante&lt;br /&gt;
&lt;br /&gt;
Faça a onexão com seu softphone, aqui para testes utilizei o jitsi e o zoiper, neste momento vamos apenas fazer o registro do usuário para testar a autenticação, se você tentar realizar uma discagem não funcionará pois neste caso o processo depende do Asterisk que ainda não está configurado, vamos dar inicio nesta configuração agora.&lt;br /&gt;
&lt;br /&gt;
==Asterisk==&lt;br /&gt;
Não vamos dar muitos detalhes da instalação do asterisk aqui, a ideia é simplesmente ter o mesmo funcionando da forma que necessitamos.&lt;br /&gt;
&lt;br /&gt;
===Instalando dependências===&lt;br /&gt;
&lt;br /&gt;
Dependências necessárias para a instalação do Asterisk.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Asterisk 1.8===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget -c http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8-current.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Compilando o Asterisk 1.8====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar zxvf asterisk-1.8-current.tar.gz&lt;br /&gt;
cd asterisk-1.8-current.tar.gz&lt;br /&gt;
./configure  --disable-xmldoc&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make samples&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Após a instalação , abra o arquivo /etc/asterisk/sip.conf, localize a linha '''udpbindaddr=0.0.0.0''' e altere para '''udpbindaddr=0.0.0.0:5090'''  , depois ao fim do arquivo adicione.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
type=peer&lt;br /&gt;
host=10.254.254.6&lt;br /&gt;
port=5060&lt;br /&gt;
qualify=yes&lt;br /&gt;
context=opensips&lt;br /&gt;
insecure=port,invite&lt;br /&gt;
canreinvite=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora abra o arquivo '''/etc/asterisk/extensions.conf''' , crie no fim do arquivo a seguinte entrada.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _kb-1XX,1,NoOp(CHAMADA INTERNA - FAZER BRIDGE - ${CALLERID(num)} ${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Dial(SIP/opensips/${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Goto(opensips,vm-${EXTEN:3},1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vm-1XX,1,NoOp(CHAMADA PARA VOICEMAIL)&lt;br /&gt;
same =&amp;gt; n,Voicemail(${EXTEN:3}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vma-1XX,1,NoOp(CHAMADA PARA VOICEMAIL - ADMINISTRATIVO)&lt;br /&gt;
same =&amp;gt; n,VoicemailMain(${EXTEN:4}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _3[01]XX,1,NoOp(CHAMADA PARA CONFERENCIA)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,ConfBridge(${EXTEN},cM1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _00.,1,NoOp(CHAMADA PARA PSTN)&lt;br /&gt;
same =&amp;gt; n,Wait(2)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,Wait(1)&lt;br /&gt;
same =&amp;gt; n,PlayBack(tt-monkeys)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; h,1,Hangup()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finalmente precisamos criar as entradas do voicemail, para isso altere o arquivo '''/etc/asterisk/voicemail.conf''' localize o contexto '''[default]''' e então adicione as entradas para seu voicemail, segue dois exemplos abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
101 =&amp;gt; 123123,Mike Tesliuk&lt;br /&gt;
102 =&amp;gt; 123123,Mike Tesliuk 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Feito isso, faça um restart no asterisk&lt;br /&gt;
 /etc/init.d/asterisk restart&lt;br /&gt;
&lt;br /&gt;
Agora você ja poderá fazer os testes, basicamente criamos as seguintes situações para serem testadas.&lt;br /&gt;
&lt;br /&gt;
*1 Autenticação de usuários&lt;br /&gt;
*2 Chamada entre usuários&lt;br /&gt;
*3 Encaminhamento para caixa postal&lt;br /&gt;
*4 Acesso a caixa postal&lt;br /&gt;
*5 Acesso a conferência&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1396</id>
		<title>OpenSIPs e Asterisk - LIKE CentOS</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1396"/>
		<updated>2013-08-27T21:49:56Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: /* Preparando a Configuração */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=white&amp;gt; NÃO SIGA ESTE DOCUMENTO. O MESMO SE ENCONTRA EM DESEVOLVIMENTO&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este tutorial é baseado em um tutorial originalmente escrito pelo Mike, se quiser verificar o tutorial original acesse http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk&lt;br /&gt;
&lt;br /&gt;
Para esta implementação utilizamos CentOS 6.4 64 Bits , OpenSIPS 1.9 e Asterisk 1.8.23 &lt;br /&gt;
&lt;br /&gt;
==Funcionalidades==&lt;br /&gt;
Este tutorial tem por objetivo atingir as seguintes funcionalidades.&lt;br /&gt;
*Autenticação de usuário&lt;br /&gt;
*Registro de usuário&lt;br /&gt;
*Localização de usuário (encaminhamento de chamadas)&lt;br /&gt;
*Roteamento de chamadas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Através do Asterisk estenderemos estas funcionalidades agregando.&lt;br /&gt;
*Correio de voz (Voicemail)&lt;br /&gt;
*Conferencia &lt;br /&gt;
*SBC ( Pode ser utilizado para transcoding, esconder topologia, play de mensagens e tarifação )&lt;br /&gt;
*Outros serviços de media (Anuncios, Ura's e coisas do tipo)&lt;br /&gt;
&lt;br /&gt;
==Definições==&lt;br /&gt;
Para um melhor entendimento da solução vamos expor aqui algumas definições de nosso sistema.&lt;br /&gt;
*Usuários locais terão ramais com 3 digitos (ex: 101, 102, 103)&lt;br /&gt;
*Identidade do correio de voz será o mesmo do ramal&lt;br /&gt;
*Serviços de media (acesso a voicemail e outros) receberão rotas de 4 digitos&lt;br /&gt;
*Opensips e Asterisk utilizarão o mesmo servidor (Neste caso IP: 10.254.254.6)&lt;br /&gt;
*Os serviços rodarão nas portas 5060 (opensips) , 5090 (Asterisk)&lt;br /&gt;
&lt;br /&gt;
==Funcionamento==&lt;br /&gt;
A autenticação do usuário será realizada pelo OpenSIPs, quando uma chamada é autenticada então ela serguirá:&lt;br /&gt;
*Se o usuário de destino não está online a chamada será enviada para o Asterisk para função de correio de voz&lt;br /&gt;
*Se o usuário está online a chamada será encaminhada para o Asterisk, dest forma é possivel acionar funcionalidades como anuncios, definição de tempo de chamada, forçar codecs e outras funcionalidades.&lt;br /&gt;
*Asterisk envia a chamada novamente para o OpenSIPs que verificará no location e entregará a chamada para o usuário.&lt;br /&gt;
*Se a chamada não for atendida o Opensips irá re-encaminhar para o Asterisk direcionando para função de voicemail&lt;br /&gt;
&lt;br /&gt;
==OpenSIPs==&lt;br /&gt;
Vamos iniciar o processo de instalação com o OpenSIPs, siga os procedimentos abaixo para evitar qualquer dificuldade.&lt;br /&gt;
&lt;br /&gt;
===Dependencias===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====Atualizando o sistema====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum -y update&lt;br /&gt;
yum -y upgrade&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pacotes de desenvolvimento ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall 'Development Tools' -y&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
yum install wget mysql-server pcre-devel libxml2-devel xmlrpc-c-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Desabilitando o SELINUX ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/bin/sed -i -e s,'SELINUX=enforcing','SELINUX=disabled', /etc/selinux/config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durante a instalação o sistema irá lhe perguntar a senha de root para o servidor MySQL é importante que você se lembre da mesma posteriormente pois utilizaremos a mesma.&lt;br /&gt;
&lt;br /&gt;
===Compilando o OpenSIPs===&lt;br /&gt;
Para manter um padrão onde os dados estao vamos utilizar o diretório /usr/src/ para o download de código fonte.&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/&lt;br /&gt;
 wget -c http://opensips.org/pub/opensips/1.9.1/src/opensips-1.9.1_src.tar.gz&lt;br /&gt;
 tar -xzvf opensips-1.9.1_src.tar.gz&lt;br /&gt;
 cd opensips-1.9.1-tls/&lt;br /&gt;
 make menuconfig&lt;br /&gt;
&lt;br /&gt;
===Preparando a Configuração===&lt;br /&gt;
&lt;br /&gt;
Antes de darmos inicio ao arquivo de configuração, vamos ajustar algumas questões, o opensips instala os arquivos (se voce nao alterar o parametro) em /usr, consequentemente as configurações ficam em /usr/etc , eu por padrão faço um link para o diretório /etc, assim acesso as configurações em /etc/opensips&lt;br /&gt;
&lt;br /&gt;
 ln -s /usr/etc/opensips /etc/&lt;br /&gt;
&lt;br /&gt;
No caso do debian o script de inicialização utiliza um arquivo extra de configuração&lt;br /&gt;
 cp packaging/debian/opensips.default /etc/default/opensips&lt;br /&gt;
&lt;br /&gt;
Para o script de inicialização execute o comando abaixo&lt;br /&gt;
 cp packaging/fedora/opensips.init /etc/init.d/opensips&lt;br /&gt;
 chmod +x /etc/init.d/opensips&lt;br /&gt;
chkconfig --add opensips&lt;br /&gt;
&lt;br /&gt;
cp packaging/fedora/opensips.sysconfig /etc/sysconfig&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 groupadd opensips&lt;br /&gt;
 mkdir /var/run/opensips&lt;br /&gt;
 useradd -d /var/run/opensips/ -s /bin/false -g opensips opensips&lt;br /&gt;
 chown -R opensips.opensips /var/run/opensips&lt;br /&gt;
&lt;br /&gt;
===Configurando o opensipsctl===&lt;br /&gt;
O opensipsctl (e opensipsdbctl) utilizam o arquivo de configuração /etc/opensips/opensipsctlrc, abaixo segue o conteúdo do arquivo. (Sugiro que você faça um backup dos arquivos originais para ter uma copia, existem parametros que você pode estudar depois).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DBENGINE=MYSQL&lt;br /&gt;
DBHOST=localhost&lt;br /&gt;
DBNAME=opensips&lt;br /&gt;
DBRWUSER=opensips&lt;br /&gt;
DBRWPW=&amp;quot;opensipsrw&amp;quot;&lt;br /&gt;
SIP_DOMAIN=10.254.254.6  ### caso voce esteja usando outro ip altere aqui&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DBROOTUSER=&amp;quot;root&amp;quot;&lt;br /&gt;
INSTALL_EXTRA_TABLES=ask&lt;br /&gt;
ALIASES_TYPE=&amp;quot;DB&amp;quot;&lt;br /&gt;
MI_CONNECTOR=FIFO:/tmp/opensips_fifo&lt;br /&gt;
# VERIFY_ACL=1&lt;br /&gt;
# ACL_GROUPS=&amp;quot;local ld int voicemail free-pstn&amp;quot;&lt;br /&gt;
# VERBOSE=1&lt;br /&gt;
# STORE_PLAINTEXT_PW=0&lt;br /&gt;
# NOHLPRINT=1&lt;br /&gt;
PID_FILE=/var/run/opensips/opensips.pid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Criando o banco de dados===&lt;br /&gt;
Agora que temos nosso arquivo configurado vamos fazer a criação do banco de dados, execute o comando abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
opensipsdbctl create opensips&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema irá lhe perguntar algumas coisas, responda Y (sim) para todas para que ele instale todas as tabelas, não usaremos todas elas, mas desta forma você fica com praticamente tudo criado para o caso de uma expansão dos recursos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Instalando o RTP Proxy===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/src/&lt;br /&gt;
wget -c http://b2bua.org/chrome/site/rtpproxy-1.2.1.tar.gz&lt;br /&gt;
tar -xzvf rtpproxy-1.2.1.tar.gz&lt;br /&gt;
cd rtpproxy-1.2.1&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
groupadd rtpproxy&lt;br /&gt;
useradd -d /var/run/rtpproxy -s /bin/true -g rtpproxy rtpproxy&lt;br /&gt;
mkdir /var/log/rtpproxy&lt;br /&gt;
mkdir /var/run/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/log/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/run/rtpproxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Arquivo de inicialização====&lt;br /&gt;
'''/etc/init.d/rtpproxy'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# Este script e de autoria de Mike Tesliuk&lt;br /&gt;
# qualquer falha no mesmo por favor informe &lt;br /&gt;
# atraves do email mike (a) tesliuk.com&lt;br /&gt;
#&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:          rtpproxy&lt;br /&gt;
# Required-Start:    $syslog $network $local_fs $time&lt;br /&gt;
# Required-Stop:     $syslog $network $local_fs&lt;br /&gt;
# Default-Start:     2 3 4 5&lt;br /&gt;
# Default-Stop:      0 1 6&lt;br /&gt;
# Short-Description: Start the RTPPROXY server&lt;br /&gt;
# Description:       Start the RTPPROXY server&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin&lt;br /&gt;
USELOG=1&lt;br /&gt;
USER=rtpproxy&lt;br /&gt;
# Altere o ip abaixo para o ip de seu sistema&lt;br /&gt;
IPADDR=&amp;quot;10.254.254.6&amp;quot;&lt;br /&gt;
&lt;br /&gt;
. /lib/lsb/init-functions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
start(){&lt;br /&gt;
        echo &amp;quot;Iniciando RTP PROXY &amp;quot;&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                if [ &amp;quot;${USELOG}&amp;quot; = &amp;quot;1&amp;quot; ]; then&lt;br /&gt;
                        echo &amp;quot;Iniciando com LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER -F -f d DBUG 2&amp;amp;&amp;gt; /var/log/rtpproxy/rtpproxy.log &amp;amp;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Iniciando sem LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER  -F -f d DBUG 2&amp;amp;&amp;gt; /dev/null&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;START OK&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
        else&lt;br /&gt;
                echo &amp;quot;Processo ja em execucao&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
stop(){&lt;br /&gt;
&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                echo &amp;quot;Processo nao encontrado&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
                kill -9 $(pidof rtpproxy)&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;STOP OK&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Falha em realizar stop do servico&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
case $1 in&lt;br /&gt;
        start)&lt;br /&gt;
                start&lt;br /&gt;
        ;;&lt;br /&gt;
        stop)&lt;br /&gt;
                stop&lt;br /&gt;
        ;;&lt;br /&gt;
        restart)&lt;br /&gt;
                stop&lt;br /&gt;
                start&lt;br /&gt;
&lt;br /&gt;
        ;;&lt;br /&gt;
        *)&lt;br /&gt;
                echo &amp;quot;Utilize: stop | start | restart&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos dar permissao e colocar na inicialização&lt;br /&gt;
 chmod +x /etc/init.d/rtpproxy &lt;br /&gt;
 update-rc.d rtpproxy defaults&lt;br /&gt;
 /etc/init.d/rtpproxy start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Criando o arquivo opensips.cfg===&lt;br /&gt;
O arquivo opensips.cfg é a onde a coisa toda acontece para o opensips, claro que ele dependerá de informações que estarão no banco de dados, mas é onde criamos todas as nossas rotas e validações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Este tutorial nao esta terminado, este arquivo ainda esta em testes &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
####### Global Parameters #########&lt;br /&gt;
debug=3&lt;br /&gt;
log_stderror=no&lt;br /&gt;
log_facility=LOG_LOCAL0&lt;br /&gt;
&lt;br /&gt;
fork=yes&lt;br /&gt;
children=4&lt;br /&gt;
&lt;br /&gt;
/* Descomente as linhas abaixo para ativar o debug */&lt;br /&gt;
#debug=7&lt;br /&gt;
#fork=no&lt;br /&gt;
#log_stderror=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Comente a linha abaixo para ativar a descoberta automatica de enderecos locais&lt;br /&gt;
 , isso significa que o sistema ira verificar todos os ips ativos e hosts e entao ativara&lt;br /&gt;
 o protocolo para todos eles */ &lt;br /&gt;
auto_aliases=no&lt;br /&gt;
&lt;br /&gt;
/* Defina aqui o ip a ser utilizado */&lt;br /&gt;
listen=udp:10.254.254.6:5060   # Altere este IP para o seu ambiente&lt;br /&gt;
&lt;br /&gt;
/* Nao usaremos sip por tcp nem tls neste script */&lt;br /&gt;
disable_tcp=yes&lt;br /&gt;
&lt;br /&gt;
disable_tls=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Secao de modulos ########&lt;br /&gt;
&lt;br /&gt;
#set module path&lt;br /&gt;
mpath=&amp;quot;/usr//lib64/opensips/modules/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;signaling.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sl.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;tm.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_timer&amp;quot;, 5)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_inv_timer&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;restart_fr_on_each_reply&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;onreply_avp_mode&amp;quot;, 1)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rr.so&amp;quot;&lt;br /&gt;
/* do not append from tag to the RR (no need for this script) */&lt;br /&gt;
modparam(&amp;quot;rr&amp;quot;, &amp;quot;append_fromtag&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;maxfwd.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sipmsgops.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;mi_fifo.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_name&amp;quot;, &amp;quot;/tmp/opensips_fifo&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_mode&amp;quot;, 0666)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;db_mysql.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;uri.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;uri&amp;quot;, &amp;quot;use_uri_table&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;usrloc.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;nat_bflag&amp;quot;, &amp;quot;FLB_NATB&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_mode&amp;quot;,   2)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;registrar.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;registrar&amp;quot;, &amp;quot;tcp_persistent_flag&amp;quot;, &amp;quot;TCP_PERSISTENT&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
/* Descomente a linha abaixo para nao permitir mais de 10 contatos por conta */&lt;br /&gt;
#modparam(&amp;quot;registrar&amp;quot;, &amp;quot;max_contacts&amp;quot;, 10)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;acc.so&amp;quot;&lt;br /&gt;
/* Quais eventos deverao ser registrados ? */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;early_media&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;report_cancels&amp;quot;, 0)&lt;br /&gt;
/* por padrao nos nao ajustamos a direcao em requisicoes sequencias, &lt;br /&gt;
 se voce deseja usar este recurso tenha certeza de ativar o &amp;quot;appen_fromtag&amp;quot; &lt;br /&gt;
 para o modulo &amp;quot;rr&amp;quot; */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;detect_direction&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;failed_transaction_flag&amp;quot;, &amp;quot;FLT_ACCFAILED&amp;quot;)&lt;br /&gt;
/* Gatilhos para accounting  (flags) */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_extra&amp;quot;, &lt;br /&gt;
	&amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_extra&amp;quot;, &amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;auth.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;auth_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;calculate_ha1&amp;quot;, yes)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;password_column&amp;quot;, &amp;quot;password&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;load_credentials&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;permissions.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;permissions&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;alias_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;alias_db&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;presence.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;presence&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
#loadmodule &amp;quot;presence_xml.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;dialog.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_mode&amp;quot;, 2)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_url&amp;quot;,&amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;dlg_match_mode&amp;quot;, 1)&lt;br /&gt;
#modparam(&amp;quot;dialog&amp;quot;, &amp;quot;default_timeout&amp;quot;, 60)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;siptrace.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;trace_flag&amp;quot;, 22)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;traced_user_avp&amp;quot;, &amp;quot;$avp(s:traceuser)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;nathelper.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;natping_interval&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;ping_nated_only&amp;quot;, 1)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_bflag&amp;quot;, &amp;quot;FLB_NATSIPPING&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_from&amp;quot;, &amp;quot;sip:pinger@10.254.254.6&amp;quot;) # Altere o ip para o ip do servidor&lt;br /&gt;
modparam(&amp;quot;nathelper|registrar&amp;quot;, &amp;quot;received_avp&amp;quot;, &amp;quot;$avp(RECEIVED)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rtpproxy.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;rtpproxy&amp;quot;, &amp;quot;rtpproxy_sock&amp;quot;, &amp;quot;udp:127.0.0.1:7722&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Logica de roteamento ########&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route {&lt;br /&gt;
&lt;br /&gt;
	if (!mf_process_maxfwd_header(&amp;quot;3&amp;quot;)) {&lt;br /&gt;
                send_reply(&amp;quot;483&amp;quot;,&amp;quot;looping&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;REQUISICAO RECEBIDA, ENVIANDO PARA REQINIT&amp;quot;);&lt;br /&gt;
	# Checagem inicial por requisicao&lt;br /&gt;
	route(REQINIT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA NAT&amp;quot;);&lt;br /&gt;
	# Deteccao de nat&lt;br /&gt;
	route(NAT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA WITHINDLG&amp;quot;);&lt;br /&gt;
	# Gerenciando requisicaoes com dialog&lt;br /&gt;
	route(WITHINDLG);&lt;br /&gt;
&lt;br /&gt;
	# Manipulando requisicoes iniciais (nao consta To tag)&lt;br /&gt;
	&lt;br /&gt;
	# Processando CANCEL&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;CANCEL&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD CANCEL&amp;quot;);&lt;br /&gt;
		if(t_check_trans()){&lt;br /&gt;
			t_relay();&lt;br /&gt;
		}&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	t_check_trans();&lt;br /&gt;
&lt;br /&gt;
	# Enviando para autenticacao&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA AUTENTICACAO&amp;quot;);&lt;br /&gt;
	route(AUTH);&lt;br /&gt;
&lt;br /&gt;
	# gravando rota para formacao dos dialogs (caso sejam roteados)&lt;br /&gt;
	# removemos qualquer cabecalho de rota pre carregado&lt;br /&gt;
	remove_hf(&amp;quot;Route&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE OU SIBSCRIBE&amp;quot;);&lt;br /&gt;
		record_route();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Contabilizando (acc) INVITES&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE, FAZENDOA ACC&amp;quot;);&lt;br /&gt;
		setflag(FLT_ACC);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando chamada para destinos externos&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA SIPOUT&amp;quot;);&lt;br /&gt;
	route(SIPOUT);&lt;br /&gt;
&lt;br /&gt;
	# Requisicoes para dominio local&lt;br /&gt;
	&lt;br /&gt;
	# Roteando requisicoes de PRESENCE&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PRESENCE&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	route(PRESENCE);&lt;br /&gt;
&lt;br /&gt;
	# Gerenciando pedidos de registro&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA REGISTRAR&amp;quot;);	&lt;br /&gt;
	route(REGISTRAR);&lt;br /&gt;
&lt;br /&gt;
	if($ru==&amp;quot;&amp;quot;){&lt;br /&gt;
		xlog(&amp;quot;ru --&amp;gt; vazio&amp;quot;);&lt;br /&gt;
		# Requisicao sem usuario na RURI&lt;br /&gt;
		sl_send_reply(&amp;quot;484&amp;quot;, &amp;quot;Address Incomplete&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando requisicao para PSTN&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PSTN&amp;quot;);&lt;br /&gt;
	route(PSTN);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Salvando informacao de quem originou a chamad&lt;br /&gt;
	$avp(callee)=$rU;&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA DISPATCH PSTN&amp;quot;);&lt;br /&gt;
	route(FSDISPATCH);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	# Servico de localizacao de usuario&lt;br /&gt;
	route(LOCATION);&lt;br /&gt;
&lt;br /&gt;
	# Efetuando o relay (encaminhamento)&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[RELAY] {&lt;br /&gt;
	if(check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
		setbflag(FLB_NATB);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(isflagset(FLT_NATS) || isbflagset(FLB_NATB)){&lt;br /&gt;
		#route(RTPPROXY);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
#		t_on_reply(&amp;quot;REPLY_ONE&amp;quot;);&lt;br /&gt;
#		t_on_failure(&amp;quot;FAIL_ONE&amp;quot;);&lt;br /&gt;
#	}&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;AQUI TENTAMOS ENVIAR A CHAMADA $fU $tU&amp;quot;);&lt;br /&gt;
	if(!t_relay()){&lt;br /&gt;
		xlog(&amp;quot;FALHA EM ENVIAR A CHAMADA, NAO FOI POSSIVEL FAZER O RELAY&amp;quot;);&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
	}&lt;br /&gt;
	xlog(&amp;quot;CHAMADA FOI ENVIADA AQUI, QUAL O ERRO ENTAO&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REQINIT] {&lt;br /&gt;
	if(!mf_process_maxfwd_header(&amp;quot;10&amp;quot;)){&lt;br /&gt;
		sl_send_reply(&amp;quot;483&amp;quot;, &amp;quot;Too Many Hops&amp;quot;);&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[WITHINDLG] {&lt;br /&gt;
	if(has_totag()){&lt;br /&gt;
		if(loose_route()){&lt;br /&gt;
			if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
				setflag(FLT_ACC);&lt;br /&gt;
				setflag(FLT_ACCFAILED);&lt;br /&gt;
			}&lt;br /&gt;
			route(RELAY);&lt;br /&gt;
		}else{&lt;br /&gt;
			if(is_method(&amp;quot;SUBSCRIBE&amp;quot;) &amp;amp;&amp;amp; uri==myself) {&lt;br /&gt;
				# requisicao de subscribe pre-estabelecida&lt;br /&gt;
				route(PRESENCE);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;ACK&amp;quot;)){&lt;br /&gt;
				if(t_check_trans()){&lt;br /&gt;
					t_relay();&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}else{&lt;br /&gt;
				# ACK para transacao nao encontrada, ignoramos...&lt;br /&gt;
				exit;&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			sl_send_reply(&amp;quot;404&amp;quot;, &amp;quot;Not Here&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		}	&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REGISTRAR] {&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		if(isflagset(FLT_NATS)){&lt;br /&gt;
			setbflag(FLB_NATB);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(!save(&amp;quot;location&amp;quot;)){&lt;br /&gt;
			sl_reply_error();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[LOCATION] {&lt;br /&gt;
&lt;br /&gt;
	alias_db_lookup(&amp;quot;dbaliases&amp;quot;);&lt;br /&gt;
	if(!lookup(&amp;quot;location&amp;quot;)){&lt;br /&gt;
		switch($rc) {&lt;br /&gt;
			case -1:&lt;br /&gt;
			case -3:&lt;br /&gt;
				t_newtran();&lt;br /&gt;
				t_reply(&amp;quot;404&amp;quot;,&amp;quot;Not Found&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			case -2:&lt;br /&gt;
				sl_send_reply(&amp;quot;405&amp;quot;, &amp;quot;Method Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		setflag(FLT_ACCMISSED);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PRESENCE] {&lt;br /&gt;
	if(!is_method(&amp;quot;PUBLISH|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!t_newtran()){&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
		handle_publish();&lt;br /&gt;
	}else if(is_method(&amp;quot;SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		handle_subscribe();&lt;br /&gt;
	}&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[AUTH]{&lt;br /&gt;
	xlog(&amp;quot;PEDIDO DE AUTENTICACAO&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		# atentica pedidos de registro&lt;br /&gt;
		if(!www_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
			www_challenge(&amp;quot;&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if($au!=$tU){&lt;br /&gt;
			sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	}else{&lt;br /&gt;
		if(route(FSINBOUND)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(check_source_address(&amp;quot;0&amp;quot;)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(from_uri==myself){&lt;br /&gt;
			if(!proxy_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
				proxy_challenge(&amp;quot;&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
				if($au!=$tU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}else{&lt;br /&gt;
				if($au!=$fU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			# Validamos (autenticamos) o usuario&lt;br /&gt;
			consume_credentials();&lt;br /&gt;
		}else{&lt;br /&gt;
		&lt;br /&gt;
			# usuario nao e local, vamos negar&lt;br /&gt;
			if(!uri==myself){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not relaying&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}	&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[NAT] {&lt;br /&gt;
	force_rport();&lt;br /&gt;
	if(nat_uac_test(&amp;quot;19&amp;quot;)){&lt;br /&gt;
		if(method==&amp;quot;REGISTER&amp;quot;){&lt;br /&gt;
			fix_nated_register();&lt;br /&gt;
		}else{&lt;br /&gt;
			fix_nated_contact();&lt;br /&gt;
		}&lt;br /&gt;
		setflag(FLT_NATS);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[RTPPROXY] {&lt;br /&gt;
	if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}else if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		engage_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!has_totag()){&lt;br /&gt;
&lt;br /&gt;
		if(!check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
			add_rr_param(&amp;quot;;nat=yes&amp;quot;);&lt;br /&gt;
			xlog(&amp;quot;NAT yes NAO ENCONTRADO&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[SIPOUT]{&lt;br /&gt;
	if(!uri==myself){&lt;br /&gt;
		append_hf(&amp;quot;P-hint: outbound\r\n&amp;quot;);&lt;br /&gt;
		route(RELAY);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PSTN]{&lt;br /&gt;
        # neste caso apenas para exemplificar um uso simples&lt;br /&gt;
        # vamos fazer o redirecionamento par ao asterisk&lt;br /&gt;
        # realizar a dicagem da chamada&lt;br /&gt;
&lt;br /&gt;
        if(!($rU=~&amp;quot;^(\+|00)[1-9][0-9]{3,20}$&amp;quot;))&lt;br /&gt;
                return;&lt;br /&gt;
&lt;br /&gt;
        ## a regra acima aceita para discagem externa qualquer numero&lt;br /&gt;
        # comecado com 00 ou +&lt;br /&gt;
        #&lt;br /&gt;
&lt;br /&gt;
        if(from_uri!=myself){&lt;br /&gt;
                sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $ru = &amp;quot;sip:&amp;quot; + $rU + &amp;quot;@&amp;quot; + &amp;quot;10.254.254.6:5090&amp;quot;;&lt;br /&gt;
        xlog(&amp;quot;NOVO DESTINO: $ru&amp;quot;);&lt;br /&gt;
        route(RELAY);&lt;br /&gt;
        exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[XMLRPC]{&lt;br /&gt;
	# nao vamos implementar esta funcionalidade&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSINBOUND] {&lt;br /&gt;
	# verificar para validar o ip do asterisk:porta&lt;br /&gt;
	# se bater , responder com return 1;&lt;br /&gt;
	if($si==&amp;quot;10.254.254.6&amp;quot; &amp;amp;&amp;amp; $sp==&amp;quot;5090&amp;quot;){&lt;br /&gt;
		return(1);&lt;br /&gt;
	}else{&lt;br /&gt;
		return(-1);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSDISPATCH] {&lt;br /&gt;
&lt;br /&gt;
	if(!is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(route(FSINBOUND)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;CAIMOS NO SWITCH, VAMOS LOCALIZAR O PERFIL DA CHAMADA $rU&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if($rU =~ &amp;quot;^41$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH expressa comeca e termina em 41&amp;quot;);&lt;br /&gt;
			#regra de menu de voicemail, apenas &lt;br /&gt;
			# usuarios autenticados&lt;br /&gt;
			if($au==&amp;quot;&amp;quot;){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$rU = &amp;quot;vma-&amp;quot; + $au;&lt;br /&gt;
	}else if($rU =~ &amp;quot;^441[0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCA 441XX &amp;quot;);&lt;br /&gt;
			# numero discado comeca com 441 seguido de dois digitos&lt;br /&gt;
			# chamada direta para inbox do voicemail&lt;br /&gt;
			strip(2);&lt;br /&gt;
			route(FSVBOX);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^433[01][0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH OPCAO 433[01]XX&amp;quot;);&lt;br /&gt;
			# numero comecado em 443, seguido de 0 ou 1, mais dois digitos&lt;br /&gt;
			# sistema de conferencia&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^45[0-9]+$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCAO 45X.&amp;quot;);&lt;br /&gt;
			#numero comecado com 45, seguindo de numeros;&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else{&lt;br /&gt;
			xlog(&amp;quot;OPCAO DEFAULT DO SWITCH&amp;quot;);&lt;br /&gt;
			# usuario offline, enviando para voicemail&lt;br /&gt;
			if(!registered(&amp;quot;location&amp;quot;)){&lt;br /&gt;
				route(FSVBOX);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			# usuario online, fazendo bridging&lt;br /&gt;
			xlog(&amp;quot;USUARIO ESTA ONLINE VAMOS FAZER BRIDGE&amp;quot;);&lt;br /&gt;
			prefix(&amp;quot;kb-&amp;quot;);&lt;br /&gt;
			if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
				t_on_failure(&amp;quot;FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
	}&lt;br /&gt;
	route(FSRELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSVBOX&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($rU =~ &amp;quot;^441[0-9][0-9]&amp;quot;){&lt;br /&gt;
		strip(2);&lt;br /&gt;
	}&lt;br /&gt;
	prefix(&amp;quot;vm-&amp;quot;);&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[FSRELAY] {&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSRELAY&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
branch_route[BRANCH_ONE]{&lt;br /&gt;
	xlog(&amp;quot;new branch at $ru&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
onreply_route[REPLY_ONE]{&lt;br /&gt;
	xlog(&amp;quot;Incoming reply&amp;quot;);&lt;br /&gt;
	if((isflagset(FLT_NATS) || isbflagset(FLB_NATB) &amp;amp;&amp;amp; status =~ &amp;quot;(183)|(2[0-9][0-9])&amp;quot;)){&lt;br /&gt;
		#rtpproxy_offer();&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	if(isbflagset(FLB_NATB)){&lt;br /&gt;
		fix_nated_contact();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_ONE]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_ONE&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_check_status(&amp;quot;486|408|480&amp;quot;)){&lt;br /&gt;
		$rU = $avp(callee);&lt;br /&gt;
		$var(newbranch) = 1;&lt;br /&gt;
		route(FSVBOX);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testes com Opensips (registro)==&lt;br /&gt;
&lt;br /&gt;
Antes de podermos testar precisamos iniciar o serviço, no momento estamos com ele operando em modo debug, então a inicialização deve ser realizada com o comando abaixo&lt;br /&gt;
 /etc/init.d/opensips debug&lt;br /&gt;
&lt;br /&gt;
Abra uma nova sessão no servidor e então vamos criar os usuários&lt;br /&gt;
 opensipsctl add 101 101&lt;br /&gt;
 opensipsctl add 102 102&lt;br /&gt;
 opensipsctl add 103 103&lt;br /&gt;
&lt;br /&gt;
usuario 101 com senha 101 e assim por diante&lt;br /&gt;
&lt;br /&gt;
Faça a onexão com seu softphone, aqui para testes utilizei o jitsi e o zoiper, neste momento vamos apenas fazer o registro do usuário para testar a autenticação, se você tentar realizar uma discagem não funcionará pois neste caso o processo depende do Asterisk que ainda não está configurado, vamos dar inicio nesta configuração agora.&lt;br /&gt;
&lt;br /&gt;
==Asterisk==&lt;br /&gt;
Não vamos dar muitos detalhes da instalação do asterisk aqui, a ideia é simplesmente ter o mesmo funcionando da forma que necessitamos.&lt;br /&gt;
&lt;br /&gt;
===Instalando dependências===&lt;br /&gt;
&lt;br /&gt;
Dependências necessárias para a instalação do Asterisk.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Asterisk 1.8===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget -c http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8-current.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Compilando o Asterisk 1.8====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar zxvf asterisk-1.8-current.tar.gz&lt;br /&gt;
cd asterisk-1.8-current.tar.gz&lt;br /&gt;
./configure  --disable-xmldoc&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make samples&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Após a instalação , abra o arquivo /etc/asterisk/sip.conf, localize a linha '''udpbindaddr=0.0.0.0''' e altere para '''udpbindaddr=0.0.0.0:5090'''  , depois ao fim do arquivo adicione.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
type=peer&lt;br /&gt;
host=10.254.254.6&lt;br /&gt;
port=5060&lt;br /&gt;
qualify=yes&lt;br /&gt;
context=opensips&lt;br /&gt;
insecure=port,invite&lt;br /&gt;
canreinvite=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora abra o arquivo '''/etc/asterisk/extensions.conf''' , crie no fim do arquivo a seguinte entrada.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _kb-1XX,1,NoOp(CHAMADA INTERNA - FAZER BRIDGE - ${CALLERID(num)} ${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Dial(SIP/opensips/${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Goto(opensips,vm-${EXTEN:3},1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vm-1XX,1,NoOp(CHAMADA PARA VOICEMAIL)&lt;br /&gt;
same =&amp;gt; n,Voicemail(${EXTEN:3}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vma-1XX,1,NoOp(CHAMADA PARA VOICEMAIL - ADMINISTRATIVO)&lt;br /&gt;
same =&amp;gt; n,VoicemailMain(${EXTEN:4}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _3[01]XX,1,NoOp(CHAMADA PARA CONFERENCIA)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,ConfBridge(${EXTEN},cM1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _00.,1,NoOp(CHAMADA PARA PSTN)&lt;br /&gt;
same =&amp;gt; n,Wait(2)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,Wait(1)&lt;br /&gt;
same =&amp;gt; n,PlayBack(tt-monkeys)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; h,1,Hangup()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finalmente precisamos criar as entradas do voicemail, para isso altere o arquivo '''/etc/asterisk/voicemail.conf''' localize o contexto '''[default]''' e então adicione as entradas para seu voicemail, segue dois exemplos abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
101 =&amp;gt; 123123,Mike Tesliuk&lt;br /&gt;
102 =&amp;gt; 123123,Mike Tesliuk 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Feito isso, faça um restart no asterisk&lt;br /&gt;
 /etc/init.d/asterisk restart&lt;br /&gt;
&lt;br /&gt;
Agora você ja poderá fazer os testes, basicamente criamos as seguintes situações para serem testadas.&lt;br /&gt;
&lt;br /&gt;
*1 Autenticação de usuários&lt;br /&gt;
*2 Chamada entre usuários&lt;br /&gt;
*3 Encaminhamento para caixa postal&lt;br /&gt;
*4 Acesso a caixa postal&lt;br /&gt;
*5 Acesso a conferência&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1395</id>
		<title>OpenSIPs e Asterisk - LIKE CentOS</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1395"/>
		<updated>2013-08-27T21:44:55Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: /* Compilando o OpenSIPs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=white&amp;gt; NÃO SIGA ESTE DOCUMENTO. O MESMO SE ENCONTRA EM DESEVOLVIMENTO&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este tutorial é baseado em um tutorial originalmente escrito pelo Mike, se quiser verificar o tutorial original acesse http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk&lt;br /&gt;
&lt;br /&gt;
Para esta implementação utilizamos CentOS 6.4 64 Bits , OpenSIPS 1.9 e Asterisk 1.8.23 &lt;br /&gt;
&lt;br /&gt;
==Funcionalidades==&lt;br /&gt;
Este tutorial tem por objetivo atingir as seguintes funcionalidades.&lt;br /&gt;
*Autenticação de usuário&lt;br /&gt;
*Registro de usuário&lt;br /&gt;
*Localização de usuário (encaminhamento de chamadas)&lt;br /&gt;
*Roteamento de chamadas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Através do Asterisk estenderemos estas funcionalidades agregando.&lt;br /&gt;
*Correio de voz (Voicemail)&lt;br /&gt;
*Conferencia &lt;br /&gt;
*SBC ( Pode ser utilizado para transcoding, esconder topologia, play de mensagens e tarifação )&lt;br /&gt;
*Outros serviços de media (Anuncios, Ura's e coisas do tipo)&lt;br /&gt;
&lt;br /&gt;
==Definições==&lt;br /&gt;
Para um melhor entendimento da solução vamos expor aqui algumas definições de nosso sistema.&lt;br /&gt;
*Usuários locais terão ramais com 3 digitos (ex: 101, 102, 103)&lt;br /&gt;
*Identidade do correio de voz será o mesmo do ramal&lt;br /&gt;
*Serviços de media (acesso a voicemail e outros) receberão rotas de 4 digitos&lt;br /&gt;
*Opensips e Asterisk utilizarão o mesmo servidor (Neste caso IP: 10.254.254.6)&lt;br /&gt;
*Os serviços rodarão nas portas 5060 (opensips) , 5090 (Asterisk)&lt;br /&gt;
&lt;br /&gt;
==Funcionamento==&lt;br /&gt;
A autenticação do usuário será realizada pelo OpenSIPs, quando uma chamada é autenticada então ela serguirá:&lt;br /&gt;
*Se o usuário de destino não está online a chamada será enviada para o Asterisk para função de correio de voz&lt;br /&gt;
*Se o usuário está online a chamada será encaminhada para o Asterisk, dest forma é possivel acionar funcionalidades como anuncios, definição de tempo de chamada, forçar codecs e outras funcionalidades.&lt;br /&gt;
*Asterisk envia a chamada novamente para o OpenSIPs que verificará no location e entregará a chamada para o usuário.&lt;br /&gt;
*Se a chamada não for atendida o Opensips irá re-encaminhar para o Asterisk direcionando para função de voicemail&lt;br /&gt;
&lt;br /&gt;
==OpenSIPs==&lt;br /&gt;
Vamos iniciar o processo de instalação com o OpenSIPs, siga os procedimentos abaixo para evitar qualquer dificuldade.&lt;br /&gt;
&lt;br /&gt;
===Dependencias===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====Atualizando o sistema====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum -y update&lt;br /&gt;
yum -y upgrade&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pacotes de desenvolvimento ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall 'Development Tools' -y&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
yum install wget mysql-server pcre-devel libxml2-devel xmlrpc-c-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Desabilitando o SELINUX ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/bin/sed -i -e s,'SELINUX=enforcing','SELINUX=disabled', /etc/selinux/config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durante a instalação o sistema irá lhe perguntar a senha de root para o servidor MySQL é importante que você se lembre da mesma posteriormente pois utilizaremos a mesma.&lt;br /&gt;
&lt;br /&gt;
===Compilando o OpenSIPs===&lt;br /&gt;
Para manter um padrão onde os dados estao vamos utilizar o diretório /usr/src/ para o download de código fonte.&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/&lt;br /&gt;
 wget -c http://opensips.org/pub/opensips/1.9.1/src/opensips-1.9.1_src.tar.gz&lt;br /&gt;
 tar -xzvf opensips-1.9.1_src.tar.gz&lt;br /&gt;
 cd opensips-1.9.1-tls/&lt;br /&gt;
 make menuconfig&lt;br /&gt;
&lt;br /&gt;
===Preparando a Configuração===&lt;br /&gt;
&lt;br /&gt;
Antes de darmos inicio ao arquivo de configuração, vamos ajustar algumas questões, o opensips instala os arquivos (se voce nao alterar o parametro) em /usr, consequentemente as configurações ficam em /usr/etc , eu por padrão faço um link para o diretório /etc, assim acesso as configurações em /etc/opensips&lt;br /&gt;
&lt;br /&gt;
 ln -s /usr/etc/opensips /etc/&lt;br /&gt;
&lt;br /&gt;
No caso do debian o script de inicialização utiliza um arquivo extra de configuração&lt;br /&gt;
 cp packaging/debian/opensips.default /etc/default/opensips&lt;br /&gt;
&lt;br /&gt;
Para o script de inicialização execute o comando abaixo&lt;br /&gt;
 cp packaging/debian/opensips.init /etc/init.d/opensips&lt;br /&gt;
 chmod +x /etc/init.d/opensips&lt;br /&gt;
 update-rc.d opensips defaults&lt;br /&gt;
&lt;br /&gt;
Edite o arquivo /etc/default/opensips , a altere o parametro '''RUN_OPENSIPS''' para yes&lt;br /&gt;
&lt;br /&gt;
Você pode notar que no arquivo é mensionado o usuário de execução do opensips como opensips, então vamos ter de criar este usuário ( e grupo )&lt;br /&gt;
&lt;br /&gt;
 groupadd opensips&lt;br /&gt;
 mkdir /var/run/opensips&lt;br /&gt;
 useradd -d /var/run/opensips/ -s /bin/false -g opensips opensips&lt;br /&gt;
 chown -R opensips.opensips /var/run/opensips&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Configurando o opensipsctl===&lt;br /&gt;
O opensipsctl (e opensipsdbctl) utilizam o arquivo de configuração /etc/opensips/opensipsctlrc, abaixo segue o conteúdo do arquivo. (Sugiro que você faça um backup dos arquivos originais para ter uma copia, existem parametros que você pode estudar depois).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DBENGINE=MYSQL&lt;br /&gt;
DBHOST=localhost&lt;br /&gt;
DBNAME=opensips&lt;br /&gt;
DBRWUSER=opensips&lt;br /&gt;
DBRWPW=&amp;quot;opensipsrw&amp;quot;&lt;br /&gt;
SIP_DOMAIN=10.254.254.6  ### caso voce esteja usando outro ip altere aqui&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DBROOTUSER=&amp;quot;root&amp;quot;&lt;br /&gt;
INSTALL_EXTRA_TABLES=ask&lt;br /&gt;
ALIASES_TYPE=&amp;quot;DB&amp;quot;&lt;br /&gt;
MI_CONNECTOR=FIFO:/tmp/opensips_fifo&lt;br /&gt;
# VERIFY_ACL=1&lt;br /&gt;
# ACL_GROUPS=&amp;quot;local ld int voicemail free-pstn&amp;quot;&lt;br /&gt;
# VERBOSE=1&lt;br /&gt;
# STORE_PLAINTEXT_PW=0&lt;br /&gt;
# NOHLPRINT=1&lt;br /&gt;
PID_FILE=/var/run/opensips/opensips.pid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Criando o banco de dados===&lt;br /&gt;
Agora que temos nosso arquivo configurado vamos fazer a criação do banco de dados, execute o comando abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
opensipsdbctl create opensips&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema irá lhe perguntar algumas coisas, responda Y (sim) para todas para que ele instale todas as tabelas, não usaremos todas elas, mas desta forma você fica com praticamente tudo criado para o caso de uma expansão dos recursos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Instalando o RTP Proxy===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/src/&lt;br /&gt;
wget -c http://b2bua.org/chrome/site/rtpproxy-1.2.1.tar.gz&lt;br /&gt;
tar -xzvf rtpproxy-1.2.1.tar.gz&lt;br /&gt;
cd rtpproxy-1.2.1&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
groupadd rtpproxy&lt;br /&gt;
useradd -d /var/run/rtpproxy -s /bin/true -g rtpproxy rtpproxy&lt;br /&gt;
mkdir /var/log/rtpproxy&lt;br /&gt;
mkdir /var/run/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/log/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/run/rtpproxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Arquivo de inicialização====&lt;br /&gt;
'''/etc/init.d/rtpproxy'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# Este script e de autoria de Mike Tesliuk&lt;br /&gt;
# qualquer falha no mesmo por favor informe &lt;br /&gt;
# atraves do email mike (a) tesliuk.com&lt;br /&gt;
#&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:          rtpproxy&lt;br /&gt;
# Required-Start:    $syslog $network $local_fs $time&lt;br /&gt;
# Required-Stop:     $syslog $network $local_fs&lt;br /&gt;
# Default-Start:     2 3 4 5&lt;br /&gt;
# Default-Stop:      0 1 6&lt;br /&gt;
# Short-Description: Start the RTPPROXY server&lt;br /&gt;
# Description:       Start the RTPPROXY server&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin&lt;br /&gt;
USELOG=1&lt;br /&gt;
USER=rtpproxy&lt;br /&gt;
# Altere o ip abaixo para o ip de seu sistema&lt;br /&gt;
IPADDR=&amp;quot;10.254.254.6&amp;quot;&lt;br /&gt;
&lt;br /&gt;
. /lib/lsb/init-functions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
start(){&lt;br /&gt;
        echo &amp;quot;Iniciando RTP PROXY &amp;quot;&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                if [ &amp;quot;${USELOG}&amp;quot; = &amp;quot;1&amp;quot; ]; then&lt;br /&gt;
                        echo &amp;quot;Iniciando com LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER -F -f d DBUG 2&amp;amp;&amp;gt; /var/log/rtpproxy/rtpproxy.log &amp;amp;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Iniciando sem LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER  -F -f d DBUG 2&amp;amp;&amp;gt; /dev/null&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;START OK&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
        else&lt;br /&gt;
                echo &amp;quot;Processo ja em execucao&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
stop(){&lt;br /&gt;
&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                echo &amp;quot;Processo nao encontrado&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
                kill -9 $(pidof rtpproxy)&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;STOP OK&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Falha em realizar stop do servico&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
case $1 in&lt;br /&gt;
        start)&lt;br /&gt;
                start&lt;br /&gt;
        ;;&lt;br /&gt;
        stop)&lt;br /&gt;
                stop&lt;br /&gt;
        ;;&lt;br /&gt;
        restart)&lt;br /&gt;
                stop&lt;br /&gt;
                start&lt;br /&gt;
&lt;br /&gt;
        ;;&lt;br /&gt;
        *)&lt;br /&gt;
                echo &amp;quot;Utilize: stop | start | restart&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos dar permissao e colocar na inicialização&lt;br /&gt;
 chmod +x /etc/init.d/rtpproxy &lt;br /&gt;
 update-rc.d rtpproxy defaults&lt;br /&gt;
 /etc/init.d/rtpproxy start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Criando o arquivo opensips.cfg===&lt;br /&gt;
O arquivo opensips.cfg é a onde a coisa toda acontece para o opensips, claro que ele dependerá de informações que estarão no banco de dados, mas é onde criamos todas as nossas rotas e validações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Este tutorial nao esta terminado, este arquivo ainda esta em testes &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
####### Global Parameters #########&lt;br /&gt;
debug=3&lt;br /&gt;
log_stderror=no&lt;br /&gt;
log_facility=LOG_LOCAL0&lt;br /&gt;
&lt;br /&gt;
fork=yes&lt;br /&gt;
children=4&lt;br /&gt;
&lt;br /&gt;
/* Descomente as linhas abaixo para ativar o debug */&lt;br /&gt;
#debug=7&lt;br /&gt;
#fork=no&lt;br /&gt;
#log_stderror=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Comente a linha abaixo para ativar a descoberta automatica de enderecos locais&lt;br /&gt;
 , isso significa que o sistema ira verificar todos os ips ativos e hosts e entao ativara&lt;br /&gt;
 o protocolo para todos eles */ &lt;br /&gt;
auto_aliases=no&lt;br /&gt;
&lt;br /&gt;
/* Defina aqui o ip a ser utilizado */&lt;br /&gt;
listen=udp:10.254.254.6:5060   # Altere este IP para o seu ambiente&lt;br /&gt;
&lt;br /&gt;
/* Nao usaremos sip por tcp nem tls neste script */&lt;br /&gt;
disable_tcp=yes&lt;br /&gt;
&lt;br /&gt;
disable_tls=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Secao de modulos ########&lt;br /&gt;
&lt;br /&gt;
#set module path&lt;br /&gt;
mpath=&amp;quot;/usr//lib64/opensips/modules/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;signaling.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sl.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;tm.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_timer&amp;quot;, 5)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_inv_timer&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;restart_fr_on_each_reply&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;onreply_avp_mode&amp;quot;, 1)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rr.so&amp;quot;&lt;br /&gt;
/* do not append from tag to the RR (no need for this script) */&lt;br /&gt;
modparam(&amp;quot;rr&amp;quot;, &amp;quot;append_fromtag&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;maxfwd.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sipmsgops.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;mi_fifo.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_name&amp;quot;, &amp;quot;/tmp/opensips_fifo&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_mode&amp;quot;, 0666)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;db_mysql.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;uri.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;uri&amp;quot;, &amp;quot;use_uri_table&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;usrloc.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;nat_bflag&amp;quot;, &amp;quot;FLB_NATB&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_mode&amp;quot;,   2)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;registrar.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;registrar&amp;quot;, &amp;quot;tcp_persistent_flag&amp;quot;, &amp;quot;TCP_PERSISTENT&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
/* Descomente a linha abaixo para nao permitir mais de 10 contatos por conta */&lt;br /&gt;
#modparam(&amp;quot;registrar&amp;quot;, &amp;quot;max_contacts&amp;quot;, 10)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;acc.so&amp;quot;&lt;br /&gt;
/* Quais eventos deverao ser registrados ? */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;early_media&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;report_cancels&amp;quot;, 0)&lt;br /&gt;
/* por padrao nos nao ajustamos a direcao em requisicoes sequencias, &lt;br /&gt;
 se voce deseja usar este recurso tenha certeza de ativar o &amp;quot;appen_fromtag&amp;quot; &lt;br /&gt;
 para o modulo &amp;quot;rr&amp;quot; */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;detect_direction&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;failed_transaction_flag&amp;quot;, &amp;quot;FLT_ACCFAILED&amp;quot;)&lt;br /&gt;
/* Gatilhos para accounting  (flags) */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_extra&amp;quot;, &lt;br /&gt;
	&amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_extra&amp;quot;, &amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;auth.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;auth_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;calculate_ha1&amp;quot;, yes)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;password_column&amp;quot;, &amp;quot;password&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;load_credentials&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;permissions.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;permissions&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;alias_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;alias_db&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;presence.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;presence&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
#loadmodule &amp;quot;presence_xml.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;dialog.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_mode&amp;quot;, 2)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_url&amp;quot;,&amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;dlg_match_mode&amp;quot;, 1)&lt;br /&gt;
#modparam(&amp;quot;dialog&amp;quot;, &amp;quot;default_timeout&amp;quot;, 60)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;siptrace.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;trace_flag&amp;quot;, 22)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;traced_user_avp&amp;quot;, &amp;quot;$avp(s:traceuser)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;nathelper.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;natping_interval&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;ping_nated_only&amp;quot;, 1)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_bflag&amp;quot;, &amp;quot;FLB_NATSIPPING&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_from&amp;quot;, &amp;quot;sip:pinger@10.254.254.6&amp;quot;) # Altere o ip para o ip do servidor&lt;br /&gt;
modparam(&amp;quot;nathelper|registrar&amp;quot;, &amp;quot;received_avp&amp;quot;, &amp;quot;$avp(RECEIVED)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rtpproxy.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;rtpproxy&amp;quot;, &amp;quot;rtpproxy_sock&amp;quot;, &amp;quot;udp:127.0.0.1:7722&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Logica de roteamento ########&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route {&lt;br /&gt;
&lt;br /&gt;
	if (!mf_process_maxfwd_header(&amp;quot;3&amp;quot;)) {&lt;br /&gt;
                send_reply(&amp;quot;483&amp;quot;,&amp;quot;looping&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;REQUISICAO RECEBIDA, ENVIANDO PARA REQINIT&amp;quot;);&lt;br /&gt;
	# Checagem inicial por requisicao&lt;br /&gt;
	route(REQINIT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA NAT&amp;quot;);&lt;br /&gt;
	# Deteccao de nat&lt;br /&gt;
	route(NAT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA WITHINDLG&amp;quot;);&lt;br /&gt;
	# Gerenciando requisicaoes com dialog&lt;br /&gt;
	route(WITHINDLG);&lt;br /&gt;
&lt;br /&gt;
	# Manipulando requisicoes iniciais (nao consta To tag)&lt;br /&gt;
	&lt;br /&gt;
	# Processando CANCEL&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;CANCEL&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD CANCEL&amp;quot;);&lt;br /&gt;
		if(t_check_trans()){&lt;br /&gt;
			t_relay();&lt;br /&gt;
		}&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	t_check_trans();&lt;br /&gt;
&lt;br /&gt;
	# Enviando para autenticacao&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA AUTENTICACAO&amp;quot;);&lt;br /&gt;
	route(AUTH);&lt;br /&gt;
&lt;br /&gt;
	# gravando rota para formacao dos dialogs (caso sejam roteados)&lt;br /&gt;
	# removemos qualquer cabecalho de rota pre carregado&lt;br /&gt;
	remove_hf(&amp;quot;Route&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE OU SIBSCRIBE&amp;quot;);&lt;br /&gt;
		record_route();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Contabilizando (acc) INVITES&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE, FAZENDOA ACC&amp;quot;);&lt;br /&gt;
		setflag(FLT_ACC);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando chamada para destinos externos&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA SIPOUT&amp;quot;);&lt;br /&gt;
	route(SIPOUT);&lt;br /&gt;
&lt;br /&gt;
	# Requisicoes para dominio local&lt;br /&gt;
	&lt;br /&gt;
	# Roteando requisicoes de PRESENCE&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PRESENCE&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	route(PRESENCE);&lt;br /&gt;
&lt;br /&gt;
	# Gerenciando pedidos de registro&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA REGISTRAR&amp;quot;);	&lt;br /&gt;
	route(REGISTRAR);&lt;br /&gt;
&lt;br /&gt;
	if($ru==&amp;quot;&amp;quot;){&lt;br /&gt;
		xlog(&amp;quot;ru --&amp;gt; vazio&amp;quot;);&lt;br /&gt;
		# Requisicao sem usuario na RURI&lt;br /&gt;
		sl_send_reply(&amp;quot;484&amp;quot;, &amp;quot;Address Incomplete&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando requisicao para PSTN&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PSTN&amp;quot;);&lt;br /&gt;
	route(PSTN);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Salvando informacao de quem originou a chamad&lt;br /&gt;
	$avp(callee)=$rU;&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA DISPATCH PSTN&amp;quot;);&lt;br /&gt;
	route(FSDISPATCH);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	# Servico de localizacao de usuario&lt;br /&gt;
	route(LOCATION);&lt;br /&gt;
&lt;br /&gt;
	# Efetuando o relay (encaminhamento)&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[RELAY] {&lt;br /&gt;
	if(check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
		setbflag(FLB_NATB);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(isflagset(FLT_NATS) || isbflagset(FLB_NATB)){&lt;br /&gt;
		#route(RTPPROXY);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
#		t_on_reply(&amp;quot;REPLY_ONE&amp;quot;);&lt;br /&gt;
#		t_on_failure(&amp;quot;FAIL_ONE&amp;quot;);&lt;br /&gt;
#	}&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;AQUI TENTAMOS ENVIAR A CHAMADA $fU $tU&amp;quot;);&lt;br /&gt;
	if(!t_relay()){&lt;br /&gt;
		xlog(&amp;quot;FALHA EM ENVIAR A CHAMADA, NAO FOI POSSIVEL FAZER O RELAY&amp;quot;);&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
	}&lt;br /&gt;
	xlog(&amp;quot;CHAMADA FOI ENVIADA AQUI, QUAL O ERRO ENTAO&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REQINIT] {&lt;br /&gt;
	if(!mf_process_maxfwd_header(&amp;quot;10&amp;quot;)){&lt;br /&gt;
		sl_send_reply(&amp;quot;483&amp;quot;, &amp;quot;Too Many Hops&amp;quot;);&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[WITHINDLG] {&lt;br /&gt;
	if(has_totag()){&lt;br /&gt;
		if(loose_route()){&lt;br /&gt;
			if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
				setflag(FLT_ACC);&lt;br /&gt;
				setflag(FLT_ACCFAILED);&lt;br /&gt;
			}&lt;br /&gt;
			route(RELAY);&lt;br /&gt;
		}else{&lt;br /&gt;
			if(is_method(&amp;quot;SUBSCRIBE&amp;quot;) &amp;amp;&amp;amp; uri==myself) {&lt;br /&gt;
				# requisicao de subscribe pre-estabelecida&lt;br /&gt;
				route(PRESENCE);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;ACK&amp;quot;)){&lt;br /&gt;
				if(t_check_trans()){&lt;br /&gt;
					t_relay();&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}else{&lt;br /&gt;
				# ACK para transacao nao encontrada, ignoramos...&lt;br /&gt;
				exit;&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			sl_send_reply(&amp;quot;404&amp;quot;, &amp;quot;Not Here&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		}	&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REGISTRAR] {&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		if(isflagset(FLT_NATS)){&lt;br /&gt;
			setbflag(FLB_NATB);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(!save(&amp;quot;location&amp;quot;)){&lt;br /&gt;
			sl_reply_error();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[LOCATION] {&lt;br /&gt;
&lt;br /&gt;
	alias_db_lookup(&amp;quot;dbaliases&amp;quot;);&lt;br /&gt;
	if(!lookup(&amp;quot;location&amp;quot;)){&lt;br /&gt;
		switch($rc) {&lt;br /&gt;
			case -1:&lt;br /&gt;
			case -3:&lt;br /&gt;
				t_newtran();&lt;br /&gt;
				t_reply(&amp;quot;404&amp;quot;,&amp;quot;Not Found&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			case -2:&lt;br /&gt;
				sl_send_reply(&amp;quot;405&amp;quot;, &amp;quot;Method Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		setflag(FLT_ACCMISSED);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PRESENCE] {&lt;br /&gt;
	if(!is_method(&amp;quot;PUBLISH|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!t_newtran()){&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
		handle_publish();&lt;br /&gt;
	}else if(is_method(&amp;quot;SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		handle_subscribe();&lt;br /&gt;
	}&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[AUTH]{&lt;br /&gt;
	xlog(&amp;quot;PEDIDO DE AUTENTICACAO&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		# atentica pedidos de registro&lt;br /&gt;
		if(!www_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
			www_challenge(&amp;quot;&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if($au!=$tU){&lt;br /&gt;
			sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	}else{&lt;br /&gt;
		if(route(FSINBOUND)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(check_source_address(&amp;quot;0&amp;quot;)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(from_uri==myself){&lt;br /&gt;
			if(!proxy_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
				proxy_challenge(&amp;quot;&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
				if($au!=$tU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}else{&lt;br /&gt;
				if($au!=$fU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			# Validamos (autenticamos) o usuario&lt;br /&gt;
			consume_credentials();&lt;br /&gt;
		}else{&lt;br /&gt;
		&lt;br /&gt;
			# usuario nao e local, vamos negar&lt;br /&gt;
			if(!uri==myself){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not relaying&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}	&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[NAT] {&lt;br /&gt;
	force_rport();&lt;br /&gt;
	if(nat_uac_test(&amp;quot;19&amp;quot;)){&lt;br /&gt;
		if(method==&amp;quot;REGISTER&amp;quot;){&lt;br /&gt;
			fix_nated_register();&lt;br /&gt;
		}else{&lt;br /&gt;
			fix_nated_contact();&lt;br /&gt;
		}&lt;br /&gt;
		setflag(FLT_NATS);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[RTPPROXY] {&lt;br /&gt;
	if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}else if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		engage_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!has_totag()){&lt;br /&gt;
&lt;br /&gt;
		if(!check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
			add_rr_param(&amp;quot;;nat=yes&amp;quot;);&lt;br /&gt;
			xlog(&amp;quot;NAT yes NAO ENCONTRADO&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[SIPOUT]{&lt;br /&gt;
	if(!uri==myself){&lt;br /&gt;
		append_hf(&amp;quot;P-hint: outbound\r\n&amp;quot;);&lt;br /&gt;
		route(RELAY);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PSTN]{&lt;br /&gt;
        # neste caso apenas para exemplificar um uso simples&lt;br /&gt;
        # vamos fazer o redirecionamento par ao asterisk&lt;br /&gt;
        # realizar a dicagem da chamada&lt;br /&gt;
&lt;br /&gt;
        if(!($rU=~&amp;quot;^(\+|00)[1-9][0-9]{3,20}$&amp;quot;))&lt;br /&gt;
                return;&lt;br /&gt;
&lt;br /&gt;
        ## a regra acima aceita para discagem externa qualquer numero&lt;br /&gt;
        # comecado com 00 ou +&lt;br /&gt;
        #&lt;br /&gt;
&lt;br /&gt;
        if(from_uri!=myself){&lt;br /&gt;
                sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $ru = &amp;quot;sip:&amp;quot; + $rU + &amp;quot;@&amp;quot; + &amp;quot;10.254.254.6:5090&amp;quot;;&lt;br /&gt;
        xlog(&amp;quot;NOVO DESTINO: $ru&amp;quot;);&lt;br /&gt;
        route(RELAY);&lt;br /&gt;
        exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[XMLRPC]{&lt;br /&gt;
	# nao vamos implementar esta funcionalidade&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSINBOUND] {&lt;br /&gt;
	# verificar para validar o ip do asterisk:porta&lt;br /&gt;
	# se bater , responder com return 1;&lt;br /&gt;
	if($si==&amp;quot;10.254.254.6&amp;quot; &amp;amp;&amp;amp; $sp==&amp;quot;5090&amp;quot;){&lt;br /&gt;
		return(1);&lt;br /&gt;
	}else{&lt;br /&gt;
		return(-1);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSDISPATCH] {&lt;br /&gt;
&lt;br /&gt;
	if(!is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(route(FSINBOUND)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;CAIMOS NO SWITCH, VAMOS LOCALIZAR O PERFIL DA CHAMADA $rU&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if($rU =~ &amp;quot;^41$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH expressa comeca e termina em 41&amp;quot;);&lt;br /&gt;
			#regra de menu de voicemail, apenas &lt;br /&gt;
			# usuarios autenticados&lt;br /&gt;
			if($au==&amp;quot;&amp;quot;){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$rU = &amp;quot;vma-&amp;quot; + $au;&lt;br /&gt;
	}else if($rU =~ &amp;quot;^441[0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCA 441XX &amp;quot;);&lt;br /&gt;
			# numero discado comeca com 441 seguido de dois digitos&lt;br /&gt;
			# chamada direta para inbox do voicemail&lt;br /&gt;
			strip(2);&lt;br /&gt;
			route(FSVBOX);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^433[01][0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH OPCAO 433[01]XX&amp;quot;);&lt;br /&gt;
			# numero comecado em 443, seguido de 0 ou 1, mais dois digitos&lt;br /&gt;
			# sistema de conferencia&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^45[0-9]+$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCAO 45X.&amp;quot;);&lt;br /&gt;
			#numero comecado com 45, seguindo de numeros;&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else{&lt;br /&gt;
			xlog(&amp;quot;OPCAO DEFAULT DO SWITCH&amp;quot;);&lt;br /&gt;
			# usuario offline, enviando para voicemail&lt;br /&gt;
			if(!registered(&amp;quot;location&amp;quot;)){&lt;br /&gt;
				route(FSVBOX);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			# usuario online, fazendo bridging&lt;br /&gt;
			xlog(&amp;quot;USUARIO ESTA ONLINE VAMOS FAZER BRIDGE&amp;quot;);&lt;br /&gt;
			prefix(&amp;quot;kb-&amp;quot;);&lt;br /&gt;
			if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
				t_on_failure(&amp;quot;FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
	}&lt;br /&gt;
	route(FSRELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSVBOX&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($rU =~ &amp;quot;^441[0-9][0-9]&amp;quot;){&lt;br /&gt;
		strip(2);&lt;br /&gt;
	}&lt;br /&gt;
	prefix(&amp;quot;vm-&amp;quot;);&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[FSRELAY] {&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSRELAY&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
branch_route[BRANCH_ONE]{&lt;br /&gt;
	xlog(&amp;quot;new branch at $ru&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
onreply_route[REPLY_ONE]{&lt;br /&gt;
	xlog(&amp;quot;Incoming reply&amp;quot;);&lt;br /&gt;
	if((isflagset(FLT_NATS) || isbflagset(FLB_NATB) &amp;amp;&amp;amp; status =~ &amp;quot;(183)|(2[0-9][0-9])&amp;quot;)){&lt;br /&gt;
		#rtpproxy_offer();&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	if(isbflagset(FLB_NATB)){&lt;br /&gt;
		fix_nated_contact();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_ONE]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_ONE&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_check_status(&amp;quot;486|408|480&amp;quot;)){&lt;br /&gt;
		$rU = $avp(callee);&lt;br /&gt;
		$var(newbranch) = 1;&lt;br /&gt;
		route(FSVBOX);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testes com Opensips (registro)==&lt;br /&gt;
&lt;br /&gt;
Antes de podermos testar precisamos iniciar o serviço, no momento estamos com ele operando em modo debug, então a inicialização deve ser realizada com o comando abaixo&lt;br /&gt;
 /etc/init.d/opensips debug&lt;br /&gt;
&lt;br /&gt;
Abra uma nova sessão no servidor e então vamos criar os usuários&lt;br /&gt;
 opensipsctl add 101 101&lt;br /&gt;
 opensipsctl add 102 102&lt;br /&gt;
 opensipsctl add 103 103&lt;br /&gt;
&lt;br /&gt;
usuario 101 com senha 101 e assim por diante&lt;br /&gt;
&lt;br /&gt;
Faça a onexão com seu softphone, aqui para testes utilizei o jitsi e o zoiper, neste momento vamos apenas fazer o registro do usuário para testar a autenticação, se você tentar realizar uma discagem não funcionará pois neste caso o processo depende do Asterisk que ainda não está configurado, vamos dar inicio nesta configuração agora.&lt;br /&gt;
&lt;br /&gt;
==Asterisk==&lt;br /&gt;
Não vamos dar muitos detalhes da instalação do asterisk aqui, a ideia é simplesmente ter o mesmo funcionando da forma que necessitamos.&lt;br /&gt;
&lt;br /&gt;
===Instalando dependências===&lt;br /&gt;
&lt;br /&gt;
Dependências necessárias para a instalação do Asterisk.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Asterisk 1.8===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget -c http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8-current.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Compilando o Asterisk 1.8====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar zxvf asterisk-1.8-current.tar.gz&lt;br /&gt;
cd asterisk-1.8-current.tar.gz&lt;br /&gt;
./configure  --disable-xmldoc&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make samples&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Após a instalação , abra o arquivo /etc/asterisk/sip.conf, localize a linha '''udpbindaddr=0.0.0.0''' e altere para '''udpbindaddr=0.0.0.0:5090'''  , depois ao fim do arquivo adicione.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
type=peer&lt;br /&gt;
host=10.254.254.6&lt;br /&gt;
port=5060&lt;br /&gt;
qualify=yes&lt;br /&gt;
context=opensips&lt;br /&gt;
insecure=port,invite&lt;br /&gt;
canreinvite=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora abra o arquivo '''/etc/asterisk/extensions.conf''' , crie no fim do arquivo a seguinte entrada.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _kb-1XX,1,NoOp(CHAMADA INTERNA - FAZER BRIDGE - ${CALLERID(num)} ${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Dial(SIP/opensips/${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Goto(opensips,vm-${EXTEN:3},1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vm-1XX,1,NoOp(CHAMADA PARA VOICEMAIL)&lt;br /&gt;
same =&amp;gt; n,Voicemail(${EXTEN:3}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vma-1XX,1,NoOp(CHAMADA PARA VOICEMAIL - ADMINISTRATIVO)&lt;br /&gt;
same =&amp;gt; n,VoicemailMain(${EXTEN:4}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _3[01]XX,1,NoOp(CHAMADA PARA CONFERENCIA)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,ConfBridge(${EXTEN},cM1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _00.,1,NoOp(CHAMADA PARA PSTN)&lt;br /&gt;
same =&amp;gt; n,Wait(2)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,Wait(1)&lt;br /&gt;
same =&amp;gt; n,PlayBack(tt-monkeys)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; h,1,Hangup()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finalmente precisamos criar as entradas do voicemail, para isso altere o arquivo '''/etc/asterisk/voicemail.conf''' localize o contexto '''[default]''' e então adicione as entradas para seu voicemail, segue dois exemplos abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
101 =&amp;gt; 123123,Mike Tesliuk&lt;br /&gt;
102 =&amp;gt; 123123,Mike Tesliuk 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Feito isso, faça um restart no asterisk&lt;br /&gt;
 /etc/init.d/asterisk restart&lt;br /&gt;
&lt;br /&gt;
Agora você ja poderá fazer os testes, basicamente criamos as seguintes situações para serem testadas.&lt;br /&gt;
&lt;br /&gt;
*1 Autenticação de usuários&lt;br /&gt;
*2 Chamada entre usuários&lt;br /&gt;
*3 Encaminhamento para caixa postal&lt;br /&gt;
*4 Acesso a caixa postal&lt;br /&gt;
*5 Acesso a conferência&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Predefini%C3%A7%C3%A3o:Docs_em_Destaque&amp;diff=1394</id>
		<title>Predefinição:Docs em Destaque</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Predefini%C3%A7%C3%A3o:Docs_em_Destaque&amp;diff=1394"/>
		<updated>2013-08-27T08:49:54Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Abaixo temos alguns documentos que gostariamos de destacar.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Titulo!!Descrição&lt;br /&gt;
|-&lt;br /&gt;
|[[OpenSIPs e Asterisk]]||Configuração de um OpenSIPs com Asterisk &lt;br /&gt;
|-&lt;br /&gt;
|[[OpenSIPs e Asterisk - LIKE CentOS]]||Fork do documento original do Mike portado para CentOS 6.4 &lt;br /&gt;
|-&lt;br /&gt;
|[[Opensips 1.9]]||Tutorial de compilação e instalação do OpenSIPS 1.9 utilizando os recursos de geração de arquivo &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1393</id>
		<title>OpenSIPs e Asterisk - LIKE CentOS</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1393"/>
		<updated>2013-08-27T08:34:51Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: /* Asterisk */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=white&amp;gt; NÃO SIGA ESTE DOCUMENTO. O MESMO SE ENCONTRA EM DESEVOLVIMENTO&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este tutorial é baseado em um tutorial originalmente escrito pelo Mike, se quiser verificar o tutorial original acesse http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk&lt;br /&gt;
&lt;br /&gt;
Para esta implementação utilizamos CentOS 6.4 64 Bits , OpenSIPS 1.9 e Asterisk 1.8.23 &lt;br /&gt;
&lt;br /&gt;
==Funcionalidades==&lt;br /&gt;
Este tutorial tem por objetivo atingir as seguintes funcionalidades.&lt;br /&gt;
*Autenticação de usuário&lt;br /&gt;
*Registro de usuário&lt;br /&gt;
*Localização de usuário (encaminhamento de chamadas)&lt;br /&gt;
*Roteamento de chamadas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Através do Asterisk estenderemos estas funcionalidades agregando.&lt;br /&gt;
*Correio de voz (Voicemail)&lt;br /&gt;
*Conferencia &lt;br /&gt;
*SBC ( Pode ser utilizado para transcoding, esconder topologia, play de mensagens e tarifação )&lt;br /&gt;
*Outros serviços de media (Anuncios, Ura's e coisas do tipo)&lt;br /&gt;
&lt;br /&gt;
==Definições==&lt;br /&gt;
Para um melhor entendimento da solução vamos expor aqui algumas definições de nosso sistema.&lt;br /&gt;
*Usuários locais terão ramais com 3 digitos (ex: 101, 102, 103)&lt;br /&gt;
*Identidade do correio de voz será o mesmo do ramal&lt;br /&gt;
*Serviços de media (acesso a voicemail e outros) receberão rotas de 4 digitos&lt;br /&gt;
*Opensips e Asterisk utilizarão o mesmo servidor (Neste caso IP: 10.254.254.6)&lt;br /&gt;
*Os serviços rodarão nas portas 5060 (opensips) , 5090 (Asterisk)&lt;br /&gt;
&lt;br /&gt;
==Funcionamento==&lt;br /&gt;
A autenticação do usuário será realizada pelo OpenSIPs, quando uma chamada é autenticada então ela serguirá:&lt;br /&gt;
*Se o usuário de destino não está online a chamada será enviada para o Asterisk para função de correio de voz&lt;br /&gt;
*Se o usuário está online a chamada será encaminhada para o Asterisk, dest forma é possivel acionar funcionalidades como anuncios, definição de tempo de chamada, forçar codecs e outras funcionalidades.&lt;br /&gt;
*Asterisk envia a chamada novamente para o OpenSIPs que verificará no location e entregará a chamada para o usuário.&lt;br /&gt;
*Se a chamada não for atendida o Opensips irá re-encaminhar para o Asterisk direcionando para função de voicemail&lt;br /&gt;
&lt;br /&gt;
==OpenSIPs==&lt;br /&gt;
Vamos iniciar o processo de instalação com o OpenSIPs, siga os procedimentos abaixo para evitar qualquer dificuldade.&lt;br /&gt;
&lt;br /&gt;
===Dependencias===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====Atualizando o sistema====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum -y update&lt;br /&gt;
yum -y upgrade&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pacotes de desenvolvimento ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall 'Development Tools' -y&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
yum install wget mysql-server pcre-devel libxml2-devel xmlrpc-c-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Desabilitando o SELINUX ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/bin/sed -i -e s,'SELINUX=enforcing','SELINUX=disabled', /etc/selinux/config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durante a instalação o sistema irá lhe perguntar a senha de root para o servidor MySQL é importante que você se lembre da mesma posteriormente pois utilizaremos a mesma.&lt;br /&gt;
&lt;br /&gt;
===Compilando o OpenSIPs===&lt;br /&gt;
Para manter um padrão onde os dados estao vamos utilizar o diretório /usr/src/ para o download de código fonte.&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/&lt;br /&gt;
 wget -c http://opensips.org/pub/opensips/1.9.1/src/opensips-1.9.1_src.tar.gz&lt;br /&gt;
 tar -xzvf opensips-1.9.1_src.tar.gz&lt;br /&gt;
 cd opensips-1.9.1-tls/&lt;br /&gt;
 make menuconfig&lt;br /&gt;
&lt;br /&gt;
Neste ponto o sistema irá abrir uma tela com algumas opções para selecionar, Acesse a primeira opção do menu, no submenu acesse a segunda opção ( Configure excluded modules ), selecione os módulos db_mysql , dialplan , mi_xmlrpc , presence e presence_xml&lt;br /&gt;
&lt;br /&gt;
Agora volte ao submenu, e selecione a opção Save Changes, volte para o menu principal e selecione '''Compile and Install OpenSips''' , deixe que o sistema execute suas funções.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ao finalizar a compilação você retornará ao menu, va na opção '''Exit and Save all changes'''&lt;br /&gt;
&lt;br /&gt;
===Preparando a Configuração===&lt;br /&gt;
&lt;br /&gt;
Antes de darmos inicio ao arquivo de configuração, vamos ajustar algumas questões, o opensips instala os arquivos (se voce nao alterar o parametro) em /usr, consequentemente as configurações ficam em /usr/etc , eu por padrão faço um link para o diretório /etc, assim acesso as configurações em /etc/opensips&lt;br /&gt;
&lt;br /&gt;
 ln -s /usr/etc/opensips /etc/&lt;br /&gt;
&lt;br /&gt;
No caso do debian o script de inicialização utiliza um arquivo extra de configuração&lt;br /&gt;
 cp packaging/debian/opensips.default /etc/default/opensips&lt;br /&gt;
&lt;br /&gt;
Para o script de inicialização execute o comando abaixo&lt;br /&gt;
 cp packaging/debian/opensips.init /etc/init.d/opensips&lt;br /&gt;
 chmod +x /etc/init.d/opensips&lt;br /&gt;
 update-rc.d opensips defaults&lt;br /&gt;
&lt;br /&gt;
Edite o arquivo /etc/default/opensips , a altere o parametro '''RUN_OPENSIPS''' para yes&lt;br /&gt;
&lt;br /&gt;
Você pode notar que no arquivo é mensionado o usuário de execução do opensips como opensips, então vamos ter de criar este usuário ( e grupo )&lt;br /&gt;
&lt;br /&gt;
 groupadd opensips&lt;br /&gt;
 mkdir /var/run/opensips&lt;br /&gt;
 useradd -d /var/run/opensips/ -s /bin/false -g opensips opensips&lt;br /&gt;
 chown -R opensips.opensips /var/run/opensips&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Configurando o opensipsctl===&lt;br /&gt;
O opensipsctl (e opensipsdbctl) utilizam o arquivo de configuração /etc/opensips/opensipsctlrc, abaixo segue o conteúdo do arquivo. (Sugiro que você faça um backup dos arquivos originais para ter uma copia, existem parametros que você pode estudar depois).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DBENGINE=MYSQL&lt;br /&gt;
DBHOST=localhost&lt;br /&gt;
DBNAME=opensips&lt;br /&gt;
DBRWUSER=opensips&lt;br /&gt;
DBRWPW=&amp;quot;opensipsrw&amp;quot;&lt;br /&gt;
SIP_DOMAIN=10.254.254.6  ### caso voce esteja usando outro ip altere aqui&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DBROOTUSER=&amp;quot;root&amp;quot;&lt;br /&gt;
INSTALL_EXTRA_TABLES=ask&lt;br /&gt;
ALIASES_TYPE=&amp;quot;DB&amp;quot;&lt;br /&gt;
MI_CONNECTOR=FIFO:/tmp/opensips_fifo&lt;br /&gt;
# VERIFY_ACL=1&lt;br /&gt;
# ACL_GROUPS=&amp;quot;local ld int voicemail free-pstn&amp;quot;&lt;br /&gt;
# VERBOSE=1&lt;br /&gt;
# STORE_PLAINTEXT_PW=0&lt;br /&gt;
# NOHLPRINT=1&lt;br /&gt;
PID_FILE=/var/run/opensips/opensips.pid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Criando o banco de dados===&lt;br /&gt;
Agora que temos nosso arquivo configurado vamos fazer a criação do banco de dados, execute o comando abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
opensipsdbctl create opensips&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema irá lhe perguntar algumas coisas, responda Y (sim) para todas para que ele instale todas as tabelas, não usaremos todas elas, mas desta forma você fica com praticamente tudo criado para o caso de uma expansão dos recursos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Instalando o RTP Proxy===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/src/&lt;br /&gt;
wget -c http://b2bua.org/chrome/site/rtpproxy-1.2.1.tar.gz&lt;br /&gt;
tar -xzvf rtpproxy-1.2.1.tar.gz&lt;br /&gt;
cd rtpproxy-1.2.1&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
groupadd rtpproxy&lt;br /&gt;
useradd -d /var/run/rtpproxy -s /bin/true -g rtpproxy rtpproxy&lt;br /&gt;
mkdir /var/log/rtpproxy&lt;br /&gt;
mkdir /var/run/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/log/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/run/rtpproxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Arquivo de inicialização====&lt;br /&gt;
'''/etc/init.d/rtpproxy'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# Este script e de autoria de Mike Tesliuk&lt;br /&gt;
# qualquer falha no mesmo por favor informe &lt;br /&gt;
# atraves do email mike (a) tesliuk.com&lt;br /&gt;
#&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:          rtpproxy&lt;br /&gt;
# Required-Start:    $syslog $network $local_fs $time&lt;br /&gt;
# Required-Stop:     $syslog $network $local_fs&lt;br /&gt;
# Default-Start:     2 3 4 5&lt;br /&gt;
# Default-Stop:      0 1 6&lt;br /&gt;
# Short-Description: Start the RTPPROXY server&lt;br /&gt;
# Description:       Start the RTPPROXY server&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin&lt;br /&gt;
USELOG=1&lt;br /&gt;
USER=rtpproxy&lt;br /&gt;
# Altere o ip abaixo para o ip de seu sistema&lt;br /&gt;
IPADDR=&amp;quot;10.254.254.6&amp;quot;&lt;br /&gt;
&lt;br /&gt;
. /lib/lsb/init-functions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
start(){&lt;br /&gt;
        echo &amp;quot;Iniciando RTP PROXY &amp;quot;&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                if [ &amp;quot;${USELOG}&amp;quot; = &amp;quot;1&amp;quot; ]; then&lt;br /&gt;
                        echo &amp;quot;Iniciando com LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER -F -f d DBUG 2&amp;amp;&amp;gt; /var/log/rtpproxy/rtpproxy.log &amp;amp;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Iniciando sem LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER  -F -f d DBUG 2&amp;amp;&amp;gt; /dev/null&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;START OK&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
        else&lt;br /&gt;
                echo &amp;quot;Processo ja em execucao&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
stop(){&lt;br /&gt;
&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                echo &amp;quot;Processo nao encontrado&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
                kill -9 $(pidof rtpproxy)&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;STOP OK&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Falha em realizar stop do servico&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
case $1 in&lt;br /&gt;
        start)&lt;br /&gt;
                start&lt;br /&gt;
        ;;&lt;br /&gt;
        stop)&lt;br /&gt;
                stop&lt;br /&gt;
        ;;&lt;br /&gt;
        restart)&lt;br /&gt;
                stop&lt;br /&gt;
                start&lt;br /&gt;
&lt;br /&gt;
        ;;&lt;br /&gt;
        *)&lt;br /&gt;
                echo &amp;quot;Utilize: stop | start | restart&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos dar permissao e colocar na inicialização&lt;br /&gt;
 chmod +x /etc/init.d/rtpproxy &lt;br /&gt;
 update-rc.d rtpproxy defaults&lt;br /&gt;
 /etc/init.d/rtpproxy start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Criando o arquivo opensips.cfg===&lt;br /&gt;
O arquivo opensips.cfg é a onde a coisa toda acontece para o opensips, claro que ele dependerá de informações que estarão no banco de dados, mas é onde criamos todas as nossas rotas e validações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Este tutorial nao esta terminado, este arquivo ainda esta em testes &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
####### Global Parameters #########&lt;br /&gt;
debug=3&lt;br /&gt;
log_stderror=no&lt;br /&gt;
log_facility=LOG_LOCAL0&lt;br /&gt;
&lt;br /&gt;
fork=yes&lt;br /&gt;
children=4&lt;br /&gt;
&lt;br /&gt;
/* Descomente as linhas abaixo para ativar o debug */&lt;br /&gt;
#debug=7&lt;br /&gt;
#fork=no&lt;br /&gt;
#log_stderror=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Comente a linha abaixo para ativar a descoberta automatica de enderecos locais&lt;br /&gt;
 , isso significa que o sistema ira verificar todos os ips ativos e hosts e entao ativara&lt;br /&gt;
 o protocolo para todos eles */ &lt;br /&gt;
auto_aliases=no&lt;br /&gt;
&lt;br /&gt;
/* Defina aqui o ip a ser utilizado */&lt;br /&gt;
listen=udp:10.254.254.6:5060   # Altere este IP para o seu ambiente&lt;br /&gt;
&lt;br /&gt;
/* Nao usaremos sip por tcp nem tls neste script */&lt;br /&gt;
disable_tcp=yes&lt;br /&gt;
&lt;br /&gt;
disable_tls=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Secao de modulos ########&lt;br /&gt;
&lt;br /&gt;
#set module path&lt;br /&gt;
mpath=&amp;quot;/usr//lib64/opensips/modules/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;signaling.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sl.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;tm.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_timer&amp;quot;, 5)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_inv_timer&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;restart_fr_on_each_reply&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;onreply_avp_mode&amp;quot;, 1)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rr.so&amp;quot;&lt;br /&gt;
/* do not append from tag to the RR (no need for this script) */&lt;br /&gt;
modparam(&amp;quot;rr&amp;quot;, &amp;quot;append_fromtag&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;maxfwd.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sipmsgops.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;mi_fifo.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_name&amp;quot;, &amp;quot;/tmp/opensips_fifo&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_mode&amp;quot;, 0666)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;db_mysql.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;uri.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;uri&amp;quot;, &amp;quot;use_uri_table&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;usrloc.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;nat_bflag&amp;quot;, &amp;quot;FLB_NATB&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_mode&amp;quot;,   2)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;registrar.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;registrar&amp;quot;, &amp;quot;tcp_persistent_flag&amp;quot;, &amp;quot;TCP_PERSISTENT&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
/* Descomente a linha abaixo para nao permitir mais de 10 contatos por conta */&lt;br /&gt;
#modparam(&amp;quot;registrar&amp;quot;, &amp;quot;max_contacts&amp;quot;, 10)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;acc.so&amp;quot;&lt;br /&gt;
/* Quais eventos deverao ser registrados ? */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;early_media&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;report_cancels&amp;quot;, 0)&lt;br /&gt;
/* por padrao nos nao ajustamos a direcao em requisicoes sequencias, &lt;br /&gt;
 se voce deseja usar este recurso tenha certeza de ativar o &amp;quot;appen_fromtag&amp;quot; &lt;br /&gt;
 para o modulo &amp;quot;rr&amp;quot; */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;detect_direction&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;failed_transaction_flag&amp;quot;, &amp;quot;FLT_ACCFAILED&amp;quot;)&lt;br /&gt;
/* Gatilhos para accounting  (flags) */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_extra&amp;quot;, &lt;br /&gt;
	&amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_extra&amp;quot;, &amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;auth.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;auth_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;calculate_ha1&amp;quot;, yes)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;password_column&amp;quot;, &amp;quot;password&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;load_credentials&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;permissions.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;permissions&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;alias_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;alias_db&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;presence.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;presence&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
#loadmodule &amp;quot;presence_xml.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;dialog.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_mode&amp;quot;, 2)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_url&amp;quot;,&amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;dlg_match_mode&amp;quot;, 1)&lt;br /&gt;
#modparam(&amp;quot;dialog&amp;quot;, &amp;quot;default_timeout&amp;quot;, 60)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;siptrace.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;trace_flag&amp;quot;, 22)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;traced_user_avp&amp;quot;, &amp;quot;$avp(s:traceuser)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;nathelper.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;natping_interval&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;ping_nated_only&amp;quot;, 1)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_bflag&amp;quot;, &amp;quot;FLB_NATSIPPING&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_from&amp;quot;, &amp;quot;sip:pinger@10.254.254.6&amp;quot;) # Altere o ip para o ip do servidor&lt;br /&gt;
modparam(&amp;quot;nathelper|registrar&amp;quot;, &amp;quot;received_avp&amp;quot;, &amp;quot;$avp(RECEIVED)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rtpproxy.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;rtpproxy&amp;quot;, &amp;quot;rtpproxy_sock&amp;quot;, &amp;quot;udp:127.0.0.1:7722&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Logica de roteamento ########&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route {&lt;br /&gt;
&lt;br /&gt;
	if (!mf_process_maxfwd_header(&amp;quot;3&amp;quot;)) {&lt;br /&gt;
                send_reply(&amp;quot;483&amp;quot;,&amp;quot;looping&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;REQUISICAO RECEBIDA, ENVIANDO PARA REQINIT&amp;quot;);&lt;br /&gt;
	# Checagem inicial por requisicao&lt;br /&gt;
	route(REQINIT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA NAT&amp;quot;);&lt;br /&gt;
	# Deteccao de nat&lt;br /&gt;
	route(NAT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA WITHINDLG&amp;quot;);&lt;br /&gt;
	# Gerenciando requisicaoes com dialog&lt;br /&gt;
	route(WITHINDLG);&lt;br /&gt;
&lt;br /&gt;
	# Manipulando requisicoes iniciais (nao consta To tag)&lt;br /&gt;
	&lt;br /&gt;
	# Processando CANCEL&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;CANCEL&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD CANCEL&amp;quot;);&lt;br /&gt;
		if(t_check_trans()){&lt;br /&gt;
			t_relay();&lt;br /&gt;
		}&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	t_check_trans();&lt;br /&gt;
&lt;br /&gt;
	# Enviando para autenticacao&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA AUTENTICACAO&amp;quot;);&lt;br /&gt;
	route(AUTH);&lt;br /&gt;
&lt;br /&gt;
	# gravando rota para formacao dos dialogs (caso sejam roteados)&lt;br /&gt;
	# removemos qualquer cabecalho de rota pre carregado&lt;br /&gt;
	remove_hf(&amp;quot;Route&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE OU SIBSCRIBE&amp;quot;);&lt;br /&gt;
		record_route();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Contabilizando (acc) INVITES&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE, FAZENDOA ACC&amp;quot;);&lt;br /&gt;
		setflag(FLT_ACC);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando chamada para destinos externos&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA SIPOUT&amp;quot;);&lt;br /&gt;
	route(SIPOUT);&lt;br /&gt;
&lt;br /&gt;
	# Requisicoes para dominio local&lt;br /&gt;
	&lt;br /&gt;
	# Roteando requisicoes de PRESENCE&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PRESENCE&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	route(PRESENCE);&lt;br /&gt;
&lt;br /&gt;
	# Gerenciando pedidos de registro&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA REGISTRAR&amp;quot;);	&lt;br /&gt;
	route(REGISTRAR);&lt;br /&gt;
&lt;br /&gt;
	if($ru==&amp;quot;&amp;quot;){&lt;br /&gt;
		xlog(&amp;quot;ru --&amp;gt; vazio&amp;quot;);&lt;br /&gt;
		# Requisicao sem usuario na RURI&lt;br /&gt;
		sl_send_reply(&amp;quot;484&amp;quot;, &amp;quot;Address Incomplete&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando requisicao para PSTN&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PSTN&amp;quot;);&lt;br /&gt;
	route(PSTN);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Salvando informacao de quem originou a chamad&lt;br /&gt;
	$avp(callee)=$rU;&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA DISPATCH PSTN&amp;quot;);&lt;br /&gt;
	route(FSDISPATCH);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	# Servico de localizacao de usuario&lt;br /&gt;
	route(LOCATION);&lt;br /&gt;
&lt;br /&gt;
	# Efetuando o relay (encaminhamento)&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[RELAY] {&lt;br /&gt;
	if(check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
		setbflag(FLB_NATB);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(isflagset(FLT_NATS) || isbflagset(FLB_NATB)){&lt;br /&gt;
		#route(RTPPROXY);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
#		t_on_reply(&amp;quot;REPLY_ONE&amp;quot;);&lt;br /&gt;
#		t_on_failure(&amp;quot;FAIL_ONE&amp;quot;);&lt;br /&gt;
#	}&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;AQUI TENTAMOS ENVIAR A CHAMADA $fU $tU&amp;quot;);&lt;br /&gt;
	if(!t_relay()){&lt;br /&gt;
		xlog(&amp;quot;FALHA EM ENVIAR A CHAMADA, NAO FOI POSSIVEL FAZER O RELAY&amp;quot;);&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
	}&lt;br /&gt;
	xlog(&amp;quot;CHAMADA FOI ENVIADA AQUI, QUAL O ERRO ENTAO&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REQINIT] {&lt;br /&gt;
	if(!mf_process_maxfwd_header(&amp;quot;10&amp;quot;)){&lt;br /&gt;
		sl_send_reply(&amp;quot;483&amp;quot;, &amp;quot;Too Many Hops&amp;quot;);&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[WITHINDLG] {&lt;br /&gt;
	if(has_totag()){&lt;br /&gt;
		if(loose_route()){&lt;br /&gt;
			if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
				setflag(FLT_ACC);&lt;br /&gt;
				setflag(FLT_ACCFAILED);&lt;br /&gt;
			}&lt;br /&gt;
			route(RELAY);&lt;br /&gt;
		}else{&lt;br /&gt;
			if(is_method(&amp;quot;SUBSCRIBE&amp;quot;) &amp;amp;&amp;amp; uri==myself) {&lt;br /&gt;
				# requisicao de subscribe pre-estabelecida&lt;br /&gt;
				route(PRESENCE);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;ACK&amp;quot;)){&lt;br /&gt;
				if(t_check_trans()){&lt;br /&gt;
					t_relay();&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}else{&lt;br /&gt;
				# ACK para transacao nao encontrada, ignoramos...&lt;br /&gt;
				exit;&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			sl_send_reply(&amp;quot;404&amp;quot;, &amp;quot;Not Here&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		}	&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REGISTRAR] {&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		if(isflagset(FLT_NATS)){&lt;br /&gt;
			setbflag(FLB_NATB);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(!save(&amp;quot;location&amp;quot;)){&lt;br /&gt;
			sl_reply_error();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[LOCATION] {&lt;br /&gt;
&lt;br /&gt;
	alias_db_lookup(&amp;quot;dbaliases&amp;quot;);&lt;br /&gt;
	if(!lookup(&amp;quot;location&amp;quot;)){&lt;br /&gt;
		switch($rc) {&lt;br /&gt;
			case -1:&lt;br /&gt;
			case -3:&lt;br /&gt;
				t_newtran();&lt;br /&gt;
				t_reply(&amp;quot;404&amp;quot;,&amp;quot;Not Found&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			case -2:&lt;br /&gt;
				sl_send_reply(&amp;quot;405&amp;quot;, &amp;quot;Method Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		setflag(FLT_ACCMISSED);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PRESENCE] {&lt;br /&gt;
	if(!is_method(&amp;quot;PUBLISH|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!t_newtran()){&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
		handle_publish();&lt;br /&gt;
	}else if(is_method(&amp;quot;SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		handle_subscribe();&lt;br /&gt;
	}&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[AUTH]{&lt;br /&gt;
	xlog(&amp;quot;PEDIDO DE AUTENTICACAO&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		# atentica pedidos de registro&lt;br /&gt;
		if(!www_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
			www_challenge(&amp;quot;&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if($au!=$tU){&lt;br /&gt;
			sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	}else{&lt;br /&gt;
		if(route(FSINBOUND)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(check_source_address(&amp;quot;0&amp;quot;)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(from_uri==myself){&lt;br /&gt;
			if(!proxy_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
				proxy_challenge(&amp;quot;&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
				if($au!=$tU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}else{&lt;br /&gt;
				if($au!=$fU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			# Validamos (autenticamos) o usuario&lt;br /&gt;
			consume_credentials();&lt;br /&gt;
		}else{&lt;br /&gt;
		&lt;br /&gt;
			# usuario nao e local, vamos negar&lt;br /&gt;
			if(!uri==myself){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not relaying&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}	&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[NAT] {&lt;br /&gt;
	force_rport();&lt;br /&gt;
	if(nat_uac_test(&amp;quot;19&amp;quot;)){&lt;br /&gt;
		if(method==&amp;quot;REGISTER&amp;quot;){&lt;br /&gt;
			fix_nated_register();&lt;br /&gt;
		}else{&lt;br /&gt;
			fix_nated_contact();&lt;br /&gt;
		}&lt;br /&gt;
		setflag(FLT_NATS);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[RTPPROXY] {&lt;br /&gt;
	if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}else if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		engage_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!has_totag()){&lt;br /&gt;
&lt;br /&gt;
		if(!check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
			add_rr_param(&amp;quot;;nat=yes&amp;quot;);&lt;br /&gt;
			xlog(&amp;quot;NAT yes NAO ENCONTRADO&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[SIPOUT]{&lt;br /&gt;
	if(!uri==myself){&lt;br /&gt;
		append_hf(&amp;quot;P-hint: outbound\r\n&amp;quot;);&lt;br /&gt;
		route(RELAY);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PSTN]{&lt;br /&gt;
        # neste caso apenas para exemplificar um uso simples&lt;br /&gt;
        # vamos fazer o redirecionamento par ao asterisk&lt;br /&gt;
        # realizar a dicagem da chamada&lt;br /&gt;
&lt;br /&gt;
        if(!($rU=~&amp;quot;^(\+|00)[1-9][0-9]{3,20}$&amp;quot;))&lt;br /&gt;
                return;&lt;br /&gt;
&lt;br /&gt;
        ## a regra acima aceita para discagem externa qualquer numero&lt;br /&gt;
        # comecado com 00 ou +&lt;br /&gt;
        #&lt;br /&gt;
&lt;br /&gt;
        if(from_uri!=myself){&lt;br /&gt;
                sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $ru = &amp;quot;sip:&amp;quot; + $rU + &amp;quot;@&amp;quot; + &amp;quot;10.254.254.6:5090&amp;quot;;&lt;br /&gt;
        xlog(&amp;quot;NOVO DESTINO: $ru&amp;quot;);&lt;br /&gt;
        route(RELAY);&lt;br /&gt;
        exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[XMLRPC]{&lt;br /&gt;
	# nao vamos implementar esta funcionalidade&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSINBOUND] {&lt;br /&gt;
	# verificar para validar o ip do asterisk:porta&lt;br /&gt;
	# se bater , responder com return 1;&lt;br /&gt;
	if($si==&amp;quot;10.254.254.6&amp;quot; &amp;amp;&amp;amp; $sp==&amp;quot;5090&amp;quot;){&lt;br /&gt;
		return(1);&lt;br /&gt;
	}else{&lt;br /&gt;
		return(-1);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSDISPATCH] {&lt;br /&gt;
&lt;br /&gt;
	if(!is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(route(FSINBOUND)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;CAIMOS NO SWITCH, VAMOS LOCALIZAR O PERFIL DA CHAMADA $rU&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if($rU =~ &amp;quot;^41$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH expressa comeca e termina em 41&amp;quot;);&lt;br /&gt;
			#regra de menu de voicemail, apenas &lt;br /&gt;
			# usuarios autenticados&lt;br /&gt;
			if($au==&amp;quot;&amp;quot;){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$rU = &amp;quot;vma-&amp;quot; + $au;&lt;br /&gt;
	}else if($rU =~ &amp;quot;^441[0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCA 441XX &amp;quot;);&lt;br /&gt;
			# numero discado comeca com 441 seguido de dois digitos&lt;br /&gt;
			# chamada direta para inbox do voicemail&lt;br /&gt;
			strip(2);&lt;br /&gt;
			route(FSVBOX);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^433[01][0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH OPCAO 433[01]XX&amp;quot;);&lt;br /&gt;
			# numero comecado em 443, seguido de 0 ou 1, mais dois digitos&lt;br /&gt;
			# sistema de conferencia&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^45[0-9]+$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCAO 45X.&amp;quot;);&lt;br /&gt;
			#numero comecado com 45, seguindo de numeros;&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else{&lt;br /&gt;
			xlog(&amp;quot;OPCAO DEFAULT DO SWITCH&amp;quot;);&lt;br /&gt;
			# usuario offline, enviando para voicemail&lt;br /&gt;
			if(!registered(&amp;quot;location&amp;quot;)){&lt;br /&gt;
				route(FSVBOX);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			# usuario online, fazendo bridging&lt;br /&gt;
			xlog(&amp;quot;USUARIO ESTA ONLINE VAMOS FAZER BRIDGE&amp;quot;);&lt;br /&gt;
			prefix(&amp;quot;kb-&amp;quot;);&lt;br /&gt;
			if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
				t_on_failure(&amp;quot;FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
	}&lt;br /&gt;
	route(FSRELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSVBOX&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($rU =~ &amp;quot;^441[0-9][0-9]&amp;quot;){&lt;br /&gt;
		strip(2);&lt;br /&gt;
	}&lt;br /&gt;
	prefix(&amp;quot;vm-&amp;quot;);&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[FSRELAY] {&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSRELAY&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
branch_route[BRANCH_ONE]{&lt;br /&gt;
	xlog(&amp;quot;new branch at $ru&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
onreply_route[REPLY_ONE]{&lt;br /&gt;
	xlog(&amp;quot;Incoming reply&amp;quot;);&lt;br /&gt;
	if((isflagset(FLT_NATS) || isbflagset(FLB_NATB) &amp;amp;&amp;amp; status =~ &amp;quot;(183)|(2[0-9][0-9])&amp;quot;)){&lt;br /&gt;
		#rtpproxy_offer();&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	if(isbflagset(FLB_NATB)){&lt;br /&gt;
		fix_nated_contact();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_ONE]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_ONE&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_check_status(&amp;quot;486|408|480&amp;quot;)){&lt;br /&gt;
		$rU = $avp(callee);&lt;br /&gt;
		$var(newbranch) = 1;&lt;br /&gt;
		route(FSVBOX);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testes com Opensips (registro)==&lt;br /&gt;
&lt;br /&gt;
Antes de podermos testar precisamos iniciar o serviço, no momento estamos com ele operando em modo debug, então a inicialização deve ser realizada com o comando abaixo&lt;br /&gt;
 /etc/init.d/opensips debug&lt;br /&gt;
&lt;br /&gt;
Abra uma nova sessão no servidor e então vamos criar os usuários&lt;br /&gt;
 opensipsctl add 101 101&lt;br /&gt;
 opensipsctl add 102 102&lt;br /&gt;
 opensipsctl add 103 103&lt;br /&gt;
&lt;br /&gt;
usuario 101 com senha 101 e assim por diante&lt;br /&gt;
&lt;br /&gt;
Faça a onexão com seu softphone, aqui para testes utilizei o jitsi e o zoiper, neste momento vamos apenas fazer o registro do usuário para testar a autenticação, se você tentar realizar uma discagem não funcionará pois neste caso o processo depende do Asterisk que ainda não está configurado, vamos dar inicio nesta configuração agora.&lt;br /&gt;
&lt;br /&gt;
==Asterisk==&lt;br /&gt;
Não vamos dar muitos detalhes da instalação do asterisk aqui, a ideia é simplesmente ter o mesmo funcionando da forma que necessitamos.&lt;br /&gt;
&lt;br /&gt;
===Instalando dependências===&lt;br /&gt;
&lt;br /&gt;
Dependências necessárias para a instalação do Asterisk.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Asterisk 1.8===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget -c http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8-current.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Compilando o Asterisk 1.8====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar zxvf asterisk-1.8-current.tar.gz&lt;br /&gt;
cd asterisk-1.8-current.tar.gz&lt;br /&gt;
./configure  --disable-xmldoc&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make samples&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Após a instalação , abra o arquivo /etc/asterisk/sip.conf, localize a linha '''udpbindaddr=0.0.0.0''' e altere para '''udpbindaddr=0.0.0.0:5090'''  , depois ao fim do arquivo adicione.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
type=peer&lt;br /&gt;
host=10.254.254.6&lt;br /&gt;
port=5060&lt;br /&gt;
qualify=yes&lt;br /&gt;
context=opensips&lt;br /&gt;
insecure=port,invite&lt;br /&gt;
canreinvite=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora abra o arquivo '''/etc/asterisk/extensions.conf''' , crie no fim do arquivo a seguinte entrada.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _kb-1XX,1,NoOp(CHAMADA INTERNA - FAZER BRIDGE - ${CALLERID(num)} ${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Dial(SIP/opensips/${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Goto(opensips,vm-${EXTEN:3},1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vm-1XX,1,NoOp(CHAMADA PARA VOICEMAIL)&lt;br /&gt;
same =&amp;gt; n,Voicemail(${EXTEN:3}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vma-1XX,1,NoOp(CHAMADA PARA VOICEMAIL - ADMINISTRATIVO)&lt;br /&gt;
same =&amp;gt; n,VoicemailMain(${EXTEN:4}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _3[01]XX,1,NoOp(CHAMADA PARA CONFERENCIA)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,ConfBridge(${EXTEN},cM1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _00.,1,NoOp(CHAMADA PARA PSTN)&lt;br /&gt;
same =&amp;gt; n,Wait(2)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,Wait(1)&lt;br /&gt;
same =&amp;gt; n,PlayBack(tt-monkeys)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; h,1,Hangup()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finalmente precisamos criar as entradas do voicemail, para isso altere o arquivo '''/etc/asterisk/voicemail.conf''' localize o contexto '''[default]''' e então adicione as entradas para seu voicemail, segue dois exemplos abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
101 =&amp;gt; 123123,Mike Tesliuk&lt;br /&gt;
102 =&amp;gt; 123123,Mike Tesliuk 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Feito isso, faça um restart no asterisk&lt;br /&gt;
 /etc/init.d/asterisk restart&lt;br /&gt;
&lt;br /&gt;
Agora você ja poderá fazer os testes, basicamente criamos as seguintes situações para serem testadas.&lt;br /&gt;
&lt;br /&gt;
*1 Autenticação de usuários&lt;br /&gt;
*2 Chamada entre usuários&lt;br /&gt;
*3 Encaminhamento para caixa postal&lt;br /&gt;
*4 Acesso a caixa postal&lt;br /&gt;
*5 Acesso a conferência&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1392</id>
		<title>OpenSIPs e Asterisk - LIKE CentOS</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1392"/>
		<updated>2013-08-27T08:31:35Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=white&amp;gt; NÃO SIGA ESTE DOCUMENTO. O MESMO SE ENCONTRA EM DESEVOLVIMENTO&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este tutorial é baseado em um tutorial originalmente escrito pelo Mike, se quiser verificar o tutorial original acesse http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk&lt;br /&gt;
&lt;br /&gt;
Para esta implementação utilizamos CentOS 6.4 64 Bits , OpenSIPS 1.9 e Asterisk 1.8.23 &lt;br /&gt;
&lt;br /&gt;
==Funcionalidades==&lt;br /&gt;
Este tutorial tem por objetivo atingir as seguintes funcionalidades.&lt;br /&gt;
*Autenticação de usuário&lt;br /&gt;
*Registro de usuário&lt;br /&gt;
*Localização de usuário (encaminhamento de chamadas)&lt;br /&gt;
*Roteamento de chamadas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Através do Asterisk estenderemos estas funcionalidades agregando.&lt;br /&gt;
*Correio de voz (Voicemail)&lt;br /&gt;
*Conferencia &lt;br /&gt;
*SBC ( Pode ser utilizado para transcoding, esconder topologia, play de mensagens e tarifação )&lt;br /&gt;
*Outros serviços de media (Anuncios, Ura's e coisas do tipo)&lt;br /&gt;
&lt;br /&gt;
==Definições==&lt;br /&gt;
Para um melhor entendimento da solução vamos expor aqui algumas definições de nosso sistema.&lt;br /&gt;
*Usuários locais terão ramais com 3 digitos (ex: 101, 102, 103)&lt;br /&gt;
*Identidade do correio de voz será o mesmo do ramal&lt;br /&gt;
*Serviços de media (acesso a voicemail e outros) receberão rotas de 4 digitos&lt;br /&gt;
*Opensips e Asterisk utilizarão o mesmo servidor (Neste caso IP: 10.254.254.6)&lt;br /&gt;
*Os serviços rodarão nas portas 5060 (opensips) , 5090 (Asterisk)&lt;br /&gt;
&lt;br /&gt;
==Funcionamento==&lt;br /&gt;
A autenticação do usuário será realizada pelo OpenSIPs, quando uma chamada é autenticada então ela serguirá:&lt;br /&gt;
*Se o usuário de destino não está online a chamada será enviada para o Asterisk para função de correio de voz&lt;br /&gt;
*Se o usuário está online a chamada será encaminhada para o Asterisk, dest forma é possivel acionar funcionalidades como anuncios, definição de tempo de chamada, forçar codecs e outras funcionalidades.&lt;br /&gt;
*Asterisk envia a chamada novamente para o OpenSIPs que verificará no location e entregará a chamada para o usuário.&lt;br /&gt;
*Se a chamada não for atendida o Opensips irá re-encaminhar para o Asterisk direcionando para função de voicemail&lt;br /&gt;
&lt;br /&gt;
==OpenSIPs==&lt;br /&gt;
Vamos iniciar o processo de instalação com o OpenSIPs, siga os procedimentos abaixo para evitar qualquer dificuldade.&lt;br /&gt;
&lt;br /&gt;
===Dependencias===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====Atualizando o sistema====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum -y update&lt;br /&gt;
yum -y upgrade&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pacotes de desenvolvimento ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall 'Development Tools' -y&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
yum install wget mysql-server pcre-devel libxml2-devel xmlrpc-c-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Desabilitando o SELINUX ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/bin/sed -i -e s,'SELINUX=enforcing','SELINUX=disabled', /etc/selinux/config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durante a instalação o sistema irá lhe perguntar a senha de root para o servidor MySQL é importante que você se lembre da mesma posteriormente pois utilizaremos a mesma.&lt;br /&gt;
&lt;br /&gt;
===Compilando o OpenSIPs===&lt;br /&gt;
Para manter um padrão onde os dados estao vamos utilizar o diretório /usr/src/ para o download de código fonte.&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/&lt;br /&gt;
 wget -c http://opensips.org/pub/opensips/1.9.1/src/opensips-1.9.1_src.tar.gz&lt;br /&gt;
 tar -xzvf opensips-1.9.1_src.tar.gz&lt;br /&gt;
 cd opensips-1.9.1-tls/&lt;br /&gt;
 make menuconfig&lt;br /&gt;
&lt;br /&gt;
Neste ponto o sistema irá abrir uma tela com algumas opções para selecionar, Acesse a primeira opção do menu, no submenu acesse a segunda opção ( Configure excluded modules ), selecione os módulos db_mysql , dialplan , mi_xmlrpc , presence e presence_xml&lt;br /&gt;
&lt;br /&gt;
Agora volte ao submenu, e selecione a opção Save Changes, volte para o menu principal e selecione '''Compile and Install OpenSips''' , deixe que o sistema execute suas funções.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ao finalizar a compilação você retornará ao menu, va na opção '''Exit and Save all changes'''&lt;br /&gt;
&lt;br /&gt;
===Preparando a Configuração===&lt;br /&gt;
&lt;br /&gt;
Antes de darmos inicio ao arquivo de configuração, vamos ajustar algumas questões, o opensips instala os arquivos (se voce nao alterar o parametro) em /usr, consequentemente as configurações ficam em /usr/etc , eu por padrão faço um link para o diretório /etc, assim acesso as configurações em /etc/opensips&lt;br /&gt;
&lt;br /&gt;
 ln -s /usr/etc/opensips /etc/&lt;br /&gt;
&lt;br /&gt;
No caso do debian o script de inicialização utiliza um arquivo extra de configuração&lt;br /&gt;
 cp packaging/debian/opensips.default /etc/default/opensips&lt;br /&gt;
&lt;br /&gt;
Para o script de inicialização execute o comando abaixo&lt;br /&gt;
 cp packaging/debian/opensips.init /etc/init.d/opensips&lt;br /&gt;
 chmod +x /etc/init.d/opensips&lt;br /&gt;
 update-rc.d opensips defaults&lt;br /&gt;
&lt;br /&gt;
Edite o arquivo /etc/default/opensips , a altere o parametro '''RUN_OPENSIPS''' para yes&lt;br /&gt;
&lt;br /&gt;
Você pode notar que no arquivo é mensionado o usuário de execução do opensips como opensips, então vamos ter de criar este usuário ( e grupo )&lt;br /&gt;
&lt;br /&gt;
 groupadd opensips&lt;br /&gt;
 mkdir /var/run/opensips&lt;br /&gt;
 useradd -d /var/run/opensips/ -s /bin/false -g opensips opensips&lt;br /&gt;
 chown -R opensips.opensips /var/run/opensips&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Configurando o opensipsctl===&lt;br /&gt;
O opensipsctl (e opensipsdbctl) utilizam o arquivo de configuração /etc/opensips/opensipsctlrc, abaixo segue o conteúdo do arquivo. (Sugiro que você faça um backup dos arquivos originais para ter uma copia, existem parametros que você pode estudar depois).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DBENGINE=MYSQL&lt;br /&gt;
DBHOST=localhost&lt;br /&gt;
DBNAME=opensips&lt;br /&gt;
DBRWUSER=opensips&lt;br /&gt;
DBRWPW=&amp;quot;opensipsrw&amp;quot;&lt;br /&gt;
SIP_DOMAIN=10.254.254.6  ### caso voce esteja usando outro ip altere aqui&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DBROOTUSER=&amp;quot;root&amp;quot;&lt;br /&gt;
INSTALL_EXTRA_TABLES=ask&lt;br /&gt;
ALIASES_TYPE=&amp;quot;DB&amp;quot;&lt;br /&gt;
MI_CONNECTOR=FIFO:/tmp/opensips_fifo&lt;br /&gt;
# VERIFY_ACL=1&lt;br /&gt;
# ACL_GROUPS=&amp;quot;local ld int voicemail free-pstn&amp;quot;&lt;br /&gt;
# VERBOSE=1&lt;br /&gt;
# STORE_PLAINTEXT_PW=0&lt;br /&gt;
# NOHLPRINT=1&lt;br /&gt;
PID_FILE=/var/run/opensips/opensips.pid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Criando o banco de dados===&lt;br /&gt;
Agora que temos nosso arquivo configurado vamos fazer a criação do banco de dados, execute o comando abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
opensipsdbctl create opensips&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema irá lhe perguntar algumas coisas, responda Y (sim) para todas para que ele instale todas as tabelas, não usaremos todas elas, mas desta forma você fica com praticamente tudo criado para o caso de uma expansão dos recursos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Instalando o RTP Proxy===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/src/&lt;br /&gt;
wget -c http://b2bua.org/chrome/site/rtpproxy-1.2.1.tar.gz&lt;br /&gt;
tar -xzvf rtpproxy-1.2.1.tar.gz&lt;br /&gt;
cd rtpproxy-1.2.1&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
groupadd rtpproxy&lt;br /&gt;
useradd -d /var/run/rtpproxy -s /bin/true -g rtpproxy rtpproxy&lt;br /&gt;
mkdir /var/log/rtpproxy&lt;br /&gt;
mkdir /var/run/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/log/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/run/rtpproxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Arquivo de inicialização====&lt;br /&gt;
'''/etc/init.d/rtpproxy'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# Este script e de autoria de Mike Tesliuk&lt;br /&gt;
# qualquer falha no mesmo por favor informe &lt;br /&gt;
# atraves do email mike (a) tesliuk.com&lt;br /&gt;
#&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:          rtpproxy&lt;br /&gt;
# Required-Start:    $syslog $network $local_fs $time&lt;br /&gt;
# Required-Stop:     $syslog $network $local_fs&lt;br /&gt;
# Default-Start:     2 3 4 5&lt;br /&gt;
# Default-Stop:      0 1 6&lt;br /&gt;
# Short-Description: Start the RTPPROXY server&lt;br /&gt;
# Description:       Start the RTPPROXY server&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin&lt;br /&gt;
USELOG=1&lt;br /&gt;
USER=rtpproxy&lt;br /&gt;
# Altere o ip abaixo para o ip de seu sistema&lt;br /&gt;
IPADDR=&amp;quot;10.254.254.6&amp;quot;&lt;br /&gt;
&lt;br /&gt;
. /lib/lsb/init-functions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
start(){&lt;br /&gt;
        echo &amp;quot;Iniciando RTP PROXY &amp;quot;&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                if [ &amp;quot;${USELOG}&amp;quot; = &amp;quot;1&amp;quot; ]; then&lt;br /&gt;
                        echo &amp;quot;Iniciando com LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER -F -f d DBUG 2&amp;amp;&amp;gt; /var/log/rtpproxy/rtpproxy.log &amp;amp;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Iniciando sem LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER  -F -f d DBUG 2&amp;amp;&amp;gt; /dev/null&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;START OK&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
        else&lt;br /&gt;
                echo &amp;quot;Processo ja em execucao&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
stop(){&lt;br /&gt;
&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                echo &amp;quot;Processo nao encontrado&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
                kill -9 $(pidof rtpproxy)&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;STOP OK&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Falha em realizar stop do servico&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
case $1 in&lt;br /&gt;
        start)&lt;br /&gt;
                start&lt;br /&gt;
        ;;&lt;br /&gt;
        stop)&lt;br /&gt;
                stop&lt;br /&gt;
        ;;&lt;br /&gt;
        restart)&lt;br /&gt;
                stop&lt;br /&gt;
                start&lt;br /&gt;
&lt;br /&gt;
        ;;&lt;br /&gt;
        *)&lt;br /&gt;
                echo &amp;quot;Utilize: stop | start | restart&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos dar permissao e colocar na inicialização&lt;br /&gt;
 chmod +x /etc/init.d/rtpproxy &lt;br /&gt;
 update-rc.d rtpproxy defaults&lt;br /&gt;
 /etc/init.d/rtpproxy start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Criando o arquivo opensips.cfg===&lt;br /&gt;
O arquivo opensips.cfg é a onde a coisa toda acontece para o opensips, claro que ele dependerá de informações que estarão no banco de dados, mas é onde criamos todas as nossas rotas e validações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Este tutorial nao esta terminado, este arquivo ainda esta em testes &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
####### Global Parameters #########&lt;br /&gt;
debug=3&lt;br /&gt;
log_stderror=no&lt;br /&gt;
log_facility=LOG_LOCAL0&lt;br /&gt;
&lt;br /&gt;
fork=yes&lt;br /&gt;
children=4&lt;br /&gt;
&lt;br /&gt;
/* Descomente as linhas abaixo para ativar o debug */&lt;br /&gt;
#debug=7&lt;br /&gt;
#fork=no&lt;br /&gt;
#log_stderror=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Comente a linha abaixo para ativar a descoberta automatica de enderecos locais&lt;br /&gt;
 , isso significa que o sistema ira verificar todos os ips ativos e hosts e entao ativara&lt;br /&gt;
 o protocolo para todos eles */ &lt;br /&gt;
auto_aliases=no&lt;br /&gt;
&lt;br /&gt;
/* Defina aqui o ip a ser utilizado */&lt;br /&gt;
listen=udp:10.254.254.6:5060   # Altere este IP para o seu ambiente&lt;br /&gt;
&lt;br /&gt;
/* Nao usaremos sip por tcp nem tls neste script */&lt;br /&gt;
disable_tcp=yes&lt;br /&gt;
&lt;br /&gt;
disable_tls=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Secao de modulos ########&lt;br /&gt;
&lt;br /&gt;
#set module path&lt;br /&gt;
mpath=&amp;quot;/usr//lib64/opensips/modules/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;signaling.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sl.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;tm.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_timer&amp;quot;, 5)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_inv_timer&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;restart_fr_on_each_reply&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;onreply_avp_mode&amp;quot;, 1)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rr.so&amp;quot;&lt;br /&gt;
/* do not append from tag to the RR (no need for this script) */&lt;br /&gt;
modparam(&amp;quot;rr&amp;quot;, &amp;quot;append_fromtag&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;maxfwd.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sipmsgops.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;mi_fifo.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_name&amp;quot;, &amp;quot;/tmp/opensips_fifo&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_mode&amp;quot;, 0666)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;db_mysql.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;uri.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;uri&amp;quot;, &amp;quot;use_uri_table&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;usrloc.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;nat_bflag&amp;quot;, &amp;quot;FLB_NATB&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_mode&amp;quot;,   2)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;registrar.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;registrar&amp;quot;, &amp;quot;tcp_persistent_flag&amp;quot;, &amp;quot;TCP_PERSISTENT&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
/* Descomente a linha abaixo para nao permitir mais de 10 contatos por conta */&lt;br /&gt;
#modparam(&amp;quot;registrar&amp;quot;, &amp;quot;max_contacts&amp;quot;, 10)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;acc.so&amp;quot;&lt;br /&gt;
/* Quais eventos deverao ser registrados ? */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;early_media&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;report_cancels&amp;quot;, 0)&lt;br /&gt;
/* por padrao nos nao ajustamos a direcao em requisicoes sequencias, &lt;br /&gt;
 se voce deseja usar este recurso tenha certeza de ativar o &amp;quot;appen_fromtag&amp;quot; &lt;br /&gt;
 para o modulo &amp;quot;rr&amp;quot; */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;detect_direction&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;failed_transaction_flag&amp;quot;, &amp;quot;FLT_ACCFAILED&amp;quot;)&lt;br /&gt;
/* Gatilhos para accounting  (flags) */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_extra&amp;quot;, &lt;br /&gt;
	&amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_extra&amp;quot;, &amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;auth.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;auth_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;calculate_ha1&amp;quot;, yes)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;password_column&amp;quot;, &amp;quot;password&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;load_credentials&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;permissions.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;permissions&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;alias_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;alias_db&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;presence.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;presence&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
#loadmodule &amp;quot;presence_xml.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;dialog.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_mode&amp;quot;, 2)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_url&amp;quot;,&amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;dlg_match_mode&amp;quot;, 1)&lt;br /&gt;
#modparam(&amp;quot;dialog&amp;quot;, &amp;quot;default_timeout&amp;quot;, 60)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;siptrace.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;trace_flag&amp;quot;, 22)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;traced_user_avp&amp;quot;, &amp;quot;$avp(s:traceuser)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;nathelper.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;natping_interval&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;ping_nated_only&amp;quot;, 1)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_bflag&amp;quot;, &amp;quot;FLB_NATSIPPING&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_from&amp;quot;, &amp;quot;sip:pinger@10.254.254.6&amp;quot;) # Altere o ip para o ip do servidor&lt;br /&gt;
modparam(&amp;quot;nathelper|registrar&amp;quot;, &amp;quot;received_avp&amp;quot;, &amp;quot;$avp(RECEIVED)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rtpproxy.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;rtpproxy&amp;quot;, &amp;quot;rtpproxy_sock&amp;quot;, &amp;quot;udp:127.0.0.1:7722&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Logica de roteamento ########&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route {&lt;br /&gt;
&lt;br /&gt;
	if (!mf_process_maxfwd_header(&amp;quot;3&amp;quot;)) {&lt;br /&gt;
                send_reply(&amp;quot;483&amp;quot;,&amp;quot;looping&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;REQUISICAO RECEBIDA, ENVIANDO PARA REQINIT&amp;quot;);&lt;br /&gt;
	# Checagem inicial por requisicao&lt;br /&gt;
	route(REQINIT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA NAT&amp;quot;);&lt;br /&gt;
	# Deteccao de nat&lt;br /&gt;
	route(NAT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA WITHINDLG&amp;quot;);&lt;br /&gt;
	# Gerenciando requisicaoes com dialog&lt;br /&gt;
	route(WITHINDLG);&lt;br /&gt;
&lt;br /&gt;
	# Manipulando requisicoes iniciais (nao consta To tag)&lt;br /&gt;
	&lt;br /&gt;
	# Processando CANCEL&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;CANCEL&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD CANCEL&amp;quot;);&lt;br /&gt;
		if(t_check_trans()){&lt;br /&gt;
			t_relay();&lt;br /&gt;
		}&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	t_check_trans();&lt;br /&gt;
&lt;br /&gt;
	# Enviando para autenticacao&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA AUTENTICACAO&amp;quot;);&lt;br /&gt;
	route(AUTH);&lt;br /&gt;
&lt;br /&gt;
	# gravando rota para formacao dos dialogs (caso sejam roteados)&lt;br /&gt;
	# removemos qualquer cabecalho de rota pre carregado&lt;br /&gt;
	remove_hf(&amp;quot;Route&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE OU SIBSCRIBE&amp;quot;);&lt;br /&gt;
		record_route();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Contabilizando (acc) INVITES&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE, FAZENDOA ACC&amp;quot;);&lt;br /&gt;
		setflag(FLT_ACC);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando chamada para destinos externos&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA SIPOUT&amp;quot;);&lt;br /&gt;
	route(SIPOUT);&lt;br /&gt;
&lt;br /&gt;
	# Requisicoes para dominio local&lt;br /&gt;
	&lt;br /&gt;
	# Roteando requisicoes de PRESENCE&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PRESENCE&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	route(PRESENCE);&lt;br /&gt;
&lt;br /&gt;
	# Gerenciando pedidos de registro&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA REGISTRAR&amp;quot;);	&lt;br /&gt;
	route(REGISTRAR);&lt;br /&gt;
&lt;br /&gt;
	if($ru==&amp;quot;&amp;quot;){&lt;br /&gt;
		xlog(&amp;quot;ru --&amp;gt; vazio&amp;quot;);&lt;br /&gt;
		# Requisicao sem usuario na RURI&lt;br /&gt;
		sl_send_reply(&amp;quot;484&amp;quot;, &amp;quot;Address Incomplete&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando requisicao para PSTN&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PSTN&amp;quot;);&lt;br /&gt;
	route(PSTN);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Salvando informacao de quem originou a chamad&lt;br /&gt;
	$avp(callee)=$rU;&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA DISPATCH PSTN&amp;quot;);&lt;br /&gt;
	route(FSDISPATCH);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	# Servico de localizacao de usuario&lt;br /&gt;
	route(LOCATION);&lt;br /&gt;
&lt;br /&gt;
	# Efetuando o relay (encaminhamento)&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[RELAY] {&lt;br /&gt;
	if(check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
		setbflag(FLB_NATB);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(isflagset(FLT_NATS) || isbflagset(FLB_NATB)){&lt;br /&gt;
		#route(RTPPROXY);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
#		t_on_reply(&amp;quot;REPLY_ONE&amp;quot;);&lt;br /&gt;
#		t_on_failure(&amp;quot;FAIL_ONE&amp;quot;);&lt;br /&gt;
#	}&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;AQUI TENTAMOS ENVIAR A CHAMADA $fU $tU&amp;quot;);&lt;br /&gt;
	if(!t_relay()){&lt;br /&gt;
		xlog(&amp;quot;FALHA EM ENVIAR A CHAMADA, NAO FOI POSSIVEL FAZER O RELAY&amp;quot;);&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
	}&lt;br /&gt;
	xlog(&amp;quot;CHAMADA FOI ENVIADA AQUI, QUAL O ERRO ENTAO&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REQINIT] {&lt;br /&gt;
	if(!mf_process_maxfwd_header(&amp;quot;10&amp;quot;)){&lt;br /&gt;
		sl_send_reply(&amp;quot;483&amp;quot;, &amp;quot;Too Many Hops&amp;quot;);&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[WITHINDLG] {&lt;br /&gt;
	if(has_totag()){&lt;br /&gt;
		if(loose_route()){&lt;br /&gt;
			if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
				setflag(FLT_ACC);&lt;br /&gt;
				setflag(FLT_ACCFAILED);&lt;br /&gt;
			}&lt;br /&gt;
			route(RELAY);&lt;br /&gt;
		}else{&lt;br /&gt;
			if(is_method(&amp;quot;SUBSCRIBE&amp;quot;) &amp;amp;&amp;amp; uri==myself) {&lt;br /&gt;
				# requisicao de subscribe pre-estabelecida&lt;br /&gt;
				route(PRESENCE);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;ACK&amp;quot;)){&lt;br /&gt;
				if(t_check_trans()){&lt;br /&gt;
					t_relay();&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}else{&lt;br /&gt;
				# ACK para transacao nao encontrada, ignoramos...&lt;br /&gt;
				exit;&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			sl_send_reply(&amp;quot;404&amp;quot;, &amp;quot;Not Here&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		}	&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REGISTRAR] {&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		if(isflagset(FLT_NATS)){&lt;br /&gt;
			setbflag(FLB_NATB);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(!save(&amp;quot;location&amp;quot;)){&lt;br /&gt;
			sl_reply_error();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[LOCATION] {&lt;br /&gt;
&lt;br /&gt;
	alias_db_lookup(&amp;quot;dbaliases&amp;quot;);&lt;br /&gt;
	if(!lookup(&amp;quot;location&amp;quot;)){&lt;br /&gt;
		switch($rc) {&lt;br /&gt;
			case -1:&lt;br /&gt;
			case -3:&lt;br /&gt;
				t_newtran();&lt;br /&gt;
				t_reply(&amp;quot;404&amp;quot;,&amp;quot;Not Found&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			case -2:&lt;br /&gt;
				sl_send_reply(&amp;quot;405&amp;quot;, &amp;quot;Method Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		setflag(FLT_ACCMISSED);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PRESENCE] {&lt;br /&gt;
	if(!is_method(&amp;quot;PUBLISH|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!t_newtran()){&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
		handle_publish();&lt;br /&gt;
	}else if(is_method(&amp;quot;SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		handle_subscribe();&lt;br /&gt;
	}&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[AUTH]{&lt;br /&gt;
	xlog(&amp;quot;PEDIDO DE AUTENTICACAO&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		# atentica pedidos de registro&lt;br /&gt;
		if(!www_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
			www_challenge(&amp;quot;&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if($au!=$tU){&lt;br /&gt;
			sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	}else{&lt;br /&gt;
		if(route(FSINBOUND)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(check_source_address(&amp;quot;0&amp;quot;)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(from_uri==myself){&lt;br /&gt;
			if(!proxy_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
				proxy_challenge(&amp;quot;&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
				if($au!=$tU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}else{&lt;br /&gt;
				if($au!=$fU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			# Validamos (autenticamos) o usuario&lt;br /&gt;
			consume_credentials();&lt;br /&gt;
		}else{&lt;br /&gt;
		&lt;br /&gt;
			# usuario nao e local, vamos negar&lt;br /&gt;
			if(!uri==myself){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not relaying&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}	&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[NAT] {&lt;br /&gt;
	force_rport();&lt;br /&gt;
	if(nat_uac_test(&amp;quot;19&amp;quot;)){&lt;br /&gt;
		if(method==&amp;quot;REGISTER&amp;quot;){&lt;br /&gt;
			fix_nated_register();&lt;br /&gt;
		}else{&lt;br /&gt;
			fix_nated_contact();&lt;br /&gt;
		}&lt;br /&gt;
		setflag(FLT_NATS);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[RTPPROXY] {&lt;br /&gt;
	if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}else if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		engage_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!has_totag()){&lt;br /&gt;
&lt;br /&gt;
		if(!check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
			add_rr_param(&amp;quot;;nat=yes&amp;quot;);&lt;br /&gt;
			xlog(&amp;quot;NAT yes NAO ENCONTRADO&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[SIPOUT]{&lt;br /&gt;
	if(!uri==myself){&lt;br /&gt;
		append_hf(&amp;quot;P-hint: outbound\r\n&amp;quot;);&lt;br /&gt;
		route(RELAY);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PSTN]{&lt;br /&gt;
        # neste caso apenas para exemplificar um uso simples&lt;br /&gt;
        # vamos fazer o redirecionamento par ao asterisk&lt;br /&gt;
        # realizar a dicagem da chamada&lt;br /&gt;
&lt;br /&gt;
        if(!($rU=~&amp;quot;^(\+|00)[1-9][0-9]{3,20}$&amp;quot;))&lt;br /&gt;
                return;&lt;br /&gt;
&lt;br /&gt;
        ## a regra acima aceita para discagem externa qualquer numero&lt;br /&gt;
        # comecado com 00 ou +&lt;br /&gt;
        #&lt;br /&gt;
&lt;br /&gt;
        if(from_uri!=myself){&lt;br /&gt;
                sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $ru = &amp;quot;sip:&amp;quot; + $rU + &amp;quot;@&amp;quot; + &amp;quot;10.254.254.6:5090&amp;quot;;&lt;br /&gt;
        xlog(&amp;quot;NOVO DESTINO: $ru&amp;quot;);&lt;br /&gt;
        route(RELAY);&lt;br /&gt;
        exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[XMLRPC]{&lt;br /&gt;
	# nao vamos implementar esta funcionalidade&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSINBOUND] {&lt;br /&gt;
	# verificar para validar o ip do asterisk:porta&lt;br /&gt;
	# se bater , responder com return 1;&lt;br /&gt;
	if($si==&amp;quot;10.254.254.6&amp;quot; &amp;amp;&amp;amp; $sp==&amp;quot;5090&amp;quot;){&lt;br /&gt;
		return(1);&lt;br /&gt;
	}else{&lt;br /&gt;
		return(-1);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSDISPATCH] {&lt;br /&gt;
&lt;br /&gt;
	if(!is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(route(FSINBOUND)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;CAIMOS NO SWITCH, VAMOS LOCALIZAR O PERFIL DA CHAMADA $rU&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if($rU =~ &amp;quot;^41$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH expressa comeca e termina em 41&amp;quot;);&lt;br /&gt;
			#regra de menu de voicemail, apenas &lt;br /&gt;
			# usuarios autenticados&lt;br /&gt;
			if($au==&amp;quot;&amp;quot;){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$rU = &amp;quot;vma-&amp;quot; + $au;&lt;br /&gt;
	}else if($rU =~ &amp;quot;^441[0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCA 441XX &amp;quot;);&lt;br /&gt;
			# numero discado comeca com 441 seguido de dois digitos&lt;br /&gt;
			# chamada direta para inbox do voicemail&lt;br /&gt;
			strip(2);&lt;br /&gt;
			route(FSVBOX);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^433[01][0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH OPCAO 433[01]XX&amp;quot;);&lt;br /&gt;
			# numero comecado em 443, seguido de 0 ou 1, mais dois digitos&lt;br /&gt;
			# sistema de conferencia&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^45[0-9]+$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCAO 45X.&amp;quot;);&lt;br /&gt;
			#numero comecado com 45, seguindo de numeros;&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else{&lt;br /&gt;
			xlog(&amp;quot;OPCAO DEFAULT DO SWITCH&amp;quot;);&lt;br /&gt;
			# usuario offline, enviando para voicemail&lt;br /&gt;
			if(!registered(&amp;quot;location&amp;quot;)){&lt;br /&gt;
				route(FSVBOX);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			# usuario online, fazendo bridging&lt;br /&gt;
			xlog(&amp;quot;USUARIO ESTA ONLINE VAMOS FAZER BRIDGE&amp;quot;);&lt;br /&gt;
			prefix(&amp;quot;kb-&amp;quot;);&lt;br /&gt;
			if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
				t_on_failure(&amp;quot;FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
	}&lt;br /&gt;
	route(FSRELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSVBOX&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($rU =~ &amp;quot;^441[0-9][0-9]&amp;quot;){&lt;br /&gt;
		strip(2);&lt;br /&gt;
	}&lt;br /&gt;
	prefix(&amp;quot;vm-&amp;quot;);&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[FSRELAY] {&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSRELAY&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
branch_route[BRANCH_ONE]{&lt;br /&gt;
	xlog(&amp;quot;new branch at $ru&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
onreply_route[REPLY_ONE]{&lt;br /&gt;
	xlog(&amp;quot;Incoming reply&amp;quot;);&lt;br /&gt;
	if((isflagset(FLT_NATS) || isbflagset(FLB_NATB) &amp;amp;&amp;amp; status =~ &amp;quot;(183)|(2[0-9][0-9])&amp;quot;)){&lt;br /&gt;
		#rtpproxy_offer();&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	if(isbflagset(FLB_NATB)){&lt;br /&gt;
		fix_nated_contact();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_ONE]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_ONE&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_check_status(&amp;quot;486|408|480&amp;quot;)){&lt;br /&gt;
		$rU = $avp(callee);&lt;br /&gt;
		$var(newbranch) = 1;&lt;br /&gt;
		route(FSVBOX);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testes com Opensips (registro)==&lt;br /&gt;
&lt;br /&gt;
Antes de podermos testar precisamos iniciar o serviço, no momento estamos com ele operando em modo debug, então a inicialização deve ser realizada com o comando abaixo&lt;br /&gt;
 /etc/init.d/opensips debug&lt;br /&gt;
&lt;br /&gt;
Abra uma nova sessão no servidor e então vamos criar os usuários&lt;br /&gt;
 opensipsctl add 101 101&lt;br /&gt;
 opensipsctl add 102 102&lt;br /&gt;
 opensipsctl add 103 103&lt;br /&gt;
&lt;br /&gt;
usuario 101 com senha 101 e assim por diante&lt;br /&gt;
&lt;br /&gt;
Faça a onexão com seu softphone, aqui para testes utilizei o jitsi e o zoiper, neste momento vamos apenas fazer o registro do usuário para testar a autenticação, se você tentar realizar uma discagem não funcionará pois neste caso o processo depende do Asterisk que ainda não está configurado, vamos dar inicio nesta configuração agora.&lt;br /&gt;
&lt;br /&gt;
==Asterisk==&lt;br /&gt;
Não vamos dar muitos detalhes da instalação do asterisk aqui, a ideia é simplesmente ter o mesmo funcionando da forma que necessitamos.&lt;br /&gt;
 apt-get install asterisk&lt;br /&gt;
&lt;br /&gt;
Após a instalação , abra o arquivo /etc/asterisk/sip.conf, localize a linha '''udpbindaddr=0.0.0.0''' e altere para '''udpbindaddr=0.0.0.0:5090'''  , depois ao fim do arquivo adicione.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
type=peer&lt;br /&gt;
host=10.254.254.6&lt;br /&gt;
port=5060&lt;br /&gt;
qualify=yes&lt;br /&gt;
context=opensips&lt;br /&gt;
insecure=port,invite&lt;br /&gt;
canreinvite=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora abra o arquivo '''/etc/asterisk/extensions.conf''' , crie no fim do arquivo a seguinte entrada.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _kb-1XX,1,NoOp(CHAMADA INTERNA - FAZER BRIDGE - ${CALLERID(num)} ${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Dial(SIP/opensips/${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Goto(opensips,vm-${EXTEN:3},1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vm-1XX,1,NoOp(CHAMADA PARA VOICEMAIL)&lt;br /&gt;
same =&amp;gt; n,Voicemail(${EXTEN:3}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vma-1XX,1,NoOp(CHAMADA PARA VOICEMAIL - ADMINISTRATIVO)&lt;br /&gt;
same =&amp;gt; n,VoicemailMain(${EXTEN:4}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _3[01]XX,1,NoOp(CHAMADA PARA CONFERENCIA)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,ConfBridge(${EXTEN},cM1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _00.,1,NoOp(CHAMADA PARA PSTN)&lt;br /&gt;
same =&amp;gt; n,Wait(2)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,Wait(1)&lt;br /&gt;
same =&amp;gt; n,PlayBack(tt-monkeys)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; h,1,Hangup()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finalmente precisamos criar as entradas do voicemail, para isso altere o arquivo '''/etc/asterisk/voicemail.conf''' localize o contexto '''[default]''' e então adicione as entradas para seu voicemail, segue dois exemplos abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
101 =&amp;gt; 123123,Mike Tesliuk&lt;br /&gt;
102 =&amp;gt; 123123,Mike Tesliuk 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Feito isso, faça um restart no asterisk&lt;br /&gt;
 /etc/init.d/asterisk restart&lt;br /&gt;
&lt;br /&gt;
Agora você ja poderá fazer os testes, basicamente criamos as seguintes situações para serem testadas.&lt;br /&gt;
&lt;br /&gt;
*1 Autenticação de usuários&lt;br /&gt;
*2 Chamada entre usuários&lt;br /&gt;
*3 Encaminhamento para caixa postal&lt;br /&gt;
*4 Acesso a caixa postal&lt;br /&gt;
*5 Acesso a conferência&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1391</id>
		<title>OpenSIPs e Asterisk - LIKE CentOS</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1391"/>
		<updated>2013-08-27T08:30:31Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=white&amp;gt; NÃO SIGA ESTE DOCUMENTO. O MESMO SE ENCONTRA EM DESEVOLVIMENTO&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este tutorial é baseado em um tutorial originalmente escrito pelo Mike, se quiser verificar o tutorial original acesse http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk&lt;br /&gt;
&lt;br /&gt;
Para esta implementação utilizamos CentOS 6.4 64 Bits , OpenSIPS 1.9 e Asterisk 1.8.23 &lt;br /&gt;
&lt;br /&gt;
==Funcionalidades==&lt;br /&gt;
Este tutorial tem por objetivo atingir as seguintes funcionalidades.&lt;br /&gt;
*Autenticação de usuário&lt;br /&gt;
*Registro de usuário&lt;br /&gt;
*Localização de usuário (encaminhamento de chamadas)&lt;br /&gt;
*Roteamento de chamadas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Através do Asterisk estenderemos estas funcionalidades agregando.&lt;br /&gt;
*Correio de voz (Voicemail)&lt;br /&gt;
*Conferencia &lt;br /&gt;
*SBC ( Pode ser utilizado para transcoding, esconder topologia, play de mensagens e tarifação )&lt;br /&gt;
*Outros serviços de media (Anuncios, Ura's e coisas do tipo)&lt;br /&gt;
&lt;br /&gt;
==Definições==&lt;br /&gt;
Para um melhor entendimento da solução vamos expor aqui algumas definições de nosso sistema.&lt;br /&gt;
*Usuários locais terão ramais com 3 digitos (ex: 101, 102, 103)&lt;br /&gt;
*Identidade do correio de voz será o mesmo do ramal&lt;br /&gt;
*Serviços de media (acesso a voicemail e outros) receberão rotas de 4 digitos&lt;br /&gt;
*Opensips e Asterisk utilizarão o mesmo servidor (Neste caso IP: 10.254.254.6)&lt;br /&gt;
*Os serviços rodarão nas portas 5060 (opensips) , 5090 (Asterisk)&lt;br /&gt;
&lt;br /&gt;
==Funcionamento==&lt;br /&gt;
A autenticação do usuário será realizada pelo OpenSIPs, quando uma chamada é autenticada então ela serguirá:&lt;br /&gt;
*Se o usuário de destino não está online a chamada será enviada para o Asterisk para função de correio de voz&lt;br /&gt;
*Se o usuário está online a chamada será encaminhada para o Asterisk, dest forma é possivel acionar funcionalidades como anuncios, definição de tempo de chamada, forçar codecs e outras funcionalidades.&lt;br /&gt;
*Asterisk envia a chamada novamente para o OpenSIPs que verificará no location e entregará a chamada para o usuário.&lt;br /&gt;
*Se a chamada não for atendida o Opensips irá re-encaminhar para o Asterisk direcionando para função de voicemail&lt;br /&gt;
&lt;br /&gt;
==OpenSIPs==&lt;br /&gt;
Vamos iniciar o processo de instalação com o OpenSIPs, siga os procedimentos abaixo para evitar qualquer dificuldade.&lt;br /&gt;
&lt;br /&gt;
===Dependencias===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====Atualizando o sistema====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum -y update&lt;br /&gt;
yum -y upgrade&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pacotes de desenvolvimento ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall 'Development Tools' -y&lt;br /&gt;
yum install ncurses-devel mysql-devel -y&lt;br /&gt;
yum install wget mysql-server pcre-devel libxml2-devel xmlrpc-c-devel -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durante a instalação o sistema irá lhe perguntar a senha de root para o servidor MySQL é importante que você se lembre da mesma posteriormente pois utilizaremos a mesma.&lt;br /&gt;
&lt;br /&gt;
===Compilando o OpenSIPs===&lt;br /&gt;
Para manter um padrão onde os dados estao vamos utilizar o diretório /usr/src/ para o download de código fonte.&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/&lt;br /&gt;
 wget -c http://opensips.org/pub/opensips/1.9.1/src/opensips-1.9.1_src.tar.gz&lt;br /&gt;
 tar -xzvf opensips-1.9.1_src.tar.gz&lt;br /&gt;
 cd opensips-1.9.1-tls/&lt;br /&gt;
 make menuconfig&lt;br /&gt;
&lt;br /&gt;
Neste ponto o sistema irá abrir uma tela com algumas opções para selecionar, Acesse a primeira opção do menu, no submenu acesse a segunda opção ( Configure excluded modules ), selecione os módulos db_mysql , dialplan , mi_xmlrpc , presence e presence_xml&lt;br /&gt;
&lt;br /&gt;
Agora volte ao submenu, e selecione a opção Save Changes, volte para o menu principal e selecione '''Compile and Install OpenSips''' , deixe que o sistema execute suas funções.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ao finalizar a compilação você retornará ao menu, va na opção '''Exit and Save all changes'''&lt;br /&gt;
&lt;br /&gt;
===Preparando a Configuração===&lt;br /&gt;
&lt;br /&gt;
Antes de darmos inicio ao arquivo de configuração, vamos ajustar algumas questões, o opensips instala os arquivos (se voce nao alterar o parametro) em /usr, consequentemente as configurações ficam em /usr/etc , eu por padrão faço um link para o diretório /etc, assim acesso as configurações em /etc/opensips&lt;br /&gt;
&lt;br /&gt;
 ln -s /usr/etc/opensips /etc/&lt;br /&gt;
&lt;br /&gt;
No caso do debian o script de inicialização utiliza um arquivo extra de configuração&lt;br /&gt;
 cp packaging/debian/opensips.default /etc/default/opensips&lt;br /&gt;
&lt;br /&gt;
Para o script de inicialização execute o comando abaixo&lt;br /&gt;
 cp packaging/debian/opensips.init /etc/init.d/opensips&lt;br /&gt;
 chmod +x /etc/init.d/opensips&lt;br /&gt;
 update-rc.d opensips defaults&lt;br /&gt;
&lt;br /&gt;
Edite o arquivo /etc/default/opensips , a altere o parametro '''RUN_OPENSIPS''' para yes&lt;br /&gt;
&lt;br /&gt;
Você pode notar que no arquivo é mensionado o usuário de execução do opensips como opensips, então vamos ter de criar este usuário ( e grupo )&lt;br /&gt;
&lt;br /&gt;
 groupadd opensips&lt;br /&gt;
 mkdir /var/run/opensips&lt;br /&gt;
 useradd -d /var/run/opensips/ -s /bin/false -g opensips opensips&lt;br /&gt;
 chown -R opensips.opensips /var/run/opensips&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Configurando o opensipsctl===&lt;br /&gt;
O opensipsctl (e opensipsdbctl) utilizam o arquivo de configuração /etc/opensips/opensipsctlrc, abaixo segue o conteúdo do arquivo. (Sugiro que você faça um backup dos arquivos originais para ter uma copia, existem parametros que você pode estudar depois).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DBENGINE=MYSQL&lt;br /&gt;
DBHOST=localhost&lt;br /&gt;
DBNAME=opensips&lt;br /&gt;
DBRWUSER=opensips&lt;br /&gt;
DBRWPW=&amp;quot;opensipsrw&amp;quot;&lt;br /&gt;
SIP_DOMAIN=10.254.254.6  ### caso voce esteja usando outro ip altere aqui&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DBROOTUSER=&amp;quot;root&amp;quot;&lt;br /&gt;
INSTALL_EXTRA_TABLES=ask&lt;br /&gt;
ALIASES_TYPE=&amp;quot;DB&amp;quot;&lt;br /&gt;
MI_CONNECTOR=FIFO:/tmp/opensips_fifo&lt;br /&gt;
# VERIFY_ACL=1&lt;br /&gt;
# ACL_GROUPS=&amp;quot;local ld int voicemail free-pstn&amp;quot;&lt;br /&gt;
# VERBOSE=1&lt;br /&gt;
# STORE_PLAINTEXT_PW=0&lt;br /&gt;
# NOHLPRINT=1&lt;br /&gt;
PID_FILE=/var/run/opensips/opensips.pid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Criando o banco de dados===&lt;br /&gt;
Agora que temos nosso arquivo configurado vamos fazer a criação do banco de dados, execute o comando abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
opensipsdbctl create opensips&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema irá lhe perguntar algumas coisas, responda Y (sim) para todas para que ele instale todas as tabelas, não usaremos todas elas, mas desta forma você fica com praticamente tudo criado para o caso de uma expansão dos recursos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Instalando o RTP Proxy===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/src/&lt;br /&gt;
wget -c http://b2bua.org/chrome/site/rtpproxy-1.2.1.tar.gz&lt;br /&gt;
tar -xzvf rtpproxy-1.2.1.tar.gz&lt;br /&gt;
cd rtpproxy-1.2.1&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
groupadd rtpproxy&lt;br /&gt;
useradd -d /var/run/rtpproxy -s /bin/true -g rtpproxy rtpproxy&lt;br /&gt;
mkdir /var/log/rtpproxy&lt;br /&gt;
mkdir /var/run/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/log/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/run/rtpproxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Arquivo de inicialização====&lt;br /&gt;
'''/etc/init.d/rtpproxy'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# Este script e de autoria de Mike Tesliuk&lt;br /&gt;
# qualquer falha no mesmo por favor informe &lt;br /&gt;
# atraves do email mike (a) tesliuk.com&lt;br /&gt;
#&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:          rtpproxy&lt;br /&gt;
# Required-Start:    $syslog $network $local_fs $time&lt;br /&gt;
# Required-Stop:     $syslog $network $local_fs&lt;br /&gt;
# Default-Start:     2 3 4 5&lt;br /&gt;
# Default-Stop:      0 1 6&lt;br /&gt;
# Short-Description: Start the RTPPROXY server&lt;br /&gt;
# Description:       Start the RTPPROXY server&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin&lt;br /&gt;
USELOG=1&lt;br /&gt;
USER=rtpproxy&lt;br /&gt;
# Altere o ip abaixo para o ip de seu sistema&lt;br /&gt;
IPADDR=&amp;quot;10.254.254.6&amp;quot;&lt;br /&gt;
&lt;br /&gt;
. /lib/lsb/init-functions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
start(){&lt;br /&gt;
        echo &amp;quot;Iniciando RTP PROXY &amp;quot;&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                if [ &amp;quot;${USELOG}&amp;quot; = &amp;quot;1&amp;quot; ]; then&lt;br /&gt;
                        echo &amp;quot;Iniciando com LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER -F -f d DBUG 2&amp;amp;&amp;gt; /var/log/rtpproxy/rtpproxy.log &amp;amp;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Iniciando sem LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER  -F -f d DBUG 2&amp;amp;&amp;gt; /dev/null&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;START OK&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
        else&lt;br /&gt;
                echo &amp;quot;Processo ja em execucao&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
stop(){&lt;br /&gt;
&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                echo &amp;quot;Processo nao encontrado&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
                kill -9 $(pidof rtpproxy)&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;STOP OK&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Falha em realizar stop do servico&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
case $1 in&lt;br /&gt;
        start)&lt;br /&gt;
                start&lt;br /&gt;
        ;;&lt;br /&gt;
        stop)&lt;br /&gt;
                stop&lt;br /&gt;
        ;;&lt;br /&gt;
        restart)&lt;br /&gt;
                stop&lt;br /&gt;
                start&lt;br /&gt;
&lt;br /&gt;
        ;;&lt;br /&gt;
        *)&lt;br /&gt;
                echo &amp;quot;Utilize: stop | start | restart&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos dar permissao e colocar na inicialização&lt;br /&gt;
 chmod +x /etc/init.d/rtpproxy &lt;br /&gt;
 update-rc.d rtpproxy defaults&lt;br /&gt;
 /etc/init.d/rtpproxy start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Criando o arquivo opensips.cfg===&lt;br /&gt;
O arquivo opensips.cfg é a onde a coisa toda acontece para o opensips, claro que ele dependerá de informações que estarão no banco de dados, mas é onde criamos todas as nossas rotas e validações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Este tutorial nao esta terminado, este arquivo ainda esta em testes &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
####### Global Parameters #########&lt;br /&gt;
debug=3&lt;br /&gt;
log_stderror=no&lt;br /&gt;
log_facility=LOG_LOCAL0&lt;br /&gt;
&lt;br /&gt;
fork=yes&lt;br /&gt;
children=4&lt;br /&gt;
&lt;br /&gt;
/* Descomente as linhas abaixo para ativar o debug */&lt;br /&gt;
#debug=7&lt;br /&gt;
#fork=no&lt;br /&gt;
#log_stderror=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Comente a linha abaixo para ativar a descoberta automatica de enderecos locais&lt;br /&gt;
 , isso significa que o sistema ira verificar todos os ips ativos e hosts e entao ativara&lt;br /&gt;
 o protocolo para todos eles */ &lt;br /&gt;
auto_aliases=no&lt;br /&gt;
&lt;br /&gt;
/* Defina aqui o ip a ser utilizado */&lt;br /&gt;
listen=udp:10.254.254.6:5060   # Altere este IP para o seu ambiente&lt;br /&gt;
&lt;br /&gt;
/* Nao usaremos sip por tcp nem tls neste script */&lt;br /&gt;
disable_tcp=yes&lt;br /&gt;
&lt;br /&gt;
disable_tls=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Secao de modulos ########&lt;br /&gt;
&lt;br /&gt;
#set module path&lt;br /&gt;
mpath=&amp;quot;/usr//lib64/opensips/modules/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;signaling.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sl.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;tm.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_timer&amp;quot;, 5)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_inv_timer&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;restart_fr_on_each_reply&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;onreply_avp_mode&amp;quot;, 1)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rr.so&amp;quot;&lt;br /&gt;
/* do not append from tag to the RR (no need for this script) */&lt;br /&gt;
modparam(&amp;quot;rr&amp;quot;, &amp;quot;append_fromtag&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;maxfwd.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sipmsgops.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;mi_fifo.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_name&amp;quot;, &amp;quot;/tmp/opensips_fifo&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_mode&amp;quot;, 0666)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;db_mysql.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;uri.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;uri&amp;quot;, &amp;quot;use_uri_table&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;usrloc.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;nat_bflag&amp;quot;, &amp;quot;FLB_NATB&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_mode&amp;quot;,   2)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;registrar.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;registrar&amp;quot;, &amp;quot;tcp_persistent_flag&amp;quot;, &amp;quot;TCP_PERSISTENT&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
/* Descomente a linha abaixo para nao permitir mais de 10 contatos por conta */&lt;br /&gt;
#modparam(&amp;quot;registrar&amp;quot;, &amp;quot;max_contacts&amp;quot;, 10)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;acc.so&amp;quot;&lt;br /&gt;
/* Quais eventos deverao ser registrados ? */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;early_media&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;report_cancels&amp;quot;, 0)&lt;br /&gt;
/* por padrao nos nao ajustamos a direcao em requisicoes sequencias, &lt;br /&gt;
 se voce deseja usar este recurso tenha certeza de ativar o &amp;quot;appen_fromtag&amp;quot; &lt;br /&gt;
 para o modulo &amp;quot;rr&amp;quot; */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;detect_direction&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;failed_transaction_flag&amp;quot;, &amp;quot;FLT_ACCFAILED&amp;quot;)&lt;br /&gt;
/* Gatilhos para accounting  (flags) */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_extra&amp;quot;, &lt;br /&gt;
	&amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_extra&amp;quot;, &amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;auth.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;auth_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;calculate_ha1&amp;quot;, yes)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;password_column&amp;quot;, &amp;quot;password&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;load_credentials&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;permissions.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;permissions&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;alias_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;alias_db&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;presence.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;presence&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
#loadmodule &amp;quot;presence_xml.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;dialog.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_mode&amp;quot;, 2)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_url&amp;quot;,&amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;dlg_match_mode&amp;quot;, 1)&lt;br /&gt;
#modparam(&amp;quot;dialog&amp;quot;, &amp;quot;default_timeout&amp;quot;, 60)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;siptrace.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;trace_flag&amp;quot;, 22)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;traced_user_avp&amp;quot;, &amp;quot;$avp(s:traceuser)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;nathelper.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;natping_interval&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;ping_nated_only&amp;quot;, 1)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_bflag&amp;quot;, &amp;quot;FLB_NATSIPPING&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_from&amp;quot;, &amp;quot;sip:pinger@10.254.254.6&amp;quot;) # Altere o ip para o ip do servidor&lt;br /&gt;
modparam(&amp;quot;nathelper|registrar&amp;quot;, &amp;quot;received_avp&amp;quot;, &amp;quot;$avp(RECEIVED)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rtpproxy.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;rtpproxy&amp;quot;, &amp;quot;rtpproxy_sock&amp;quot;, &amp;quot;udp:127.0.0.1:7722&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Logica de roteamento ########&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route {&lt;br /&gt;
&lt;br /&gt;
	if (!mf_process_maxfwd_header(&amp;quot;3&amp;quot;)) {&lt;br /&gt;
                send_reply(&amp;quot;483&amp;quot;,&amp;quot;looping&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;REQUISICAO RECEBIDA, ENVIANDO PARA REQINIT&amp;quot;);&lt;br /&gt;
	# Checagem inicial por requisicao&lt;br /&gt;
	route(REQINIT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA NAT&amp;quot;);&lt;br /&gt;
	# Deteccao de nat&lt;br /&gt;
	route(NAT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA WITHINDLG&amp;quot;);&lt;br /&gt;
	# Gerenciando requisicaoes com dialog&lt;br /&gt;
	route(WITHINDLG);&lt;br /&gt;
&lt;br /&gt;
	# Manipulando requisicoes iniciais (nao consta To tag)&lt;br /&gt;
	&lt;br /&gt;
	# Processando CANCEL&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;CANCEL&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD CANCEL&amp;quot;);&lt;br /&gt;
		if(t_check_trans()){&lt;br /&gt;
			t_relay();&lt;br /&gt;
		}&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	t_check_trans();&lt;br /&gt;
&lt;br /&gt;
	# Enviando para autenticacao&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA AUTENTICACAO&amp;quot;);&lt;br /&gt;
	route(AUTH);&lt;br /&gt;
&lt;br /&gt;
	# gravando rota para formacao dos dialogs (caso sejam roteados)&lt;br /&gt;
	# removemos qualquer cabecalho de rota pre carregado&lt;br /&gt;
	remove_hf(&amp;quot;Route&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE OU SIBSCRIBE&amp;quot;);&lt;br /&gt;
		record_route();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Contabilizando (acc) INVITES&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE, FAZENDOA ACC&amp;quot;);&lt;br /&gt;
		setflag(FLT_ACC);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando chamada para destinos externos&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA SIPOUT&amp;quot;);&lt;br /&gt;
	route(SIPOUT);&lt;br /&gt;
&lt;br /&gt;
	# Requisicoes para dominio local&lt;br /&gt;
	&lt;br /&gt;
	# Roteando requisicoes de PRESENCE&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PRESENCE&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	route(PRESENCE);&lt;br /&gt;
&lt;br /&gt;
	# Gerenciando pedidos de registro&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA REGISTRAR&amp;quot;);	&lt;br /&gt;
	route(REGISTRAR);&lt;br /&gt;
&lt;br /&gt;
	if($ru==&amp;quot;&amp;quot;){&lt;br /&gt;
		xlog(&amp;quot;ru --&amp;gt; vazio&amp;quot;);&lt;br /&gt;
		# Requisicao sem usuario na RURI&lt;br /&gt;
		sl_send_reply(&amp;quot;484&amp;quot;, &amp;quot;Address Incomplete&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando requisicao para PSTN&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PSTN&amp;quot;);&lt;br /&gt;
	route(PSTN);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Salvando informacao de quem originou a chamad&lt;br /&gt;
	$avp(callee)=$rU;&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA DISPATCH PSTN&amp;quot;);&lt;br /&gt;
	route(FSDISPATCH);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	# Servico de localizacao de usuario&lt;br /&gt;
	route(LOCATION);&lt;br /&gt;
&lt;br /&gt;
	# Efetuando o relay (encaminhamento)&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[RELAY] {&lt;br /&gt;
	if(check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
		setbflag(FLB_NATB);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(isflagset(FLT_NATS) || isbflagset(FLB_NATB)){&lt;br /&gt;
		#route(RTPPROXY);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
#		t_on_reply(&amp;quot;REPLY_ONE&amp;quot;);&lt;br /&gt;
#		t_on_failure(&amp;quot;FAIL_ONE&amp;quot;);&lt;br /&gt;
#	}&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;AQUI TENTAMOS ENVIAR A CHAMADA $fU $tU&amp;quot;);&lt;br /&gt;
	if(!t_relay()){&lt;br /&gt;
		xlog(&amp;quot;FALHA EM ENVIAR A CHAMADA, NAO FOI POSSIVEL FAZER O RELAY&amp;quot;);&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
	}&lt;br /&gt;
	xlog(&amp;quot;CHAMADA FOI ENVIADA AQUI, QUAL O ERRO ENTAO&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REQINIT] {&lt;br /&gt;
	if(!mf_process_maxfwd_header(&amp;quot;10&amp;quot;)){&lt;br /&gt;
		sl_send_reply(&amp;quot;483&amp;quot;, &amp;quot;Too Many Hops&amp;quot;);&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[WITHINDLG] {&lt;br /&gt;
	if(has_totag()){&lt;br /&gt;
		if(loose_route()){&lt;br /&gt;
			if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
				setflag(FLT_ACC);&lt;br /&gt;
				setflag(FLT_ACCFAILED);&lt;br /&gt;
			}&lt;br /&gt;
			route(RELAY);&lt;br /&gt;
		}else{&lt;br /&gt;
			if(is_method(&amp;quot;SUBSCRIBE&amp;quot;) &amp;amp;&amp;amp; uri==myself) {&lt;br /&gt;
				# requisicao de subscribe pre-estabelecida&lt;br /&gt;
				route(PRESENCE);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;ACK&amp;quot;)){&lt;br /&gt;
				if(t_check_trans()){&lt;br /&gt;
					t_relay();&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}else{&lt;br /&gt;
				# ACK para transacao nao encontrada, ignoramos...&lt;br /&gt;
				exit;&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			sl_send_reply(&amp;quot;404&amp;quot;, &amp;quot;Not Here&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		}	&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REGISTRAR] {&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		if(isflagset(FLT_NATS)){&lt;br /&gt;
			setbflag(FLB_NATB);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(!save(&amp;quot;location&amp;quot;)){&lt;br /&gt;
			sl_reply_error();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[LOCATION] {&lt;br /&gt;
&lt;br /&gt;
	alias_db_lookup(&amp;quot;dbaliases&amp;quot;);&lt;br /&gt;
	if(!lookup(&amp;quot;location&amp;quot;)){&lt;br /&gt;
		switch($rc) {&lt;br /&gt;
			case -1:&lt;br /&gt;
			case -3:&lt;br /&gt;
				t_newtran();&lt;br /&gt;
				t_reply(&amp;quot;404&amp;quot;,&amp;quot;Not Found&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			case -2:&lt;br /&gt;
				sl_send_reply(&amp;quot;405&amp;quot;, &amp;quot;Method Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		setflag(FLT_ACCMISSED);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PRESENCE] {&lt;br /&gt;
	if(!is_method(&amp;quot;PUBLISH|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!t_newtran()){&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
		handle_publish();&lt;br /&gt;
	}else if(is_method(&amp;quot;SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		handle_subscribe();&lt;br /&gt;
	}&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[AUTH]{&lt;br /&gt;
	xlog(&amp;quot;PEDIDO DE AUTENTICACAO&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		# atentica pedidos de registro&lt;br /&gt;
		if(!www_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
			www_challenge(&amp;quot;&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if($au!=$tU){&lt;br /&gt;
			sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	}else{&lt;br /&gt;
		if(route(FSINBOUND)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(check_source_address(&amp;quot;0&amp;quot;)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(from_uri==myself){&lt;br /&gt;
			if(!proxy_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
				proxy_challenge(&amp;quot;&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
				if($au!=$tU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}else{&lt;br /&gt;
				if($au!=$fU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			# Validamos (autenticamos) o usuario&lt;br /&gt;
			consume_credentials();&lt;br /&gt;
		}else{&lt;br /&gt;
		&lt;br /&gt;
			# usuario nao e local, vamos negar&lt;br /&gt;
			if(!uri==myself){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not relaying&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}	&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[NAT] {&lt;br /&gt;
	force_rport();&lt;br /&gt;
	if(nat_uac_test(&amp;quot;19&amp;quot;)){&lt;br /&gt;
		if(method==&amp;quot;REGISTER&amp;quot;){&lt;br /&gt;
			fix_nated_register();&lt;br /&gt;
		}else{&lt;br /&gt;
			fix_nated_contact();&lt;br /&gt;
		}&lt;br /&gt;
		setflag(FLT_NATS);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[RTPPROXY] {&lt;br /&gt;
	if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}else if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		engage_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!has_totag()){&lt;br /&gt;
&lt;br /&gt;
		if(!check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
			add_rr_param(&amp;quot;;nat=yes&amp;quot;);&lt;br /&gt;
			xlog(&amp;quot;NAT yes NAO ENCONTRADO&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[SIPOUT]{&lt;br /&gt;
	if(!uri==myself){&lt;br /&gt;
		append_hf(&amp;quot;P-hint: outbound\r\n&amp;quot;);&lt;br /&gt;
		route(RELAY);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PSTN]{&lt;br /&gt;
        # neste caso apenas para exemplificar um uso simples&lt;br /&gt;
        # vamos fazer o redirecionamento par ao asterisk&lt;br /&gt;
        # realizar a dicagem da chamada&lt;br /&gt;
&lt;br /&gt;
        if(!($rU=~&amp;quot;^(\+|00)[1-9][0-9]{3,20}$&amp;quot;))&lt;br /&gt;
                return;&lt;br /&gt;
&lt;br /&gt;
        ## a regra acima aceita para discagem externa qualquer numero&lt;br /&gt;
        # comecado com 00 ou +&lt;br /&gt;
        #&lt;br /&gt;
&lt;br /&gt;
        if(from_uri!=myself){&lt;br /&gt;
                sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $ru = &amp;quot;sip:&amp;quot; + $rU + &amp;quot;@&amp;quot; + &amp;quot;10.254.254.6:5090&amp;quot;;&lt;br /&gt;
        xlog(&amp;quot;NOVO DESTINO: $ru&amp;quot;);&lt;br /&gt;
        route(RELAY);&lt;br /&gt;
        exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[XMLRPC]{&lt;br /&gt;
	# nao vamos implementar esta funcionalidade&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSINBOUND] {&lt;br /&gt;
	# verificar para validar o ip do asterisk:porta&lt;br /&gt;
	# se bater , responder com return 1;&lt;br /&gt;
	if($si==&amp;quot;10.254.254.6&amp;quot; &amp;amp;&amp;amp; $sp==&amp;quot;5090&amp;quot;){&lt;br /&gt;
		return(1);&lt;br /&gt;
	}else{&lt;br /&gt;
		return(-1);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSDISPATCH] {&lt;br /&gt;
&lt;br /&gt;
	if(!is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(route(FSINBOUND)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;CAIMOS NO SWITCH, VAMOS LOCALIZAR O PERFIL DA CHAMADA $rU&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if($rU =~ &amp;quot;^41$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH expressa comeca e termina em 41&amp;quot;);&lt;br /&gt;
			#regra de menu de voicemail, apenas &lt;br /&gt;
			# usuarios autenticados&lt;br /&gt;
			if($au==&amp;quot;&amp;quot;){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$rU = &amp;quot;vma-&amp;quot; + $au;&lt;br /&gt;
	}else if($rU =~ &amp;quot;^441[0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCA 441XX &amp;quot;);&lt;br /&gt;
			# numero discado comeca com 441 seguido de dois digitos&lt;br /&gt;
			# chamada direta para inbox do voicemail&lt;br /&gt;
			strip(2);&lt;br /&gt;
			route(FSVBOX);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^433[01][0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH OPCAO 433[01]XX&amp;quot;);&lt;br /&gt;
			# numero comecado em 443, seguido de 0 ou 1, mais dois digitos&lt;br /&gt;
			# sistema de conferencia&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^45[0-9]+$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCAO 45X.&amp;quot;);&lt;br /&gt;
			#numero comecado com 45, seguindo de numeros;&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else{&lt;br /&gt;
			xlog(&amp;quot;OPCAO DEFAULT DO SWITCH&amp;quot;);&lt;br /&gt;
			# usuario offline, enviando para voicemail&lt;br /&gt;
			if(!registered(&amp;quot;location&amp;quot;)){&lt;br /&gt;
				route(FSVBOX);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			# usuario online, fazendo bridging&lt;br /&gt;
			xlog(&amp;quot;USUARIO ESTA ONLINE VAMOS FAZER BRIDGE&amp;quot;);&lt;br /&gt;
			prefix(&amp;quot;kb-&amp;quot;);&lt;br /&gt;
			if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
				t_on_failure(&amp;quot;FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
	}&lt;br /&gt;
	route(FSRELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSVBOX&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($rU =~ &amp;quot;^441[0-9][0-9]&amp;quot;){&lt;br /&gt;
		strip(2);&lt;br /&gt;
	}&lt;br /&gt;
	prefix(&amp;quot;vm-&amp;quot;);&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[FSRELAY] {&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSRELAY&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
branch_route[BRANCH_ONE]{&lt;br /&gt;
	xlog(&amp;quot;new branch at $ru&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
onreply_route[REPLY_ONE]{&lt;br /&gt;
	xlog(&amp;quot;Incoming reply&amp;quot;);&lt;br /&gt;
	if((isflagset(FLT_NATS) || isbflagset(FLB_NATB) &amp;amp;&amp;amp; status =~ &amp;quot;(183)|(2[0-9][0-9])&amp;quot;)){&lt;br /&gt;
		#rtpproxy_offer();&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	if(isbflagset(FLB_NATB)){&lt;br /&gt;
		fix_nated_contact();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_ONE]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_ONE&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_check_status(&amp;quot;486|408|480&amp;quot;)){&lt;br /&gt;
		$rU = $avp(callee);&lt;br /&gt;
		$var(newbranch) = 1;&lt;br /&gt;
		route(FSVBOX);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testes com Opensips (registro)==&lt;br /&gt;
&lt;br /&gt;
Antes de podermos testar precisamos iniciar o serviço, no momento estamos com ele operando em modo debug, então a inicialização deve ser realizada com o comando abaixo&lt;br /&gt;
 /etc/init.d/opensips debug&lt;br /&gt;
&lt;br /&gt;
Abra uma nova sessão no servidor e então vamos criar os usuários&lt;br /&gt;
 opensipsctl add 101 101&lt;br /&gt;
 opensipsctl add 102 102&lt;br /&gt;
 opensipsctl add 103 103&lt;br /&gt;
&lt;br /&gt;
usuario 101 com senha 101 e assim por diante&lt;br /&gt;
&lt;br /&gt;
Faça a onexão com seu softphone, aqui para testes utilizei o jitsi e o zoiper, neste momento vamos apenas fazer o registro do usuário para testar a autenticação, se você tentar realizar uma discagem não funcionará pois neste caso o processo depende do Asterisk que ainda não está configurado, vamos dar inicio nesta configuração agora.&lt;br /&gt;
&lt;br /&gt;
==Asterisk==&lt;br /&gt;
Não vamos dar muitos detalhes da instalação do asterisk aqui, a ideia é simplesmente ter o mesmo funcionando da forma que necessitamos.&lt;br /&gt;
 apt-get install asterisk&lt;br /&gt;
&lt;br /&gt;
Após a instalação , abra o arquivo /etc/asterisk/sip.conf, localize a linha '''udpbindaddr=0.0.0.0''' e altere para '''udpbindaddr=0.0.0.0:5090'''  , depois ao fim do arquivo adicione.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
type=peer&lt;br /&gt;
host=10.254.254.6&lt;br /&gt;
port=5060&lt;br /&gt;
qualify=yes&lt;br /&gt;
context=opensips&lt;br /&gt;
insecure=port,invite&lt;br /&gt;
canreinvite=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora abra o arquivo '''/etc/asterisk/extensions.conf''' , crie no fim do arquivo a seguinte entrada.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _kb-1XX,1,NoOp(CHAMADA INTERNA - FAZER BRIDGE - ${CALLERID(num)} ${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Dial(SIP/opensips/${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Goto(opensips,vm-${EXTEN:3},1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vm-1XX,1,NoOp(CHAMADA PARA VOICEMAIL)&lt;br /&gt;
same =&amp;gt; n,Voicemail(${EXTEN:3}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vma-1XX,1,NoOp(CHAMADA PARA VOICEMAIL - ADMINISTRATIVO)&lt;br /&gt;
same =&amp;gt; n,VoicemailMain(${EXTEN:4}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _3[01]XX,1,NoOp(CHAMADA PARA CONFERENCIA)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,ConfBridge(${EXTEN},cM1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _00.,1,NoOp(CHAMADA PARA PSTN)&lt;br /&gt;
same =&amp;gt; n,Wait(2)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,Wait(1)&lt;br /&gt;
same =&amp;gt; n,PlayBack(tt-monkeys)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; h,1,Hangup()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finalmente precisamos criar as entradas do voicemail, para isso altere o arquivo '''/etc/asterisk/voicemail.conf''' localize o contexto '''[default]''' e então adicione as entradas para seu voicemail, segue dois exemplos abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
101 =&amp;gt; 123123,Mike Tesliuk&lt;br /&gt;
102 =&amp;gt; 123123,Mike Tesliuk 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Feito isso, faça um restart no asterisk&lt;br /&gt;
 /etc/init.d/asterisk restart&lt;br /&gt;
&lt;br /&gt;
Agora você ja poderá fazer os testes, basicamente criamos as seguintes situações para serem testadas.&lt;br /&gt;
&lt;br /&gt;
*1 Autenticação de usuários&lt;br /&gt;
*2 Chamada entre usuários&lt;br /&gt;
*3 Encaminhamento para caixa postal&lt;br /&gt;
*4 Acesso a caixa postal&lt;br /&gt;
*5 Acesso a conferência&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1390</id>
		<title>OpenSIPs e Asterisk - LIKE CentOS</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=OpenSIPs_e_Asterisk_-_LIKE_CentOS&amp;diff=1390"/>
		<updated>2013-08-27T08:25:35Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: Criou página com '&amp;lt;table&amp;gt; &amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=white&amp;gt; Falta realizar os ajustes / testes para o NAT no mais esta tudo funcionado adequadamente a principio &amp;lt;/fon...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=white&amp;gt; Falta realizar os ajustes / testes para o NAT no mais esta tudo funcionado adequadamente a principio &amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este tutorial é baseado em um tutorial similar porém utilizando Kamailio e Freeswtich, se quiser verificar o tutorial original acesse http://kb.asipto.com/freeswitch:kamailio-3.1.x-freeswitch-1.0.6d-sbc.&lt;br /&gt;
&lt;br /&gt;
Para esta implementação utilizamos CentOS 6.4 64 Bits , OpenSIPS 1.9 e Asterisk 1.8.23 &lt;br /&gt;
&lt;br /&gt;
==Funcionalidades==&lt;br /&gt;
Este tutorial tem por objetivo atingir as seguintes funcionalidades.&lt;br /&gt;
*Autenticação de usuário&lt;br /&gt;
*Registro de usuário&lt;br /&gt;
*Localização de usuário (encaminhamento de chamadas)&lt;br /&gt;
*Roteamento de chamadas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Através do Asterisk estenderemos estas funcionalidades agregando.&lt;br /&gt;
*Correio de voz (Voicemail)&lt;br /&gt;
*Conferencia &lt;br /&gt;
*SBC ( Pode ser utilizado para transcoding, esconder topologia, play de mensagens e tarifação )&lt;br /&gt;
*Outros serviços de media (Anuncios, Ura's e coisas do tipo)&lt;br /&gt;
&lt;br /&gt;
==Definições==&lt;br /&gt;
Para um melhor entendimento da solução vamos expor aqui algumas definições de nosso sistema.&lt;br /&gt;
*Usuários locais terão ramais com 3 digitos (ex: 101, 102, 103)&lt;br /&gt;
*Identidade do correio de voz será o mesmo do ramal&lt;br /&gt;
*Serviços de media (acesso a voicemail e outros) receberão rotas de 4 digitos&lt;br /&gt;
*Opensips e Asterisk utilizarão o mesmo servidor (Neste caso IP: 10.254.254.6)&lt;br /&gt;
*Os serviços rodarão nas portas 5060 (opensips) , 5090 (Asterisk)&lt;br /&gt;
&lt;br /&gt;
==Funcionamento==&lt;br /&gt;
A autenticação do usuário será realizada pelo OpenSIPs, quando uma chamada é autenticada então ela serguirá:&lt;br /&gt;
*Se o usuário de destino não está online a chamada será enviada para o Asterisk para função de correio de voz&lt;br /&gt;
*Se o usuário está online a chamada será encaminhada para o Asterisk, dest forma é possivel acionar funcionalidades como anuncios, definição de tempo de chamada, forçar codecs e outras funcionalidades.&lt;br /&gt;
*Asterisk envia a chamada novamente para o OpenSIPs que verificará no location e entregará a chamada para o usuário.&lt;br /&gt;
*Se a chamada não for atendida o Opensips irá re-encaminhar para o Asterisk direcionando para função de voicemail&lt;br /&gt;
&lt;br /&gt;
==OpenSIPs==&lt;br /&gt;
Vamos iniciar o processo de instalação com o OpenSIPs, siga os procedimentos abaixo para evitar qualquer dificuldade.&lt;br /&gt;
&lt;br /&gt;
===Dependencias===&lt;br /&gt;
Execute o comando abaixo para instalar todas as dependencias necessárias&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install gcc make libncurses5-dev libnewt-dev libxml2-dev unixodbc \ &lt;br /&gt;
unixodbc-dev libmysqlclient15-dev libxmlrpc-c3-dev libexpat1-dev zlib1g-dev \ &lt;br /&gt;
m4 bison flex libpcre3-dev mysql-server vim apache2-mpm-prefork libapache2-mod-php5 \&lt;br /&gt;
 php5-mysql php5-xmlrpc php-pear  ngrep g++ libjpeg62-dev libssl-dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durante a instalação o sistema irá lhe perguntar a senha de root para o servidor MySQL é importante que você se lembre da mesma posteriormente pois utilizaremos a mesma.&lt;br /&gt;
&lt;br /&gt;
===Compilando o OpenSIPs===&lt;br /&gt;
Para manter um padrão onde os dados estao vamos utilizar o diretório /usr/src/ para o download de código fonte.&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/&lt;br /&gt;
 wget -c http://opensips.org/pub/opensips/1.9.1/src/opensips-1.9.1_src.tar.gz&lt;br /&gt;
 tar -xzvf opensips-1.9.1_src.tar.gz&lt;br /&gt;
 cd opensips-1.9.1-tls/&lt;br /&gt;
 make menuconfig&lt;br /&gt;
&lt;br /&gt;
Neste ponto o sistema irá abrir uma tela com algumas opções para selecionar, Acesse a primeira opção do menu, no submenu acesse a segunda opção ( Configure excluded modules ), selecione os módulos db_mysql , dialplan , mi_xmlrpc , presence e presence_xml&lt;br /&gt;
&lt;br /&gt;
Agora volte ao submenu, e selecione a opção Save Changes, volte para o menu principal e selecione '''Compile and Install OpenSips''' , deixe que o sistema execute suas funções.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ao finalizar a compilação você retornará ao menu, va na opção '''Exit and Save all changes'''&lt;br /&gt;
&lt;br /&gt;
===Preparando a Configuração===&lt;br /&gt;
&lt;br /&gt;
Antes de darmos inicio ao arquivo de configuração, vamos ajustar algumas questões, o opensips instala os arquivos (se voce nao alterar o parametro) em /usr, consequentemente as configurações ficam em /usr/etc , eu por padrão faço um link para o diretório /etc, assim acesso as configurações em /etc/opensips&lt;br /&gt;
&lt;br /&gt;
 ln -s /usr/etc/opensips /etc/&lt;br /&gt;
&lt;br /&gt;
No caso do debian o script de inicialização utiliza um arquivo extra de configuração&lt;br /&gt;
 cp packaging/debian/opensips.default /etc/default/opensips&lt;br /&gt;
&lt;br /&gt;
Para o script de inicialização execute o comando abaixo&lt;br /&gt;
 cp packaging/debian/opensips.init /etc/init.d/opensips&lt;br /&gt;
 chmod +x /etc/init.d/opensips&lt;br /&gt;
 update-rc.d opensips defaults&lt;br /&gt;
&lt;br /&gt;
Edite o arquivo /etc/default/opensips , a altere o parametro '''RUN_OPENSIPS''' para yes&lt;br /&gt;
&lt;br /&gt;
Você pode notar que no arquivo é mensionado o usuário de execução do opensips como opensips, então vamos ter de criar este usuário ( e grupo )&lt;br /&gt;
&lt;br /&gt;
 groupadd opensips&lt;br /&gt;
 mkdir /var/run/opensips&lt;br /&gt;
 useradd -d /var/run/opensips/ -s /bin/false -g opensips opensips&lt;br /&gt;
 chown -R opensips.opensips /var/run/opensips&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Configurando o opensipsctl===&lt;br /&gt;
O opensipsctl (e opensipsdbctl) utilizam o arquivo de configuração /etc/opensips/opensipsctlrc, abaixo segue o conteúdo do arquivo. (Sugiro que você faça um backup dos arquivos originais para ter uma copia, existem parametros que você pode estudar depois).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DBENGINE=MYSQL&lt;br /&gt;
DBHOST=localhost&lt;br /&gt;
DBNAME=opensips&lt;br /&gt;
DBRWUSER=opensips&lt;br /&gt;
DBRWPW=&amp;quot;opensipsrw&amp;quot;&lt;br /&gt;
SIP_DOMAIN=10.254.254.6  ### caso voce esteja usando outro ip altere aqui&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DBROOTUSER=&amp;quot;root&amp;quot;&lt;br /&gt;
INSTALL_EXTRA_TABLES=ask&lt;br /&gt;
ALIASES_TYPE=&amp;quot;DB&amp;quot;&lt;br /&gt;
MI_CONNECTOR=FIFO:/tmp/opensips_fifo&lt;br /&gt;
# VERIFY_ACL=1&lt;br /&gt;
# ACL_GROUPS=&amp;quot;local ld int voicemail free-pstn&amp;quot;&lt;br /&gt;
# VERBOSE=1&lt;br /&gt;
# STORE_PLAINTEXT_PW=0&lt;br /&gt;
# NOHLPRINT=1&lt;br /&gt;
PID_FILE=/var/run/opensips/opensips.pid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Criando o banco de dados===&lt;br /&gt;
Agora que temos nosso arquivo configurado vamos fazer a criação do banco de dados, execute o comando abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
opensipsdbctl create opensips&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sistema irá lhe perguntar algumas coisas, responda Y (sim) para todas para que ele instale todas as tabelas, não usaremos todas elas, mas desta forma você fica com praticamente tudo criado para o caso de uma expansão dos recursos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Instalando o RTP Proxy===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/src/&lt;br /&gt;
wget -c http://b2bua.org/chrome/site/rtpproxy-1.2.1.tar.gz&lt;br /&gt;
tar -xzvf rtpproxy-1.2.1.tar.gz&lt;br /&gt;
cd rtpproxy-1.2.1&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
groupadd rtpproxy&lt;br /&gt;
useradd -d /var/run/rtpproxy -s /bin/true -g rtpproxy rtpproxy&lt;br /&gt;
mkdir /var/log/rtpproxy&lt;br /&gt;
mkdir /var/run/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/log/rtpproxy&lt;br /&gt;
chown -R rtpproxy.rtpproxy /var/run/rtpproxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Arquivo de inicialização====&lt;br /&gt;
'''/etc/init.d/rtpproxy'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# Este script e de autoria de Mike Tesliuk&lt;br /&gt;
# qualquer falha no mesmo por favor informe &lt;br /&gt;
# atraves do email mike (a) tesliuk.com&lt;br /&gt;
#&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:          rtpproxy&lt;br /&gt;
# Required-Start:    $syslog $network $local_fs $time&lt;br /&gt;
# Required-Stop:     $syslog $network $local_fs&lt;br /&gt;
# Default-Start:     2 3 4 5&lt;br /&gt;
# Default-Stop:      0 1 6&lt;br /&gt;
# Short-Description: Start the RTPPROXY server&lt;br /&gt;
# Description:       Start the RTPPROXY server&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin&lt;br /&gt;
USELOG=1&lt;br /&gt;
USER=rtpproxy&lt;br /&gt;
# Altere o ip abaixo para o ip de seu sistema&lt;br /&gt;
IPADDR=&amp;quot;10.254.254.6&amp;quot;&lt;br /&gt;
&lt;br /&gt;
. /lib/lsb/init-functions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
start(){&lt;br /&gt;
        echo &amp;quot;Iniciando RTP PROXY &amp;quot;&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                if [ &amp;quot;${USELOG}&amp;quot; = &amp;quot;1&amp;quot; ]; then&lt;br /&gt;
                        echo &amp;quot;Iniciando com LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER -F -f d DBUG 2&amp;amp;&amp;gt; /var/log/rtpproxy/rtpproxy.log &amp;amp;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Iniciando sem LOG&amp;quot;&lt;br /&gt;
                        /usr/local/bin/rtpproxy -l $IPADDR -s udp:127.0.0.1:7722 -u $USER  -F -f d DBUG 2&amp;amp;&amp;gt; /dev/null&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;START OK&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
        else&lt;br /&gt;
                echo &amp;quot;Processo ja em execucao&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
stop(){&lt;br /&gt;
&lt;br /&gt;
        if [ -z $(pidof rtpproxy) ]; then&lt;br /&gt;
                echo &amp;quot;Processo nao encontrado&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
                kill -9 $(pidof rtpproxy)&lt;br /&gt;
                if [ -n $(pidof rtpproxy) ]; then&lt;br /&gt;
                        echo &amp;quot;STOP OK&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;Falha em realizar stop do servico&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
case $1 in&lt;br /&gt;
        start)&lt;br /&gt;
                start&lt;br /&gt;
        ;;&lt;br /&gt;
        stop)&lt;br /&gt;
                stop&lt;br /&gt;
        ;;&lt;br /&gt;
        restart)&lt;br /&gt;
                stop&lt;br /&gt;
                start&lt;br /&gt;
&lt;br /&gt;
        ;;&lt;br /&gt;
        *)&lt;br /&gt;
                echo &amp;quot;Utilize: stop | start | restart&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos dar permissao e colocar na inicialização&lt;br /&gt;
 chmod +x /etc/init.d/rtpproxy &lt;br /&gt;
 update-rc.d rtpproxy defaults&lt;br /&gt;
 /etc/init.d/rtpproxy start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Criando o arquivo opensips.cfg===&lt;br /&gt;
O arquivo opensips.cfg é a onde a coisa toda acontece para o opensips, claro que ele dependerá de informações que estarão no banco de dados, mas é onde criamos todas as nossas rotas e validações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Este tutorial nao esta terminado, este arquivo ainda esta em testes &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
####### Global Parameters #########&lt;br /&gt;
debug=3&lt;br /&gt;
log_stderror=no&lt;br /&gt;
log_facility=LOG_LOCAL0&lt;br /&gt;
&lt;br /&gt;
fork=yes&lt;br /&gt;
children=4&lt;br /&gt;
&lt;br /&gt;
/* Descomente as linhas abaixo para ativar o debug */&lt;br /&gt;
#debug=7&lt;br /&gt;
#fork=no&lt;br /&gt;
#log_stderror=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Comente a linha abaixo para ativar a descoberta automatica de enderecos locais&lt;br /&gt;
 , isso significa que o sistema ira verificar todos os ips ativos e hosts e entao ativara&lt;br /&gt;
 o protocolo para todos eles */ &lt;br /&gt;
auto_aliases=no&lt;br /&gt;
&lt;br /&gt;
/* Defina aqui o ip a ser utilizado */&lt;br /&gt;
listen=udp:10.254.254.6:5060   # Altere este IP para o seu ambiente&lt;br /&gt;
&lt;br /&gt;
/* Nao usaremos sip por tcp nem tls neste script */&lt;br /&gt;
disable_tcp=yes&lt;br /&gt;
&lt;br /&gt;
disable_tls=yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Secao de modulos ########&lt;br /&gt;
&lt;br /&gt;
#set module path&lt;br /&gt;
mpath=&amp;quot;/usr//lib64/opensips/modules/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;signaling.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sl.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;tm.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_timer&amp;quot;, 5)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;fr_inv_timer&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;restart_fr_on_each_reply&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;tm&amp;quot;, &amp;quot;onreply_avp_mode&amp;quot;, 1)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rr.so&amp;quot;&lt;br /&gt;
/* do not append from tag to the RR (no need for this script) */&lt;br /&gt;
modparam(&amp;quot;rr&amp;quot;, &amp;quot;append_fromtag&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;maxfwd.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;sipmsgops.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;mi_fifo.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_name&amp;quot;, &amp;quot;/tmp/opensips_fifo&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;mi_fifo&amp;quot;, &amp;quot;fifo_mode&amp;quot;, 0666)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;db_mysql.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;uri.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;uri&amp;quot;, &amp;quot;use_uri_table&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;usrloc.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;nat_bflag&amp;quot;, &amp;quot;FLB_NATB&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_mode&amp;quot;,   2)&lt;br /&gt;
modparam(&amp;quot;usrloc&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;registrar.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;registrar&amp;quot;, &amp;quot;tcp_persistent_flag&amp;quot;, &amp;quot;TCP_PERSISTENT&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
/* Descomente a linha abaixo para nao permitir mais de 10 contatos por conta */&lt;br /&gt;
#modparam(&amp;quot;registrar&amp;quot;, &amp;quot;max_contacts&amp;quot;, 10)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;acc.so&amp;quot;&lt;br /&gt;
/* Quais eventos deverao ser registrados ? */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;early_media&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;report_cancels&amp;quot;, 0)&lt;br /&gt;
/* por padrao nos nao ajustamos a direcao em requisicoes sequencias, &lt;br /&gt;
 se voce deseja usar este recurso tenha certeza de ativar o &amp;quot;appen_fromtag&amp;quot; &lt;br /&gt;
 para o modulo &amp;quot;rr&amp;quot; */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;detect_direction&amp;quot;, 0)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;failed_transaction_flag&amp;quot;, &amp;quot;FLT_ACCFAILED&amp;quot;)&lt;br /&gt;
/* Gatilhos para accounting  (flags) */&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;log_extra&amp;quot;, &lt;br /&gt;
	&amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_flag&amp;quot;, &amp;quot;FLT_ACC&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_missed_flag&amp;quot;, &amp;quot;FLT_ACCMISSED&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;acc&amp;quot;, &amp;quot;db_extra&amp;quot;, &amp;quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;auth.so&amp;quot;&lt;br /&gt;
loadmodule &amp;quot;auth_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;db_url&amp;quot;,  &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;calculate_ha1&amp;quot;, yes)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;password_column&amp;quot;, &amp;quot;password&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;auth_db&amp;quot;, &amp;quot;load_credentials&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;permissions.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;permissions&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;alias_db.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;alias_db&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;presence.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;presence&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
#loadmodule &amp;quot;presence_xml.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;dialog.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_mode&amp;quot;, 2)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;db_url&amp;quot;,&amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;dialog&amp;quot;, &amp;quot;dlg_match_mode&amp;quot;, 1)&lt;br /&gt;
#modparam(&amp;quot;dialog&amp;quot;, &amp;quot;default_timeout&amp;quot;, 60)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;siptrace.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;db_url&amp;quot;, &amp;quot;mysql://opensips:opensipsrw@localhost/opensips&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;trace_flag&amp;quot;, 22)&lt;br /&gt;
modparam(&amp;quot;siptrace&amp;quot;, &amp;quot;traced_user_avp&amp;quot;, &amp;quot;$avp(s:traceuser)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;nathelper.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;natping_interval&amp;quot;, 30)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;ping_nated_only&amp;quot;, 1)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_bflag&amp;quot;, &amp;quot;FLB_NATSIPPING&amp;quot;)&lt;br /&gt;
modparam(&amp;quot;nathelper&amp;quot;, &amp;quot;sipping_from&amp;quot;, &amp;quot;sip:pinger@10.254.254.6&amp;quot;) # Altere o ip para o ip do servidor&lt;br /&gt;
modparam(&amp;quot;nathelper|registrar&amp;quot;, &amp;quot;received_avp&amp;quot;, &amp;quot;$avp(RECEIVED)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
loadmodule &amp;quot;rtpproxy.so&amp;quot;&lt;br /&gt;
modparam(&amp;quot;rtpproxy&amp;quot;, &amp;quot;rtpproxy_sock&amp;quot;, &amp;quot;udp:127.0.0.1:7722&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####### Logica de roteamento ########&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route {&lt;br /&gt;
&lt;br /&gt;
	if (!mf_process_maxfwd_header(&amp;quot;3&amp;quot;)) {&lt;br /&gt;
                send_reply(&amp;quot;483&amp;quot;,&amp;quot;looping&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;REQUISICAO RECEBIDA, ENVIANDO PARA REQINIT&amp;quot;);&lt;br /&gt;
	# Checagem inicial por requisicao&lt;br /&gt;
	route(REQINIT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA NAT&amp;quot;);&lt;br /&gt;
	# Deteccao de nat&lt;br /&gt;
	route(NAT);&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA WITHINDLG&amp;quot;);&lt;br /&gt;
	# Gerenciando requisicaoes com dialog&lt;br /&gt;
	route(WITHINDLG);&lt;br /&gt;
&lt;br /&gt;
	# Manipulando requisicoes iniciais (nao consta To tag)&lt;br /&gt;
	&lt;br /&gt;
	# Processando CANCEL&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;CANCEL&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD CANCEL&amp;quot;);&lt;br /&gt;
		if(t_check_trans()){&lt;br /&gt;
			t_relay();&lt;br /&gt;
		}&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	t_check_trans();&lt;br /&gt;
&lt;br /&gt;
	# Enviando para autenticacao&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA AUTENTICACAO&amp;quot;);&lt;br /&gt;
	route(AUTH);&lt;br /&gt;
&lt;br /&gt;
	# gravando rota para formacao dos dialogs (caso sejam roteados)&lt;br /&gt;
	# removemos qualquer cabecalho de rota pre carregado&lt;br /&gt;
	remove_hf(&amp;quot;Route&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE OU SIBSCRIBE&amp;quot;);&lt;br /&gt;
		record_route();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Contabilizando (acc) INVITES&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		xlog(&amp;quot;METHOD INVITE, FAZENDOA ACC&amp;quot;);&lt;br /&gt;
		setflag(FLT_ACC);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando chamada para destinos externos&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA SIPOUT&amp;quot;);&lt;br /&gt;
	route(SIPOUT);&lt;br /&gt;
&lt;br /&gt;
	# Requisicoes para dominio local&lt;br /&gt;
	&lt;br /&gt;
	# Roteando requisicoes de PRESENCE&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PRESENCE&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	route(PRESENCE);&lt;br /&gt;
&lt;br /&gt;
	# Gerenciando pedidos de registro&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA REGISTRAR&amp;quot;);	&lt;br /&gt;
	route(REGISTRAR);&lt;br /&gt;
&lt;br /&gt;
	if($ru==&amp;quot;&amp;quot;){&lt;br /&gt;
		xlog(&amp;quot;ru --&amp;gt; vazio&amp;quot;);&lt;br /&gt;
		# Requisicao sem usuario na RURI&lt;br /&gt;
		sl_send_reply(&amp;quot;484&amp;quot;, &amp;quot;Address Incomplete&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# Enviando requisicao para PSTN&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA PSTN&amp;quot;);&lt;br /&gt;
	route(PSTN);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Salvando informacao de quem originou a chamad&lt;br /&gt;
	$avp(callee)=$rU;&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA DISPATCH PSTN&amp;quot;);&lt;br /&gt;
	route(FSDISPATCH);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	# Servico de localizacao de usuario&lt;br /&gt;
	route(LOCATION);&lt;br /&gt;
&lt;br /&gt;
	# Efetuando o relay (encaminhamento)&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[RELAY] {&lt;br /&gt;
	if(check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
		setbflag(FLB_NATB);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(isflagset(FLT_NATS) || isbflagset(FLB_NATB)){&lt;br /&gt;
		#route(RTPPROXY);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
#		t_on_reply(&amp;quot;REPLY_ONE&amp;quot;);&lt;br /&gt;
#		t_on_failure(&amp;quot;FAIL_ONE&amp;quot;);&lt;br /&gt;
#	}&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;AQUI TENTAMOS ENVIAR A CHAMADA $fU $tU&amp;quot;);&lt;br /&gt;
	if(!t_relay()){&lt;br /&gt;
		xlog(&amp;quot;FALHA EM ENVIAR A CHAMADA, NAO FOI POSSIVEL FAZER O RELAY&amp;quot;);&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
	}&lt;br /&gt;
	xlog(&amp;quot;CHAMADA FOI ENVIADA AQUI, QUAL O ERRO ENTAO&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REQINIT] {&lt;br /&gt;
	if(!mf_process_maxfwd_header(&amp;quot;10&amp;quot;)){&lt;br /&gt;
		sl_send_reply(&amp;quot;483&amp;quot;, &amp;quot;Too Many Hops&amp;quot;);&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[WITHINDLG] {&lt;br /&gt;
	if(has_totag()){&lt;br /&gt;
		if(loose_route()){&lt;br /&gt;
			if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
				setflag(FLT_ACC);&lt;br /&gt;
				setflag(FLT_ACCFAILED);&lt;br /&gt;
			}&lt;br /&gt;
			route(RELAY);&lt;br /&gt;
		}else{&lt;br /&gt;
			if(is_method(&amp;quot;SUBSCRIBE&amp;quot;) &amp;amp;&amp;amp; uri==myself) {&lt;br /&gt;
				# requisicao de subscribe pre-estabelecida&lt;br /&gt;
				route(PRESENCE);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;ACK&amp;quot;)){&lt;br /&gt;
				if(t_check_trans()){&lt;br /&gt;
					t_relay();&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}else{&lt;br /&gt;
				# ACK para transacao nao encontrada, ignoramos...&lt;br /&gt;
				exit;&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			sl_send_reply(&amp;quot;404&amp;quot;, &amp;quot;Not Here&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		}	&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[REGISTRAR] {&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		if(isflagset(FLT_NATS)){&lt;br /&gt;
			setbflag(FLB_NATB);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(!save(&amp;quot;location&amp;quot;)){&lt;br /&gt;
			sl_reply_error();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[LOCATION] {&lt;br /&gt;
&lt;br /&gt;
	alias_db_lookup(&amp;quot;dbaliases&amp;quot;);&lt;br /&gt;
	if(!lookup(&amp;quot;location&amp;quot;)){&lt;br /&gt;
		switch($rc) {&lt;br /&gt;
			case -1:&lt;br /&gt;
			case -3:&lt;br /&gt;
				t_newtran();&lt;br /&gt;
				t_reply(&amp;quot;404&amp;quot;,&amp;quot;Not Found&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			case -2:&lt;br /&gt;
				sl_send_reply(&amp;quot;405&amp;quot;, &amp;quot;Method Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		setflag(FLT_ACCMISSED);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PRESENCE] {&lt;br /&gt;
	if(!is_method(&amp;quot;PUBLISH|SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!t_newtran()){&lt;br /&gt;
		sl_reply_error();&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
		handle_publish();&lt;br /&gt;
	}else if(is_method(&amp;quot;SUBSCRIBE&amp;quot;)){&lt;br /&gt;
		handle_subscribe();&lt;br /&gt;
	}&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[AUTH]{&lt;br /&gt;
	xlog(&amp;quot;PEDIDO DE AUTENTICACAO&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;REGISTER&amp;quot;)){&lt;br /&gt;
		# atentica pedidos de registro&lt;br /&gt;
		if(!www_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
			www_challenge(&amp;quot;&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if($au!=$tU){&lt;br /&gt;
			sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	}else{&lt;br /&gt;
		if(route(FSINBOUND)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(check_source_address(&amp;quot;0&amp;quot;)){&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(from_uri==myself){&lt;br /&gt;
			if(!proxy_authorize(&amp;quot;&amp;quot;, &amp;quot;subscriber&amp;quot;)){&lt;br /&gt;
				proxy_challenge(&amp;quot;&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if(is_method(&amp;quot;PUBLISH&amp;quot;)){&lt;br /&gt;
				if($au!=$tU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}else{&lt;br /&gt;
				if($au!=$fU){&lt;br /&gt;
					sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Forbidden auth ID&amp;quot;);&lt;br /&gt;
					exit;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			# Validamos (autenticamos) o usuario&lt;br /&gt;
			consume_credentials();&lt;br /&gt;
		}else{&lt;br /&gt;
		&lt;br /&gt;
			# usuario nao e local, vamos negar&lt;br /&gt;
			if(!uri==myself){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not relaying&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}	&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[NAT] {&lt;br /&gt;
	force_rport();&lt;br /&gt;
	if(nat_uac_test(&amp;quot;19&amp;quot;)){&lt;br /&gt;
		if(method==&amp;quot;REGISTER&amp;quot;){&lt;br /&gt;
			fix_nated_register();&lt;br /&gt;
		}else{&lt;br /&gt;
			fix_nated_contact();&lt;br /&gt;
		}&lt;br /&gt;
		setflag(FLT_NATS);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[RTPPROXY] {&lt;br /&gt;
	if(is_method(&amp;quot;BYE&amp;quot;)){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}else if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		engage_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!has_totag()){&lt;br /&gt;
&lt;br /&gt;
		if(!check_route_param(&amp;quot;nat=yes&amp;quot;)){&lt;br /&gt;
			add_rr_param(&amp;quot;;nat=yes&amp;quot;);&lt;br /&gt;
			xlog(&amp;quot;NAT yes NAO ENCONTRADO&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[SIPOUT]{&lt;br /&gt;
	if(!uri==myself){&lt;br /&gt;
		append_hf(&amp;quot;P-hint: outbound\r\n&amp;quot;);&lt;br /&gt;
		route(RELAY);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[PSTN]{&lt;br /&gt;
        # neste caso apenas para exemplificar um uso simples&lt;br /&gt;
        # vamos fazer o redirecionamento par ao asterisk&lt;br /&gt;
        # realizar a dicagem da chamada&lt;br /&gt;
&lt;br /&gt;
        if(!($rU=~&amp;quot;^(\+|00)[1-9][0-9]{3,20}$&amp;quot;))&lt;br /&gt;
                return;&lt;br /&gt;
&lt;br /&gt;
        ## a regra acima aceita para discagem externa qualquer numero&lt;br /&gt;
        # comecado com 00 ou +&lt;br /&gt;
        #&lt;br /&gt;
&lt;br /&gt;
        if(from_uri!=myself){&lt;br /&gt;
                sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
                exit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $ru = &amp;quot;sip:&amp;quot; + $rU + &amp;quot;@&amp;quot; + &amp;quot;10.254.254.6:5090&amp;quot;;&lt;br /&gt;
        xlog(&amp;quot;NOVO DESTINO: $ru&amp;quot;);&lt;br /&gt;
        route(RELAY);&lt;br /&gt;
        exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[XMLRPC]{&lt;br /&gt;
	# nao vamos implementar esta funcionalidade&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSINBOUND] {&lt;br /&gt;
	# verificar para validar o ip do asterisk:porta&lt;br /&gt;
	# se bater , responder com return 1;&lt;br /&gt;
	if($si==&amp;quot;10.254.254.6&amp;quot; &amp;amp;&amp;amp; $sp==&amp;quot;5090&amp;quot;){&lt;br /&gt;
		return(1);&lt;br /&gt;
	}else{&lt;br /&gt;
		return(-1);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSDISPATCH] {&lt;br /&gt;
&lt;br /&gt;
	if(!is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(route(FSINBOUND)){&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	xlog(&amp;quot;CAIMOS NO SWITCH, VAMOS LOCALIZAR O PERFIL DA CHAMADA $rU&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if($rU =~ &amp;quot;^41$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH expressa comeca e termina em 41&amp;quot;);&lt;br /&gt;
			#regra de menu de voicemail, apenas &lt;br /&gt;
			# usuarios autenticados&lt;br /&gt;
			if($au==&amp;quot;&amp;quot;){&lt;br /&gt;
				sl_send_reply(&amp;quot;403&amp;quot;, &amp;quot;Not Allowed&amp;quot;);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$rU = &amp;quot;vma-&amp;quot; + $au;&lt;br /&gt;
	}else if($rU =~ &amp;quot;^441[0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCA 441XX &amp;quot;);&lt;br /&gt;
			# numero discado comeca com 441 seguido de dois digitos&lt;br /&gt;
			# chamada direta para inbox do voicemail&lt;br /&gt;
			strip(2);&lt;br /&gt;
			route(FSVBOX);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^433[01][0-9][0-9]$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWITCH OPCAO 433[01]XX&amp;quot;);&lt;br /&gt;
			# numero comecado em 443, seguido de 0 ou 1, mais dois digitos&lt;br /&gt;
			# sistema de conferencia&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else if($rU =~ &amp;quot;^45[0-9]+$&amp;quot;){&lt;br /&gt;
			xlog(&amp;quot;SWTICH OPCAO 45X.&amp;quot;);&lt;br /&gt;
			#numero comecado com 45, seguindo de numeros;&lt;br /&gt;
			strip(2);&lt;br /&gt;
	}else{&lt;br /&gt;
			xlog(&amp;quot;OPCAO DEFAULT DO SWITCH&amp;quot;);&lt;br /&gt;
			# usuario offline, enviando para voicemail&lt;br /&gt;
			if(!registered(&amp;quot;location&amp;quot;)){&lt;br /&gt;
				route(FSVBOX);&lt;br /&gt;
				exit;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			# usuario online, fazendo bridging&lt;br /&gt;
			xlog(&amp;quot;USUARIO ESTA ONLINE VAMOS FAZER BRIDGE&amp;quot;);&lt;br /&gt;
			prefix(&amp;quot;kb-&amp;quot;);&lt;br /&gt;
			if(is_method(&amp;quot;INVITE&amp;quot;)){&lt;br /&gt;
				t_on_failure(&amp;quot;FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
	}&lt;br /&gt;
	route(FSRELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
route[FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSVBOX&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($rU =~ &amp;quot;^441[0-9][0-9]&amp;quot;){&lt;br /&gt;
		strip(2);&lt;br /&gt;
	}&lt;br /&gt;
	prefix(&amp;quot;vm-&amp;quot;);&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
route[FSRELAY] {&lt;br /&gt;
	xlog(&amp;quot;ENVIANDO PARA FSRELAY&amp;quot;);&lt;br /&gt;
	$du = &amp;quot;sip:&amp;quot; + &amp;quot;10.254.254.6&amp;quot; + &amp;quot;:&amp;quot; + &amp;quot;5090&amp;quot;;&lt;br /&gt;
	if($var(newbranch)==1){&lt;br /&gt;
		append_branch();&lt;br /&gt;
		$var(newbranch)=0;&lt;br /&gt;
	}&lt;br /&gt;
	route(RELAY);&lt;br /&gt;
	exit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
branch_route[BRANCH_ONE]{&lt;br /&gt;
	xlog(&amp;quot;new branch at $ru&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
onreply_route[REPLY_ONE]{&lt;br /&gt;
	xlog(&amp;quot;Incoming reply&amp;quot;);&lt;br /&gt;
	if((isflagset(FLT_NATS) || isbflagset(FLB_NATB) &amp;amp;&amp;amp; status =~ &amp;quot;(183)|(2[0-9][0-9])&amp;quot;)){&lt;br /&gt;
		#rtpproxy_offer();&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	if(isbflagset(FLB_NATB)){&lt;br /&gt;
		fix_nated_contact();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_ONE]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_ONE&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failure_route[FAIL_FSVBOX]{&lt;br /&gt;
	xlog(&amp;quot;FAILURE ROUTE FAIL_FSVBOX&amp;quot;);&lt;br /&gt;
	if(is_method(&amp;quot;INVITE&amp;quot;) &amp;amp;&amp;amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))){&lt;br /&gt;
		unforce_rtp_proxy();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_was_cancelled()){&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(t_check_status(&amp;quot;486|408|480&amp;quot;)){&lt;br /&gt;
		$rU = $avp(callee);&lt;br /&gt;
		$var(newbranch) = 1;&lt;br /&gt;
		route(FSVBOX);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testes com Opensips (registro)==&lt;br /&gt;
&lt;br /&gt;
Antes de podermos testar precisamos iniciar o serviço, no momento estamos com ele operando em modo debug, então a inicialização deve ser realizada com o comando abaixo&lt;br /&gt;
 /etc/init.d/opensips debug&lt;br /&gt;
&lt;br /&gt;
Abra uma nova sessão no servidor e então vamos criar os usuários&lt;br /&gt;
 opensipsctl add 101 101&lt;br /&gt;
 opensipsctl add 102 102&lt;br /&gt;
 opensipsctl add 103 103&lt;br /&gt;
&lt;br /&gt;
usuario 101 com senha 101 e assim por diante&lt;br /&gt;
&lt;br /&gt;
Faça a onexão com seu softphone, aqui para testes utilizei o jitsi e o zoiper, neste momento vamos apenas fazer o registro do usuário para testar a autenticação, se você tentar realizar uma discagem não funcionará pois neste caso o processo depende do Asterisk que ainda não está configurado, vamos dar inicio nesta configuração agora.&lt;br /&gt;
&lt;br /&gt;
==Asterisk==&lt;br /&gt;
Não vamos dar muitos detalhes da instalação do asterisk aqui, a ideia é simplesmente ter o mesmo funcionando da forma que necessitamos.&lt;br /&gt;
 apt-get install asterisk&lt;br /&gt;
&lt;br /&gt;
Após a instalação , abra o arquivo /etc/asterisk/sip.conf, localize a linha '''udpbindaddr=0.0.0.0''' e altere para '''udpbindaddr=0.0.0.0:5090'''  , depois ao fim do arquivo adicione.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
type=peer&lt;br /&gt;
host=10.254.254.6&lt;br /&gt;
port=5060&lt;br /&gt;
qualify=yes&lt;br /&gt;
context=opensips&lt;br /&gt;
insecure=port,invite&lt;br /&gt;
canreinvite=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora abra o arquivo '''/etc/asterisk/extensions.conf''' , crie no fim do arquivo a seguinte entrada.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[opensips]&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _kb-1XX,1,NoOp(CHAMADA INTERNA - FAZER BRIDGE - ${CALLERID(num)} ${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Dial(SIP/opensips/${EXTEN:3})&lt;br /&gt;
same =&amp;gt; n,Goto(opensips,vm-${EXTEN:3},1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vm-1XX,1,NoOp(CHAMADA PARA VOICEMAIL)&lt;br /&gt;
same =&amp;gt; n,Voicemail(${EXTEN:3}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _vma-1XX,1,NoOp(CHAMADA PARA VOICEMAIL - ADMINISTRATIVO)&lt;br /&gt;
same =&amp;gt; n,VoicemailMain(${EXTEN:4}@default)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _3[01]XX,1,NoOp(CHAMADA PARA CONFERENCIA)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,ConfBridge(${EXTEN},cM1)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _00.,1,NoOp(CHAMADA PARA PSTN)&lt;br /&gt;
same =&amp;gt; n,Wait(2)&lt;br /&gt;
same =&amp;gt; n,Answer()&lt;br /&gt;
same =&amp;gt; n,Wait(1)&lt;br /&gt;
same =&amp;gt; n,PlayBack(tt-monkeys)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; h,1,Hangup()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finalmente precisamos criar as entradas do voicemail, para isso altere o arquivo '''/etc/asterisk/voicemail.conf''' localize o contexto '''[default]''' e então adicione as entradas para seu voicemail, segue dois exemplos abaixo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
101 =&amp;gt; 123123,Mike Tesliuk&lt;br /&gt;
102 =&amp;gt; 123123,Mike Tesliuk 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Feito isso, faça um restart no asterisk&lt;br /&gt;
 /etc/init.d/asterisk restart&lt;br /&gt;
&lt;br /&gt;
Agora você ja poderá fazer os testes, basicamente criamos as seguintes situações para serem testadas.&lt;br /&gt;
&lt;br /&gt;
*1 Autenticação de usuários&lt;br /&gt;
*2 Chamada entre usuários&lt;br /&gt;
*3 Encaminhamento para caixa postal&lt;br /&gt;
*4 Acesso a caixa postal&lt;br /&gt;
*5 Acesso a conferência&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Documentacoes&amp;diff=1389</id>
		<title>Documentacoes</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Documentacoes&amp;diff=1389"/>
		<updated>2013-08-27T08:24:56Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[[OpenSIPs e Asterisk]]==&lt;br /&gt;
Configuração de um OpenSIPs com Asterisk&lt;br /&gt;
&lt;br /&gt;
==[[OpenSIPs e Asterisk - LIKE CentOS]]==&lt;br /&gt;
Fork do documento original do Mike portado para CentOS 6.4 &lt;br /&gt;
&lt;br /&gt;
==[[Opensips 1.9]]==&lt;br /&gt;
Tutorial de compilação e instalação do OpenSIPS 1.9 utilizando os &lt;br /&gt;
recursos de geração de arquivo&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=121</id>
		<title>Arquivos de configuração</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=121"/>
		<updated>2013-08-01T17:55:04Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O arquivo de configuração do OpenSIPS contém todos os parâmetros que controlam o núcleo e os módulos do OpenSIPS, juntamente com a lógica de roteamento que OpenSIPS usará para rotear o tráfego SIP.&lt;br /&gt;
&lt;br /&gt;
Após a instalação, o local do arquivo de configuração padrão é:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSTALL_PATH/etc/opensips/opensips.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O arquivo de configuração é baseado em texto, escrita em uma linguagem personalizada para o OpenSISP, muito similar a linguagem C. Você irá encontra variáveis diferentes ( cada uma com diferentes escopos - explicado mais abaixo neste manual ), você pode fazer construções clássicas como if / while / switch, etc, e você pode também chamar sub-rotinas com parâmetros, então o script deverá ser facilmente legível para qualquer um com habilidades em programação SIP.&lt;br /&gt;
&lt;br /&gt;
{{mbox | text = Some text.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Devido ao fato de ter que reiniciar o OpenSIPS a cada mudança no arquivo de configuração, isto é de vital importância garantir que tudas as mudanças tenham efeito de acordo com a sintaxe de linguagem do OpenSIPS.&lt;br /&gt;
&lt;br /&gt;
Você pode verificar a validade do arquivo de configuração do OpenSIPS executando o seguinte comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[INSTALL_PATH]/sbin/opensips -C [PATH_TO_CFG]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ao verificar o arquivo de configuração através do validador, se o cfg estiver OK, o OpenSIPS irá retornar 0.&lt;br /&gt;
&lt;br /&gt;
Se a configuração conter algum erro, eles serão apresentados no console e o OpenSIPS irá retornar -1.&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=119</id>
		<title>Arquivos de configuração</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=119"/>
		<updated>2013-08-01T17:54:07Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O arquivo de configuração do OpenSIPS contém todos os parâmetros que controlam o núcleo e os módulos do OpenSIPS, juntamente com a lógica de roteamento que OpenSIPS usará para rotear o tráfego SIP.&lt;br /&gt;
&lt;br /&gt;
Após a instalação, o local do arquivo de configuração padrão é:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSTALL_PATH/etc/opensips/opensips.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O arquivo de configuração é baseado em texto, escrita em uma linguagem personalizada para o OpenSISP, muito similar a linguagem C. Você irá encontra variáveis diferentes ( cada uma com diferentes escopos - explicado mais abaixo neste manual ), você pode fazer construções clássicas como if / while / switch, etc, e você pode também chamar sub-rotinas com parâmetros, então o script deverá ser facilmente legível para qualquer um com habilidades em programação SIP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Devido ao fato de ter que reiniciar o OpenSIPS a cada mudança no arquivo de configuração, isto é de vital importância garantir que tudas as mudanças tenham efeito de acordo com a sintaxe de linguagem do OpenSIPS.&lt;br /&gt;
&lt;br /&gt;
Você pode verificar a validade do arquivo de configuração do OpenSIPS executando o seguinte comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[INSTALL_PATH]/sbin/opensips -C [PATH_TO_CFG]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ao verificar o arquivo de configuração através do validador, se o cfg estiver OK, o OpenSIPS irá retornar 0.&lt;br /&gt;
&lt;br /&gt;
Se a configuração conter algum erro, eles serão apresentados no console e o OpenSIPS irá retornar -1.&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=117</id>
		<title>Arquivos de configuração</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=117"/>
		<updated>2013-08-01T17:46:13Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O arquivo de configuração do OpenSIPS contém todos os parâmetros que controlam o núcleo e os módulos do OpenSIPS, juntamente com a lógica de roteamento que OpenSIPS usará para rotear o tráfego SIP.&lt;br /&gt;
&lt;br /&gt;
Após a instalação, o local do arquivo de configuração padrão é:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NSTALL_PATH/etc/opensips/opensips.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O arquivo de configuração é baseado em texto, escrita em uma linguagem personalizada para o OpenSISP, muito similar a linguagem C. Você irá encontra variáveis diferentes ( cada uma com diferentes escopos - explicado mais abaixo neste manual ), você pode fazer construções clássicas como if / while / switch, etc, e você pode também chamar sub-rotinas com parâmetros, então o script deverá ser facilmente legível para qualquer um com habilidades em programação SIP.&lt;br /&gt;
&lt;br /&gt;
{{mbox&lt;br /&gt;
| text  = &amp;lt;div&amp;gt;&lt;br /&gt;
Equal sign = and a start and end brace { } work fine as they are.&lt;br /&gt;
But here is a pipe &amp;amp;#124; and two end braces &amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
And now a pipe and end braces &amp;lt;nowiki&amp;gt;|}}&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=109</id>
		<title>Arquivos de configuração</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=109"/>
		<updated>2013-08-01T17:01:07Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O arquivo de configuração do OpenSIPS contém todos os parâmetros que controlam o núcleo e os módulos do OpenSIPS, juntamente com a lógica de roteamento que OpenSIPS usará para rotear o tráfego SIP.&lt;br /&gt;
&lt;br /&gt;
Após a instalação, o local do arquivo de configuração padrão é:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[INSTALL_PATH]/etc/opensips/opensips.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O arquivo de configuração é baseado em texto, escrita em uma linguagem personalizada para o OpenSISP, muito similar a linguagem C. Você irá encontra variáveis diferentes ( cada uma com diferentes escopos - explicado mais abaixo neste manual ), você pode fazer construções clássicas como if / while / switch, etc, e você pode também chamar sub-rotinas com parâmetros, então o script deverá ser facilmente legível para qualquer um com habilidades em programação SIP.&lt;br /&gt;
&lt;br /&gt;
{{mbox&lt;br /&gt;
| text  = &amp;lt;div&amp;gt;&lt;br /&gt;
Equal sign = and a start and end brace { } work fine as they are.&lt;br /&gt;
But here is a pipe &amp;amp;#124; and two end braces &amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
And now a pipe and end braces &amp;lt;nowiki&amp;gt;|}}&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=108</id>
		<title>Arquivos de configuração</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=108"/>
		<updated>2013-08-01T17:00:32Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O arquivo de configuração do OpenSIPS contém todos os parâmetros que controlam o núcleo e os módulos do OpenSIPS, juntamente com a lógica de roteamento que OpenSIPS usará para rotear o tráfego SIP.&lt;br /&gt;
&lt;br /&gt;
Após a instalação, o local do arquivo de configuração padrão é:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[INSTALL_PATH]/etc/opensips/opensips.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O arquivo de configuração é baseado em texto, escrita em uma linguagem personalizada para o OpenSISP, muito similar a linguagem C. Você irá encontra variáveis diferentes ( cada uma com diferentes escopos - explicado mais abaixo neste manual ), você pode fazer construções clássicas como if / while / switch, etc, e você pode também chamar sub-rotinas com parâmetros, então o script deverá ser facilmente legível para qualquer um com habilidades em programação SIP.&lt;br /&gt;
&lt;br /&gt;
{{notice|Include text here.}}&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=107</id>
		<title>Arquivos de configuração</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=107"/>
		<updated>2013-08-01T17:00:00Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O arquivo de configuração do OpenSIPS contém todos os parâmetros que controlam o núcleo e os módulos do OpenSIPS, juntamente com a lógica de roteamento que OpenSIPS usará para rotear o tráfego SIP.&lt;br /&gt;
&lt;br /&gt;
Após a instalação, o local do arquivo de configuração padrão é:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[INSTALL_PATH]/etc/opensips/opensips.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O arquivo de configuração é baseado em texto, escrita em uma linguagem personalizada para o OpenSISP, muito similar a linguagem C. Você irá encontra variáveis diferentes ( cada uma com diferentes escopos - explicado mais abaixo neste manual ), você pode fazer construções clássicas como if / while / switch, etc, e você pode também chamar sub-rotinas com parâmetros, então o script deverá ser facilmente legível para qualquer um com habilidades em programação SIP.&lt;br /&gt;
&lt;br /&gt;
{{mbox&lt;br /&gt;
| type       = style&lt;br /&gt;
| small      = left&lt;br /&gt;
| image      = [[File:Emblem-question-yellow.svg|40px|alt=Question mark]]&lt;br /&gt;
| smallimage = [[File:Emblem-question-yellow.svg|20px|alt=Question mark]]&lt;br /&gt;
| textstyle  = color: red; font-weight: bold; font-style: italic;&lt;br /&gt;
| text       = Text for a big box, for the top of articles.&lt;br /&gt;
| smalltext  = Text for the top of article sections.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=106</id>
		<title>Arquivos de configuração</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=106"/>
		<updated>2013-08-01T16:59:28Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O arquivo de configuração do OpenSIPS contém todos os parâmetros que controlam o núcleo e os módulos do OpenSIPS, juntamente com a lógica de roteamento que OpenSIPS usará para rotear o tráfego SIP.&lt;br /&gt;
&lt;br /&gt;
Após a instalação, o local do arquivo de configuração padrão é:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[INSTALL_PATH]/etc/opensips/opensips.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O arquivo de configuração é baseado em texto, escrita em uma linguagem personalizada para o OpenSISP, muito similar a linguagem C. Você irá encontra variáveis diferentes ( cada uma com diferentes escopos - explicado mais abaixo neste manual ), você pode fazer construções clássicas como if / while / switch, etc, e você pode também chamar sub-rotinas com parâmetros, então o script deverá ser facilmente legível para qualquer um com habilidades em programação SIP.&lt;br /&gt;
&lt;br /&gt;
{{mbox | text = If you do any change to the configuration file, in order for them to take effect, you MUST restart OpenSIPS.}}&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=104</id>
		<title>Arquivos de configuração</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=104"/>
		<updated>2013-08-01T16:55:18Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O arquivo de configuração do OpenSIPS contém todos os parâmetros que controlam o núcleo e os módulos do OpenSIPS, juntamente com a lógica de roteamento que OpenSIPS usará para rotear o tráfego SIP.&lt;br /&gt;
&lt;br /&gt;
Após a instalação, o local do arquivo de configuração padrão é:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[INSTALL_PATH]/etc/opensips/opensips.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O arquivo de configuração é baseado em texto, escrita em uma linguagem personalizada para o OpenSISP, muito similar a linguagem C. Você irá encontra variáveis diferentes ( cada uma com diferentes escopos - explicado mais abaixo neste manual ), você pode fazer construções clássicas como if / while / switch, etc, e você pode também chamar sub-rotinas com parâmetros, então o script deverá ser facilmente legível para qualquer um com habilidades em programação SIP.&lt;br /&gt;
&lt;br /&gt;
{{mbox | text = Some text.}}&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=103</id>
		<title>Arquivos de configuração</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=103"/>
		<updated>2013-08-01T16:53:26Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O arquivo de configuração do OpenSIPS contém todos os parâmetros que controlam o núcleo e os módulos do OpenSIPS, juntamente com a lógica de roteamento que OpenSIPS usará para rotear o tráfego SIP.&lt;br /&gt;
&lt;br /&gt;
Após a instalação, o local do arquivo de configuração padrão é:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[INSTALL_PATH]/etc/opensips/opensips.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O arquivo de configuração é baseado em texto, escrita em uma linguagem personalizada para o OpenSISP, muito similar a linguagem C. Você irá encontra variáveis diferentes ( cada uma com diferentes escopos - explicado mais abaixo neste manual ), você pode fazer construções clássicas como if / while / switch, etc, e você pode também chamar sub-rotinas com parâmetros, então o script deverá ser facilmente legível para qualquer um com habilidades em programação SIP.&lt;br /&gt;
&lt;br /&gt;
{{main|Help:Interlanguage links|Wikipedia:Complete list of language wikis available}}&lt;br /&gt;
{{notice|This section needs to be updated to include Wikidata.}}&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Predefini%C3%A7%C3%A3o:Notice&amp;diff=102</id>
		<title>Predefinição:Notice</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Predefini%C3%A7%C3%A3o:Notice&amp;diff=102"/>
		<updated>2013-08-01T16:52:06Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: Criou página com 'eeeeee'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;eeeeee&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=101</id>
		<title>Arquivos de configuração</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=101"/>
		<updated>2013-08-01T16:51:56Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O arquivo de configuração do OpenSIPS contém todos os parâmetros que controlam o núcleo e os módulos do OpenSIPS, juntamente com a lógica de roteamento que OpenSIPS usará para rotear o tráfego SIP.&lt;br /&gt;
&lt;br /&gt;
Após a instalação, o local do arquivo de configuração padrão é:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[INSTALL_PATH]/etc/opensips/opensips.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O arquivo de configuração é baseado em texto, escrita em uma linguagem personalizada para o OpenSISP, muito similar a linguagem C. Você irá encontra variáveis diferentes ( cada uma com diferentes escopos - explicado mais abaixo neste manual ), você pode fazer construções clássicas como if / while / switch, etc, e você pode também chamar sub-rotinas com parâmetros, então o script deverá ser facilmente legível para qualquer um com habilidades em programação SIP.&lt;br /&gt;
&lt;br /&gt;
{{notice|This section needs to be updated to include Wikidata.}}&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=100</id>
		<title>Arquivos de configuração</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=100"/>
		<updated>2013-08-01T16:49:42Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O arquivo de configuração do OpenSIPS contém todos os parâmetros que controlam o núcleo e os módulos do OpenSIPS, juntamente com a lógica de roteamento que OpenSIPS usará para rotear o tráfego SIP.&lt;br /&gt;
&lt;br /&gt;
Após a instalação, o local do arquivo de configuração padrão é:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[INSTALL_PATH]/etc/opensips/opensips.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O arquivo de configuração é baseado em texto, escrita em uma linguagem personalizada para o OpenSISP, muito similar a linguagem C. Você irá encontra variáveis diferentes ( cada uma com diferentes escopos - explicado mais abaixo neste manual ), você pode fazer construções clássicas como if / while / switch, etc, e você pode também chamar sub-rotinas com parâmetros, então o script deverá ser facilmente legível para qualquer um com habilidades em programação SIP.&lt;br /&gt;
&lt;br /&gt;
{{essay|WP:ADTABLE}}&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=99</id>
		<title>Arquivos de configuração</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=99"/>
		<updated>2013-08-01T16:49:33Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O arquivo de configuração do OpenSIPS contém todos os parâmetros que controlam o núcleo e os módulos do OpenSIPS, juntamente com a lógica de roteamento que OpenSIPS usará para rotear o tráfego SIP.&lt;br /&gt;
&lt;br /&gt;
Após a instalação, o local do arquivo de configuração padrão é:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[INSTALL_PATH]/etc/opensips/opensips.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O arquivo de configuração é baseado em texto, escrita em uma linguagem personalizada para o OpenSISP, muito similar a linguagem C. Você irá encontra variáveis diferentes ( cada uma com diferentes escopos - explicado mais abaixo neste manual ), você pode fazer construções clássicas como if / while / switch, etc, e você pode também chamar sub-rotinas com parâmetros, então o script deverá ser facilmente legível para qualquer um com habilidades em programação SIP.&lt;br /&gt;
&lt;br /&gt;
{{essay|WP:ADTABLE}}&lt;br /&gt;
This essay, '''Wikipedia:Advanced table formatting''' describes some techniques to improve the display or editing of wikitables in Wikipedia.  Most of the tips involve use of standard text-editors. While some special software packages exist, to allow customized editing, they are typically not available when travelling to other computers for wiki-editing.&lt;br /&gt;
&lt;br /&gt;
Some techniques here are beyond the basics described in the Wikipedia help-page &amp;quot;[[Help:Table]]&amp;quot; which explains almost all basic options of table formatting, also showing examples of each.&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=98</id>
		<title>Arquivos de configuração</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=98"/>
		<updated>2013-08-01T16:48:25Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O arquivo de configuração do OpenSIPS contém todos os parâmetros que controlam o núcleo e os módulos do OpenSIPS, juntamente com a lógica de roteamento que OpenSIPS usará para rotear o tráfego SIP.&lt;br /&gt;
&lt;br /&gt;
Após a instalação, o local do arquivo de configuração padrão é:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[INSTALL_PATH]/etc/opensips/opensips.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O arquivo de configuração é baseado em texto, escrita em uma linguagem personalizada para o OpenSISP, muito similar a linguagem C. Você irá encontra variáveis diferentes ( cada uma com diferentes escopos - explicado mais abaixo neste manual ), você pode fazer construções clássicas como if / while / switch, etc, e você pode também chamar sub-rotinas com parâmetros, então o script deverá ser facilmente legível para qualquer um com habilidades em programação SIP.&lt;br /&gt;
&lt;br /&gt;
{{essay|WP:ADTABLE}}&lt;br /&gt;
This essay, '''Wikipedia:Advanced table formatting''' describes some techniques to improve the display or editing of wikitables in Wikipedia.  Most of the tips involve use of standard text-editors. While some special software packages exist, to allow customized editing, they are typically not available when travelling to other computers for wiki-editing.&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=97</id>
		<title>Arquivos de configuração</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=97"/>
		<updated>2013-08-01T16:47:32Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O arquivo de configuração do OpenSIPS contém todos os parâmetros que controlam o núcleo e os módulos do OpenSIPS, juntamente com a lógica de roteamento que OpenSIPS usará para rotear o tráfego SIP.&lt;br /&gt;
&lt;br /&gt;
Após a instalação, o local do arquivo de configuração padrão é:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[INSTALL_PATH]/etc/opensips/opensips.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O arquivo de configuração é baseado em texto, escrita em uma linguagem personalizada para o OpenSISP, muito similar a linguagem C. Você irá encontra variáveis diferentes ( cada uma com diferentes escopos - explicado mais abaixo neste manual ), você pode fazer construções clássicas como if / while / switch, etc, e você pode também chamar sub-rotinas com parâmetros, então o script deverá ser facilmente legível para qualquer um com habilidades em programação SIP.&lt;br /&gt;
&lt;br /&gt;
{{:Help:Transclusion Demo}}&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=96</id>
		<title>Arquivos de configuração</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=96"/>
		<updated>2013-08-01T16:47:11Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O arquivo de configuração do OpenSIPS contém todos os parâmetros que controlam o núcleo e os módulos do OpenSIPS, juntamente com a lógica de roteamento que OpenSIPS usará para rotear o tráfego SIP.&lt;br /&gt;
&lt;br /&gt;
Após a instalação, o local do arquivo de configuração padrão é:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[INSTALL_PATH]/etc/opensips/opensips.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O arquivo de configuração é baseado em texto, escrita em uma linguagem personalizada para o OpenSISP, muito similar a linguagem C. Você irá encontra variáveis diferentes ( cada uma com diferentes escopos - explicado mais abaixo neste manual ), você pode fazer construções clássicas como if / while / switch, etc, e você pode também chamar sub-rotinas com parâmetros, então o script deverá ser facilmente legível para qualquer um com habilidades em programação SIP.&lt;br /&gt;
&lt;br /&gt;
{{H:title|hovertext|If you do any change to the configuration file, in order for them to take effect, you MUST restart OpenSIPS}}&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=95</id>
		<title>Arquivos de configuração</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Arquivos_de_configura%C3%A7%C3%A3o&amp;diff=95"/>
		<updated>2013-08-01T16:36:53Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: Criou página com 'O arquivo de configuração do OpenSIPS contém todos os parâmetros que controlam o núcleo e os módulos do OpenSIPS, juntamente com a lógica de roteamento que OpenSIPS usa...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O arquivo de configuração do OpenSIPS contém todos os parâmetros que controlam o núcleo e os módulos do OpenSIPS, juntamente com a lógica de roteamento que OpenSIPS usará para rotear o tráfego SIP.&lt;br /&gt;
&lt;br /&gt;
Após a instalação, o local do arquivo de configuração padrão é:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[INSTALL_PATH]/etc/opensips/opensips.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O arquivo de configuração é baseado em texto, escrita em uma linguagem personalizada para o OpenSISP, muito similar a linguagem C. Você irá encontra variáveis diferentes ( cada uma com diferentes escopos - explicado mais abaixo neste manual ), você pode fazer construções clássicas como if / while / switch, etc, e você pode também chamar sub-rotinas com parâmetros, então o script deverá ser facilmente legível para qualquer um com habilidades em programação SIP.&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Arquivos_RC&amp;diff=94</id>
		<title>Arquivos RC</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Arquivos_RC&amp;diff=94"/>
		<updated>2013-08-01T16:22:10Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O '''opensipsctlrc''' é um arquivo que contém todas as configurações e opções para as ferramentas opensipsctl, opensipsdbctl e osipsconsole.&lt;br /&gt;
Após a instalação, os arquivos estarão localiazdos em:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[INSTALL_PATH]/etc/opensips/opensipsctlrc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O arquivo contém as opções de controle para interagir com o banco de dados, para interação em tempo real com o OpenSIPS ( ex.: via '''MI INTERFACE''' ) e também controla algumas opções para o provisionamento feito pelas ferramentas opensispsctl e osipsconsole.&lt;br /&gt;
&lt;br /&gt;
As opções mais relevantes/usadas são:&lt;br /&gt;
&lt;br /&gt;
* '''SIP_DOMAIN''' - O dominio SIP para o seu proxy OpenSIPS, é usado quando for adicionado novos usuários no sistema ( pela ferramenta opensipsctl )&lt;br /&gt;
* '''DB''' - Contém as credencias do banco de dados usado pelo opensipsdbctl quando se é criada a estrutura do banco de dados, e também pelo opensipsctl quando inserido informações de provisionamento&lt;br /&gt;
* '''CTLENGINE''' - Transporta tudo aquilo que será usado pela '''FIFO engine''' quando usado comandos MI pela ferramenta opensipsctl. As opeções são FIFO, XMLRPC e UDP&lt;br /&gt;
* '''OSIPS_FIFO''' - O caminho do arquivo OpenSIPS FIFO para a instancia atua do OpenSIPS. Neste caso, se você tiver multiplas instancias do OpenSIPS rodando no mesmo servidor, você deve mudar isto.&lt;br /&gt;
* '''STORE_PLAINTEXT_PW''' - Controla quando se adiciona um usuário pelo comando '''opensipsctl add USERNAME''', a senha pode ser armazenada em texto simples ou in banco de dados, ou se o banco de dados conter uma versão HASH para prover senhas.&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
	<entry>
		<id>http://opensips.com.br/wiki/index.php?title=Arquivos_RC&amp;diff=81</id>
		<title>Arquivos RC</title>
		<link rel="alternate" type="text/html" href="http://opensips.com.br/wiki/index.php?title=Arquivos_RC&amp;diff=81"/>
		<updated>2013-07-31T19:30:32Z</updated>

		<summary type="html">&lt;p&gt;Eluizbr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O '''opensipsctlrc''' é um arquivo que contém todas as configurações e opções para as ferramentas opensipsctl, opensipsdbctl e osipsconsole.&lt;br /&gt;
Após a instalação, os arquivos estarão localiazdos em:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[INSTALL_PATH]/etc/opensips/opensipsctlrc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O arquivo contém as opções de controle para interagir com o banco de dados, para interação em tempo real com o OpenSIPS ( ex.: via '''MI INTERFACE''' ) e também controla algumas opções para o provisionamento feito pelas ferramentas opensispsctl e osipsconsole.&lt;br /&gt;
&lt;br /&gt;
As opções mais relevantes/usadas são:&lt;br /&gt;
&lt;br /&gt;
* '''SIP_DOMAIN''' - O dominio SIP para o seu proxy OpenSIPS, é usado quando for adicionado novos usuários no sistema ( pela ferramenta opensipsctl )&lt;br /&gt;
* '''DB''' - Contém as credencias do banco de dados usado pelo opensipsdbctl quando se é criada a estrutura do banco de dados, e também pelo opensipsctl quando inserido informações de provisionamento&lt;br /&gt;
* '''CTLENGINE''' - Transporta tudo aquilo que será usado pela '''FIFO engine''' quando usado comandos MI pela ferramenta opensipsctl. As opeções são FIFO, XMLRPC e UDP&lt;br /&gt;
* '''OSIPS_FIFO''' - O caminho do arquivo OpenSIPS FIFO para a instancia atua do OpenSIPS. Neste caso, se você tiver multiplas instancias do OpenSIPS rodando no mesmo servidor, você deve mudar isto.&lt;br /&gt;
* '''STORE_PLAINTEXT_PW''' - Controla quando se adiciona um usuário pelo comando '''opensipsctl'''&lt;/div&gt;</summary>
		<author><name>Eluizbr</name></author>
		
	</entry>
</feed>