[asterisk-commits] branch oej/cdr_radius r15106 - in /team/oej/cdr_radius: cdr/ configs/

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Sun Mar 26 19:29:27 MST 2006


Author: oej
Date: Sun Mar 26 20:29:26 2006
New Revision: 15106

URL: http://svn.digium.com/view/asterisk?rev=15106&view=rev
Log:
Updates to cdr_radius - thanks jcollie, phsultan

Modified:
    team/oej/cdr_radius/cdr/cdr_radius.c
    team/oej/cdr_radius/configs/cdr.conf.sample

Modified: team/oej/cdr_radius/cdr/cdr_radius.c
URL: http://svn.digium.com/view/asterisk/team/oej/cdr_radius/cdr/cdr_radius.c?rev=15106&r1=15105&r2=15106&view=diff
==============================================================================
--- team/oej/cdr_radius/cdr/cdr_radius.c (original)
+++ team/oej/cdr_radius/cdr/cdr_radius.c Sun Mar 26 20:29:26 2006
@@ -47,7 +47,8 @@
 #include "asterisk/logger.h"
 #include "asterisk/utils.h"
 
-#define DATE_FORMAT "%Y-%m-%d %T"
+/* ISO 8601 standard format */
+#define DATE_FORMAT "%Y-%m-%d %T %z"
 
 #define VENDOR_CODE           22736
 
@@ -69,9 +70,6 @@
 #define PW_AST_AMA_FLAGS      116
 #define PW_AST_UNIQUE_ID      117
 #define PW_AST_USER_FIELD     118
-
-/* #define RADIUS_LOGUNIQUEID 1 */
-/* #define RADIUS_LOGUSERFIELD 1 */
 
 /*----------------------------------------------------
   The values are as follows (taken from cdr_cdsv.c):
@@ -103,13 +101,18 @@
 
 static char *desc = "RADIUS CDR Backend";
 static char *name = "radius";
-static char *config = "radius.conf";
+static char *radius_config = "radius.conf";
+static char *cdr_config = "cdr.conf";
 
 static char radiuscfg[AST_CONFIG_MAX_PATH];
 
 AST_MUTEX_DEFINE_STATIC(rc_lock);
 
-static rc_handle  *rh = NULL;
+static int global_usegmtime = -1; /*!< log dates and times in UTC */
+static int global_loguniqueid = -1; /*!< log unique id */
+static int global_loguserfield = -1; /*!< log user field */
+
+static rc_handle *rh = NULL;
 
 static int build_radius_record(VALUE_PAIR **send, struct ast_cdr *cdr)
 {
@@ -118,8 +121,6 @@
 	char buf[253];
 	struct tm tm;
 	char timestr[128];
-	time_t t;
-
 
 	aux = PW_STATUS_STOP;
 	if (!rc_avpair_add(rh, send, PW_ACCT_STATUS_TYPE, &aux, 0, 0)) {
@@ -190,9 +191,12 @@
 		return -1;
 	}
 
+
 	/* Start Time */
-	t = cdr->start.tv_sec;
-	localtime_r(&t, &tm);
+	if (global_usegmtime) 
+		gmtime_r(&(cdr->start.tv_sec), &tm);
+	else
+		localtime_r(&(cdr->start.tv_sec), &tm);
 	strftime(timestr, 128, DATE_FORMAT, &tm);
 	if (!rc_avpair_add(rh, send, PW_AST_START_TIME, timestr, strlen(timestr), VENDOR_CODE)) {
 		ast_log(LOG_WARNING, "Failed to add VALUE PAIR. RADIUS CDR not recorded!\n");
@@ -200,8 +204,10 @@
 	}
 
 	/* Answer Time */
-	t = cdr->answer.tv_sec;
-	localtime_r(&t, &tm);
+	if (global_usegmtime) 
+		gmtime_r(&(cdr->answer.tv_sec), &tm);
+	else
+		localtime_r(&(cdr->answer.tv_sec), &tm);
 	strftime(timestr, 128, DATE_FORMAT, &tm);
 	if (!rc_avpair_add(rh, send, PW_AST_ANSWER_TIME, timestr, strlen(timestr), VENDOR_CODE)) {
 		ast_log(LOG_WARNING, "Failed to add VALUE PAIR. RADIUS CDR not recorded!\n");
@@ -209,8 +215,10 @@
 	}
 
 	/* End Time */
-	t = cdr->end.tv_sec;
-	localtime_r(&t, &tm);
+	if (global_usegmtime) 
+		gmtime_r(&(cdr->end.tv_sec), &tm);
+	else
+		localtime_r(&(cdr->end.tv_sec), &tm);
 	strftime(timestr, 128, DATE_FORMAT, &tm);
 	if (!rc_avpair_add(rh, send, PW_AST_END_TIME, timestr, strlen(timestr), VENDOR_CODE)) {
 		ast_log(LOG_WARNING, "Failed to add VALUE PAIR. RADIUS CDR not recorded!\n");
@@ -245,22 +253,24 @@
 		return -1;
 	}
 
-#ifdef RADIUS_LOGUNIQUEID
-	/* Unique ID */
-	ast_copy_string(buf, cdr->uniqueid, sizeof(buf));
-	if (!rc_avpair_add(rh, send, PW_AST_UNIQUE_ID, &buf, strlen(buf), VENDOR_CODE)) {
-		ast_log(LOG_WARNING, "Failed to add VALUE PAIR. RADIUS CDR not recorded!\n");
-		return -1;
-	}
-#endif
-#ifdef RADIUS_LOGUSERFIELD
-	/* append the user field */
-	ast_copy_string(buf, cdr->userfield, sizeof(buf));
-	if (!rc_avpair_add(rh, send, PW_AST_USER_FIELD, &buf, strlen(buf), VENDOR_CODE)) {
-		ast_log(LOG_WARNING, "Failed to add VALUE PAIR. RADIUS CDR not recorded!\n");
-		return -1;
-	}
-#endif
+	if (global_loguniqueid) {
+		/* Unique ID */
+		ast_copy_string(buf, cdr->uniqueid, sizeof(buf));
+		if (!rc_avpair_add(rh, send, PW_AST_UNIQUE_ID, &buf, strlen(buf), VENDOR_CODE)) {
+			ast_log(LOG_WARNING, "Failed to add VALUE PAIR. RADIUS CDR not recorded!\n");
+			return -1;
+		}
+	}
+
+	if (global_loguserfield) {
+		/* append the user field */
+		ast_copy_string(buf, cdr->userfield, sizeof(buf));
+		if (!rc_avpair_add(rh, send, PW_AST_USER_FIELD, &buf, strlen(buf), VENDOR_CODE)) {
+			ast_log(LOG_WARNING, "Failed to add VALUE PAIR. RADIUS CDR not recorded!\n");
+			return -1;
+		}
+	}
+
 	return 1;
 }
 
@@ -306,9 +316,9 @@
 	struct ast_variable *var;
 	char *tmp;
 
-	cfg = ast_config_load(config);
+	cfg = ast_config_load(radius_config);
 	if (!cfg) {
-		ast_log(LOG_WARNING,"Unable to load config for RADIUS CDR's: %s\n", config);
+		ast_log(LOG_WARNING,"Unable to load config for RADIUS CDR's: %s\n", radius_config);
 		return 0;
 	}
 	
@@ -346,6 +356,18 @@
 		return -1;
 	}
 
+	cfg = ast_config_load(cdr_config);
+	if (!cfg) {
+		ast_log(LOG_WARNING,"Unable to load config for RADIUS CDR's: %s\n", cdr_config);
+		return 0;
+	}
+	
+	global_usegmtime = ast_true(ast_variable_retrieve(cfg, "radius", "usegmtime"));
+	global_loguniqueid = ast_true(ast_variable_retrieve(cfg, "radius", "loguniqueid"));
+	global_loguserfield = ast_true(ast_variable_retrieve(cfg, "radius", "loguserfield"));
+		
+	ast_config_destroy(cfg);
+	
 	res = ast_cdr_register(name, desc, radius_log);
 	if (res) {
 		ast_log(LOG_ERROR, "Unable to register RADIUS CDR handling\n");

Modified: team/oej/cdr_radius/configs/cdr.conf.sample
URL: http://svn.digium.com/view/asterisk/team/oej/cdr_radius/configs/cdr.conf.sample?rev=15106&r1=15105&r2=15106&view=diff
==============================================================================
--- team/oej/cdr_radius/configs/cdr.conf.sample (original)
+++ team/oej/cdr_radius/configs/cdr.conf.sample Sun Mar 26 20:29:26 2006
@@ -61,3 +61,8 @@
 ;loguniqueid=yes ;log uniqueid
 ;loguserfield=yes ;log user field
 
+;[radius]
+;usegmtime=yes ;log date/time in GMT
+;loguniqueid=yes ;log uniqueid
+;loguserfield=yes ;log user field
+



More information about the asterisk-commits mailing list