Merged revisions 110779 via svnmerge from

https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r110779 | qwell | 2008-03-25 17:51:17 -0500 (Tue, 25 Mar 2008) | 6 lines

Make file access in cdr_custom similar to cdr_csv.

Fixes issue #12268.

Patch borrowed from r82344

........


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@110780 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.6.1
Jason Parker 17 years ago
parent 13787bc595
commit 1958abd90e

@ -43,17 +43,17 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/config.h" #include "asterisk/config.h"
#include "asterisk/pbx.h" #include "asterisk/pbx.h"
#include "asterisk/utils.h" #include "asterisk/utils.h"
#include "asterisk/lock.h"
#define CUSTOM_LOG_DIR "/cdr_custom" #define CUSTOM_LOG_DIR "/cdr_custom"
#define DATE_FORMAT "%Y-%m-%d %T" #define DATE_FORMAT "%Y-%m-%d %T"
AST_MUTEX_DEFINE_STATIC(lock); AST_MUTEX_DEFINE_STATIC(lock);
AST_MUTEX_DEFINE_STATIC(mf_lock);
static char *name = "cdr-custom"; static char *name = "cdr-custom";
static FILE *mf = NULL;
static char master[PATH_MAX]; static char master[PATH_MAX];
static char format[1024]=""; static char format[1024]="";
@ -104,6 +104,8 @@ static int load_config(int reload)
static int custom_log(struct ast_cdr *cdr) static int custom_log(struct ast_cdr *cdr)
{ {
FILE *mf = NULL;
/* Make sure we have a big enough buf */ /* Make sure we have a big enough buf */
char buf[2048]; char buf[2048];
struct ast_channel dummy; struct ast_channel dummy;
@ -120,23 +122,24 @@ static int custom_log(struct ast_cdr *cdr)
/* because of the absolutely unconditional need for the /* because of the absolutely unconditional need for the
highest reliability possible in writing billing records, highest reliability possible in writing billing records,
we open write and close the log file each time */ we open write and close the log file each time */
ast_mutex_lock(&mf_lock);
mf = fopen(master, "a"); mf = fopen(master, "a");
if (!mf) {
ast_log(LOG_ERROR, "Unable to re-open master file %s : %s\n", master, strerror(errno));
}
if (mf) { if (mf) {
fputs(buf, mf); fputs(buf, mf);
fflush(mf); /* be particularly anal here */ fflush(mf); /* be particularly anal here */
fclose(mf); fclose(mf);
mf = NULL; mf = NULL;
ast_mutex_unlock(&mf_lock);
} else {
ast_log(LOG_ERROR, "Unable to re-open master file %s : %s\n", master, strerror(errno));
ast_mutex_unlock(&mf_lock);
} }
return 0; return 0;
} }
static int unload_module(void) static int unload_module(void)
{ {
if (mf)
fclose(mf);
ast_cdr_unregister(name); ast_cdr_unregister(name);
return 0; return 0;
} }
@ -149,8 +152,6 @@ static int load_module(void)
res = ast_cdr_register(name, ast_module_info->description, custom_log); res = ast_cdr_register(name, ast_module_info->description, custom_log);
if (res) if (res)
ast_log(LOG_ERROR, "Unable to register custom CDR handling\n"); ast_log(LOG_ERROR, "Unable to register custom CDR handling\n");
if (mf)
fclose(mf);
return res; return res;
} else } else
return AST_MODULE_LOAD_DECLINE; return AST_MODULE_LOAD_DECLINE;

Loading…
Cancel
Save