ignore_value(VIR_STRDUP_QUIET(srv_dst->name, virNetServerGetName(srv_src)));
}
+static virNetServerClientPtr
+get_nonnull_client(virNetServerPtr srv, admin_nonnull_client clnt)
+{
+ return virNetServerGetClient(srv, clnt.id);
+}
+
static void
make_nonnull_client(admin_nonnull_client *clt_dst,
virNetServerClientPtr clt_src)
virObjectUnref(identity);
return ret;
}
+
+int adminClientClose(virNetServerClientPtr client,
+ unsigned int flags)
+{
+ virCheckFlags(0, -1);
+
+ virNetServerClientClose(client);
+ return 0;
+}
int *nparams,
unsigned int flags);
+int adminClientClose(virNetServerClientPtr client,
+ unsigned int flags);
+
#endif /* __LIBVIRTD_ADMIN_SERVER_H__ */
int *nparams,
unsigned int flags);
+int virAdmClientClose(virAdmClientPtr client, unsigned int flags);
+
# ifdef __cplusplus
}
# endif
admin_typed_param params<ADMIN_CLIENT_INFO_PARAMETERS_MAX>;
};
+struct admin_client_close_args {
+ admin_nonnull_client clnt;
+ unsigned int flags;
+};
+
/* Define the program number, protocol version and procedure numbers here. */
const ADMIN_PROGRAM = 0x06900690;
const ADMIN_PROTOCOL_VERSION = 1;
/**
* @generate: none
*/
- ADMIN_PROC_CLIENT_GET_INFO = 10
+ ADMIN_PROC_CLIENT_GET_INFO = 10,
+
+ /**
+ * @generate: both
+ */
+ ADMIN_PROC_CLIENT_CLOSE = 11
};
admin_typed_param * params_val;
} params;
};
+struct admin_client_close_args {
+ admin_nonnull_client clnt;
+ u_int flags;
+};
enum admin_procedure {
ADMIN_PROC_CONNECT_OPEN = 1,
ADMIN_PROC_CONNECT_CLOSE = 2,
ADMIN_PROC_SERVER_LIST_CLIENTS = 8,
ADMIN_PROC_SERVER_LOOKUP_CLIENT = 9,
ADMIN_PROC_CLIENT_GET_INFO = 10,
+ ADMIN_PROC_CLIENT_CLOSE = 11,
};
virDispatchError(NULL);
return -1;
}
+
+/**
+ * virAdmClientClose:
+ * @client: a valid client object reference
+ * @flags: extra flags; not used yet, so callers should always pass 0
+ *
+ * Close @client's connection to daemon forcefully.
+ *
+ * Returns 0 if the daemon's connection with @client was closed successfully
+ * or -1 in case of an error.
+ */
+int virAdmClientClose(virAdmClientPtr client,
+ unsigned int flags)
+{
+ int ret = -1;
+
+ VIR_DEBUG("client=%p, flags=%x", client, flags);
+ virResetLastError();
+
+ virCheckAdmClientGoto(client, error);
+
+ if ((ret = remoteAdminClientClose(client, flags)) < 0)
+ goto error;
+
+ return ret;
+ error:
+ virDispatchError(NULL);
+ return -1;
+}
#
# admin/admin_protocol.x
+xdr_admin_client_close_args;
xdr_admin_client_get_info_args;
xdr_admin_client_get_info_ret;
xdr_admin_connect_get_lib_version_ret;
virAdmServerSetThreadPoolParameters;
virAdmServerListClients;
virAdmClientGetInfo;
+ virAdmClientClose;
};