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 <mpriv...@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 624a626..6899c18 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_SKIP)
         goto cleanup;
 
     if (!virNetServerProgramMatches(stream->prog, msg))
diff --git a/src/rpc/virnetclient.c b/src/rpc/virnetclient.c
index c959747..6cff3c4 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_SKIP: /* Stream skip protocol */
         return virNetClientCallDispatchStream(client);
 
     default:
diff --git a/src/rpc/virnetprotocol.x b/src/rpc/virnetprotocol.x
index 3623588..3530694 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_SKIP
+ *     * status == VIR_NET_CONTINUE
+ *          byte[]  skip 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 skip data packet */
+    VIR_NET_STREAM_SKIP = 6
 };
 
 enum virNetMessageStatus {
diff --git a/src/virnetprotocol-structs b/src/virnetprotocol-structs
index a8cc603..c31683f 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_SKIP = 6,
 };
 enum virNetMessageStatus {
         VIR_NET_OK = 0,
-- 
2.10.2

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to