static int csv_log(struct ast_cdr *cdr) { FILE *mf = NULL; /* Make sure we have a big enough buf */ char buf[1024]; char csvmaster[PATH_MAX]; snprintf(csvmaster, sizeof(csvmaster),"%s/%s/%s", ast_config_AST_LOG_DIR, CSV_LOG_DIR, CSV_MASTER); if (build_csv_record(buf, sizeof(buf), cdr)) { ast_log(LOG_WARNING, "Unable to create CSV record in %d bytes. CDR not recorded!\n", (int)sizeof(buf)); return 0; } /* because of the absolutely unconditional need for the highest reliability possible in writing billing records, we open write and close the log file each time */ ast_mutex_lock(&mf_lock); if ((mf = fopen(csvmaster, "a"))) { fputs(buf, mf); fflush(mf); /* be particularly anal here */ fclose(mf); mf = NULL; ast_mutex_unlock(&mf_lock); } else { ast_mutex_unlock(&mf_lock); ast_log(LOG_ERROR, "Unable to re-open master file %s : %s\n", csvmaster, strerror(errno)); } if (accountlogs && !ast_strlen_zero(cdr->accountcode)) { if (writefile(buf, cdr->accountcode)) ast_log(LOG_WARNING, "Unable to write CSV record to account file '%s' : %s\n", cdr->accountcode, strerror(errno)); } return 0; }
static int csv_log(struct cw_cdr *cdr) { /* Make sure we have a big enough buf */ char buf[1024]; char csvmaster[CW_CONFIG_MAX_PATH]; FILE *mf = NULL; snprintf(csvmaster, sizeof(csvmaster),"%s/%s/%s", cw_config_CW_LOG_DIR, CSV_LOG_DIR, CSV_MASTER); #if 0 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, cw_cdr_disp2str(cdr->disposition), cw_cdr_flags2str(cdr->amaflags), cdr->accountcode); #endif if (build_csv_record(buf, sizeof(buf), cdr)) { cw_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, we open write and close the log file each time */ if ((mf = fopen(csvmaster, "a"))) { fputs(buf, mf); fclose(mf); } else cw_log(LOG_ERROR, "Unable to re-open master file %s : %s\n", csvmaster, strerror(errno)); if (!cw_strlen_zero(cdr->accountcode)) { if (writefile(buf, cdr->accountcode)) cw_log(LOG_WARNING, "Unable to write CSV record to account file '%s' : %s\n", cdr->accountcode, strerror(errno)); } } return 0; }