summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2017-01-20 21:13:34 -0600
committerRichard Mudgett <rmudgett@digium.com>2017-01-24 11:23:05 -0600
commit30cb4eb57fe25e14a14e99008f5706b0f994d10b (patch)
tree8f54daef4e094677b25128d50a3b97ada7e0f07e /include
parent48178e5918967337624a7e43ff1d84a7bb63fa85 (diff)
PJPROJECT logging: Fix detection of max supported log level.
The mechanism used for detecting the maximum log level compiled into the linked pjproject did not work. The API call simply stores the requested level into an integer and does no range checking. Asterisk was assuming that there was range checking and limited the new value to the allowable range. To get the actual maximum log level compiled into the linked pjproject we need to get and save off the initial set log level from pjproject. This is the maximum log level supported. * Get and save off the initial log level setting before altering it to the desired level on startup. This has to be done by a macro rather than calling a core function to avoid incorrectly linking pjproject. * Split the initial log level warning messages to warn if the linked pjproject cannot support the requested startup level and if it is too low to get the pjproject buildopts for "pjproject show buildopts". * Adjust the CLI "pjproject set log level" to check the saved max log level and to generate normal output messages instead of a warning message. ASTERISK-26743 #close Change-Id: I40aa76653e2a1dece66c3f8734594b4f0471cfb4
Diffstat (limited to 'include')
-rw-r--r--include/asterisk/options.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/include/asterisk/options.h b/include/asterisk/options.h
index 0f8c6f87e..950764e15 100644
--- a/include/asterisk/options.h
+++ b/include/asterisk/options.h
@@ -143,6 +143,33 @@ enum ast_option_flags {
*/
#define DEFAULT_PJ_LOG_MAX_LEVEL 2
+/*!
+ * \brief Get maximum log level pjproject was compiled with.
+ *
+ * \details
+ * Determine the maximum log level the pjproject we are running
+ * with supports.
+ *
+ * When pjproject is initially loaded the default log level in
+ * effect is the maximum log level the library was compiled to
+ * generate. We must save this value off somewhere before we
+ * change it to what we want to use as the default level.
+ *
+ * \note This must be done before calling pj_init() so the level
+ * we want to use as the default level is in effect while the
+ * library initializes.
+ */
+#define AST_PJPROJECT_INIT_LOG_LEVEL() \
+ do { \
+ if (ast_pjproject_max_log_level < 0) { \
+ ast_pjproject_max_log_level = pj_log_get_level(); \
+ } \
+ pj_log_set_level(ast_option_pjproject_log_level); \
+ } while (0)
+
+/*! Current linked pjproject maximum logging level */
+extern int ast_pjproject_max_log_level;
+
/*! Current pjproject logging level */
extern int ast_option_pjproject_log_level;