|
@@ -1282,12 +1282,65 @@ static void app_ruby_rpc_reload(rpc_t* rpc, void* ctx)
|
|
|
"new", *_sr_ruby_reload_version);
|
|
|
}
|
|
|
|
|
|
+static const char* app_ruby_rpc_api_list_doc[2] = {
|
|
|
+ "List kemi exports to ruby",
|
|
|
+ 0
|
|
|
+};
|
|
|
+
|
|
|
+static void app_ruby_rpc_api_list(rpc_t* rpc, void* ctx)
|
|
|
+{
|
|
|
+ int i;
|
|
|
+ int n;
|
|
|
+ sr_kemi_t *ket;
|
|
|
+ void* th;
|
|
|
+ void* sh;
|
|
|
+ void* ih;
|
|
|
+
|
|
|
+ if (rpc->add(ctx, "{", &th) < 0) {
|
|
|
+ rpc->fault(ctx, 500, "Internal error root reply");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ n = 0;
|
|
|
+ for(i=0; i<SR_KEMI_RUBY_EXPORT_SIZE; i++) {
|
|
|
+ ket = sr_kemi_ruby_export_get(i);
|
|
|
+ if(ket==NULL) continue;
|
|
|
+ n++;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(rpc->struct_add(th, "d[",
|
|
|
+ "msize", n,
|
|
|
+ "methods", &ih)<0)
|
|
|
+ {
|
|
|
+ rpc->fault(ctx, 500, "Internal error array structure");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ for(i=0; i<SR_KEMI_RUBY_EXPORT_SIZE; i++) {
|
|
|
+ ket = sr_kemi_ruby_export_get(i);
|
|
|
+ if(ket==NULL) continue;
|
|
|
+ if(rpc->struct_add(ih, "{", "func", &sh)<0) {
|
|
|
+ rpc->fault(ctx, 500, "Internal error internal structure");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if(rpc->struct_add(sh, "SSSS",
|
|
|
+ "ret", sr_kemi_param_map_get_name(ket->rtype),
|
|
|
+ "module", &ket->mname,
|
|
|
+ "name", &ket->fname,
|
|
|
+ "params", sr_kemi_param_map_get_params(ket->ptypes))<0) {
|
|
|
+ LM_ERR("failed to add the structure with attributes (%d)\n", i);
|
|
|
+ rpc->fault(ctx, 500, "Internal error creating dest struct");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
*
|
|
|
*/
|
|
|
rpc_export_t app_ruby_rpc_cmds[] = {
|
|
|
{"app_ruby.reload", app_ruby_rpc_reload,
|
|
|
app_ruby_rpc_reload_doc, 0},
|
|
|
+ {"app_ruby.api_list", app_ruby_rpc_api_list,
|
|
|
+ app_ruby_rpc_api_list_doc, 0},
|
|
|
{0, 0, 0, 0}
|
|
|
};
|
|
|
|