Module: sip-router
Branch: master
Commit: 9b1c23481551ef74b6efeb0118c1119470a08826
URL:
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=9b1c234…
Author: Olle E. Johansson <oej(a)edvina.net>
Committer: Olle E. Johansson <oej(a)edvina.net>
Date: Wed Jan 9 20:09:39 2013 +0100
siptrace(k) Add RPC command for turning on/off
Copying the functionality of the existing MI command.
Also, setting the value of the trace_flag to 0 by default, as
documented in the documentation.
---
modules_k/siptrace/README | 59 ++++++++++++++++++--------
modules_k/siptrace/doc/siptrace_admin.xml | 44 ++++++++++++++++----
modules_k/siptrace/siptrace.c | 64 ++++++++++++++++++++++++++++-
3 files changed, 139 insertions(+), 28 deletions(-)
diff --git a/modules_k/siptrace/README b/modules_k/siptrace/README
index a35a9ce..910ced7 100644
--- a/modules_k/siptrace/README
+++ b/modules_k/siptrace/README
@@ -23,7 +23,7 @@ Daniel-Constantin Mierla
Table of Contents
- 1. Admin Guide
+ 1. SIPtrace Admin Guide
1. Overview
2. Dependencies
@@ -58,8 +58,12 @@ Daniel-Constantin Mierla
5.1. sip_trace
- 6. Database setup
- 7. Known issues
+ 6. RPC Commands
+
+ 6.1. siptrace.status param
+
+ 7. Database setup
+ 8. Known issues
List of Examples
@@ -81,7 +85,7 @@ Daniel-Constantin Mierla
1.16. Set trace_delayed parameter
1.17. sip_trace() usage
-Chapter 1. Admin Guide
+Chapter 1. SIPtrace Admin Guide
Table of Contents
@@ -118,25 +122,29 @@ Chapter 1. Admin Guide
5.1. sip_trace
- 6. Database setup
- 7. Known issues
+ 6. RPC Commands
+
+ 6.1. siptrace.status param
+
+ 7. Database setup
+ 8. Known issues
1. Overview
- Offer a possibility to store incoming/outgoing SIP messages in database
- and/or duplicate to the capturing server (homer encapsulation protocol
- or plain sip mode)
+ Offer a possibility to store incoming and outgoing SIP messages in a
+ database and/or duplicate to the capturing server (using the Homer
+ encapsulation protocol or plain SIP mode)
There are two ways of storing information.
* by calling explicitely the sip_trace() method in Kamailio
configuration file. In this case the original message is processed.
* by setting the flag equal with the value of 'trace_flag' (e.g.,
- setflag(__trace_flag__)) parameter of the module. In this case,
- the\ message sent forward is processed. The logging mechanism is
- based on TM/SL callbacks, so only messages processed with TM/SL are
+ setflag(__trace_flag__)) parameter of the module. In this case, the
+ message sent forward is processed. The logging mechanism is based
+ on TM/SL callbacks, so only messages processed with TM/SL are
logged.
- The tracing can be turned on/off using fifo commad.
+ The tracing can be turned on/off using Kamailio mi or RPC commands.
kamctl fifo sip_trace on
@@ -150,7 +158,7 @@ Chapter 1. Admin Guide
2.1. Kamailio Modules
The following modules must be loaded before this module:
- * database module - mysql, postrgress, dbtext, unixodbc...
+ * database module - Mysql, Postgres, dbtext, unixODBC...
* tm and sl modules - optional, only if you want to trace messages
forwarded by these modules.
@@ -400,7 +408,7 @@ modparam("siptrace", "trace_delayed", 1)
4.1. sip_trace()
-4.1. sip_trace()
+4.1. sip_trace()
Store current processed SIP message in database. It is stored in the
form prior applying chages made to it.
@@ -417,7 +425,7 @@ sip_trace();
5.1. sip_trace
-5.1. sip_trace
+5.1. sip_trace
Name: sip_trace
@@ -434,7 +442,22 @@ sip_trace();
trace_mode
_empty_line_
-6. Database setup
+6. RPC Commands
+
+ 6.1. siptrace.status param
+
+6.1. siptrace.status param
+
+ Name: siptrace.status
+
+ Parameters:
+ * on or off: turns on/off SIP message tracing.. Possible values are:
+ + on
+ + off
+ * "check" does not change siptrace status, just reports the current
+ status.
+
+7. Database setup
Before running Kamailio with siptrace, you have to setup the database
tables where the module will store the data. For that, if the table
@@ -444,7 +467,7 @@ sip_trace();
You can also find the complete database documentation on the project
webpage,
http://www.kamailio.org/docs/db-tables/kamailio-db-devel.html.
-7. Known issues
+8. Known issues
Stateless forwarded messages (forward()) are not logged if you set the
flag, use sip_trace().
diff --git a/modules_k/siptrace/doc/siptrace_admin.xml
b/modules_k/siptrace/doc/siptrace_admin.xml
index 0d1e064..df22003 100644
--- a/modules_k/siptrace/doc/siptrace_admin.xml
+++ b/modules_k/siptrace/doc/siptrace_admin.xml
@@ -11,14 +11,14 @@
<chapter>
- <title>&adminguide;</title>
+ <title>SIPtrace &adminguide;</title>
<section>
<title>Overview</title>
<para>
- Offer a possibility to store incoming/outgoing SIP messages in database
- and/or duplicate to the capturing server (homer encapsulation protocol
- or plain sip mode)
+ Offer a possibility to store incoming and outgoing SIP messages in a database
+ and/or duplicate to the capturing server (using the Homer encapsulation protocol
+ or plain SIP mode)
</para>
<para>
There are two ways of storing information.
@@ -32,7 +32,7 @@
<listitem>
<para>
by setting the flag equal with the value of 'trace_flag' (e.g.,
- setflag(__trace_flag__)) parameter of the module. In this case, the\
+ setflag(__trace_flag__)) parameter of the module. In this case, the
message sent forward is processed. The logging mechanism is based on
TM/SL callbacks, so only messages processed with TM/SL are logged.
</para>
@@ -41,7 +41,7 @@
</para>
<para>
- The tracing can be turned on/off using fifo commad.
+ The tracing can be turned on/off using Kamailio mi or RPC commands.
</para>
<para>
&ctltool; fifo sip_trace on
@@ -59,8 +59,8 @@
<itemizedlist>
<listitem>
<para>
- <emphasis>database module</emphasis> - mysql, postrgress,
- dbtext, unixodbc...
+ <emphasis>database module</emphasis> - Mysql, Postgres,
+ dbtext, unixODBC...
</para>
</listitem>
<listitem>
@@ -515,7 +515,35 @@ sip_trace();
_empty_line_
</programlisting>
</section>
+ </section><!-- MI Commands -->
+ <section>
+ <title>RPC Commands</title>
+ <section>
+ <title>
+ <function moreinfo="none">siptrace.status param</function>
+ </title>
+ <para>
+
+ </para>
+ <para>
+ Name: <emphasis>siptrace.status</emphasis>
+ </para>
+ <para>Parameters: </para>
+ <itemizedlist>
+ <listitem><para>on or off: turns on/off SIP message tracing..
+ Possible values are:</para>
+ <itemizedlist>
+ <listitem><para>on</para></listitem>
+ <listitem><para>off</para></listitem>
+ </itemizedlist>
+ </listitem>
+ <listitem><para><quote>check</quote> does not change
+ siptrace status, just reports the current status.</para>
+ </listitem>
+ </itemizedlist>
+
</section>
+ </section><!-- RPC commands -->
<section>
<title>Database setup</title>
diff --git a/modules_k/siptrace/siptrace.c b/modules_k/siptrace/siptrace.c
index 0d36ba1..6785655 100644
--- a/modules_k/siptrace/siptrace.c
+++ b/modules_k/siptrace/siptrace.c
@@ -41,6 +41,8 @@
#include "../../mem/mem.h"
#include "../../mem/shm_mem.h"
#include "../../lib/kmi/mi.h"
+#include "../../rpc.h"
+#include "../../rpc_lookup.h"
#include "../../lib/srdb1/db.h"
#include "../../parser/parse_content.h"
#include "../../parser/parse_from.h"
@@ -86,6 +88,7 @@ sl_api_t slb;
/* module function prototypes */
static int mod_init(void);
+static int siptrace_init_rpc(void);
static int child_init(int rank);
static void destroy(void);
static int sip_trace(struct sip_msg*, char*, char*);
@@ -124,8 +127,8 @@ static str time_us_column = str_init("time_us"); /*
10 */
#define XHEADERS_BUFSIZE 512
-int trace_flag = -1;
-int trace_on = 0;
+int trace_flag = 0;
+=nt trace_on = 0;
int trace_sl_acks = 1;
int trace_to_database = 1;
@@ -265,6 +268,11 @@ static int mod_init(void)
LM_ERR("failed to register MI commands\n");
return -1;
}
+ if(siptrace_init_rpc() != 0)
+ {
+ LM_ERR("failed to register RPC commands\n");
+ return -1;
+ }
db_url.len = strlen(db_url.s);
siptrace_table.len = strlen(siptrace_table.s);
@@ -1765,3 +1773,55 @@ static int pipport2su (char *pipport, union sockaddr_union *tmp_su,
unsigned int
error:
return -1;
}
+
+static void siptrace_rpc_status (rpc_t* rpc, void* c) {
+ str status = {0, 0};
+
+ if (rpc->scan(c, "S", &status) < 1) {
+ rpc->fault(c, 500, "Not enough parameters (on, off or check)");
+ return;
+ }
+
+ if(trace_on_flag==NULL) {
+ rpc->fault(c, 500, "Internal error");
+ return;
+ }
+
+ if (strncasecmp(status.s, "on", strlen("on")) == 0) {
+ *trace_on_flag = 1;
+ rpc->printf(c, "Enabled");
+ return;
+ }
+ if (strncasecmp(status.s, "off", strlen("off")) == 0) {
+ *trace_on_flag = 0;
+ rpc->printf(c, "Disabled");
+ return;
+ }
+ if (strncasecmp(status.s, "check", strlen("check")) == 0) {
+ rpc->printf(c, *trace_on_flag ? "Enabled" : "Disabled");
+ return;
+ }
+ rpc->fault(c, 500, "Bad parameter (on, off or check)");
+ return;
+}
+
+static const char* siptrace_status_doc[2] = {
+ "Get status or turn on/off siptrace. Parameters: on, off or check.",
+ 0
+};
+
+rpc_export_t siptrace_rpc[] = {
+ {"siptrace.status", siptrace_rpc_status, siptrace_status_doc, 0},
+ {0, 0, 0, 0}
+};
+
+static int siptrace_init_rpc(void)
+{
+ if (rpc_register_array(siptrace_rpc)!=0)
+ {
+ LM_ERR("failed to register RPC commands\n");
+ return -1;
+ }
+ return 0;
+}
+