summaryrefslogtreecommitdiff
path: root/hardinfo2/xmlrpc-server.c
diff options
context:
space:
mode:
authorLeandro A. F. Pereira <leandro@hardinfo.org>2009-04-26 02:36:29 -0300
committerLeandro A. F. Pereira <leandro@hardinfo.org>2009-04-26 02:36:29 -0300
commit54ed1166fcf3b67b90c22ffa1bfefe7e752fe3b3 (patch)
treee567cefdd8628d12ef032f2a0be57d309abf9d1c /hardinfo2/xmlrpc-server.c
parent0289538420139e59e7c96d33c5856dd11a63f743 (diff)
Implement more XML-RPC methods.
Diffstat (limited to 'hardinfo2/xmlrpc-server.c')
-rw-r--r--hardinfo2/xmlrpc-server.c89
1 files changed, 79 insertions, 10 deletions
diff --git a/hardinfo2/xmlrpc-server.c b/hardinfo2/xmlrpc-server.c
index ae045b67..648706b6 100644
--- a/hardinfo2/xmlrpc-server.c
+++ b/hardinfo2/xmlrpc-server.c
@@ -156,7 +156,7 @@ static void method_get_entry_list(SoupMessage * msg, GValueArray * params)
{ G_TYPE_STRING, &module_name }
};
- if (!validate_parameters(msg, params, method_params, G_N_ELEMENTS(params))) {
+ if (!validate_parameters(msg, params, method_params, G_N_ELEMENTS(method_params))) {
return;
}
@@ -204,7 +204,7 @@ static void method_entry_get_field(SoupMessage * msg, GValueArray * params)
{ G_TYPE_STRING, &field_name }
};
- if (!validate_parameters(msg, params, method_params, G_N_ELEMENTS(params))) {
+ if (!validate_parameters(msg, params, method_params, G_N_ELEMENTS(method_params))) {
return;
}
@@ -246,7 +246,7 @@ static void method_entry_get_moreinfo(SoupMessage * msg,
{ G_TYPE_INT, &entry_number },
};
- if (!validate_parameters(msg, params, method_params, G_N_ELEMENTS(params))) {
+ if (!validate_parameters(msg, params, method_params, G_N_ELEMENTS(method_params))) {
return;
}
@@ -288,7 +288,7 @@ static void method_entry_reload(SoupMessage * msg, GValueArray * params)
{ G_TYPE_STRING, &field_name },
};
- if (!validate_parameters(msg, params, method_params, G_N_ELEMENTS(params))) {
+ if (!validate_parameters(msg, params, method_params, G_N_ELEMENTS(method_params))) {
return;
}
@@ -326,7 +326,7 @@ static void method_entry_scan(SoupMessage * msg, GValueArray * params)
{ G_TYPE_INT, &entry_number },
};
- if (!validate_parameters(msg, params, method_params, G_N_ELEMENTS(params))) {
+ if (!validate_parameters(msg, params, method_params, G_N_ELEMENTS(method_params))) {
return;
}
@@ -364,7 +364,7 @@ static void method_entry_function(SoupMessage * msg, GValueArray * params)
{ G_TYPE_INT, &entry_number },
};
- if (!validate_parameters(msg, params, method_params, G_N_ELEMENTS(params))) {
+ if (!validate_parameters(msg, params, method_params, G_N_ELEMENTS(method_params))) {
return;
}
@@ -407,7 +407,7 @@ static void method_entry_get_note(SoupMessage * msg, GValueArray * params)
{ G_TYPE_INT, &entry_number },
};
- if (!validate_parameters(msg, params, method_params, G_N_ELEMENTS(params))) {
+ if (!validate_parameters(msg, params, method_params, G_N_ELEMENTS(method_params))) {
return;
}
@@ -438,18 +438,87 @@ static void method_entry_get_note(SoupMessage * msg, GValueArray * params)
static void method_get_about_info(SoupMessage * msg, GValueArray * params)
{
- soup_xmlrpc_set_response(msg, G_TYPE_BOOLEAN, FALSE);
+ ShellModule *module;
+ GSList *modules;
+ gchar *module_name;
+ gint entry_number;
+ gboolean found = FALSE;
+ GValueArray *out;
+ MethodParameter method_params[] = {
+ { G_TYPE_STRING, &module_name },
+ };
+
+ if (!validate_parameters(msg, params, method_params, G_N_ELEMENTS(method_params))) {
+ return;
+ }
+
+ for (modules = modules_get_list(); modules; modules = modules->next) {
+ module = (ShellModule *) modules->data;
+
+ if (!strncmp(module->name, module_name, strlen(module->name))) {
+ found = TRUE;
+ break;
+ }
+ }
+
+ out = soup_value_array_new();
+
+ if (found) {
+ ModuleAbout *about = module_get_about(module);
+
+ soup_value_array_append(out, G_TYPE_STRING, about->description);
+ soup_value_array_append(out, G_TYPE_STRING, about->author);
+ soup_value_array_append(out, G_TYPE_STRING, about->version);
+ soup_value_array_append(out, G_TYPE_STRING, about->license);
+ }
+
+ soup_xmlrpc_set_response(msg, G_TYPE_VALUE_ARRAY, out);
}
static void method_call_method(SoupMessage * msg, GValueArray * params)
{
- soup_xmlrpc_set_response(msg, G_TYPE_BOOLEAN, FALSE);
+ ShellModule *module;
+ GSList *modules;
+ gchar *method_name, *answer = NULL;
+ gint entry_number;
+ gboolean found = FALSE;
+ MethodParameter method_params[] = {
+ { G_TYPE_STRING, &method_name },
+ };
+
+ if (!validate_parameters(msg, params, method_params, G_N_ELEMENTS(method_params))) {
+ return;
+ }
+
+ if (!(answer = module_call_method(method_name))) {
+ answer = g_strdup("");
+ }
+
+ soup_xmlrpc_set_response(msg, G_TYPE_STRING, answer);
}
static void method_call_method_param(SoupMessage * msg,
GValueArray * params)
{
- soup_xmlrpc_set_response(msg, G_TYPE_BOOLEAN, FALSE);
+ ShellModule *module;
+ GSList *modules;
+ gchar *method_name, *parameter, *answer = NULL;
+ gint entry_number;
+ gboolean found = FALSE;
+ MethodParameter method_params[] = {
+ { G_TYPE_STRING, &method_name },
+ { G_TYPE_STRING, &parameter },
+ };
+
+ if (!validate_parameters(msg, params, method_params, G_N_ELEMENTS(method_params))) {
+ return;
+ }
+
+ if (!(answer = module_call_method_param(method_name, parameter))) {
+ answer = g_strdup("");
+ }
+
+ soup_xmlrpc_set_response(msg, G_TYPE_STRING, answer);
}
static void method_get_api_version(SoupMessage * msg, GValueArray * params)