[sr-dev] git:master: htable Add RPC command for listing one item

Olle E. Johansson oej at edvina.net
Fri Dec 21 09:41:10 CET 2012


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

Author: Olle E. Johansson <oej at edvina.net>
Committer: Olle E. Johansson <oej at edvina.net>
Date:   Fri Dec 21 09:40:06 2012 +0100

htable Add RPC command for listing one item

Also, add documentation for existing RPC commands.

---

 modules_k/htable/README               |   78 +++++++++++++++++++++++++++---
 modules_k/htable/doc/htable_admin.xml |   86 +++++++++++++++++++++++++++++++++
 modules_k/htable/htable.c             |   66 +++++++++++++++++++++++++
 3 files changed, 223 insertions(+), 7 deletions(-)

diff --git a/modules_k/htable/README b/modules_k/htable/README
index ae0f786..b949b6e 100644
--- a/modules_k/htable/README
+++ b/modules_k/htable/README
@@ -59,9 +59,15 @@ Alex Balashov
               6.2. sht_dump
               6.3. sht_delete
 
-        7. Event routes
+        7. Exported RPC Commands
 
-              7.1. htable:mod-init
+              7.1. htable.get
+              7.2. htable.delete
+              7.3. htable.dump
+
+        8. Event routes
+
+              8.1. htable:mod-init
 
    List of Examples
 
@@ -122,9 +128,15 @@ Chapter 1. Admin Guide
         6.2. sht_dump
         6.3. sht_delete
 
-   7. Event routes
+   7. Exported RPC Commands
+
+        7.1. htable.get
+        7.2. htable.delete
+        7.3. htable.dump
+
+   8. Event routes
 
-        7.1. htable:mod-init
+        8.1. htable:mod-init
 
 1. Overview
 
@@ -533,11 +545,63 @@ sht_rm_value_re("ha=>.*");
    Example (note the quoting when executing it via FIFO):
                 kamctl fifo sht_delete auth '"user at example.org::last_auth"'
 
-7. Event routes
+7. Exported RPC Commands
+
+   7.1. htable.get
+   7.2. htable.delete
+   7.3. htable.dump
+
+7.1.  htable.get
+
+   Lists one value in a hash table
+
+   Name: htable.get
+
+   Parameters:
+     * name : Name of the hash table to dump
+     * key : Key name of the hash table value to dump
+
+   Example:
+...
+# Dump $sht(students=>daniel)
+kamcmd htable.get students daniel
+...
+
+7.2.  htable.delete
+
+   Delete one value in a hash table
+
+   Name: htable.delete
+
+   Parameters:
+     * name : Name of the hash table to delete
+     * key : Key name of the hash table value to delete
+
+   Example:
+...
+# Delete $sht(students=>anna)
+kamcmd htable.get students anna
+...
+
+7.3.  htable.dump
+
+   Lists all the values in a hash table
+
+   Name: dhtable.dump
+
+   Parameters:
+     * name : Name of the hash table to dump
+
+   Example:
+...
+kamcmd htable.dump ipban
+...
+
+8. Event routes
 
-   7.1. htable:mod-init
+   8.1. htable:mod-init
 
-7.1.  htable:mod-init
+8.1.  htable:mod-init
 
    When defined, the module calls event_route[htable:mod-init] after all
    modules have been initialized. A typical use case is to initialise
diff --git a/modules_k/htable/doc/htable_admin.xml b/modules_k/htable/doc/htable_admin.xml
index b9e95ea..dda48cb 100644
--- a/modules_k/htable/doc/htable_admin.xml
+++ b/modules_k/htable/doc/htable_admin.xml
@@ -676,6 +676,92 @@ sht_rm_value_re("ha=>.*");
     </section>
     </section>
 	<section>
+        <title>Exported RPC Commands</title>
+        <section>
+                <title>
+                <function moreinfo="none">htable.get</function>
+                </title>
+                <para>
+		Lists one value in a hash table
+                </para>
+                <para>
+                Name: <emphasis>htable.get</emphasis>
+                </para>
+                <para>Parameters:</para>
+                <itemizedlist>
+                        <listitem><para>name : Name of the hash table to dump</para>
+                        </listitem>
+                        <listitem><para>key : Key name of the hash table value to dump</para>
+                        </listitem>
+
+                </itemizedlist>
+                <para>
+                Example:
+                </para>
+<programlisting  format="linespecific">
+...
+# Dump $sht(students=>daniel)
+kamcmd htable.get students daniel
+...
+</programlisting>
+	</section>
+        <section>
+                <title>
+                <function moreinfo="none">htable.delete</function>
+                </title>
+                <para>
+		Delete one value in a hash table
+                </para>
+                <para>
+                Name: <emphasis>htable.delete</emphasis>
+                </para>
+                <para>Parameters:</para>
+                <itemizedlist>
+                        <listitem><para>name : Name of the hash table to delete</para>
+                        </listitem>
+                        <listitem><para>key : Key name of the hash table value to delete</para>
+                        </listitem>
+
+                </itemizedlist>
+                <para>
+                Example:
+                </para>
+<programlisting  format="linespecific">
+...
+# Delete $sht(students=>anna)
+kamcmd htable.get students anna
+...
+</programlisting>
+	</section>
+        <section>
+                <title>
+                <function moreinfo="none">htable.dump</function>
+                </title>
+                <para>
+		Lists all the values in a hash table
+                </para>
+                <para>
+                Name: <emphasis>dhtable.dump</emphasis>
+                </para>
+                <para>Parameters:</para>
+                <itemizedlist>
+                        <listitem><para>name : Name of the hash table to dump</para>
+                        </listitem>
+
+                </itemizedlist>
+                <para>
+                Example:
+                </para>
+<programlisting  format="linespecific">
+...
+kamcmd htable.dump ipban
+...
+</programlisting>
+	</section>
+
+	</section><!-- RPC commands -->
+
+	<section>
 	<title>Event routes</title>
 	<section>
 		<title>
diff --git a/modules_k/htable/htable.c b/modules_k/htable/htable.c
index 702bda9..c019b74 100644
--- a/modules_k/htable/htable.c
+++ b/modules_k/htable/htable.c
@@ -526,6 +526,10 @@ static const char* htable_delete_doc[2] = {
 	"Delete one key from a hash table.",
 	0
 };
+static const char* htable_get_doc[2] = {
+	"Get one key from a hash table.",
+	0
+};
 
 static void htable_rpc_delete(rpc_t* rpc, void* c) {
 	str htname, keyname;
@@ -544,6 +548,67 @@ static void htable_rpc_delete(rpc_t* rpc, void* c) {
 	ht_del_cell(ht, &keyname);
 }
 
+/*! \brief RPC htable.get command to get one item */
+static void htable_rpc_get(rpc_t* rpc, void* c) {
+	str htname, keyname;
+	ht_t *ht;
+	ht_cell_t *htc;	/*!< One HT cell */
+	void* th;
+	void* ih;
+	void* vh;
+
+	if (rpc->scan(c, "SS", &htname, &keyname) < 2) {
+		rpc->fault(c, 500, "Not enough parameters (htable name and key name)");
+		return;
+	}
+
+	/* Find the htable */
+	ht = ht_get_table(&htname);
+	if (!ht) {
+		rpc->fault(c, 500, "No such htable");
+		return;
+	}
+
+	/* Find the  cell */
+	htc = ht_cell_pkg_copy(ht, &keyname, NULL);
+	if(htc == NULL) {
+		/* Print error message */
+		rpc->fault(c, 500, "Key name doesn't exist in htable.");
+		return;
+	}
+
+	/* add entry node */
+	if (rpc->add(c, "{", &th) < 0) {
+		rpc->fault(c, 500, "Internal error creating rpc");
+		goto error;
+	}
+
+	if(rpc->struct_add(th, "{", "item", &vh)<0) {
+		rpc->fault(c, 500, "Internal error creating rpc");
+		goto error;
+	}
+
+	if(htc->flags&AVP_VAL_STR) {
+		if(rpc->struct_add(vh, "SS", "name",  &htc->name.s, "value", &htc->value.s)<0)
+		{
+			rpc->fault(c, 500, "Internal error adding item");
+			goto error;
+		}
+	} else {
+		if(rpc->struct_add(vh, "Sd", "name",  &htc->name.s, "value", (int)htc->value.n))
+		{
+			rpc->fault(c, 500, "Internal error adding item");
+			goto error;
+		}
+	}
+	
+error:
+	/* Release the allocated memory */
+	ht_cell_pkg_free(htc);
+
+	return;
+}
+
 static void  htable_rpc_dump(rpc_t* rpc, void* c)
 {
 	str htname;
@@ -625,6 +690,7 @@ error:
 rpc_export_t htable_rpc[] = {
 	{"htable.dump", htable_rpc_dump, htable_dump_doc, 0},
 	{"htable.delete", htable_rpc_delete, htable_delete_doc, 0},
+	{"htable.get", htable_rpc_get, htable_get_doc, 0},
 	{0, 0, 0, 0}
 };
 




More information about the sr-dev mailing list