[asterisk-commits] kmoore: branch kmoore/cel_cleanup r392722 - in /team/kmoore/cel_cleanup: incl...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Mon Jun 24 10:39:10 CDT 2013


Author: kmoore
Date: Mon Jun 24 10:39:09 2013
New Revision: 392722

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=392722
Log:
Enable CEL config to be swapped for easier unit testing

Modified:
    team/kmoore/cel_cleanup/include/asterisk/cel.h
    team/kmoore/cel_cleanup/main/cel.c

Modified: team/kmoore/cel_cleanup/include/asterisk/cel.h
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/cel_cleanup/include/asterisk/cel.h?view=diff&rev=392722&r1=392721&r2=392722
==============================================================================
--- team/kmoore/cel_cleanup/include/asterisk/cel.h (original)
+++ team/kmoore/cel_cleanup/include/asterisk/cel.h Mon Jun 24 10:39:09 2013
@@ -263,6 +263,44 @@
  */
 struct stasis_topic *ast_cel_topic(void);
 
+/*! \brief A structure to hold CEL global configuration options */
+struct ast_cel_config {
+	AST_DECLARE_STRING_FIELDS(
+		AST_STRING_FIELD(date_format); /*!< The desired date format for logging */
+	);
+	int enable;			/*!< Whether CEL is enabled */
+	int64_t events;			/*!< The events to be logged */
+	struct ao2_container *apps;	/*!< The apps for which to log app start and end events */
+};
+
+/*!
+ * \brief Allocate a CEL configuration object
+ *
+ * \retval NULL on error
+ * \retval The new CEL configuration object
+ */
+void *ast_cel_config_alloc(void);
+
+/*!
+ * \since 12
+ * \brief Obtain the current CEL configuration
+ *
+ * The configuration is a ref counted object. The caller of this function must
+ * decrement the ref count when finished with the configuration.
+ *
+ * \retval NULL on error
+ * \retval The current CEL configuration
+ */
+struct ast_cel_config *ast_cel_get_config(void);
+
+/*!
+ * \since 12
+ * \brief Set the current CEL configuration
+ *
+ * \param config The new CEL configuration
+ */
+void ast_cel_set_config(struct ast_cel_config *config);
+
 #if defined(__cplusplus) || defined(c_plusplus)
 }
 #endif

Modified: team/kmoore/cel_cleanup/main/cel.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/cel_cleanup/main/cel.c?view=diff&rev=392722&r1=392721&r2=392722
==============================================================================
--- team/kmoore/cel_cleanup/main/cel.c (original)
+++ team/kmoore/cel_cleanup/main/cel.c Mon Jun 24 10:39:09 2013
@@ -180,30 +180,20 @@
  */
 static struct ao2_container *linkedids;
 
-/*! \brief A structure to hold global configuration-related options */
-struct cel_general_config {
-	AST_DECLARE_STRING_FIELDS(
-		AST_STRING_FIELD(date_format); /*!< The desired date format for logging */
-	);
-	int enable;			/*!< Whether CEL is enabled */
-	int64_t events;			/*!< The events to be logged */
-	struct ao2_container *apps;	/*!< The apps for which to log app start and end events */
-};
-
 /*! \brief Destructor for cel_config */
-static void cel_general_config_dtor(void *obj)
-{
-	struct cel_general_config *cfg = obj;
+static void ast_cel_config_dtor(void *obj)
+{
+	struct ast_cel_config *cfg = obj;
 	ast_string_field_free_memory(cfg);
 	ao2_cleanup(cfg->apps);
 	cfg->apps = NULL;
 }
 
-static void *cel_general_config_alloc(void)
-{
-	RAII_VAR(struct cel_general_config *, cfg, NULL, ao2_cleanup);
-
-	if (!(cfg = ao2_alloc(sizeof(*cfg), cel_general_config_dtor))) {
+void *ast_cel_config_alloc(void)
+{
+	RAII_VAR(struct ast_cel_config *, cfg, NULL, ao2_cleanup);
+
+	if (!(cfg = ao2_alloc(sizeof(*cfg), ast_cel_config_dtor))) {
 		return NULL;
 	}
 
@@ -221,7 +211,7 @@
 
 /*! \brief A container that holds all config-related information */
 struct cel_config {
-	struct cel_general_config *general;
+	struct ast_cel_config *general;
 };
 
 
@@ -243,7 +233,7 @@
 		return NULL;
 	}
 
-	if (!(cfg->general = cel_general_config_alloc())) {
+	if (!(cfg->general = ast_cel_config_alloc())) {
 		return NULL;
 	}
 
@@ -251,7 +241,7 @@
 	return cfg;
 }
 
-/*! \brief An aco_type structure to link the "general" category to the cel_general_config type */
+/*! \brief An aco_type structure to link the "general" category to the ast_cel_config type */
 static struct aco_type general_option = {
 	.type = ACO_GLOBAL,
 	.name = "general",
@@ -559,7 +549,7 @@
 
 static int events_handler(const struct aco_option *opt, struct ast_variable *var, void *obj)
 {
-	struct cel_general_config *cfg = obj;
+	struct ast_cel_config *cfg = obj;
 	char *events = ast_strdupa(var->value);
 	char *cur_event;
 
@@ -589,7 +579,7 @@
 
 static int apps_handler(const struct aco_option *opt, struct ast_variable *var, void *obj)
 {
-	struct cel_general_config *cfg = obj;
+	struct ast_cel_config *cfg = obj;
 	char *apps = ast_strdupa(var->value);
 	char *cur_app;
 
@@ -1578,8 +1568,8 @@
 		return -1;
 	}
 
-	aco_option_register(&cel_cfg_info, "enable", ACO_EXACT, general_options, "no", OPT_BOOL_T, 1, FLDSET(struct cel_general_config, enable));
-	aco_option_register(&cel_cfg_info, "dateformat", ACO_EXACT, general_options, "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct cel_general_config, date_format));
+	aco_option_register(&cel_cfg_info, "enable", ACO_EXACT, general_options, "no", OPT_BOOL_T, 1, FLDSET(struct ast_cel_config, enable));
+	aco_option_register(&cel_cfg_info, "dateformat", ACO_EXACT, general_options, "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_cel_config, date_format));
 	aco_option_register_custom(&cel_cfg_info, "apps", ACO_EXACT, general_options, "", apps_handler, 0);
 	aco_option_register_custom(&cel_cfg_info, "events", ACO_EXACT, general_options, "", events_handler, 0);
 
@@ -1616,3 +1606,19 @@
 {
 	return cel_topic;
 }
+
+struct ast_cel_config *ast_cel_get_config(void)
+{
+	RAII_VAR(struct cel_config *, mod_cfg, ao2_global_obj_ref(cel_configs), ao2_cleanup);
+	ao2_ref(mod_cfg->general, +1);
+	return mod_cfg->general;
+}
+
+void ast_cel_set_config(struct ast_cel_config *config)
+{
+	RAII_VAR(struct cel_config *, mod_cfg, ao2_global_obj_ref(cel_configs), ao2_cleanup);
+	ao2_cleanup(mod_cfg->general);
+	mod_cfg->general = config;
+	ao2_ref(mod_cfg->general, +1);
+}
+




More information about the asterisk-commits mailing list