Module: sip-router Branch: master Commit: a255911902788bf74a7f4279fce4758b2f2a4613 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=a2559119...
Author: Federico Cabiddu federico.cabiddu@gmail.com Committer: Federico Cabiddu federico.cabiddu@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
- 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");