Module: sip-router
Branch: master
Commit: 6ff072a307ddf0735ca9c38c1bc0c3ebdbc57a2b
URL:
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=6ff072a…
Author: Olle E. Johansson <oej(a)edvina.net>
Committer: Olle E. Johansson <oej(a)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@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}
};