From 9eb75e0e3ef4b52d5716439a43a38d05b675d9a2 Mon Sep 17 00:00:00 2001 From: Mark Spencer Date: Fri, 26 Sep 2003 22:03:10 +0000 Subject: Remove MySQL support from default Asterisk in accordance with new MySQL library licensing git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1550 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- README.mysql | 15 ++ apps/Makefile | 12 -- apps/app_voicemail2.c | 145 +----------------- cdr/Makefile | 16 -- cdr/cdr_mysql.c | 336 ------------------------------------------ configs/cdr_mysql.conf.sample | 19 --- doc/README.mysql | 15 ++ doc/cdr_mysql.txt | 29 ---- 8 files changed, 38 insertions(+), 549 deletions(-) create mode 100755 README.mysql delete mode 100755 cdr/cdr_mysql.c delete mode 100755 configs/cdr_mysql.conf.sample create mode 100755 doc/README.mysql delete mode 100755 doc/cdr_mysql.txt diff --git a/README.mysql b/README.mysql new file mode 100755 index 000000000..27adaa956 --- /dev/null +++ b/README.mysql @@ -0,0 +1,15 @@ +MYSQL LICENSING UPDATE +====================== +We were recently contacted by MySQL and informed that the MySQL client +libraries are now under GPL license and not LGPL license as before. + +Since Asterisk does allow exceptions to GPL, we are removing MySQL support +from standard Asterisk. We will, where appropriate, make it available via +a separate package which will only be usable when Asterisk is used completely +within GPL (i.e. not in conjunction with G.729, OpenH.323, etc). We +apologize for the confusion. + +You may find this in the new "asterisk-addons" package. + +Mark Spencer +Digium diff --git a/apps/Makefile b/apps/Makefile index 61e7d11b7..16850288f 100755 --- a/apps/Makefile +++ b/apps/Makefile @@ -13,18 +13,6 @@ USE_MYSQL_VM_INTERFACE=0 -MLFLAGS= -ifeq ($(USE_MYSQL_VM_INTERFACE),1) -CFLAGS+=-DUSEMYSQLVM -CFLAGS+=$(shell if [ -d /usr/local/mysql/include ]; then echo "-I/usr/local/mysql/include"; fi) -CFLAGS+=$(shell if [ -d /usr/include/mysql ]; then echo "-I/usr/include/mysql"; fi) -CFLAGS+=$(shell if [ -d /usr/local/include/mysql ]; then echo "-I/usr/local/include/mysql"; fi) -CFLAGS+=$(shell if [ -d /opt/mysql/include/mysql ]; then echo "-I/opt/mysql/include/mysql"; fi) -MLFLAGS+=$(shell if [ -d /usr/lib/mysql ]; then echo "-L/usr/lib/mysql"; fi) -MLFLAGS+=$(shell if [ -d /usr/local/mysql/lib ]; then echo "-L/usr/local/mysql/lib"; fi) -MLFLAGS+=$(shell if [ -d /usr/local/lib/mysql ]; then echo "-L/usr/local/lib/mysql"; fi) -MLFLAGS+=$(shell if [ -d /opt/mysql/lib/mysql ]; then echo "-L/opt/mysql/lib/mysql"; fi) -endif #APPS=app_dial.so app_playback.so app_directory.so app_intercom.so app_mp3.so APPS=app_dial.so app_playback.so app_voicemail.so app_directory.so app_intercom.so app_mp3.so \ diff --git a/apps/app_voicemail2.c b/apps/app_voicemail2.c index a2fbca42f..3ae8a8744 100755 --- a/apps/app_voicemail2.c +++ b/apps/app_voicemail2.c @@ -36,6 +36,10 @@ #include #ifdef USEMYSQLVM #include +#include "mysql-vm-routines.h" +#else +static inline int sql_init(void) { return 0; } +static inline void sql_close(void) { } #endif #include @@ -181,135 +185,7 @@ static void apply_options(struct ast_vm_user *vmu, char *options) } -#ifdef USEMYSQLVM -MYSQL *dbhandler=NULL; -ast_mutex_t mysqllock; -char dbuser[80]; -char dbpass[80]; -char dbhost[80]; -char dbname[80]; - -static int mysql_login(void) -{ - ast_verbose( VERBOSE_PREFIX_3 "Logging into database with user %s, password %s, and database %s\n", dbuser, dbpass, dbname); - - dbhandler=mysql_init(NULL); - if (!mysql_real_connect(dbhandler, dbhost[0] ? dbhost : NULL, dbuser, dbpass, dbname, 0, NULL, 0)) { - ast_log(LOG_WARNING, "Error Logging into database\n"); - return(-1); - } - ast_mutex_init(&mysqllock); - return(0); -} - -static void mysql_logout(void) -{ - mysql_close(dbhandler); -} - -static struct ast_vm_user *find_user(struct ast_vm_user *ivm, char *context, char *mailbox) -{ - MYSQL_RES *result; - MYSQL_ROW rowval; - MYSQL_FIELD *fields; - int numFields, i; - char query[240]; - char options[160] = ""; - struct ast_vm_user *retval; - - retval=malloc(sizeof(struct ast_vm_user)); - - if (retval) { - *retval->mailbox='\0'; - *retval->context='\0'; - *retval->password='\0'; - *retval->fullname='\0'; - *retval->email='\0'; - *retval->pager='\0'; - *retval->serveremail='\0'; - retval->attach=-1; - retval->alloced=1; - retval->next=NULL; - if (mailbox) { - strcpy(retval->mailbox, mailbox); - } - if (context) { - strcpy(retval->context, context); - } - - if (*retval->context) { - sprintf(query, "SELECT password,fullname,email,pager,options FROM users WHERE context='%s' AND mailbox='%s'", context, mailbox); - } else { - sprintf(query, "SELECT password,fullname,email,pager,options FROM users WHERE mailbox='%s'", mailbox); - } - ast_mutex_lock(&mysqllock); - mysql_query(dbhandler, query); - if ((result=mysql_store_result(dbhandler))!=NULL) { - if ((rowval=mysql_fetch_row(result))!=NULL) { - numFields=mysql_num_fields(result); - fields=mysql_fetch_fields(result); - for (i=0; ipassword, rowval[i]); - } else if (!strcmp(fields[i].name, "fullname")) { - strcpy(retval->fullname, rowval[i]); - } else if (!strcmp(fields[i].name, "email")) { - strcpy(retval->email, rowval[i]); - } else if (!strcmp(fields[i].name, "pager")) { - strcpy(retval->pager, rowval[i]); - } else if (!strcmp(fields[i].name, "options")) { - strncpy(options, rowval[i], sizeof(options) - 1); - apply_options(retval, options); - } - } - } - mysql_free_result(result); - ast_mutex_unlock(&mysqllock); - return(retval); - } else { - mysql_free_result(result); - ast_mutex_unlock(&mysqllock); - free(retval); - return(NULL); - } - } - ast_mutex_unlock(&mysqllock); - free(retval); - } - return(NULL); -} - -static void vm_change_password(struct ast_vm_user *vmu, char *password) -{ - char query[400]; - - if (*vmu->context) { - sprintf(query, "UPDATE users SET password='%s' WHERE context='%s' AND mailbox='%s' AND password='%s'", password, vmu->context, vmu->mailbox, vmu->password); - } else { - sprintf(query, "UPDATE users SET password='%s' WHERE mailbox='%s' AND password='%s'", password, vmu->mailbox, vmu->password); - } - ast_mutex_lock(&mysqllock); - mysql_query(dbhandler, query); - strcpy(vmu->password, password); - ast_mutex_unlock(&mysqllock); -} - -static void reset_user_pw(char *context, char *mailbox, char *password) -{ - char query[320]; - - if (context) { - sprintf(query, "UPDATE users SET password='%s' WHERE context='%s' AND mailbox='%s'", password, context, mailbox); - } else { - sprintf(query, "UPDATE users SET password='%s' WHERE mailbox='%s'", password, mailbox); - } - ast_mutex_lock(&mysqllock); - mysql_query(dbhandler, query); - ast_mutex_unlock(&mysqllock); -} -#else - +#ifndef USEMYSQLVM static struct ast_vm_user *find_user(struct ast_vm_user *ivm, char *context, char *mailbox) { /* This function could be made to generate one from a database, too */ @@ -2818,9 +2694,7 @@ int unload_module(void) STANDARD_HANGUP_LOCALUSERS; res = ast_unregister_application(app); res |= ast_unregister_application(app2); -#ifdef USEMYSQLVM - mysql_logout(); -#endif + sql_close(); return res; } @@ -2835,11 +2709,8 @@ int load_module(void) if ((res=load_config())) { return(res); } -#ifdef USEMYSQLVM - if ((res=mysql_login())) { - return(res); - } -#endif + if ((res = sql_init())) + return res; return res; } diff --git a/cdr/Makefile b/cdr/Makefile index 00f7c8066..368a8508b 100755 --- a/cdr/Makefile +++ b/cdr/Makefile @@ -15,19 +15,6 @@ MODS=cdr_csv.so CFLAGS+=-fPIC -# -# MySQL stuff... Autoconf anyone?? -# -MODS+=$(shell if [ -d /usr/local/mysql/include ] || [ -d /usr/include/mysql ] || [ -d /usr/local/include/mysql ] || [ -d /opt/mysql/include ]; then echo "cdr_mysql.so"; fi) -CFLAGS+=$(shell if [ -d /usr/local/mysql/include ]; then echo "-I/usr/local/mysql/include"; fi) -CFLAGS+=$(shell if [ -d /usr/include/mysql ]; then echo "-I/usr/include/mysql"; fi) -CFLAGS+=$(shell if [ -d /usr/local/include/mysql ]; then echo "-I/usr/local/include/mysql"; fi) -CFLAGS+=$(shell if [ -d /opt/mysql/include/mysql ]; then echo "-I/opt/mysql/include/mysql"; fi) -MLFLAGS= -MLFLAGS+=$(shell if [ -d /usr/lib/mysql ]; then echo "-L/usr/lib/mysql"; fi) -MLFLAGS+=$(shell if [ -d /usr/local/mysql/lib ]; then echo "-L/usr/local/mysql/lib"; fi) -MLFLAGS+=$(shell if [ -d /usr/local/lib/mysql ]; then echo "-L/usr/local/lib/mysql"; fi) -MLFLAGS+=$(shell if [ -d /opt/mysql/lib/mysql ]; then echo "-L/opt/mysql/lib/mysql"; fi) all: depend $(MODS) @@ -44,9 +31,6 @@ ifneq ($(wildcard .depend),) include .depend endif -cdr_mysql.so: cdr_mysql.o - $(CC) -shared -Xlinker -x -o $@ $< -lmysqlclient -lz $(MLFLAGS) - depend: .depend .depend: diff --git a/cdr/cdr_mysql.c b/cdr/cdr_mysql.c deleted file mode 100755 index adf03e261..000000000 --- a/cdr/cdr_mysql.c +++ /dev/null @@ -1,336 +0,0 @@ -/* - * Asterisk -- A telephony toolkit for Linux. - * - * MySQL CDR logger - * - * James Sharp - * - * Modified August 2003 - * Tilghman Lesher - * - * This program is free software, distributed under the terms of - * the GNU General Public License. - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include "../asterisk.h" - -#include -#include - -#include -#include -#include - -#include -#include - -#define DATE_FORMAT "%Y-%m-%d %T" - -static char *desc = "MySQL CDR Backend"; -static char *name = "mysql"; -static char *config = "cdr_mysql.conf"; -static char *hostname = NULL, *dbname = NULL, *dbuser = NULL, *password = NULL, *dbsock = NULL; -static int hostname_alloc = 0, dbname_alloc = 0, dbuser_alloc = 0, password_alloc = 0, dbsock_alloc = 0; -static int dbport = 0; -static int connected = 0; - -static ast_mutex_t mysql_lock = AST_MUTEX_INITIALIZER; - -static MYSQL mysql; - -static int mysql_log(struct ast_cdr *cdr) -{ - struct tm tm; - struct timeval tv; - char sqlcmd[2048], timestr[128]; - time_t t; - - ast_mutex_lock(&mysql_lock); - - memset(sqlcmd,0,2048); - - gettimeofday(&tv,NULL); - t = tv.tv_sec; - localtime_r(&t,&tm); - strftime(timestr,128,DATE_FORMAT,&tm); - - if ((!connected) && (hostname || dbsock) && dbuser && password && dbname) { - /* Attempt to connect */ - mysql_init(&mysql); - if (mysql_real_connect(&mysql, hostname, dbuser, password, dbname, dbport, dbsock, 0)) { - connected = 1; - } else { - ast_log(LOG_ERROR, "cdr_mysql: cannot connect to database server %s. Call will not be logged\n", hostname); - } - } else { - /* Long connection - ping the server */ - int error; - if ((error = mysql_ping(&mysql))) { - connected = 0; - switch (error) { - case CR_SERVER_GONE_ERROR: - ast_log(LOG_ERROR, "cdr_mysql: Server has gone away\n"); - break; - default: - ast_log(LOG_ERROR, "cdr_mysql: Unknown connection error\n"); - } - } - } - - if (connected) { - char *clid=NULL, *dcontext=NULL, *channel=NULL, *dstchannel=NULL, *lastapp=NULL, *lastdata=NULL; -#ifdef MYSQL_LOGUNIQUEID - char *uniqueid=NULL; -#endif - - /* Maximum space needed would be if all characters needed to be escaped, plus a trailing NULL */ - if ((clid = alloca(strlen(cdr->clid) * 2 + 1)) != NULL) - mysql_real_escape_string(&mysql, clid, cdr->clid, strlen(cdr->clid)); - if ((dcontext = alloca(strlen(cdr->dcontext) * 2 + 1)) != NULL) - mysql_real_escape_string(&mysql, dcontext, cdr->dcontext, strlen(cdr->dcontext)); - if ((channel = alloca(strlen(cdr->channel) * 2 + 1)) != NULL) - mysql_real_escape_string(&mysql, channel, cdr->channel, strlen(cdr->channel)); - if ((dstchannel = alloca(strlen(cdr->dstchannel) * 2 + 1)) != NULL) - mysql_real_escape_string(&mysql, dstchannel, cdr->dstchannel, strlen(cdr->dstchannel)); - if ((lastapp = alloca(strlen(cdr->lastapp) * 2 + 1)) != NULL) - mysql_real_escape_string(&mysql, lastapp, cdr->lastapp, strlen(cdr->lastapp)); - if ((lastdata = alloca(strlen(cdr->lastdata) * 2 + 1)) != NULL) - mysql_real_escape_string(&mysql, lastdata, cdr->lastdata, strlen(cdr->lastdata)); -#ifdef MYSQL_LOGUNIQUEID - if ((uniqueid = alloca(strlen(cdr->uniqueid) * 2 + 1)) != NULL) - mysql_real_escape_string(&mysql, uniqueid, cdr->uniqueid, strlen(cdr->uniqueid)); -#endif - - /* Check for all alloca failures above at once */ -#ifdef MYSQL_LOGUNIQUEID - if ((!clid) || (!dcontext) || (!channel) || (!dstchannel) || (!lastapp) || (!lastdata) || (!uniqueid)) { -#else - if ((!clid) || (!dcontext) || (!channel) || (!dstchannel) || (!lastapp) || (!lastdata)) { -#endif - ast_log(LOG_ERROR, "cdr_mysql: Out of memory error (insert fails)\n"); - ast_mutex_unlock(&mysql_lock); - return -1; - } - - ast_log(LOG_DEBUG,"cdr_mysql: inserting a CDR record.\n"); - -#ifdef MYSQL_LOGUNIQUEID - sprintf(sqlcmd,"INSERT INTO cdr (calldate,clid,src,dst,dcontext,channel,dstchannel,lastapp,lastdata,duration,billsec,disposition,amaflags,accountcode,uniqueid) VALUES ('%s','%s','%s','%s','%s', '%s','%s','%s','%s',%i,%i,'%s',%i,'%s','%s')",timestr,clid,cdr->src, cdr->dst, dcontext,channel, dstchannel, lastapp, lastdata,cdr->duration,cdr->billsec,ast_cdr_disp2str(cdr->disposition),cdr->amaflags, cdr->accountcode, uniqueid); -#else - sprintf(sqlcmd,"INSERT INTO cdr (calldate,clid,src,dst,dcontext,channel,dstchannel,lastapp,lastdata,duration,billsec,disposition,amaflags,accountcode) VALUES ('%s','%s','%s','%s','%s', '%s','%s','%s','%s',%i,%i,'%s',%i,'%s')",timestr,clid,cdr->src, cdr->dst, dcontext,channel, dstchannel, lastapp, lastdata,cdr->duration,cdr->billsec,ast_cdr_disp2str(cdr->disposition),cdr->amaflags, cdr->accountcode); -#endif - ast_log(LOG_DEBUG,"cdr_mysql: SQL command as follows: %s\n",sqlcmd); - - if (mysql_real_query(&mysql,sqlcmd,strlen(sqlcmd))) { - ast_log(LOG_ERROR,"Failed to insert into database."); - ast_mutex_unlock(&mysql_lock); - return -1; - } - } - ast_mutex_unlock(&mysql_lock); - return 0; -} - -char *description(void) -{ - return desc; -} - -static int my_unload_module(void) -{ - if (connected) { - mysql_close(&mysql); - connected = 0; - } - if (hostname && hostname_alloc) { - free(hostname); - hostname = NULL; - hostname_alloc = 0; - } - if (dbname && dbname_alloc) { - free(dbname); - dbname = NULL; - dbname_alloc = 0; - } - if (dbuser && dbuser_alloc) { - free(dbuser); - dbuser = NULL; - dbuser_alloc = 0; - } - if (dbsock && dbsock_alloc) { - free(dbsock); - dbsock = NULL; - dbsock_alloc = 0; - } - if (password && password_alloc) { - free(password); - password = NULL; - password_alloc = 0; - } - dbport = 0; - ast_cdr_unregister(name); - return 0; -} - -static int my_load_module(void) -{ - int res; - struct ast_config *cfg; - struct ast_variable *var; - char *tmp; - - cfg = ast_load(config); - if (!cfg) { - ast_log(LOG_WARNING, "Unable to load config for mysql CDR's: %s\n", config); - return 0; - } - - var = ast_variable_browse(cfg, "global"); - if (!var) { - /* nothing configured */ - return 0; - } - - tmp = ast_variable_retrieve(cfg,"global","hostname"); - if (tmp) { - hostname = malloc(strlen(tmp) + 1); - if (hostname != NULL) { - hostname_alloc = 1; - strcpy(hostname,tmp); - } else { - ast_log(LOG_ERROR,"Out of memory error.\n"); - return -1; - } - } else { - ast_log(LOG_WARNING,"MySQL server hostname not specified. Assuming localhost\n"); - hostname = "localhost"; - } - - tmp = ast_variable_retrieve(cfg,"global","dbname"); - if (tmp) { - dbname = malloc(strlen(tmp) + 1); - if (dbname != NULL) { - dbname_alloc = 1; - strcpy(dbname,tmp); - } else { - ast_log(LOG_ERROR,"Out of memory error.\n"); - return -1; - } - } else { - ast_log(LOG_WARNING,"MySQL database not specified. Assuming asteriskcdrdb\n"); - dbname = "asteriskcdrdb"; - } - - tmp = ast_variable_retrieve(cfg,"global","user"); - if (tmp) { - dbuser = malloc(strlen(tmp) + 1); - if (dbuser != NULL) { - dbuser_alloc = 1; - strcpy(dbuser,tmp); - } else { - ast_log(LOG_ERROR,"Out of memory error.\n"); - return -1; - } - } else { - ast_log(LOG_WARNING,"MySQL database user not specified. Assuming root\n"); - dbuser = "root"; - } - - tmp = ast_variable_retrieve(cfg,"global","sock"); - if (tmp) { - dbsock = malloc(strlen(tmp) + 1); - if (dbsock != NULL) { - dbsock_alloc = 1; - strcpy(dbsock,tmp); - } else { - ast_log(LOG_ERROR,"Out of memory error.\n"); - return -1; - } - } else { - ast_log(LOG_WARNING,"MySQL database sock file not specified. Using default\n"); - dbsock = NULL; - } - - tmp = ast_variable_retrieve(cfg,"global","password"); - if (tmp) { - password = malloc(strlen(tmp) + 1); - if (password != NULL) { - password_alloc = 1; - strcpy(password,tmp); - } else { - ast_log(LOG_ERROR,"Out of memory error.\n"); - return -1; - } - } else { - ast_log(LOG_WARNING,"MySQL database password not specified. Assuming blank\n"); - password = ""; - } - - tmp = ast_variable_retrieve(cfg,"global","port"); - if (tmp) { - if (sscanf(tmp,"%d",&dbport) < 1) { - ast_log(LOG_WARNING,"Invalid MySQL port number. Using default\n"); - dbport = 0; - } - } - - ast_destroy(cfg); - - ast_log(LOG_DEBUG,"cdr_mysql: got hostname of %s\n",hostname); - ast_log(LOG_DEBUG,"cdr_mysql: got port of %d\n",dbport); - if (dbsock) - ast_log(LOG_DEBUG,"cdr_mysql: got sock file of %s\n",dbsock); - ast_log(LOG_DEBUG,"cdr_mysql: got user of %s\n",dbuser); - ast_log(LOG_DEBUG,"cdr_mysql: got dbname of %s\n",dbname); - ast_log(LOG_DEBUG,"cdr_mysql: got password of %s\n",password); - - mysql_init(&mysql); - - if (!mysql_real_connect(&mysql, hostname, dbuser, password, dbname, dbport, dbsock, 0)) { - ast_log(LOG_ERROR, "Failed to connect to mysql database %s on %s.\n", dbname, hostname); - connected = 0; - } else { - ast_log(LOG_DEBUG,"Successfully connected to MySQL database.\n"); - connected = 1; - } - - res = ast_cdr_register(name, desc, mysql_log); - if (res) { - ast_log(LOG_ERROR, "Unable to register MySQL CDR handling\n"); - } - return res; -} - -int load_module(void) -{ - return my_load_module(); -} - -int unload_module(void) -{ - return my_unload_module(); -} - -int reload(void) -{ - my_unload_module(); - return my_load_module(); -} - -int usecount(void) -{ - return connected; -} - -char *key() -{ - return ASTERISK_GPL_KEY; -} diff --git a/configs/cdr_mysql.conf.sample b/configs/cdr_mysql.conf.sample deleted file mode 100755 index 46b1dd34e..000000000 --- a/configs/cdr_mysql.conf.sample +++ /dev/null @@ -1,19 +0,0 @@ -; -; Note - if the database server is hosted on the same machine as the -; asterisk server, you can achieve a local Unix socket connection by -; setting hostname=localhost -; -; port and sock are both optional parameters. If hostname is specified -; and is not "localhost", then cdr_mysql will attempt to connect to the -; port specified or use the default port. If hostname is not specified -; or if hostname is "localhost", then cdr_mysql will attempt to connect -; to the socket file specified by sock or otherwise use the default socket -; file. -; -;[global] -;hostname=database.host.name -;dbname=asteriskcdrdb -;password=password -;user=asteriskcdruser -;port=3306 -;sock=/tmp/mysql.sock diff --git a/doc/README.mysql b/doc/README.mysql new file mode 100755 index 000000000..27adaa956 --- /dev/null +++ b/doc/README.mysql @@ -0,0 +1,15 @@ +MYSQL LICENSING UPDATE +====================== +We were recently contacted by MySQL and informed that the MySQL client +libraries are now under GPL license and not LGPL license as before. + +Since Asterisk does allow exceptions to GPL, we are removing MySQL support +from standard Asterisk. We will, where appropriate, make it available via +a separate package which will only be usable when Asterisk is used completely +within GPL (i.e. not in conjunction with G.729, OpenH.323, etc). We +apologize for the confusion. + +You may find this in the new "asterisk-addons" package. + +Mark Spencer +Digium diff --git a/doc/cdr_mysql.txt b/doc/cdr_mysql.txt deleted file mode 100755 index 5c3fffdee..000000000 --- a/doc/cdr_mysql.txt +++ /dev/null @@ -1,29 +0,0 @@ -Call Detail Recording for MySQL -=============================== - -Usage: -====== - -Include the module in your modules.conf. Change the database hostname, database name, username, and password in cdr_mysql.conf. - -Create a table called cdr under the database name you will be using the following schema. - -CREATE TABLE cdr ( - calldate datetime NOT NULL default '0000-00-00 00:00:00', - clid varchar(45) NOT NULL default '', - src varchar(45) NOT NULL default '', - dst varchar(45) NOT NULL default '', - dcontext varchar(45) NOT NULL default '', - channel varchar(45) NOT NULL default '', - dstchannel varchar(45) NOT NULL default '', - lastapp varchar(45) NOT NULL default '', - lastdata varchar(45) NOT NULL default '', - duration int(11) NOT NULL default '0', - billsec int(11) NOT NULL default '0', - disposition varchar(45) NOT NULL default '', - amaflags int(11) NOT NULL default '0', - accountcode varchar(45) NOT NULL default '', - uniqueid varchar(45) NOT NULL default '' -); - -The calls will automatically be logged as long as the module is loaded. -- cgit v1.2.3