Non-monitor version of agent_capabilities monitor function. This is
called by the local RPC server when it gets a "hello" from the guest
agent to re-negotiate guest agent capabilities.
Signed-off-by: Michael Roth<address@hidden>
---
virtagent.c | 34 ++++++++++++++++++++++++++++++++++
virtagent.h | 1 +
2 files changed, 35 insertions(+), 0 deletions(-)
diff --git a/virtagent.c b/virtagent.c
index e0f7f99..4ec1b42 100644
--- a/virtagent.c
+++ b/virtagent.c
@@ -694,3 +694,37 @@ int do_agent_capabilities(Monitor *mon, const QDict
*mon_params,
return 0;
}
+
+/* non-HMP/QMP RPC client functions */
+
+int va_client_init_capabilities(void)
+{
+ xmlrpc_env env;
+ xmlrpc_value *params;
+ VARPCData *rpc_data;
+ int ret;
+
+ xmlrpc_env_init(&env);
+
+ params = xmlrpc_build_value(&env, "()");
+ if (rpc_has_error(&env)) {
+ return -1;
+ }
+
+ rpc_data = qemu_mallocz(sizeof(VARPCData));
+ rpc_data->cb = do_agent_capabilities_cb;
+ rpc_data->mon_cb = NULL;
+ rpc_data->mon_data = NULL;
+
+ ret = rpc_execute(&env, "system.listMethods", params, rpc_data);
+ if (ret == -EREMOTE) {
+ LOG("RPC Failed (%i): %s\n", env.fault_code,
+ env.fault_string);
+ return -1;
+ } else if (ret == -1) {
+ LOG("RPC communication error\n");
+ return -1;
+ }