This is a special type of stream packet, that is bidirectional
and will contain information on how much bytes are both sides
skipping in the stream.
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
daemon/stream.c | 3 ++-
src/rpc/virnetclient.c | 1 +
src/rpc/virnetprotocol.x | 12 +++++++++++-
src/virnetprotocol-structs | 1 +
4 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/daemon/stream.c b/daemon/stream.c
index 6465463ff..f44c21278 100644
--- a/daemon/stream.c
+++ b/daemon/stream.c
@@ -287,7 +287,8 @@ daemonStreamFilter(virNetServerClientPtr client ATTRIBUTE_UNUSED,
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))
diff --git a/src/rpc/virnetclient.c b/src/rpc/virnetclient.c
index 837a8a707..95cd9a6c7 100644
--- a/src/rpc/virnetclient.c
+++ b/src/rpc/virnetclient.c
@@ -1284,6 +1284,7 @@ virNetClientCallDispatch(virNetClientPtr client)
return virNetClientCallDispatchMessage(client);
case VIR_NET_STREAM: /* Stream protocol */
+ case VIR_NET_STREAM_HOLE: /* Sparse stream protocol*/
return virNetClientCallDispatchStream(client);
default:
diff --git a/src/rpc/virnetprotocol.x b/src/rpc/virnetprotocol.x
index cab047cb0..ee9899059 100644
--- a/src/rpc/virnetprotocol.x
+++ b/src/rpc/virnetprotocol.x
@@ -143,6 +143,14 @@ const VIR_NET_MESSAGE_NUM_FDS_MAX = 32;
* * 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 */
@@ -156,7 +164,9 @@ enum virNetMessageType {
/* 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 {
diff --git a/src/virnetprotocol-structs b/src/virnetprotocol-structs
index aa6e0602a..b36581f86 100644
--- a/src/virnetprotocol-structs
+++ b/src/virnetprotocol-structs
@@ -6,6 +6,7 @@ enum virNetMessageType {
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,
--
2.13.0