<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#ffffff">
Em 27-09-2010 17:51, Rodrigo Vian escreveu:
<blockquote cite="mid:1285620690.2931.57.camel@ti.porttalvoip.com.br"
 type="cite">
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <meta name="GENERATOR" content="GtkHTML/3.16.3">
Outra sugestão... rs<br>
[ramal-externo]<br>
exten =&gt; _12XX,1,Goto(contextogeral,${EXTEN},1) ; para seus ramais
internos<br>
exten =&gt; _0800X.,1,Goto(contextogeral,${EXTEN},1) ; para 0800 já que
é gratuito<br>
exten =&gt; _ZXXXXXXXX,1,NoOp(Ramal Externo ${CALLERID(num)}
solicitando ligação local)<br>
exten =&gt; _ZXXXXXXXX,n,Set(REDELOCAL="192.168")<br>
exten =&gt; _ZXXXXXXXX,n,Agi(check_ip_sip,${CALLERID(num)}) ; AQUI
PRECISARIA DESENVOLVER O AGI. O RETORNO DO AGI SERIA A VARIÁVEL
${REDESIP}<br>
exten =&gt; _ZXXXXXXXX,n,GotoIf($["${REDELOCAL}"="${REDESIP}"]?local)<br>
exten =&gt; _ZXXXXXXXX,n,Authenticate(/pin-sip.txt)<br>
exten =&gt; _ZXXXXXXXX,n(local),Goto(contextogeral,${EXTEN},1)<br>
  <br>
Dica pro AGI<br>
REDESIP poderia ser filtrada por:<br>
PRI_OCT = rasterisk -rx "sip show peer 5001" | grep "Addr-&gt;IP" | cut
-d : -f 2 | cut -d\  -f 2 | cut -d \. -f 1 ; primeiro octeto<br>
SEC_OCT= rasterisk -rx "sip show peer 5001" | grep "Addr-&gt;IP" | cut
-d : -f 2 | cut -d\  -f 2 | cut -d \. -f 2 ; segundo octeto<br>
REDESIP= $PRI_OCT . $SEC_OCT<br>
OBS: O campo "<b>Addr-&gt;IP</b>" mostra o ip que está conectado ao
ramal.<br>
</blockquote>
<br>
Olá,<br>
<br>
        Isso é o que eu tinha pensado, mas de uma forma até mais
simples com System(), onde minha rede local é 10.10.10.xxx e ramais
menores que 10 a 99, menores que 100:<br>
<br>
[autenticar]<br>
exten =&gt; _X.,1,GotoIf($[${EXTEN} &lt; 100]?ramais,${EXTEN},1)<br>
exten =&gt; _X.,n,System(rasterisk -x "sip show peer
${CALLERID(num)}"|grep "^  Addr-&gt;IP     : 10\.10\.10\."
1&gt;/dev/null 2&gt;&amp;1)<br>
exten =&gt; _X.,n,GotoIf($[${SYSTEMSTATUS} = SUCCESS]?saida,${EXTEN},1)<br>
exten =&gt; _X.,n,Answer<br>
exten =&gt; _X.,n,Wait(1)<br>
exten =&gt; _X.,n,Authenticate(&lt;senha&gt;)<br>
exten =&gt; _X.,n,Goto(saida,${EXTEN},1)<br>
<br>
        O problema aqui é que existe uma certa demora para se ter a
resposta e um degrauzinho no processamento.<br>
<br>
        Resolvi hackear o código do sip.c e descobri que o IP do socket
fica armazenado na variável addr dentro da estrutura do peer e tem uma
função chamada SIPPEER (  ${SIPPEER(ramal:ip)}  e  ramal  =
${CALLERID(num)} ) que salta ao olhos o conteúdo de cada variável tal
como mostrado pelo "sip show peer", encontrado na linha 11.860 do
1.4.21.2 do Debian Lenny.<br>
<br>
         Assim minha solução final:<br>
<br>
[autenticar]<br>
exten =&gt; _X.,1,GotoIf($[${EXTEN} &lt; 100]?ramais,${EXTEN},1)<br>
exten =&gt; _X.,n,Set(REDE="10.10.10.")<br>
exten =&gt; _X.,n,Set(IP=${SIPPEER(${CALLERID(num)}:ip)})<br>
exten =&gt; _X.,n,Set(IP_REDE=${IP:0:${LEN(${REDE})}})<br>
exten =&gt; _X.,n,GotoIf($["${IP_REDE}" = "${REDE}"]?saida,${EXTEN},1)<br>
exten =&gt; _X.,n,Answer<br>
exten =&gt; _X.,n,Wait(1)<br>
exten =&gt; _X.,n,Authenticate(&lt;senha&gt;)<br>
exten =&gt; _X.,n,Goto(saida,${EXTEN},1)<br>
<br>
        Encontrei a documentação do SIPPEER no VoIP-Info:
<a class="moz-txt-link-freetext" href="http://www.voip-info.org/wiki/index.php?page=Asterisk+func+sippeer">http://www.voip-info.org/wiki/index.php?page=Asterisk+func+sippeer</a><br>
<br>
<br>
[]'s<br>
            Junior Polegato<br>
<br>
<br>
</body>
</html>