[PATCH] osmo-sip-connector[master]: sip: Register log callback function with sofia-sip

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Harald Welte gerrit-no-reply at lists.osmocom.org
Sun Apr 15 20:13:59 UTC 2018


Review at  https://gerrit.osmocom.org/7812

sip: Register log callback function with sofia-sip

sofia-sip allows applications to register a log backend function
which will be called every time the library wants to log something.

We register such a call-back and make it log using the libosmocore logging
framework.

The problem is that sofia-sip has its own log level management, and by
the time the message hits libosmocore, we don't know which log level we
shall use :(

Change-Id: Ib269b6b50f9d79bbd13acc43a626834921f05edb
Related: OS#3105
---
M src/app.h
M src/main.c
M src/sip.c
M src/vty.c
4 files changed, 33 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-sip-connector refs/changes/12/7812/1

diff --git a/src/app.h b/src/app.h
index ff48c79..96c8902 100644
--- a/src/app.h
+++ b/src/app.h
@@ -9,6 +9,7 @@
 	struct {
 		const char *local_addr;
 		int local_port;
+		int sofia_log_level;
 
 		const char *remote_addr;
 		int remote_port;
diff --git a/src/main.c b/src/main.c
index 558eaec..b4ffb63 100644
--- a/src/main.c
+++ b/src/main.c
@@ -126,7 +126,7 @@
 
 
 	/* parsing and setup */
-
+	g_app.sip.sofia_log_level = 2;
 	handle_options(argc, argv);
 	rc = vty_read_config_file(config_file, NULL);
 	if (rc < 0) {
diff --git a/src/sip.c b/src/sip.c
index 4f3d034..84d1f6e 100644
--- a/src/sip.c
+++ b/src/sip.c
@@ -27,6 +27,7 @@
 #include <osmocom/core/utils.h>
 
 #include <sofia-sip/sip_status.h>
+#include <sofia-sip/su_log.h>
 
 #include <talloc.h>
 
@@ -383,12 +384,24 @@
 				agent->app->sip.local_port);
 }
 
+/* http://sofia-sip.sourceforge.net/refdocs/debug_logs.html */
+static void sip_logger(void *stream, char const *fmt, va_list ap)
+{
+	/* this is ugly, as unfortunately sofia-sip does not pass the log level to
+	 * the log handler call-back function, so we have no clue what log level the
+	 * currently logged message was sent for :(  As a result, we can only use one
+	 * hard-coded LOGL_NOTICE here */
+	osmo_vlogp(DSIP, LOGL_NOTICE, "", 0, 0, fmt, ap);
+}
+
 void sip_agent_init(struct sip_agent *agent, struct app_config *app)
 {
 	agent->app = app;
 
 	su_init();
 	su_home_init(&agent->home);
+	su_log_redirect(su_log_default, &sip_logger, NULL);
+	su_log_redirect(su_log_global, &sip_logger, NULL);
 	agent->root = su_glib_root_create(NULL);
 	su_root_threading(agent->root, 0);
 }
diff --git a/src/vty.c b/src/vty.c
index bea1f9f..540e2de 100644
--- a/src/vty.c
+++ b/src/vty.c
@@ -1,5 +1,6 @@
 /*
  * (C) 2016 by Holger Hans Peter Freyther
+ * (C) 2018 by Harald Welte <laforge at gnumonks.org>
  *
  * All Rights Reserved
  *
@@ -24,6 +25,8 @@
 #include "mncc.h"
 
 #include <talloc.h>
+
+#include <sofia-sip/su_log.h>
 
 extern void *tall_mncc_ctx;
 
@@ -88,6 +91,7 @@
 	vty_out(vty, "sip%s", VTY_NEWLINE);
 	vty_out(vty, " local %s %d%s", g_app.sip.local_addr, g_app.sip.local_port, VTY_NEWLINE);
 	vty_out(vty, " remote %s %d%s", g_app.sip.remote_addr, g_app.sip.remote_port, VTY_NEWLINE);
+	vty_out(vty, " sofia-sip log-level %d%s", g_app.sip.sofia_log_level, VTY_NEWLINE);
 	return CMD_SUCCESS;
 }
 
@@ -130,6 +134,19 @@
 	talloc_free((char *) g_app.sip.remote_addr);
 	g_app.sip.remote_addr = talloc_strdup(tall_mncc_ctx, argv[0]);
 	g_app.sip.remote_port = atoi(argv[1]);
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_sip_sofia_log_level, cfg_sip_sofia_log_level_cmd,
+	"sofia-sip log-level <0-9>",
+	"sofia-sip library configuration\n"
+	"global log-level for sofia-sip\n"
+	"(0 = nothing, 9 = super-verbose)\n")
+{
+	g_app.sip.sofia_log_level = atoi(argv[0]);
+	su_log_set_level(su_log_default, g_app.sip.sofia_log_level);
+	su_log_set_level(su_log_global, g_app.sip.sofia_log_level);
+
 	return CMD_SUCCESS;
 }
 
@@ -302,6 +319,7 @@
 	install_node(&sip_node, config_write_sip);
 	install_element(SIP_NODE, &cfg_sip_local_addr_cmd);
 	install_element(SIP_NODE, &cfg_sip_remote_addr_cmd);
+	install_element(SIP_NODE, &cfg_sip_sofia_log_level_cmd);
 
 	install_element(CONFIG_NODE, &cfg_mncc_cmd);
 	install_node(&mncc_node, config_write_mncc);

-- 
To view, visit https://gerrit.osmocom.org/7812
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib269b6b50f9d79bbd13acc43a626834921f05edb
Gerrit-PatchSet: 1
Gerrit-Project: osmo-sip-connector
Gerrit-Branch: master
Gerrit-Owner: Harald Welte <laforge at gnumonks.org>



More information about the gerrit-log mailing list