virMutexLock(&stream->priv->lock);
- if (msg->header.type != VIR_NET_STREAM)
+ if (msg->header.type != VIR_NET_STREAM &&
+ msg->header.type != VIR_NET_STREAM_HOLE)
goto cleanup;
if (!virNetServerProgramMatches(stream->prog, msg))
return virNetClientCallDispatchMessage(client);
case VIR_NET_STREAM: /* Stream protocol */
+ case VIR_NET_STREAM_HOLE: /* Sparse stream protocol*/
return virNetClientCallDispatchStream(client);
default:
* * status == VIR_NET_ERROR
* remote_error Error information
*
+ * - type == VIR_NET_STREAM_HOLE
+ * * status == VIR_NET_CONTINUE
+ * byte[] hole data
+ * * status == VIR_NET_ERROR
+ * remote_error error information
+ * * status == VIR_NET_OK
+ * <empty>
+ *
*/
enum virNetMessageType {
/* client -> server. args from a method call */
/* client -> server. args from a method call, with passed FDs */
VIR_NET_CALL_WITH_FDS = 4,
/* server -> client. reply/error from a method call, with passed FDs */
- VIR_NET_REPLY_WITH_FDS = 5
+ VIR_NET_REPLY_WITH_FDS = 5,
+ /* either direction, stream hole data packet */
+ VIR_NET_STREAM_HOLE = 6
};
enum virNetMessageStatus {
VIR_NET_STREAM = 3,
VIR_NET_CALL_WITH_FDS = 4,
VIR_NET_REPLY_WITH_FDS = 5,
+ VIR_NET_STREAM_HOLE = 6,
};
enum virNetMessageStatus {
VIR_NET_OK = 0,