unsigned json: 1;
unsigned json_hmp: 1;
+ unsigned wait_greeting: 1;
};
static virClassPtr qemuMonitorClass;
if (len < 0)
return -1;
+ if (len && mon->wait_greeting)
+ mon->wait_greeting = 0;
+
if (len < mon->bufferOffset) {
memmove(mon->buffer, mon->buffer + len, mon->bufferOffset - len);
mon->bufferOffset -= len;
if (mon->lastError.code == VIR_ERR_OK) {
events |= VIR_EVENT_HANDLE_READABLE;
- if (mon->msg && mon->msg->txOffset < mon->msg->txLength)
+ if ((mon->msg && mon->msg->txOffset < mon->msg->txLength) &&
+ !mon->wait_greeting)
events |= VIR_EVENT_HANDLE_WRITABLE;
}
mon->hasSendFD = hasSendFD;
mon->vm = vm;
mon->json = json;
+ if (json)
+ mon->wait_greeting = 1;
mon->cb = cb;
qemuMonitorLock(mon);
.errorNotify = qemuMonitorTestErrorNotify,
};
+#define QEMU_JSON_GREETING "{\"QMP\": {\"version\": {\"qemu\": {\"micro\": 1, \"minor\": 0, \"major\": 1}, \"package\": \" (qemu-kvm-1.0.1)\"}, \"capabilities\": []}}"
+#define QEMU_TEXT_GREETING "QEMU 1.0,1 monitor - type 'help' for more information"
+
qemuMonitorTestPtr qemuMonitorTestNew(bool json, virCapsPtr caps)
{
qemuMonitorTestPtr test;
if (!(test->mon = qemuMonitorOpen(test->vm,
&src,
- true,
+ json ? 1 : 0,
&qemuCallbacks)))
goto error;
qemuMonitorLock(test->mon);
if (!test->client)
goto error;
+ if (qemuMonitorTestAddReponse(test, json ?
+ QEMU_JSON_GREETING :
+ QEMU_TEXT_GREETING) < 0)
+ goto error;
+
if (virNetSocketAddIOCallback(test->client,
- VIR_EVENT_HANDLE_READABLE,
+ VIR_EVENT_HANDLE_WRITABLE,
qemuMonitorTestIO,
test,
NULL) < 0)