result sample:

first json is guest-sync result, second json is command result

{ "return": 123456}\n{"return": {}}

Signed-off-by: Alexandre Derumier <aderum...@odiso.com>
---
 PVE/QMPClient.pm |   32 +++++++++++++++++++++++++++++++-
 1 file changed, 31 insertions(+), 1 deletion(-)

diff --git a/PVE/QMPClient.pm b/PVE/QMPClient.pm
index 193e53f..d2d4a73 100755
--- a/PVE/QMPClient.pm
+++ b/PVE/QMPClient.pm
@@ -281,7 +281,11 @@ sub queue_execute {
 sub mux_input {
     my ($self, $mux, $fh, $input) = @_;
 
-    return if $$input !~ m/}\r\n$/;
+    if($self->{qga}){
+       return if $$input !~ m/}\n(.+)}\n$/;
+    }else{
+       return if $$input !~ m/}\r\n$/;
+    }
 
     my $raw = $$input;
 
@@ -297,6 +301,32 @@ sub mux_input {
     eval {
        my @jsons = split("\n", $raw);
 
+       if($self->{qga}){
+
+           die "response is not complete" if @jsons != 2 ;
+
+           my $obj = from_json($jsons[0]);
+           my $cmdid = $obj->{return};
+           die "received responsed without command id\n" if !$cmdid;
+
+           my $curcmd = $self->{current}->{$vmid};
+           die "unable to lookup current command for VM $vmid\n" if !$curcmd;
+
+           delete $self->{current}->{$vmid};
+
+           if ($curcmd->{id} ne $cmdid) {
+               die "got wrong command id '$cmdid' (expected $curcmd->{id})\n";
+           }
+
+           $obj = from_json($jsons[1]);
+
+           if (my $callback = $curcmd->{callback}) {
+               &$callback($vmid, $obj);
+           }
+
+           return;
+       }
+
        foreach my $json (@jsons) {
            my $obj = from_json($json);
            next if defined($obj->{QMP}); # skip monitor greeting
-- 
1.7.10.4

_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to