To compile you can use something like that:
export SYBPLATFORM=linux
export SYBASE=/opt/sybase
cc -I$SYBASE/include -c -o cdr_sybase.o cdr_sybase.c
cc -shared -Xlinker -x -o cdr_sybase.so cdr_sybase.o -lsybdb -lm -L$SYBASE/lib
(anyone could write the corect Makefile inside the cdr dir.?)
So here it is:
* * Asterisk -- A telephony toolkit for Linux. * * Sybase CDR logger * * Cristian Vasiliu <[EMAIL PROTECTED]> * * This program is free software, distributed under the terms of * the GNU General Public License. * */
#include <asterisk/config.h> #include <asterisk/options.h> #include <asterisk/channel.h> #include <asterisk/cdr.h> #include <asterisk/module.h> #include <asterisk/logger.h> #include "../asterisk.h"
#include <stdio.h> #include <string.h>
#include <stdlib.h> #include <unistd.h> #include <time.h>
#include <sybfront.h> #include <sybdb.h>
#define DATE_FORMAT "%Y-%m-%d %T"
static char *desc = "Sybase CDR Backend"; static char *name = "sybase"; static char *config = "cdr_sybase.conf";
static DBPROCESS *dbproc; static LOGINREC *login;
static struct tm _date(struct timeval tv) { struct tm tm; time_t t; t = tv.tv_sec; localtime_r(&t,&tm); return tm; }
static int sybase_log(struct ast_cdr *cdr) { struct tm tm, end, start, answer; struct timeval tv; struct timezone tz; char *sqlcmd, timestr[128], timestart[128], timeend[128], timeanswer[128]; time_t t;
sqlcmd = (char *)malloc(2048); memset(sqlcmd,0,2048);
start = _date(cdr->start); end = _date(cdr->end); answer = _date(cdr->answer);
gettimeofday(&tv,&tz); t = tv.tv_sec; localtime_r(&t,&tm); strftime(timestr,128,DATE_FORMAT,&tm); strftime(timeend,128,DATE_FORMAT,&end); strftime(timeanswer,128,DATE_FORMAT,&answer); strftime(timestart,128,DATE_FORMAT,&start);
ast_log(LOG_WARNING,timeend); ast_log(LOG_WARNING,timestart); ast_log(LOG_WARNING,timeanswer);
ast_log(LOG_DEBUG,"cdr_sybase: inserting a CDR record.\n");
sprintf(sqlcmd,"INSERT INTO cdr (calldate,clid,src,dst,dcontext,channel,dstchannel,lastapp,lastdata,duration,billsec,disposition,amaflags,accountcode,start,end,answer) VALUES ('%s','%s','%s','%s','%s', '%s','%s','%s','%s',%i,%i,%i,%i,'%s','%s','%s','%s')",timestr,cdr->clid,cdr->src, cdr->dst, cdr->dcontext,cdr->channel, cdr->dstchannel, cdr->lastapp, cdr->lastdata,cdr->duration,cdr->billsec,cdr->disposition,cdr->amaflags, cdr->accountcode, timestart, timeend, timeanswer);
dbcmd(dbproc,sqlcmd);
dbsqlexec(dbproc);
if (dbresults(dbproc) != SUCCESS) {
ast_log(LOG_WARNING,"cdr_sybase: Could not insert cdr: %s\n",sqlcmd);
return -1;
}
return 0;
}
char *description(void)
{
return desc;
}int unload_module(void)
{
dbexit();
ast_cdr_unregister(name);
return 0;
}int load_module(void)
{
int res;
struct ast_config *cfg;
struct ast_variable *var;char *dbuser, *password, *dbserver, *application;
cfg = ast_load(config);
if (!cfg) {
ast_log(LOG_WARNING, "Unable to load config for sybase CDR's: %s\n", config);
return 0;
}
var = ast_variable_browse(cfg, "global");
if (!var) {
return 0;
}dbuser = ast_variable_retrieve(cfg,"global","dbuser"); password = ast_variable_retrieve(cfg,"global","password"); dbserver = ast_variable_retrieve(cfg,"global","dbserver"); application = ast_variable_retrieve(cfg,"global","application");
ast_log(LOG_DEBUG,"cdr_sybase: got dbserver of %s\n",dbserver); ast_log(LOG_DEBUG,"cdr_sybase: got dbuser of %s\n",dbuser); ast_log(LOG_DEBUG,"cdr_sybase: got password of %s\n",password); ast_log(LOG_DEBUG,"cdr_sybase: got application of %s\n",application);
if (dbserver == NULL)
{
ast_log(LOG_ERROR,"Database server not specified.\n");
return -1;
} if (dbuser == NULL)
{
ast_log(LOG_ERROR,"Database dbuser not specified.\n");
return -1;
}
if (password == NULL)
{
ast_log(LOG_ERROR,"Database password not specified.\n");
return -1;
}
if (application == NULL)
{
ast_log(LOG_ERROR,"Application not specified.\n");
return -1;
} /* Initialize DB-Library. */
if (dbinit() == FAIL )
{
ast_log(LOG_ERROR,"Can not initialize DB-library.\n");
return -1;
}
login = dblogin(); DBSETLUSER(login,dbuser); DBSETLPWD(login,password); DBSETLAPP(login,application); dbproc = dbopen(login,dbserver);
if (dbproc == NULL) {
ast_log(LOG_WARNING, "Failed to connect to sybase database.\n"); return -1;
} else {
ast_log(LOG_DEBUG,"Successfully connected to sybase database.\n");
}
res = ast_cdr_register(name, desc, sybase_log); if (res) { ast_log(LOG_ERROR, "Unable to register Sybase CDR handling\n"); } return res; }
int reload(void)
{struct ast_config *cfg; struct ast_variable *var;
char *hostname, *dbname, *password, *dbuser;
cfg = ast_load(config); if (!cfg) { ast_log(LOG_WARNING, "Unable to load Sybase CDR config %s\n", config); return 0; }
var = ast_variable_browse(cfg, "global");
if (!var) {
/* nothing configured */
return 0;
}hostname = ast_variable_retrieve(cfg,"global","hostname"); dbname = ast_variable_retrieve(cfg,"global","dbname"); dbuser = ast_variable_retrieve(cfg,"global","user"); password = ast_variable_retrieve(cfg,"global","password"); ast_log(LOG_DEBUG,"cdr_mysql: got hostname of %s\n",hostname); ast_log(LOG_DEBUG,"cdr_mysql: got dbname of %s\n",dbname); ast_log(LOG_DEBUG,"cdr_mysql: got dbuser of %s\n",dbuser); ast_log(LOG_DEBUG,"cdr_mysql: got password of %s\n",password);
if (hostname == NULL)
{
ast_log(LOG_ERROR,"Database server hostname not specified.\n");
return -1;
}
if (dbname == NULL)
{
ast_log(LOG_ERROR,"Database dbname not specified.\n");
return -1;
}
if (dbuser == NULL)
{
ast_log(LOG_ERROR,"Database dbuser not specified.\n");
return -1;
} if (password == NULL)
{
ast_log(LOG_ERROR,"Database password not specified.\n");
return -1;
}return 0; }
int usecount(void)
{
return 0;
}char *key()
{
return ASTERISK_GPL_KEY;
}
_______________________________________________ Asterisk-Users mailing list [EMAIL PROTECTED] http://lists.digium.com/mailman/listinfo/asterisk-users
