/*! \brief queues.conf [general] option */
static int force_longest_waiting_caller;
+/*! \brief queues.conf [general] option */
+static int log_caller_id_name;
+
/*! \brief name of the ringinuse field in the realtime database */
static char *realtime_ringinuse_field;
cid_allow = qe.parent->log_restricted_caller_id || ((ast_party_id_presentation(&ast_channel_caller(chan)->id) & AST_PRES_RESTRICTION) == AST_PRES_ALLOWED);
- ast_queue_log(args.queuename, ast_channel_uniqueid(chan), "NONE", "ENTERQUEUE", "%s|%s|%d",
- S_OR(args.url, ""),
- S_COR(cid_allow && ast_channel_caller(chan)->id.number.valid, ast_channel_caller(chan)->id.number.str, ""),
- qe.opos);
+ if (log_caller_id_name) {
+ char *escaped_cidname = NULL;
+ /* Ensure caller ID name is valid and not NULL before processing */
+ if (cid_allow && ast_channel_caller(chan)->id.name.valid && ast_channel_caller(chan)->id.name.str) {
+ escaped_cidname = ast_strdupa(ast_channel_caller(chan)->id.name.str);
+ /* Only iterate if '|' is found */
+ if (strchr(escaped_cidname, '|')) {
+ for (char *p = escaped_cidname; *p; p++) {
+ if (*p == '|') {
+ *p = '_';
+ }
+ }
+ }
+ }
+ ast_queue_log(args.queuename, ast_channel_uniqueid(chan), "NONE", "ENTERQUEUE", "%s|%s|%d|%s",
+ S_OR(args.url, ""),
+ S_COR(cid_allow && ast_channel_caller(chan)->id.number.valid, ast_channel_caller(chan)->id.number.str, ""),
+ qe.opos,
+ S_OR(escaped_cidname, ""));
+ } else {
+ ast_queue_log(args.queuename, ast_channel_uniqueid(chan), "NONE", "ENTERQUEUE", "%s|%s|%d",
+ S_OR(args.url, ""),
+ S_COR(cid_allow && ast_channel_caller(chan)->id.number.valid, ast_channel_caller(chan)->id.number.str, ""),
+ qe.opos);
+ }
+
/* PREDIAL: Preprocess any callee gosub arguments. */
if (ast_test_flag(&opts, OPT_PREDIAL_CALLEE)
&& !ast_strlen_zero(opt_args[OPT_ARG_PREDIAL_CALLEE])) {
if ((general_val = ast_variable_retrieve(cfg, "general", "force_longest_waiting_caller"))) {
force_longest_waiting_caller = ast_true(general_val);
}
+ /* Apply log-caller-id-name in the same place as other global settings */
+ if ((general_val = ast_variable_retrieve(cfg, "general", "log-caller-id-name"))) {
+ log_caller_id_name = ast_true(general_val);
+ }
}
/*! \brief reload information pertaining to a single member
;
;log_membername_as_agent = no
;
+; log-caller-id-name controls whether the Caller ID Name will be written to the
+; queue log. If enabled, and Caller ID would otherwise be logged (see
+; 'log-restricted-caller-id'), adds a 4th column to the ENTERQUEUE record which
+; contains the Caller ID Name. Any '|' characters in the Caller ID Name will be
+; replaced by a '_'. This setting applies globally to all queues.
+;
+; Default is 'no', which means the Caller ID Name is not stored.
+;log-caller-id-name = no
+;
; log-restricted-caller-id controls whether the Restricted Caller ID will be stored
; in the queue log.
; If log-restricted-caller-id=no then the Caller ID will be stripped if the Caller ID