Merge "cdr/cdr_odbc.c: Added to record new columns add on CDR 1.8 Asterisk Version"

changes/70/270/4
Joshua Colp 10 years ago committed by Gerrit Code Review
commit b2153f1f49

@ -33,6 +33,14 @@ SMS
providers to not log SMS content.
CDRs
------------------
cdr_odbc
------------------
* Added a new configuration option, "newcdrcolumns", which enables use of the
post-1.8 CDR columns 'peeraccount', 'linkedid', and 'sequence'.
Channel Drivers
------------------

@ -64,6 +64,7 @@ enum {
CONFIG_DISPOSITIONSTRING = 1 << 2,
CONFIG_HRTIME = 1 << 3,
CONFIG_REGISTERED = 1 << 4,
CONFIG_NEWCDRCOLUMNS = 1 << 5,
};
static struct ast_flags config = { 0 };
@ -72,23 +73,29 @@ static SQLHSTMT execute_cb(struct odbc_obj *obj, void *data)
{
struct ast_cdr *cdr = data;
SQLRETURN ODBC_res;
char sqlcmd[2048] = "", timestr[128];
char sqlcmd[2048] = "", timestr[128], new_columns[120] = "", new_values[7] = "";
struct ast_tm tm;
SQLHSTMT stmt;
int i = 0;
ast_localtime(&cdr->start, &tm, ast_test_flag(&config, CONFIG_USEGMTIME) ? "GMT" : NULL);
ast_strftime(timestr, sizeof(timestr), DATE_FORMAT, &tm);
if (ast_test_flag(&config, CONFIG_NEWCDRCOLUMNS)) {
snprintf(new_columns, sizeof(new_columns), "%s", ",peeraccount,linkedid,sequence");
snprintf(new_values, sizeof(new_values), "%s", ",?,?,?");
}
if (ast_test_flag(&config, CONFIG_LOGUNIQUEID)) {
snprintf(sqlcmd,sizeof(sqlcmd),"INSERT INTO %s "
"(calldate,clid,src,dst,dcontext,channel,dstchannel,lastapp,"
"lastdata,duration,billsec,disposition,amaflags,accountcode,uniqueid,userfield) "
"VALUES ({ts '%s'},?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", table, timestr);
"lastdata,duration,billsec,disposition,amaflags,accountcode,uniqueid,userfield%s) "
"VALUES ({ts '%s'},?,?,?,?,?,?,?,?,?,?,?,?,?,?,?%s)", table, new_columns, timestr, new_values);
} else {
snprintf(sqlcmd,sizeof(sqlcmd),"INSERT INTO %s "
"(calldate,clid,src,dst,dcontext,channel,dstchannel,lastapp,lastdata,"
"duration,billsec,disposition,amaflags,accountcode) "
"VALUES ({ts '%s'},?,?,?,?,?,?,?,?,?,?,?,?,?)", table, timestr);
"duration,billsec,disposition,amaflags,accountcode%s) "
"VALUES ({ts '%s'},?,?,?,?,?,?,?,?,?,?,?,?,?%s)", table, new_columns, timestr, new_values);
}
ODBC_res = SQLAllocHandle(SQL_HANDLE_STMT, obj->con, &stmt);
@ -134,9 +141,17 @@ static SQLHSTMT execute_cb(struct odbc_obj *obj, void *data)
SQLBindParameter(stmt, 12, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &cdr->amaflags, 0, NULL);
SQLBindParameter(stmt, 13, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, sizeof(cdr->accountcode), 0, cdr->accountcode, 0, NULL);
i = 14;
if (ast_test_flag(&config, CONFIG_LOGUNIQUEID)) {
SQLBindParameter(stmt, 14, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, sizeof(cdr->uniqueid), 0, cdr->uniqueid, 0, NULL);
SQLBindParameter(stmt, 15, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, sizeof(cdr->userfield), 0, cdr->userfield, 0, NULL);
i = 16;
}
if (ast_test_flag(&config, CONFIG_NEWCDRCOLUMNS)) {
SQLBindParameter(stmt, i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, sizeof(cdr->peeraccount), 0, cdr->peeraccount, 0, NULL);
SQLBindParameter(stmt, i + 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, sizeof(cdr->linkedid), 0, cdr->linkedid, 0, NULL);
SQLBindParameter(stmt, i + 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &cdr->sequence, 0, NULL);
}
ODBC_res = SQLExecDirect(stmt, (unsigned char *)sqlcmd, SQL_NTS);
@ -260,6 +275,13 @@ static int odbc_load_module(int reload)
ast_set_flag(&config, CONFIG_REGISTERED);
}
}
if (((tmp = ast_variable_retrieve(cfg, "global", "newcdrcolumns"))) && ast_true(tmp)) {
ast_set_flag(&config, CONFIG_NEWCDRCOLUMNS);
ast_debug(1, "cdr_odbc: Add new cdr columns\n");
} else {
ast_clear_flag(&config, CONFIG_NEWCDRCOLUMNS);
ast_debug(1, "cdr_odbc: Not add new cdr columns\n");
}
} while (0);
if (ast_test_flag(&config, CONFIG_REGISTERED) && (!cfg || dsn == NULL || table == NULL)) {

@ -9,3 +9,4 @@
;table=cdr ;"cdr" is default table name
;usegmtime=no ; set to "yes" to log in GMT
;hrtime=yes ;Enables microsecond accuracy with the billsec and duration fields
;newcdrcolumns=yes ; Enable logging of post-1.8 CDR columns (peeraccount, linkedid, sequence)

Loading…
Cancel
Save