[sr-dev] git:master: modules/tsilo: added MI commands

Federico Cabiddu federico.cabiddu at gmail.com
Wed Nov 12 11:59:19 CET 2014


Module: sip-router
Branch: master
Commit: a255911902788bf74a7f4279fce4758b2f2a4613
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=a255911902788bf74a7f4279fce4758b2f2a4613

Author: Federico Cabiddu <federico.cabiddu at gmail.com>
Committer: Federico Cabiddu <federico.cabiddu at gmail.com>
Date:   Wed Nov 12 11:52:29 2014 +0100

modules/tsilo: added MI commands

---

 modules/tsilo/Makefile            |    5 +++-
 modules/tsilo/README              |   51 +++++++++++++++++++++++++++++--------
 modules/tsilo/doc/tsilo_admin.xml |   44 ++++++++++++++++++++++++++------
 modules/tsilo/ts_hash.c           |    2 +-
 modules/tsilo/ts_hash.h           |   16 ++++++------
 modules/tsilo/tsilo.c             |   30 ++++++++++++++++-----
 6 files changed, 112 insertions(+), 36 deletions(-)

diff --git a/modules/tsilo/Makefile b/modules/tsilo/Makefile
index 40b04cb..c179aec 100644
--- a/modules/tsilo/Makefile
+++ b/modules/tsilo/Makefile
@@ -9,10 +9,13 @@ include ../../Makefile.defs
 auto_gen=
 NAME=tsilo.so
 LIBS=
-DEFS+= -DSER_MOD_INTERFACE
+DEFS+=-DKAMAILIO_MOD_INTERFACE
 
 ifeq ($(INSTALL_FLAVOUR),kamailio)
 DEFS+= -DWITH_EVENT_LOCAL_REQUEST
 endif # INSTALL_FLAVOUR
 
+SERLIBPATH=../../lib
+SER_LIBS+=$(SERLIBPATH)/kmi/kmi
+
 include ../../Makefile.modules
diff --git a/modules/tsilo/README b/modules/tsilo/README
index 4790ad1..297c435 100644
--- a/modules/tsilo/README
+++ b/modules/tsilo/README
@@ -10,7 +10,7 @@ Federico Cabiddu
 
    <federico.cabiddu at gmail.com>
 
-   Copyright © 2014 Federico Cabiddu
+   Copyright © 2014 Federico Cabiddu
      __________________________________________________________________
 
    Table of Contents
@@ -33,7 +33,10 @@ Federico Cabiddu
               4.2. ts_append(domain, ruri)
               4.3. ts_append_to(tindex, tlabel, domain)
 
-        5. Statistics
+        5. MI Commands
+
+              5.1. ts_dump
+              5.2. ts_lookup
 
    List of Examples
 
@@ -62,19 +65,26 @@ Chapter 1. Admin Guide
         4.2. ts_append(domain, ruri)
         4.3. ts_append_to(tindex, tlabel, domain)
 
-   5. Statistics
+   5. MI Commands
+
+        5.1. ts_dump
+        5.2. ts_lookup
 
 1. Overview
 
    This modules provides transaction storage for the Kamailio SIP Server
-   Platform. It stores in an internal table transactions for an user and
-   add branches to them if new contacts are added.
+   Platform. It stores in an internal table transactions for a Request-URI
+   (R-URI) and add branches to them later if new contacts for the AOR are
+   added.
 
-   For each message, the modules stores "Request-URI" ("R-URI"), URI and
-   the internal transaction index and label.
+   When the ts_store function is called, the modules stores the current
+   transaction R-URI URI, index and label. Two functions (ts_append and
+   ts_append_to) provide the ability to add new branches either to a
+   specific transaction or to all of the transactions stored for a given
+   R-URI.
 
-   When the transaction is destroyed (by the TM module, the transaction is
-   removed from the module table.
+   When a transaction is destroyed by the TM module, it is removed from
+   the module's table too.
 
 2. Dependencies
 
@@ -105,7 +115,7 @@ Chapter 1. Admin Guide
    must be a power of two, otherwise it will be rounded down to the
    nearest power of two.
 
-   Default value is "2048".
+   Default value is “2048”.
 
    Example 1.1. Set hash_size parameter
 ...
@@ -182,4 +192,23 @@ if (is_method("REGISTER")) {
 }
 ...
 
-5. Statistics
+5. MI Commands
+
+   5.1. ts_dump
+   5.2. ts_lookup
+
+5.1.  ts_dump
+
+   Dumps the entire content of the TSILO table
+
+   Parameters:
+     * brief - (optional, may not be present); if equals to string
+       “brief”, a brief dump will be done (only RURI, without the
+       transaction(s) details)
+
+5.2.  ts_lookup
+
+   Dumps the transactions stored for the given RURI
+
+   Parameters:
+     * ruri - RURI for which we want to show the transactions.
diff --git a/modules/tsilo/doc/tsilo_admin.xml b/modules/tsilo/doc/tsilo_admin.xml
index 4c35e69..36180d1 100644
--- a/modules/tsilo/doc/tsilo_admin.xml
+++ b/modules/tsilo/doc/tsilo_admin.xml
@@ -17,17 +17,15 @@
 	<title>Overview</title>
 	<para>
 		This modules provides transaction storage for the &kamailioname;. It
-		stores in an internal table transactions for an user and add branches
-		to them if new contacts are added.
+		stores in an internal table transactions for a Request-URI (R-URI) and add branches
+		to them later if new contacts for the AOR are added.
 	</para>
 	<para>
-		For each message, the modules stores <quote>Request-URI</quote>
-		(<quote>R-URI</quote>), &uri; and the internal transaction index
-		and label.
+		When the <emphasis>ts_store</emphasis> function is called, the modules stores the current transaction R-URI &uri;, index and label. Two functions (<emphasis>ts_append</emphasis> and <emphasis>ts_append_to</emphasis>) provide the ability to add new branches either to a specific transaction or to all of the transactions stored for a given R-URI.
 	</para>
 	<para>
-		When the transaction is destroyed (by the <emphasis>TM</emphasis> module,
-		the transaction is removed from the module table.
+		When a transaction is destroyed by the <emphasis>TM</emphasis> module,
+		it is removed from the module's table too.
 	</para>
 	</section>
 	<section>
@@ -201,6 +199,36 @@ if (is_method("REGISTER")) {
 	</section>
 
 	<section>
-	<title>Statistics</title>
+		<title>MI Commands</title>
+		<section id="tsilo.mi.ts_dump">
+			<title>
+			<function moreinfo="none">ts_dump</function>
+			</title>
+			<para>
+			Dumps the entire content of the TSILO table
+			</para>
+			<para>Parameters: </para>
+			<itemizedlist>
+				<listitem><para>
+					<emphasis>brief</emphasis> - (optional, may not be present); if
+					equals to string <quote>brief</quote>, a brief dump will be
+					done (only RURI, without the transaction(s) details)
+				</para></listitem>
+			</itemizedlist>
+		</section>
+		<section id="tsilo.mi.ts_lookup">
+			<title>
+			<function moreinfo="none">ts_lookup</function>
+			</title>
+			<para>
+			Dumps the transactions stored for the given RURI
+			</para>
+			<para>Parameters: </para>
+			<itemizedlist>
+				<listitem><para>
+					<emphasis>ruri</emphasis> - RURI for which we want to show the transactions.
+				</para></listitem>
+			</itemizedlist>
+		</section>
 	</section>
 </chapter>
diff --git a/modules/tsilo/ts_hash.c b/modules/tsilo/ts_hash.c
index 089f425..6225db6 100644
--- a/modules/tsilo/ts_hash.c
+++ b/modules/tsilo/ts_hash.c
@@ -162,7 +162,7 @@ void unlock_entry(ts_entry_t *entry) {
 
 void lock_entry_by_ruri(str* ruri)
 {
-        unsigned int sl;
+	unsigned int sl;
 
 	sl = core_hash(ruri, 0, 0) & (t_table->size-1);
 	ts_lock(t_table, &t_table->entries[sl]);
diff --git a/modules/tsilo/ts_hash.h b/modules/tsilo/ts_hash.h
index b895c26..bc7adf1 100644
--- a/modules/tsilo/ts_hash.h
+++ b/modules/tsilo/ts_hash.h
@@ -26,8 +26,8 @@
  * Module: \ref tsilo
  */
 
-#ifndef _DIALOG_TS_HASH_H_
-#define _DIALOG_TS_HASH_H_
+#ifndef _TS_HASH_H_
+#define _TS_HASH_H_
 
 #include "../../locking.h"
 #include "../../lib/kmi/mi.h"
@@ -64,10 +64,10 @@ typedef struct ts_urecord
 /*! entries in the main transaction table */
 typedef struct ts_entry
 {
-	int n;                  	/*!< Number of elements in the collision slot */
+	int n;                  	    /*!< Number of elements in the collision slot */
 	struct ts_urecord    *first;	/*!< urecord list */
-	struct ts_urecord    *last;	/*!< optimisation, end of the urecord list */
-	unsigned int       next_id;	/*!< next id */
+	struct ts_urecord    *last;	    /*!< optimisation, end of the urecord list */
+	unsigned int       next_id;	    /*!< next id */
 	unsigned int       lock_idx;	/*!< lock index */
 } ts_entry_t;
 
@@ -75,13 +75,13 @@ typedef struct ts_entry
 /*! main transaction table */
 typedef struct ts_table
 {
-	unsigned int       size;	/*!< size of the dialog table */
+	unsigned int       size;	    /*!< size of the tsilo table */
 	struct ts_entry    *entries;	/*!< urecord hash table */
 	unsigned int       locks_no;	/*!< number of locks */
-	gen_lock_set_t     *locks;	/*!< lock table */
+	gen_lock_set_t     *locks;	    /*!< lock table */
 } ts_table_t;
 
-/*! global dialog table */
+/*! global transactions table */
 extern ts_table_t *t_table;
 
 /*!
diff --git a/modules/tsilo/tsilo.c b/modules/tsilo/tsilo.c
index 90eb292..9c404dd 100644
--- a/modules/tsilo/tsilo.c
+++ b/modules/tsilo/tsilo.c
@@ -32,11 +32,13 @@
 #include "../../modules/tm/tm_load.h"
 #include "../../modules/registrar/api.h"
 #include "../../dset.h"
+#include "../../lib/kmi/mi.h"
 
 #include "ts_hash.h"
 #include "ts_handlers.h"
 #include "ts_append.h"
 #include "ts_store.h"
+#include "ts_mi.h"
 
 MODULE_VERSION
 
@@ -57,20 +59,24 @@ static int w_ts_append_to(struct sip_msg* msg, char *idx, char *lbl, char *d);
 static int fixup_ts_append_to(void** param, int param_no);
 static int w_ts_append(struct sip_msg* _msg, char *_table, char *_ruri);
 static int fixup_ts_append(void** param, int param_no);
-
 static int w_ts_store(struct sip_msg* msg);
 
-
 static cmd_export_t cmds[]={
 	{"ts_append_to", (cmd_function)w_ts_append_to,  3,
-		fixup_ts_append_to, REQUEST_ROUTE | FAILURE_ROUTE },
+		fixup_ts_append_to, 0, REQUEST_ROUTE | FAILURE_ROUTE },
 	{"ts_append", (cmd_function)w_ts_append,  2,
-		fixup_ts_append, REQUEST_ROUTE | FAILURE_ROUTE },
+		fixup_ts_append, 0, REQUEST_ROUTE | FAILURE_ROUTE },
 	{"ts_store", (cmd_function)w_ts_store,  0,
-		0 , REQUEST_ROUTE | FAILURE_ROUTE },
+		0 , 0, REQUEST_ROUTE | FAILURE_ROUTE },
 	{0,0,0,0,0}
 };
 
+static mi_export_t mi_cmds[] = {
+	{ "ts_dump",		mi_tsilo_dump,		0,	0,	0 },
+	{ "ts_lookup",		mi_tsilo_lookup,	0,	0,	0 },
+    { 0, 0, 0, 0, 0}
+};
+
 static param_export_t params[]={
 	{"hash_size",	INT_PARAM,	&hash_size},
 	{0,0,0}
@@ -80,13 +86,16 @@ static param_export_t params[]={
 /** module exports */
 struct module_exports exports= {
 	"tsilo",
+    DEFAULT_DLFLAGS,
 	cmds,
-	0, /* RPC methods */
 	params,
+	0, /* exported statistics */
+    mi_cmds,    /* exported MI functions */
+    0,
+    0,
 	mod_init,   /* module initialization function */
 	0,
 	(destroy_function) destroy,  /* destroy function */
-	0,
 	0
 };
 
@@ -97,6 +106,13 @@ static int mod_init(void)
 {
 	unsigned int n;
 
+	/* register the MI commands */
+	if(register_mi_mod(exports.name, mi_cmds)!=0)
+    {
+        LM_ERR("failed to register MI commands\n");
+        return -1;
+    }
+
 	/* load the TM API */
 	if (load_tm_api(&_tmb)!=0) {
 		LM_ERR("can't load TM API\n");




More information about the sr-dev mailing list