[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