[Top][All Lists]
[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
- Re: [Qemu-devel] Re: [RFC][PATCH v6 08/23] virtagent: add va.getfile RPC, (continued)
- [Qemu-devel] [RFC][PATCH v6 14/23] virtagent: add va.ping RPC, Michael Roth, 2011/01/17
- [Qemu-devel] [RFC][PATCH v6 10/23] virtagent: add va.getdmesg RPC, Michael Roth, 2011/01/17
- [Qemu-devel] [RFC][PATCH v6 15/23] virtagent: add agent_ping qmp/hmp commands, Michael Roth, 2011/01/17
- [Qemu-devel] [RFC][PATCH v6 18/23] virtagent: add va.hello RPC, Michael Roth, 2011/01/17
- [Qemu-devel] [RFC][PATCH v6 13/23] virtagent: add agent_shutdown qmp/hmp commands, Michael Roth, 2011/01/17
- [Qemu-devel] [RFC][PATCH v6 16/23] virtagent: add agent_capabilities qmp/hmp commands, Michael Roth, 2011/01/17
- [Qemu-devel] [RFC][PATCH v6 19/23] virtagent: add "hello" notification function for guest agent, Michael Roth, 2011/01/17
- [Qemu-devel] [RFC][PATCH v6 17/23] virtagent: add client capabilities init function, Michael Roth, 2011/01/17
- [Qemu-devel] [RFC][PATCH v6 21/23] virtagent: add virtagent guest daemon, Michael Roth, 2011/01/17
- [Qemu-devel] [RFC][PATCH v6 20/23] virtagent: add va.capabilities RPC,
Michael Roth <=
- [Qemu-devel] [RFC][PATCH v6 23/23] virtagent: various bits to build QEMU with virtagent, Michael Roth, 2011/01/17
- [Qemu-devel] [RFC][PATCH v6 22/23] virtagent: integrate virtagent server/client via chardev, Michael Roth, 2011/01/17
- Re: [Qemu-devel] [RFC][PATCH v6 00/23] virtagent: host/guest RPC communication agent, Gerd Hoffmann, 2011/01/17