[Asterisk-Users] module : cdr_sybase.so
Roy Sigurd Karlsbakk
roy at karlsbakk.net
Mon Jul 14 01:16:26 MST 2003
nice
this can probably be used with mssql as well :)
our developers only uses that
On Friday 11 July 2003 21:56, cvasiliu wrote:
> 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 <cvasiliu at accessnet.ro>
> *
> * 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,duratio
>n,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
> Asterisk-Users at lists.digium.com
> http://lists.digium.com/mailman/listinfo/asterisk-users
--
Roy Sigurd Karlsbakk, Datavaktmester
ProntoTV AS - http://www.pronto.tv/
Tel: +47 9801 3356
Computers are like air conditioners.
They stop working when you open Windows.
More information about the asterisk-users
mailing list