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