-
Notifications
You must be signed in to change notification settings - Fork 9
/
kvm.cpp
69 lines (60 loc) · 1.89 KB
/
kvm.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/*
* PROJECT: ReactOS System Regression Testing Utility
* LICENSE: GNU GPLv2 or any later version as published by the Free Software Foundation
* PURPOSE: Support for KVM machines through libvirt
* COPYRIGHT: Copyright 2008-2009 Christoph von Wittich <[email protected]>
* Copyright 2009 Colin Finck <[email protected]>
* Copyright 2012-2013 Pierre Schweitzer <[email protected]>
*/
#include "machine.h"
KVM::KVM()
{
vConn = virConnectOpen("qemu:///session");
}
bool KVM::GetConsole(char* console)
{
xmlDocPtr xml = NULL;
xmlXPathObjectPtr obj = NULL;
xmlXPathContextPtr ctxt = NULL;
char* XmlDoc;
bool RetVal = false;
XmlDoc = virDomainGetXMLDesc(vDom, 0);
if (!XmlDoc)
return false;
xml = xmlReadDoc((const xmlChar *) XmlDoc, "domain.xml", NULL,
XML_PARSE_NOENT | XML_PARSE_NONET |
XML_PARSE_NOWARNING);
free(XmlDoc);
if (!xml)
return false;
ctxt = xmlXPathNewContext(xml);
if (!ctxt)
{
xmlFreeDoc(xml);
return false;
}
obj = xmlXPathEval(BAD_CAST "string(/domain/devices/console/@tty)", ctxt);
if ((obj != NULL) && ((obj->type == XPATH_STRING) &&
(obj->stringval != NULL) && (obj->stringval[0] != 0)))
{
strcpy(console, (char *)obj->stringval);
RetVal = true;
}
if (obj)
xmlXPathFreeObject(obj);
if (!RetVal)
{
obj = xmlXPathEval(BAD_CAST "string(/domain/devices/console/source/@path)", ctxt);
if ((obj != NULL) && ((obj->type == XPATH_STRING) &&
(obj->stringval != NULL) && (obj->stringval[0] != 0)))
{
strcpy(console, (char *)obj->stringval);
RetVal = true;
}
if (obj)
xmlXPathFreeObject(obj);
}
xmlFreeDoc(xml);
xmlXPathFreeContext(ctxt);
return RetVal;
}