Ir para conteúdo
Fórum Script Brasil
  • 0

Asterisk


Fernando Rossato

Pergunta

Ai pessoal estou alterando o asterisk para fazer tarifação de ligações nativamente e em C não manjo muito...a lógica é pegar os dados de uma tabela, que isso já faz, e comparar, dem uma olhada no meu codigo e ve o que dá para arrumar ai...valeu

static int pgsql_log(struct ast_cdr *cdr)
{
        struct ast_tm tm;
        char *pgerror;
        PGresult *result;

        ast_mutex_lock(&pgsql_lock);

        if ((!connected) && pghostname && pgdbuser && pgpassword && pgdbname) {
                conn = PQsetdbLogin(pghostname, pgdbport, NULL, NULL, pgdbname, pgdbuser, pgpassword);
                if (PQstatus(conn) != CONNECTION_BAD) {
                        connected = 1;
                } else {
                        pgerror = PQerrorMessage(conn);
                        ast_log(LOG_ERROR, "Unable to connect to database server %s.  Calls will not be logged!\n", pghostname);
                        ast_log(LOG_ERROR, "Reason: %s\n", pgerror);
                        PQfinish(conn);
                        conn = NULL;
                }
        }

        if (connected) {
                struct columns *cur;
                int lensql, i, rows,lensql2, sizesql = maxsize, sizesql2 = maxsize2, newsize;
                char *sql = ast_calloc(sizeof(char), sizesql), *sql2 = ast_calloc(sizeof(char), sizesql2), *tmp, *value;
                char buf[257], escapebuf[513];

                /* Variaveis para tarifacao */
                char *campo1;
                char *tronco;
                char *prefixo;
                float tmp_valor = 0;
                char *tarifa;
                char *numero;
if (!sql || !sql2) {
                        if (sql) {
                                ast_free(sql);
                        }
                        if (sql2) {
                                ast_free(sql2);
                        }
                        return -1;
                }

                /* Busca Tarifas cadastradas no banco */
                char sqlcmd[] = "select campo1,tronco,prefixo,tarifa from tarifas";
                result = PQexec(conn, sqlcmd);
                if (PQresultStatus(result) != PGRES_TUPLES_OK) {
                        pgerror = PQresultErrorMessage(result);
                        ast_log(LOG_ERROR, "Failed to query database columns: %s\n", pgerror);
                        PQclear(result);
                        return -1;
                }

                rows = PQntuples(result);
                for (i = 0; i < rows; i++) {
                        campo1 =  PQgetvalue(result, i, 0);
                        tronco =  PQgetvalue(result, i, 1);
                        prefixo = PQgetvalue(result, i, 2);
                        tarifa =  PQgetvalue(result, i, 3);

                        numero = strtok(cdr->lastdata,"/"); /* Quebra o lastdata por / */
                        if( strncmp( numero[2], prefixo, sizeof(prefixo) ) == 0 && strcmp(numero[0], campo1) == 0 && strcmp(numero[1], tronco) == 0){
                                tmp_valor = (cdr->billsec/60) * (long)tarifa;
                                continue;
                        }
                }
                PQclear(result);

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...