Add peercontext parameter for default outbound context (bug #1929)
[asterisk/asterisk.git] / cdr / cdr_csv.c
index 8031b4a..8c553db 100755 (executable)
@@ -19,6 +19,7 @@
 #include <asterisk/cdr.h>
 #include <asterisk/module.h>
 #include <asterisk/logger.h>
+#include <asterisk/utils.h>
 #include "../asterisk.h"
 #include "../astconf.h"
 
@@ -27,6 +28,9 @@
 
 #define DATE_FORMAT "%Y-%m-%d %T"
 
+/* #define CSV_LOGUNIQUEID 1 */
+/* #define CSV_LOGUSERFIELD 1 */
+
 #include <stdio.h>
 #include <string.h>
 
@@ -57,7 +61,8 @@
                        // "end time" minus "answer time"
   "disposition",       // ANSWERED, NO ANSWER, BUSY
   "amaflags",          // DOCUMENTATION, BILL, IGNORE etc, specified on a per channel basis like accountcode.
-
+  "uniqueid",           // unique call identifier
+  "userfield"          // user field set via SetCDRUserField
 */
 
 static char *desc = "Comma Separated Values CDR Backend";
@@ -124,6 +129,7 @@ static int append_date(char *buf, struct timeval tv, int len)
 
 static int build_csv_record(char *buf, int len, struct ast_cdr *cdr)
 {
+
        buf[0] = '\0';
        /* Account code */
        append_string(buf, cdr->accountcode, len);
@@ -158,6 +164,14 @@ static int build_csv_record(char *buf, int len, struct ast_cdr *cdr)
        /* AMA Flags */
        append_string(buf, ast_cdr_flags2str(cdr->amaflags), len);
 
+#ifdef CSV_LOGUNIQUEID
+       /* Unique ID */
+       append_string(buf, cdr->uniqueid, len);
+#endif
+#ifdef CSV_LOGUSERFIELD
+       /* append the user field */
+       append_string(buf, cdr->userfield,len); 
+#endif
        /* If we hit the end of our buffer, log an error */
        if (strlen(buf) < len - 5) {
                /* Trim off trailing comma */
@@ -196,7 +210,7 @@ static int csv_log(struct ast_cdr *cdr)
        printf("[CDR] %s ('%s' -> '%s') Dur: %ds Bill: %ds Disp: %s Flags: %s Account: [%s]\n", cdr->channel, cdr->src, cdr->dst, cdr->duration, cdr->billsec, ast_cdr_disp2str(cdr->disposition), ast_cdr_flags2str(cdr->amaflags), cdr->accountcode);
 #endif
        if (build_csv_record(buf, sizeof(buf), cdr)) {
-               ast_log(LOG_WARNING, "Unable to create CSV record in %d bytes.  CDR not recorded!\n", sizeof(buf));
+               ast_log(LOG_WARNING, "Unable to create CSV record in %d bytes.  CDR not recorded!\n", (int)sizeof(buf));
        } else {
                /* because of the absolutely unconditional need for the
                   highest reliability possible in writing billing records,
@@ -211,7 +225,7 @@ static int csv_log(struct ast_cdr *cdr)
                        fclose(mf);
                        mf = NULL;
                }
-               if (strlen(cdr->accountcode)) {
+               if (!ast_strlen_zero(cdr->accountcode)) {
                        if (writefile(buf, cdr->accountcode))
                                ast_log(LOG_WARNING, "Unable to write CSV record to account file '%s'\n", cdr->accountcode);
                }