mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-08 10:58:15 +00:00
cdr/cdr_odbc.c: Added to record new columns add on CDR 1.8 Asterisk Version
Add new column to INSERT new columns added in cdr 1.8 version. The columns are: * peeraccount * linkedid * sequence This feature is configurable in cdr_odbc.conf using a new configuration option, 'newcdrcolumns'. ASTERISK-24976 #close Change-Id: Ibe0c7540a88305c6012786f438a0813ad8b19127
This commit is contained in:
committed by
Matt Jordan
parent
ca7ad5d339
commit
d6e208a80d
@@ -51,6 +51,11 @@ chan_dahdi:
|
|||||||
ring-ring-ring pattern would exceed the pattern limits and stop
|
ring-ring-ring pattern would exceed the pattern limits and stop
|
||||||
Caller-ID detection.
|
Caller-ID detection.
|
||||||
|
|
||||||
|
cdr_odbc:
|
||||||
|
- Added support for post-1.8 CDR columns 'peeraccount', 'linkedid', and
|
||||||
|
'sequence'. Support for the new columns can be enabled via the newcdrcolumns
|
||||||
|
option in cdr_odbc.conf.
|
||||||
|
|
||||||
from 11.15 to 11.16
|
from 11.15 to 11.16
|
||||||
chan_dahdi:
|
chan_dahdi:
|
||||||
- The CALLERID(ani2) value for incoming calls is now populated in featdmf
|
- The CALLERID(ani2) value for incoming calls is now populated in featdmf
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ enum {
|
|||||||
CONFIG_DISPOSITIONSTRING = 1 << 2,
|
CONFIG_DISPOSITIONSTRING = 1 << 2,
|
||||||
CONFIG_HRTIME = 1 << 3,
|
CONFIG_HRTIME = 1 << 3,
|
||||||
CONFIG_REGISTERED = 1 << 4,
|
CONFIG_REGISTERED = 1 << 4,
|
||||||
|
CONFIG_NEWCDRCOLUMNS = 1 << 5,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct ast_flags config = { 0 };
|
static struct ast_flags config = { 0 };
|
||||||
@@ -63,23 +64,29 @@ static SQLHSTMT execute_cb(struct odbc_obj *obj, void *data)
|
|||||||
{
|
{
|
||||||
struct ast_cdr *cdr = data;
|
struct ast_cdr *cdr = data;
|
||||||
SQLRETURN ODBC_res;
|
SQLRETURN ODBC_res;
|
||||||
char sqlcmd[2048] = "", timestr[128];
|
char sqlcmd[2048] = "", timestr[128], new_columns[120] = "", new_values[7] = "";
|
||||||
struct ast_tm tm;
|
struct ast_tm tm;
|
||||||
SQLHSTMT stmt;
|
SQLHSTMT stmt;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
ast_localtime(&cdr->start, &tm, ast_test_flag(&config, CONFIG_USEGMTIME) ? "GMT" : NULL);
|
ast_localtime(&cdr->start, &tm, ast_test_flag(&config, CONFIG_USEGMTIME) ? "GMT" : NULL);
|
||||||
ast_strftime(timestr, sizeof(timestr), DATE_FORMAT, &tm);
|
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)) {
|
if (ast_test_flag(&config, CONFIG_LOGUNIQUEID)) {
|
||||||
snprintf(sqlcmd,sizeof(sqlcmd),"INSERT INTO %s "
|
snprintf(sqlcmd,sizeof(sqlcmd),"INSERT INTO %s "
|
||||||
"(calldate,clid,src,dst,dcontext,channel,dstchannel,lastapp,"
|
"(calldate,clid,src,dst,dcontext,channel,dstchannel,lastapp,"
|
||||||
"lastdata,duration,billsec,disposition,amaflags,accountcode,uniqueid,userfield) "
|
"lastdata,duration,billsec,disposition,amaflags,accountcode,uniqueid,userfield%s) "
|
||||||
"VALUES ({ts '%s'},?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", table, timestr);
|
"VALUES ({ts '%s'},?,?,?,?,?,?,?,?,?,?,?,?,?,?,? %s)", table, new_columns, timestr, new_values);
|
||||||
} else {
|
} else {
|
||||||
snprintf(sqlcmd,sizeof(sqlcmd),"INSERT INTO %s "
|
snprintf(sqlcmd,sizeof(sqlcmd),"INSERT INTO %s "
|
||||||
"(calldate,clid,src,dst,dcontext,channel,dstchannel,lastapp,lastdata,"
|
"(calldate,clid,src,dst,dcontext,channel,dstchannel,lastapp,lastdata,"
|
||||||
"duration,billsec,disposition,amaflags,accountcode) "
|
"duration,billsec,disposition,amaflags,accountcode%s) "
|
||||||
"VALUES ({ts '%s'},?,?,?,?,?,?,?,?,?,?,?,?,?)", table, timestr);
|
"VALUES ({ts '%s'},?,?,?,?,?,?,?,?,?,?,?,?,?%s)", table, new_columns, timestr, new_values);
|
||||||
}
|
}
|
||||||
|
|
||||||
ODBC_res = SQLAllocHandle(SQL_HANDLE_STMT, obj->con, &stmt);
|
ODBC_res = SQLAllocHandle(SQL_HANDLE_STMT, obj->con, &stmt);
|
||||||
@@ -122,9 +129,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, 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);
|
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)) {
|
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, 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);
|
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);
|
ODBC_res = SQLExecDirect(stmt, (unsigned char *)sqlcmd, SQL_NTS);
|
||||||
@@ -251,6 +266,13 @@ static int odbc_load_module(int reload)
|
|||||||
ast_set_flag(&config, CONFIG_REGISTERED);
|
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 fields\n");
|
||||||
|
} else {
|
||||||
|
ast_clear_flag(&config, CONFIG_NEWCDRCOLUMNS);
|
||||||
|
ast_debug(1, "cdr_odbc: Not add new cdr fields\n");
|
||||||
|
}
|
||||||
} while (0);
|
} while (0);
|
||||||
|
|
||||||
if (ast_test_flag(&config, CONFIG_REGISTERED) && (!cfg || dsn == NULL || table == NULL)) {
|
if (ast_test_flag(&config, CONFIG_REGISTERED) && (!cfg || dsn == NULL || table == NULL)) {
|
||||||
|
|||||||
@@ -9,3 +9,4 @@
|
|||||||
;table=cdr ;"cdr" is default table name
|
;table=cdr ;"cdr" is default table name
|
||||||
;usegmtime=no ; set to "yes" to log in GMT
|
;usegmtime=no ; set to "yes" to log in GMT
|
||||||
;hrtime=yes ;Enables microsecond accuracy with the billsec and duration fields
|
;hrtime=yes ;Enables microsecond accuracy with the billsec and duration fields
|
||||||
|
;newcdrcolumns=yes ; Enable logging of post-1.8 CDR columns (peeraccount, linkedid, sequence)
|
||||||
|
|||||||
Reference in New Issue
Block a user