domingo, 31 de outubro de 2010

Asterisk 1.4 + MySQL - Como armazenar o uniqueid na tabela CDR

Essa semana me deparei com um "problema", que do meu ponto de vista é algo totalmente improdutivo (e, no mínimo, desnecessário).

Encontrei uma instalação do Asterisk que não gravava dados no campo uniqueid da tabela CDR do DB MySQL, e, resolver tal situação me tomou um tempo precioso.

Depois de muita pesquisa consegui encontrar a solução, que é bastante simples, mas que, do meu ponto vista, é injustificável.

Para quem não sabe, o suporte ao uso do CDR em um banco de dados MySQL é disponibilizado pelo pacote asterisk-addons. Não sei se por um erro, ou por uma decisão consciente dos desenvolvedores (que me parece ser uma das mais equivocadas que já vi), é preciso alterar o código fonte desse pacote para habilitar o suporte ao armazenamento do uniqueid na tabela.

Então, se você também está passando por situação semelhante, mãos à obra:
  • Vá no diretório dos fonte do asterisk-addons e edite o arquivo cdr_addon_mysql.c;
  • Adicione a linha #define MYSQL_LOGUNIQUEID no início do arquivo;
  • Compile o asterisk-addons e voilá;
Pesquisei nos fontes e percebi várias linhas se referindo a tal constante, mas a mesma não era declarada em lugar algum, o que fazia com que o suporte ao recurso não fosse habilitado.

Não achei uma explicação para tal comportamento, que, pelo que pude observar já existe há mais de 3 anos. Se alguém souber o motivo disso, por favor deixe seus comentários.