@@ -8,7 +8,7 @@
# This work is licensed under the terms of the GNU GPL, version 2. See
# the COPYING file in the top-level directory.
-import socket, json
+import socket, json, binascii
class QMPError(Exception):
pass
@@ -16,6 +16,18 @@ class QMPError(Exception):
class QMPConnectError(QMPError):
pass
+class QMPBuffer:
+ def __init__(self, data):
+ self.data = binascii.a2b_base64(data)
+
+ def __repr__(self):
+ str = ''
+ for i in range(0, len(self.data) - 1):
+ if i > 0:
+ str += ' '
+ str += binascii.b2a_hex(self.data[i])
+ return str
+
class QEMUMonitorProtocol:
def connect(self):
self.sock.connect(self.filename)
@@ -61,10 +73,19 @@ class QEMUMonitorProtocol:
# the Server won't read our input
self.sock.send(json.dumps(cmd) + ' ')
+ def __json_obj_hook(self, dct):
+ if '__class__' in dct:
+ if dct['__class__'] == 'buffer':
+ return QMPBuffer(dct['data'])
+ else:
+ return
+ return dct
+
def __json_read(self):
try:
while True:
- line = json.loads(self.sockfile.readline())
+ line = json.loads(self.sockfile.readline(),
+ object_hook=self.__json_obj_hook)
if not 'event' in line:
return line
except ValueError: