There are three virStreamDriver's currently supported:
* virFDStream
* remote driver
* ESX driver
For now, backend virStreamRecvFlags support for only remote driver and
ESX driver is sufficient. Future patches will update virFDStream.
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
src/esx/esx_stream.c | 16 +++++++++++++++-
src/remote/remote_driver.c | 21 +++++++++++++++++----
2 files changed, 32 insertions(+), 5 deletions(-)
diff --git a/src/esx/esx_stream.c b/src/esx/esx_stream.c
index fb9abbca6..b820b38ee 100644
--- a/src/esx/esx_stream.c
+++ b/src/esx/esx_stream.c
@@ -252,12 +252,17 @@ esxStreamSend(virStreamPtr stream, const char *data, size_t nbytes)
}
static int
-esxStreamRecv(virStreamPtr stream, char *data, size_t nbytes)
+esxStreamRecvFlags(virStreamPtr stream,
+ char *data,
+ size_t nbytes,
+ unsigned int flags)
{
int result = -1;
esxStreamPrivate *priv = stream->privateData;
int status;
+ virCheckFlags(0, -1);
+
if (nbytes == 0)
return 0;
@@ -317,6 +322,14 @@ esxStreamRecv(virStreamPtr stream, char *data, size_t nbytes)
return result;
}
+static int
+esxStreamRecv(virStreamPtr stream,
+ char *data,
+ size_t nbytes)
+{
+ return esxStreamRecvFlags(stream, data, nbytes, 0);
+}
+
static void
esxFreeStreamPrivate(esxStreamPrivate **priv)
{
@@ -369,6 +382,7 @@ esxStreamAbort(virStreamPtr stream)
virStreamDriver esxStreamDriver = {
.streamSend = esxStreamSend,
.streamRecv = esxStreamRecv,
+ .streamRecvFlags = esxStreamRecvFlags,
/* FIXME: streamAddCallback missing */
/* FIXME: streamUpdateCallback missing */
/* FIXME: streamRemoveCallback missing */
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
index 77250ea56..e79e796f2 100644
--- a/src/remote/remote_driver.c
+++ b/src/remote/remote_driver.c
@@ -5641,15 +5641,19 @@ remoteStreamSend(virStreamPtr st,
static int
-remoteStreamRecv(virStreamPtr st,
- char *data,
- size_t nbytes)
+remoteStreamRecvFlags(virStreamPtr st,
+ char *data,
+ size_t nbytes,
+ unsigned int flags)
{
- VIR_DEBUG("st=%p data=%p nbytes=%zu", st, data, nbytes);
+ VIR_DEBUG("st=%p data=%p nbytes=%zu flags=%x",
+ st, data, nbytes, flags);
struct private_data *priv = st->conn->privateData;
virNetClientStreamPtr privst = st->privateData;
int rv;
+ virCheckFlags(0, -1);
+
if (virNetClientStreamRaiseError(privst))
return -1;
@@ -5671,6 +5675,14 @@ remoteStreamRecv(virStreamPtr st,
return rv;
}
+static int
+remoteStreamRecv(virStreamPtr st,
+ char *data,
+ size_t nbytes)
+{
+ return remoteStreamRecvFlags(st, data, nbytes, 0);
+}
+
struct remoteStreamCallbackData {
virStreamPtr st;
virStreamEventCallback cb;
@@ -5843,6 +5855,7 @@ remoteStreamAbort(virStreamPtr st)
static virStreamDriver remoteStreamDrv = {
.streamRecv = remoteStreamRecv,
+ .streamRecvFlags = remoteStreamRecvFlags,
.streamSend = remoteStreamSend,
.streamFinish = remoteStreamFinish,
.streamAbort = remoteStreamAbort,
--
2.13.0