On 04/02/2015 12:32, Daniel P. Berrange wrote: > So my idea would be that we define a QEMUChannel object and set of APIs to > standardize all interaction with sockets, pipes, RDMA, whatever $channel, > and then convert the QEMU features I've mentioned over to use that. I think > that would be simpler than trying to untangle QEMUFile code from migration > and then extend its features.
Could it be GIOChannel simply? 1) Chardev is already mostly a wrapper around GIOChannel 2) NBD and VNC could be converted to GIOChannel with relative ease 3) migration is more complicated because (unlike everything else) it uses a separate thread and blocking sockets, but you could probably write a GIOChannel-based implementation of QEMUFile. I found a GIOChannel wrapper for gnutls at https://github.com/aldebaran/connman/blob/master/gweb/giognutls.c. It's not the right license for QEMU (GPLv2-only) but it's only 400 lines of code. If necessary I can help with clean-room reverse engineering. Paolo