qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [RFC][PATCH v6 20/23] virtagent: add va.capabilities RPC


From: Michael Roth
Subject: [Qemu-devel] [RFC][PATCH v6 20/23] virtagent: add va.capabilities RPC
Date: Mon, 17 Jan 2011 07:15:14 -0600

Signed-off-by: Michael Roth <address@hidden>
---
 virtagent-server.c |   37 +++++++++++++++++++++++++++++++++++++
 1 files changed, 37 insertions(+), 0 deletions(-)

diff --git a/virtagent-server.c b/virtagent-server.c
index b7e51ed..5961905 100644
--- a/virtagent-server.c
+++ b/virtagent-server.c
@@ -252,6 +252,10 @@ static xmlrpc_value *va_hello(xmlrpc_env *env,
     return result;
 }
 
+static xmlrpc_value *va_capabilities(xmlrpc_env *env,
+                                     xmlrpc_value *params,
+                                     void *user_data);
+
 typedef struct RPCFunction {
     xmlrpc_value *(*func)(xmlrpc_env *env, xmlrpc_value *param, void *unused);
     const char *func_name;
@@ -266,6 +270,8 @@ static RPCFunction guest_functions[] = {
       .func_name = "va.shutdown" },
     { .func = va_ping,
       .func_name = "va.ping" },
+    { .func = va_capabilities,
+      .func_name = "va.capabilities" },
     { NULL, NULL }
 };
 static RPCFunction host_functions[] = {
@@ -273,6 +279,8 @@ static RPCFunction host_functions[] = {
       .func_name = "va.ping" },
     { .func = va_hello,
       .func_name = "va.hello" },
+    { .func = va_capabilities,
+      .func_name = "va.capabilities" },
     { NULL, NULL }
 };
 
@@ -287,6 +295,35 @@ static void va_register_functions(xmlrpc_env *env, 
xmlrpc_registry *registry,
     }
 }
 
+/* va_capabilities(): return server capabilities
+ * rpc return values:
+ *   - version: virtagent version
+ *   - methods: list of supported RPCs
+ */
+static xmlrpc_value *va_capabilities(xmlrpc_env *env,
+                                     xmlrpc_value *params,
+                                     void *user_data)
+{
+    int i;
+    xmlrpc_value *result = NULL, *methods;
+    RPCFunction *func_list = va_server_data->is_host ?
+                             host_functions : guest_functions;
+
+    /* provide a list of supported RPCs. we don't want to rely on
+     * system.methodList since introspection methods won't support
+     * client metadata, which we may eventually come to rely upon
+     */
+    methods = xmlrpc_array_new(env);
+    for (i = 0; func_list[i].func != NULL; ++i) {
+        xmlrpc_array_append_item(env, methods,
+                                 xmlrpc_string_new(env, 
func_list[i].func_name));
+    }
+
+    result = xmlrpc_build_value(env, "{s:s,s:A}", "version", VA_VERSION,
+                                "methods", methods);
+    return result;
+}
+
 int va_server_init(VAServerData *server_data, bool is_host)
 {
     RPCFunction *func_list = is_host ? host_functions : guest_functions;
-- 
1.7.0.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]