There were discussions in the list about getting rid of the MI interface and sticking with the RPC one. We should stop adding new MI commands. I see that the RPC commands are already implemented.

Regards,
Ovidiu Sas

On Nov 12, 2014 5:59 AM, "Federico Cabiddu" <federico.cabiddu@gmail.com> wrote:
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@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

    <federico.cabiddu@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");



_______________________________________________
sr-dev mailing list
sr-dev@lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev