return 0;
}
+
+static char *
+admHello(virNetDaemonPtr dmn,
+ unsigned int flags)
+{
+ char *ret = NULL;
+ virNetServerPtr srv = NULL;
+ size_t nclients;
+
+ virCheckFlags(0, NULL);
+
+ if (!(srv = virNetDaemonGetServer(dmn, 0)))
+ return NULL;
+
+ nclients = virNetServerGetNClients(srv);
+ if (virAsprintf(&ret, "Clients: %zu", nclients) < 0)
+ goto cleanup;
+
+ cleanup:
+ virObjectUnref(srv);
+ return ret;
+}
+
#include "admin_dispatch.h"
int virAdmConnectClose(virAdmConnectPtr conn);
int virAdmConnectRef(virAdmConnectPtr conn);
+char *virAdmHello(virAdmConnectPtr conn, unsigned int flags);
# ifdef __cplusplus
}
+daemon/admin_dispatch.h
daemon/admin_server.c
daemon/libvirtd-config.c
daemon/libvirtd.c
unsigned int flags;
};
+struct admin_hello_args {
+ unsigned int flags;
+};
+
+struct admin_hello_ret {
+ admin_string greeting;
+};
+
+
/* Define the program number, protocol version and procedure numbers here. */
const ADMIN_PROGRAM = 0x06900690;
const ADMIN_PROTOCOL_VERSION = 1;
/**
* @generate: client
*/
- ADMIN_PROC_CONNECT_CLOSE = 2
+ ADMIN_PROC_CONNECT_CLOSE = 2,
+
+ /**
+ * @generate: both
+ */
+ ADMIN_PROC_HELLO = 3
};
struct admin_connect_open_args {
u_int flags;
};
+struct admin_hello_args {
+ u_int flags;
+};
+struct admin_hello_ret {
+ admin_string greeting;
+};
enum admin_procedure {
ADMIN_PROC_CONNECT_OPEN = 1,
ADMIN_PROC_CONNECT_CLOSE = 2,
+ ADMIN_PROC_HELLO = 3,
};
return 0;
}
+
+
+/**
+ * virAdmHello:
+ * @conn: a connection object
+ * @flags: unused, 0 for now
+ *
+ * Testing function.
+ *
+ * Returns the number of connected clients as a string. Yes, as a
+ * string. Because it's just for testing.
+ */
+char *
+virAdmHello(virAdmConnectPtr conn,
+ unsigned int flags)
+{
+ char *ret = NULL;
+
+ virResetLastError();
+
+ ret = remoteAdminHello(conn, flags);
+ if (!ret)
+ virDispatchError(NULL);
+
+ return ret;
+}
virAdmConnectOpen;
virAdmConnectClose;
virAdmConnectRef;
+ virAdmHello;
};