From b72425b1f0407d1a3490589b3a13d725e8503df8 Mon Sep 17 00:00:00 2001
From: George Joseph <gjoseph@digium.com>
Date: Mon, 16 Aug 2021 07:25:44 -0600
Subject: [PATCH] res_pjproject: Allow mapping to Asterisk TRACE level

Allow mapping pjproject log messages to the Asterisk TRACE
log level.  The defaults were also changes to log pjproject
levels 3,4 to DEBUG and 5,6 to TRACE.  Previously 3,4,5,6
all went to DEBUG.

ASTERISK-29582

Change-Id: I859a37a8dec263ed68099709cfbd3e665324c72d
---
 configs/samples/pjproject.conf.sample |  5 ++++-
 doc/CHANGES-staging/res_pjproject.txt |  8 ++++++++
 res/res_pjproject.c                   | 22 +++++++++++++++++-----
 3 files changed, 29 insertions(+), 6 deletions(-)
 create mode 100644 doc/CHANGES-staging/res_pjproject.txt

diff --git a/configs/samples/pjproject.conf.sample b/configs/samples/pjproject.conf.sample
index 03149c4539..273384b82b 100644
--- a/configs/samples/pjproject.conf.sample
+++ b/configs/samples/pjproject.conf.sample
@@ -52,5 +52,8 @@
                      ; (default: "")
 ;asterisk_debug =    ; A comma separated list of pjproject log levels to map to
                      ; Asterisk debug
-                     ; (default: "3,4,5,6")
+                     ; (default: "3,4")
+;asterisk_trace =    ; A comma separated list of pjproject log levels to map to
+                     ; Asterisk trace
+                     ; (default: "5,6")
 ;type=               ; Must be of type log_mappings (default: "")
diff --git a/doc/CHANGES-staging/res_pjproject.txt b/doc/CHANGES-staging/res_pjproject.txt
new file mode 100644
index 0000000000..132c9506b8
--- /dev/null
+++ b/doc/CHANGES-staging/res_pjproject.txt
@@ -0,0 +1,8 @@
+Subject: res_pjproject
+
+In pjproject.conf you can now map pjproject log levels
+to the Asterisk TRACE log level.  The default mappings
+have therefore changed so that only pjproject levels
+3 and 4 are mapped to DEBUG and 5 and 6 are now mapped
+to TRACE.  Previously 3, 4, 5, and 6 were all mapped to
+DEBUG.
diff --git a/res/res_pjproject.c b/res/res_pjproject.c
index f6dce4cd9a..4047acae39 100644
--- a/res/res_pjproject.c
+++ b/res/res_pjproject.c
@@ -29,7 +29,10 @@
  *  - 0: LOG_ERROR
  *  - 1: LOG_ERROR
  *  - 2: LOG_WARNING
- *  - 3 and above: equivalent to ast_debug(level, ...) for res_pjproject.so
+ *  - 3: equivalent to ast_debug(level, ...) for res_pjproject.so
+ *  - 4: equivalent to ast_debug(level, ...) for res_pjproject.so
+ *  - 5: equivalent to ast_trace(level, ...) for res_pjproject.so
+ *  - 6: equivalent to ast_trace(level, ...) for res_pjproject.so
  */
 
 /*** MODULEINFO
@@ -86,12 +89,15 @@
 				<configOption name="asterisk_notice" default="">
 					<synopsis>A comma separated list of pjproject log levels to map to Asterisk LOG_NOTICE.</synopsis>
 				</configOption>
-				<configOption name="asterisk_debug" default="3,4,5,6">
-					<synopsis>A comma separated list of pjproject log levels to map to Asterisk LOG_DEBUG.</synopsis>
-				</configOption>
 				<configOption name="asterisk_verbose" default="">
 					<synopsis>A comma separated list of pjproject log levels to map to Asterisk LOG_VERBOSE.</synopsis>
 				</configOption>
+				<configOption name="asterisk_debug" default="3,4">
+					<synopsis>A comma separated list of pjproject log levels to map to Asterisk LOG_DEBUG.</synopsis>
+				</configOption>
+				<configOption name="asterisk_trace" default="5,6">
+					<synopsis>A comma separated list of pjproject log levels to map to Asterisk LOG_TRACE.</synopsis>
+				</configOption>
 			</configObject>
 		</configFile>
 	</configInfo>
@@ -148,6 +154,8 @@ struct log_mappings {
 		AST_STRING_FIELD(asterisk_verbose);
 		/*! pjproject log levels mapped to Asterisk DEBUG */
 		AST_STRING_FIELD(asterisk_debug);
+		/*! pjproject log levels mapped to Asterisk TRACE */
+		AST_STRING_FIELD(asterisk_trace);
 	);
 };
 
@@ -190,6 +198,8 @@ static int get_log_level(int pj_level)
 		mapped_level = __LOG_VERBOSE;
 	} else if (strchr(mappings->asterisk_debug, l)) {
 		mapped_level = __LOG_DEBUG;
+	} else if (strchr(mappings->asterisk_trace, l)) {
+		mapped_level = __LOG_TRACE;
 	} else {
 		mapped_level = __LOG_SUPPRESS;
 	}
@@ -675,6 +685,7 @@ static int load_module(void)
 	ast_sorcery_object_field_register(pjproject_sorcery, "log_mappings", "asterisk_warning", "",  OPT_STRINGFIELD_T, 0, STRFLDSET(struct log_mappings, asterisk_warning));
 	ast_sorcery_object_field_register(pjproject_sorcery, "log_mappings", "asterisk_notice", "",  OPT_STRINGFIELD_T, 0, STRFLDSET(struct log_mappings, asterisk_notice));
 	ast_sorcery_object_field_register(pjproject_sorcery, "log_mappings", "asterisk_verbose", "",  OPT_STRINGFIELD_T, 0, STRFLDSET(struct log_mappings, asterisk_verbose));
+	ast_sorcery_object_field_register(pjproject_sorcery, "log_mappings", "asterisk_trace", "",  OPT_STRINGFIELD_T, 0, STRFLDSET(struct log_mappings, asterisk_trace));
 
 	default_log_mappings = ast_sorcery_alloc(pjproject_sorcery, "log_mappings", "log_mappings");
 	if (!default_log_mappings) {
@@ -683,7 +694,8 @@ static int load_module(void)
 	}
 	ast_string_field_set(default_log_mappings, asterisk_error, "0,1");
 	ast_string_field_set(default_log_mappings, asterisk_warning, "2");
-	ast_string_field_set(default_log_mappings, asterisk_debug, "3,4,5,6");
+	ast_string_field_set(default_log_mappings, asterisk_debug, "3,4");
+	ast_string_field_set(default_log_mappings, asterisk_trace, "5,6");
 
 	ast_sorcery_load(pjproject_sorcery);
 
-- 
GitLab