Module: sip-router Branch: master Commit: 83eb9b7d7a9b4e1e2bf35d4e2b00573c176c8290 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=83eb9b7d...
Author: Elena-Ramona Modroiu ramona@asipto.com Committer: Elena-Ramona Modroiu ramona@asipto.com Date: Mon Jun 3 11:05:58 2013 +0200
htable: added rpc commands for setting items in a hash table
- htable.sets - set to a string value - htable.seti - set to an integer value
---
modules/htable/htable.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 72 insertions(+), 0 deletions(-)
diff --git a/modules/htable/htable.c b/modules/htable/htable.c index e740d71..68a7a5b 100644 --- a/modules/htable/htable.c +++ b/modules/htable/htable.c @@ -530,6 +530,14 @@ static const char* htable_get_doc[2] = { "Get one key from a hash table.", 0 }; +static const char* htable_sets_doc[2] = { + "Set one key in a hash table to a string value.", + 0 +}; +static const char* htable_seti_doc[2] = { + "Set one key in a hash table to an integer value.", + 0 +}; static const char* htable_list_doc[2] = { "List all htables.", 0 @@ -616,6 +624,67 @@ error: return; }
+/*! \brief RPC htable.sets command to set one item to string value */ +static void htable_rpc_sets(rpc_t* rpc, void* c) { + str htname, keyname; + int_str keyvalue; + ht_t *ht; + + if (rpc->scan(c, "SS.S", &htname, &keyname, &keyvalue.s) < 3) { + rpc->fault(c, 500, + "Not enough parameters (htable name, key name and value)"); + return; + } + + /* Find the htable */ + ht = ht_get_table(&htname); + if (!ht) { + rpc->fault(c, 500, "No such htable"); + return; + } + + if(ht_set_cell(ht, &keyname, AVP_VAL_STR, &keyvalue, 1)!=0) + { + LM_ERR("cannot set $ht(%.*s=>%.*s)\n", htname.len, htname.s, + keyname.len, keyname.s); + rpc->fault(c, 500, "Failed to set the item"); + return; + } + + return; +} + +/*! \brief RPC htable.seti command to set one item to integer value */ +static void htable_rpc_seti(rpc_t* rpc, void* c) { + str htname, keyname; + int_str keyvalue; + ht_t *ht; + + if (rpc->scan(c, "SS.d", &htname, &keyname, &keyvalue.n) < 3) { + rpc->fault(c, 500, + "Not enough parameters (htable name, key name and value)"); + return; + } + + /* Find the htable */ + ht = ht_get_table(&htname); + if (!ht) { + rpc->fault(c, 500, "No such htable"); + return; + } + + if(ht_set_cell(ht, &keyname, 0, &keyvalue, 1)!=0) + { + LM_ERR("cannot set $ht(%.*s=>%.*s)\n", htname.len, htname.s, + keyname.len, keyname.s); + rpc->fault(c, 500, "Failed to set the item"); + return; + } + + return; +} + +/*! \brief RPC htable.dump command to print content of a hash table */ static void htable_rpc_dump(rpc_t* rpc, void* c) { str htname; @@ -741,6 +810,7 @@ error: return; }
+/*! \brief RPC htable.reload command to reload content of a hash table */ static void htable_rpc_reload(rpc_t* rpc, void* c) { str htname; @@ -822,6 +892,8 @@ 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}, + {"htable.sets", htable_rpc_sets, htable_sets_doc, 0}, + {"htable.seti", htable_rpc_seti, htable_seti_doc, 0}, {"htable.listTables", htable_rpc_list, htable_list_doc, 0}, {"htable.reload", htable_rpc_reload, htable_reload_doc, 0}, {0, 0, 0, 0}