If anyone is interested ... just in case! :-)... I have tried to write , based on the cdr_mysql.so module, an Sybase module.
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

Reply via email to