Em 27-09-2010 17:51, Rodrigo Vian escreveu:
Outra sugestão... rs
[ramal-externo]
exten => _12XX,1,Goto(contextogeral,${EXTEN},1) ; para seus ramais
internos
exten => _0800X.,1,Goto(contextogeral,${EXTEN},1) ; para 0800 já que é
gratuito
exten => _ZXXXXXXXX,1,NoOp(Ramal Externo ${CALLERID(num)} solicitando
ligação local)
exten => _ZXXXXXXXX,n,Set(REDELOCAL="192.168")
exten => _ZXXXXXXXX,n,Agi(check_ip_sip,${CALLERID(num)}) ; AQUI
PRECISARIA DESENVOLVER O AGI. O RETORNO DO AGI SERIA A VARIÁVEL ${REDESIP}
exten => _ZXXXXXXXX,n,GotoIf($["${REDELOCAL}"="${REDESIP}"]?local)
exten => _ZXXXXXXXX,n,Authenticate(/pin-sip.txt)
exten => _ZXXXXXXXX,n(local),Goto(contextogeral,${EXTEN},1)
Dica pro AGI
REDESIP poderia ser filtrada por:
PRI_OCT = rasterisk -rx "sip show peer 5001" | grep "Addr->IP" | cut
-d : -f 2 | cut -d\ -f 2 | cut -d \. -f 1 ; primeiro octeto
SEC_OCT= rasterisk -rx "sip show peer 5001" | grep "Addr->IP" | cut -d
: -f 2 | cut -d\ -f 2 | cut -d \. -f 2 ; segundo octeto
REDESIP= $PRI_OCT . $SEC_OCT
OBS: O campo "*Addr->IP*" mostra o ip que está conectado ao ramal.
Olá,
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:
[autenticar]
exten => _X.,1,GotoIf($[${EXTEN} < 100]?ramais,${EXTEN},1)
exten => _X.,n,System(rasterisk -x "sip show peer ${CALLERID(num)}"|grep
"^ Addr->IP : 10\.10\.10\." 1>/dev/null 2>&1)
exten => _X.,n,GotoIf($[${SYSTEMSTATUS} = SUCCESS]?saida,${EXTEN},1)
exten => _X.,n,Answer
exten => _X.,n,Wait(1)
exten => _X.,n,Authenticate(<senha>)
exten => _X.,n,Goto(saida,${EXTEN},1)
O problema aqui é que existe uma certa demora para se ter a
resposta e um degrauzinho no processamento.
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.
Assim minha solução final:
[autenticar]
exten => _X.,1,GotoIf($[${EXTEN} < 100]?ramais,${EXTEN},1)
exten => _X.,n,Set(REDE="10.10.10.")
exten => _X.,n,Set(IP=${SIPPEER(${CALLERID(num)}:ip)})
exten => _X.,n,Set(IP_REDE=${IP:0:${LEN(${REDE})}})
exten => _X.,n,GotoIf($["${IP_REDE}" = "${REDE}"]?saida,${EXTEN},1)
exten => _X.,n,Answer
exten => _X.,n,Wait(1)
exten => _X.,n,Authenticate(<senha>)
exten => _X.,n,Goto(saida,${EXTEN},1)
Encontrei a documentação do SIPPEER no VoIP-Info:
http://www.voip-info.org/wiki/index.php?page=Asterisk+func+sippeer
[]'s
Junior Polegato
_______________________________________________
KHOMP: qualidade em placas de E1, GSM, FXS e FXO para Asterisk.
- Hardware com alta disponibilidade de recursos e qualidade KHOMP
- Suporte técnico local qualificado e gratuito
Conheça a linha completa de produtos KHOMP em www.khomp.com.br
_______________________________________________
Temos tudo para seu projeto VoIP com Asterisk!
Descontos especiais para assinantes da AsteriskBrasil.org.
Registre-se e receba um cupom exclusivo de desconto!
Acesse agora www.voipmania.com.br
______________________________________________
Lista de discussões AsteriskBrasil.org
[email protected]
http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil
______________________________________________
Para remover seu email desta lista, basta enviar um email em branco para
[email protected]