This struct is to be passed to enumerate-and-pull wsman request (to run
"Select" queries) and provides the hypervWmiClassInfoListPtr instance
from which we can extract the version specific info using the new
hypervGetWmiClassInfo function (currently unused)
---
src/hyperv/hyperv_wmi.c | 35 +++++++++++++++++++++++++++++++++++
src/hyperv/hyperv_wmi.h | 8 ++++++++
2 files changed, 43 insertions(+)
diff --git a/src/hyperv/hyperv_wmi.c b/src/hyperv/hyperv_wmi.c
index 309edac..42ce507 100644
--- a/src/hyperv/hyperv_wmi.c
+++ b/src/hyperv/hyperv_wmi.c
@@ -44,6 +44,41 @@
#define VIR_FROM_THIS VIR_FROM_HYPERV
+static int
+hypervGetWmiClassInfo(hypervPrivate *priv, hypervWmiClassInfoListPtr list,
+ hypervWmiClassInfoPtr *info)
+{
+ const char *version = "v2";
+ size_t i;
+
+ if (list->count == 0) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("The WMI class info list is empty"));
+ return -1;
+ }
+
+ if (list->count == 1) {
+ *info = list->objs[0];
+ return 0;
+ }
+
+ if (priv->wmiVersion == HYPERV_WMI_VERSION_V1)
+ version = "v1";
+
+ for (i = 0; i < list->count; i++) {
+ if (STRCASEEQ(list->objs[i]->version, version)) {
+ *info = list->objs[i];
+ return 0;
+ }
+ }
+
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("Could not match WMI class info for version %s"),
+ version);
+
+ return -1;
+}
+
int
hypervVerifyResponse(WsManClient *client, WsXmlDocH response,
const char *detail)
diff --git a/src/hyperv/hyperv_wmi.h b/src/hyperv/hyperv_wmi.h
index 5fc36e8..12b94af 100644
--- a/src/hyperv/hyperv_wmi.h
+++ b/src/hyperv/hyperv_wmi.h
@@ -30,6 +30,7 @@
# include "openwsman.h"
+# define HYPERV_WQL_QUERY_INITIALIZER {NULL, NULL}
typedef struct _hypervObject hypervObject;
@@ -61,6 +62,13 @@ struct _hypervObjectUnified {
hypervObjectUnified *next;
};
+typedef struct _hypervWqlQuery hypervWqlQuery;
+typedef hypervWqlQuery *hypervWqlQueryPtr;
+struct _hypervWqlQuery {
+ const char *query;
+ hypervWmiClassInfoListPtr info;
+};
+
struct _hypervObject {
XmlSerializerInfo *serializerInfo;
XML_TYPE_PTR data;
--
2.9.3