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);
Pergunta
Fernando Rossato
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
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
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.