quarta-feira, 23 de maio de 2007

MFCR2: Solução do problema da chamada caindo com o bloqueio de DDC

Após a implementação do E1 com sinalização MFCR2 da BrasilTelecom no Asterisk (link), pude perceber que algumas ligações que eu efetuava eram atendidas e logo em seguida caiam. Busquei uma explicação para isso, e o que o pessoal da BrasilTelecom me informou, é que algumas centrais e/ou aparelhos possuem bloqueio automático à ligações DDC (ligações à cobrar).

O procedimento de uma central que faz bloqueio automático à DDC é:

1. atender a ligação;
2. desligar a ligação;
3. atender novamente.

Em uma ligação à cobrar, no segundo passo do procedimento acima, a ligação cai, e, conseqüentemente, a ligação não é efetuada e o número de destino não vai pagar por esta ligação.

Em uma ligação normal, a ligação não cai no segundo passo, e as pontas conseguem estabelecer comunicação após o terceiro passo.

O que estava acontecendo, era que as ligações efetuadas pelo E1 com sinalização MFCR2 estavam caindo já no segundo passo. A chave para a solução do problema é recompilar a libmfcr2 editando o arquivo mfcr2.c e alterando o valor da linha mfcr2->clear_back_persistence_check de 0 para 3000, da seguinte maneira:
mfcr2->clear_back_persistence_check = 3000;
O valor 3000, equivale à 3000ms, ou seja, 3 segundos. Quem me disse que é essa linha que tem que ser alterada no mfcr2.c foi o Dio Makibara - dioedu (grato novamente!!!), e no email que ele enviou em resposta à minha pergunta na lista AsteriskBrasil.org, o valor que o dioedu me informou foi 500 ou 1500. Conversando com o pessoal da BrasilTelecom de Brasília, eles me informaram que eu posso aumentar este valor. Aumentei para 3000 e para mim está funcionando bem.

Então, se você vai fazer uma nova instalação de um circuito E1 com sinalização MFCR2 e vai utilizar a documentação Asterisk + Sinalização MFCR2 (spandsp + libsupertone + libunicall + libmfcr2), antes de iniciar a compilação da libmfcr2, edite o arquivo mfcr2.c e altere o valor documentado acima, e depois siga o processo de instalação normalmente.

Se o seu circuito já está funcionando e você quer corrigir o problema, entre no diretório onde está o código-fonte do libmfcr2, rode make clean, edite o arquivo mfcr2.c de acordo com as orientações acima, e refaça a instalação (./configure --prefix=/usr/local ; make ; make install). Em seguida, recompile e reinstale o próprio Asterisk (não esqueça do chan_unicall.c e do Makefile modificado dentro do diretório channels).

É isso. Espero de alguma forma ter auxiliado você se chegou até aqui e conseguiu resolver o seu problema. Agradecimento ao Zuca da BrasilTelecom Brasília por ter informado muitos dados importantíssimos para a identificação e resolução do problema, e ao Dio Makibara (dioedu) por ter mostrado o "caminho das pedras" da solução do problema alterando o mfcr2.c.

Nenhum comentário: