static int adminDispatchConnectGetLoggingFilters(virNetServerPtr server ATTRIBUTE_UNUSED, virNetServerClientPtr client ATTRIBUTE_UNUSED, virNetMessagePtr msg ATTRIBUTE_UNUSED, virNetMessageErrorPtr rerr, admin_connect_get_logging_filters_args *args, admin_connect_get_logging_filters_ret *ret) { char *filters = NULL; int nfilters = 0; if ((nfilters = adminConnectGetLoggingFilters(&filters, args->flags)) < 0) { virNetMessageSaveError(rerr); return -1; } if (nfilters == 0) { ret->filters = NULL; } else { char **ret_filters = NULL; if (VIR_ALLOC(ret_filters) < 0) return -1; *ret_filters = filters; ret->filters = ret_filters; } ret->nfilters = nfilters; return 0; }
/* Functions */ static int adminDispatchConnectOpen(virNetServerPtr server ATTRIBUTE_UNUSED, virNetServerClientPtr client, virNetMessagePtr msg ATTRIBUTE_UNUSED, virNetMessageErrorPtr rerr, struct admin_connect_open_args *args) { unsigned int flags; struct daemonAdmClientPrivate *priv = virNetServerClientGetPrivateData(client); int ret = -1; VIR_DEBUG("priv=%p dmn=%p", priv, priv->dmn); virMutexLock(&priv->lock); flags = args->flags; virCheckFlagsGoto(0, cleanup); ret = 0; cleanup: if (ret < 0) virNetMessageSaveError(rerr); virMutexUnlock(&priv->lock); return ret; }
static int adminDispatchClientGetInfo(virNetServerPtr server ATTRIBUTE_UNUSED, virNetServerClientPtr client, virNetMessagePtr msg ATTRIBUTE_UNUSED, virNetMessageErrorPtr rerr, struct admin_client_get_info_args *args, struct admin_client_get_info_ret *ret) { int rv = -1; virNetServerPtr srv = NULL; virNetServerClientPtr clnt = NULL; virTypedParameterPtr params = NULL; int nparams = 0; struct daemonAdmClientPrivate *priv = virNetServerClientGetPrivateData(client); if (!(srv = virNetDaemonGetServer(priv->dmn, args->clnt.srv.name))) { virReportError(VIR_ERR_NO_SERVER, _("no server with matching name '%s' found"), args->clnt.srv.name); goto cleanup; } if (!(clnt = virNetServerGetClient(srv, args->clnt.id))) { virReportError(VIR_ERR_NO_CLIENT, _("no client with matching id '%llu' found"), (unsigned long long) args->clnt.id); goto cleanup; } if (adminClientGetInfo(clnt, ¶ms, &nparams, args->flags) < 0) goto cleanup; if (nparams > ADMIN_CLIENT_INFO_PARAMETERS_MAX) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Number of client info parameters %d exceeds max " "allowed limit: %d"), nparams, ADMIN_CLIENT_INFO_PARAMETERS_MAX); goto cleanup; } if (virTypedParamsSerialize(params, nparams, (virTypedParameterRemotePtr *) &ret->params.params_val, &ret->params.params_len, VIR_TYPED_PARAM_STRING_OKAY) < 0) goto cleanup; rv = 0; cleanup: if (rv < 0) virNetMessageSaveError(rerr); virTypedParamsFree(params, nparams); virObjectUnref(clnt); virObjectUnref(srv); return rv; }
static int adminDispatchConnectListServers(virNetServerPtr server ATTRIBUTE_UNUSED, virNetServerClientPtr client, virNetMessagePtr msg ATTRIBUTE_UNUSED, virNetMessageErrorPtr rerr ATTRIBUTE_UNUSED, admin_connect_list_servers_args *args, admin_connect_list_servers_ret *ret) { virAdmServerPtr *servers = NULL; int nservers = 0; int rv = -1; size_t i; struct daemonAdmClientPrivate *priv = virNetServerClientGetPrivateData(client); if ((nservers = adminDaemonListServers(priv->dmn, args->need_results ? &servers : NULL, args->flags)) < 0) goto cleanup; if (servers && nservers) { if (VIR_ALLOC_N(ret->servers.servers_val, nservers) < 0) goto cleanup; ret->servers.servers_len = nservers; for (i = 0; i < nservers; i++) make_nonnull_server(ret->servers.servers_val + i, servers[i]); } else { ret->servers.servers_len = 0; ret->servers.servers_val = NULL; } ret->ret = nservers; rv = 0; cleanup: if (rv < 0) virNetMessageSaveError(rerr); if (servers && nservers > 0) for (i = 0; i < nservers; i++) virObjectUnref(servers[i]); VIR_FREE(servers); return rv; }
static int adminDispatchServerGetThreadpoolParameters(virNetServerPtr server ATTRIBUTE_UNUSED, virNetServerClientPtr client, virNetMessagePtr msg ATTRIBUTE_UNUSED, virNetMessageErrorPtr rerr, struct admin_server_get_threadpool_parameters_args *args, struct admin_server_get_threadpool_parameters_ret *ret) { int rv = -1; virNetServerPtr srv = NULL; virTypedParameterPtr params = NULL; int nparams = 0; struct daemonAdmClientPrivate *priv = virNetServerClientGetPrivateData(client); if (!(srv = virNetDaemonGetServer(priv->dmn, args->srv.name))) goto cleanup; if (adminServerGetThreadPoolParameters(srv, ¶ms, &nparams, args->flags) < 0) goto cleanup; if (nparams > ADMIN_SERVER_THREADPOOL_PARAMETERS_MAX) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Number of threadpool parameters %d exceeds max " "allowed limit: %d"), nparams, ADMIN_SERVER_THREADPOOL_PARAMETERS_MAX); goto cleanup; } if (virTypedParamsSerialize(params, nparams, (virTypedParameterRemotePtr *) &ret->params.params_val, &ret->params.params_len, 0) < 0) goto cleanup; rv = 0; cleanup: if (rv < 0) virNetMessageSaveError(rerr); virTypedParamsFree(params, nparams); virObjectUnref(srv); return rv; }
static int adminDispatchServerSetThreadpoolParameters(virNetServerPtr server ATTRIBUTE_UNUSED, virNetServerClientPtr client, virNetMessagePtr msg ATTRIBUTE_UNUSED, virNetMessageErrorPtr rerr, struct admin_server_set_threadpool_parameters_args *args) { int rv = -1; virNetServerPtr srv = NULL; virTypedParameterPtr params = NULL; int nparams = 0; struct daemonAdmClientPrivate *priv = virNetServerClientGetPrivateData(client); if (!(srv = virNetDaemonGetServer(priv->dmn, args->srv.name))) { virReportError(VIR_ERR_NO_SERVER, _("no server with matching name '%s' found"), args->srv.name); goto cleanup; } if (virTypedParamsDeserialize((virTypedParameterRemotePtr) args->params.params_val, args->params.params_len, ADMIN_SERVER_THREADPOOL_PARAMETERS_MAX, ¶ms, &nparams) < 0) goto cleanup; if (adminServerSetThreadPoolParameters(srv, params, nparams, args->flags) < 0) goto cleanup; rv = 0; cleanup: if (rv < 0) virNetMessageSaveError(rerr); virTypedParamsFree(params, nparams); virObjectUnref(srv); return rv; }
static int virNetServerProgramSendError(unsigned program, unsigned version, virNetServerClientPtr client, virNetMessagePtr msg, virNetMessageErrorPtr rerr, int procedure, int type, unsigned int serial) { VIR_DEBUG("prog=%d ver=%d proc=%d type=%d serial=%u msg=%p rerr=%p", program, version, procedure, type, serial, msg, rerr); virNetMessageSaveError(rerr); /* Return header. */ msg->header.prog = program; msg->header.vers = version; msg->header.proc = procedure; msg->header.type = type; msg->header.serial = serial; msg->header.status = VIR_NET_ERROR; if (virNetMessageEncodeHeader(msg) < 0) goto error; if (virNetMessageEncodePayload(msg, (xdrproc_t)xdr_virNetMessageError, rerr) < 0) goto error; xdr_free((xdrproc_t)xdr_virNetMessageError, (void*)rerr); /* Put reply on end of tx queue to send out */ if (virNetServerClientSendMessage(client, msg) < 0) return -1; return 0; error: VIR_WARN("Failed to serialize remote error '%p'", rerr); xdr_free((xdrproc_t)xdr_virNetMessageError, (void*)rerr); return -1; }
static int adminDispatchConnectGetLoggingOutputs(virNetServerPtr server ATTRIBUTE_UNUSED, virNetServerClientPtr client ATTRIBUTE_UNUSED, virNetMessagePtr msg ATTRIBUTE_UNUSED, virNetMessageErrorPtr rerr, admin_connect_get_logging_outputs_args *args, admin_connect_get_logging_outputs_ret *ret) { char *outputs = NULL; int noutputs = 0; if ((noutputs = adminConnectGetLoggingOutputs(&outputs, args->flags) < 0)) { virNetMessageSaveError(rerr); return -1; } VIR_STEAL_PTR(ret->outputs, outputs); ret->noutputs = noutputs; return 0; }