'virNWFilterGetUUID',
'virNWFilterGetUUIDString',
'virNWFilterLookupByUUID',
- 'virStreamRecv',
- 'virStreamSend',
'virStoragePoolGetUUID',
'virStoragePoolGetUUIDString',
'virStoragePoolLookupByUUID',
'virConnectDomainEventDeregisterAny', # overridden in virConnect.py
'virSaveLastError', # We have our own python error wrapper
'virFreeError', # Only needed if we use virSaveLastError
+
'virStreamFree', # Overridden in libvirt-override-virStream.py
- 'virStreamRecvAll',
- 'virStreamSendAll',
+ 'virStreamRecvAll', # XXX: Can be written in pure python?
+ 'virStreamSendAll', # XXX: Can be written in pure python?
+ 'virStreamRecv', # overridden in libvirt-override-virStream.py
+ 'virStreamSend', # overridden in libvirt-override-virStream.py
# 'Ref' functions have no use for bindings users.
"virConnectRef",
cbData = {"stream": self, "cb" : cb, "opaque" : opaque}
ret = libvirtmod.virStreamEventAddCallback(self._o, events, cbData)
if ret == -1: raise libvirtError ('virStreamEventAddCallback() failed')
+
+ def recv(self, nbytes):
+ """Write a series of bytes to the stream. This method may
+ block the calling application for an arbitrary amount
+ of time.
+
+ Errors are not guaranteed to be reported synchronously
+ with the call, but may instead be delayed until a
+ subsequent call.
+
+ On success, the received data is returned. On failure, an
+ exception is raised. If the stream is a NONBLOCK stream and
+ the request would block, integer -2 is returned.
+ """
+ ret = libvirtmod.virStreamRecv(self._o, nbytes)
+ if ret == None: raise libvirtError ('virStreamRecv() failed')
+ return ret
+
+ def send(self, data):
+ """Write a series of bytes to the stream. This method may
+ block the calling application for an arbitrary amount
+ of time. Once an application has finished sending data
+ it should call virStreamFinish to wait for successful
+ confirmation from the driver, or detect any error
+
+ This method may not be used if a stream source has been
+ registered
+
+ Errors are not guaranteed to be reported synchronously
+ with the call, but may instead be delayed until a
+ subsequent call.
+ """
+ ret = libvirtmod.virStreamSend(self._o, data, len(data))
+ if ret == -1: raise libvirtError ('virStreamSend() failed')
+ return ret
return py_retval;
}
+static PyObject *
+libvirt_virStreamRecv(PyObject *self ATTRIBUTE_UNUSED,
+ PyObject *args)
+{
+ PyObject *pyobj_stream;
+ virStreamPtr stream;
+ char *buf = NULL;
+ int ret;
+ int nbytes;
+
+ if (!PyArg_ParseTuple(args, (char *) "Oi:virStreamRecv",
+ &pyobj_stream, &nbytes)) {
+ DEBUG("%s failed to parse tuple\n", __FUNCTION__);
+ return VIR_PY_NONE;
+ }
+ stream = PyvirStream_Get(pyobj_stream);
+
+ if ((buf = malloc(nbytes+1 > 0 ? nbytes+1 : 1)) == NULL)
+ return VIR_PY_NONE;
+
+ LIBVIRT_BEGIN_ALLOW_THREADS;
+ ret = virStreamRecv(stream, buf, nbytes);
+ LIBVIRT_END_ALLOW_THREADS;
+
+ buf[ret > -1 ? ret : 0] = '\0';
+ DEBUG("StreamRecv ret=%d strlen=%d\n", ret, (int) strlen(buf));
+
+ if (ret < 0)
+ return libvirt_intWrap(ret);
+ return libvirt_charPtrSizeWrap((char *) buf, (Py_ssize_t) ret);
+}
+
+static PyObject *
+libvirt_virStreamSend(PyObject *self ATTRIBUTE_UNUSED,
+ PyObject *args)
+{
+ PyObject *py_retval;
+ PyObject *pyobj_stream;
+ virStreamPtr stream;
+ char *data;
+ int ret;
+ int nbytes;
+
+ if (!PyArg_ParseTuple(args, (char *) "Ozi:virStreamRecv",
+ &pyobj_stream, &data, &nbytes)) {
+ DEBUG("%s failed to parse tuple\n", __FUNCTION__);
+ return VIR_PY_INT_FAIL;
+ }
+ stream = PyvirStream_Get(pyobj_stream);
+
+ LIBVIRT_BEGIN_ALLOW_THREADS;
+ ret = virStreamSend(stream, data, nbytes);
+ LIBVIRT_END_ALLOW_THREADS;
+
+ DEBUG("StreamSend ret=%d\n", ret);
+
+ py_retval = libvirt_intWrap(ret);
+ return py_retval;
+}
+
/************************************************************************
* *
* The registration stuff *
{(char *) "virConnectDomainEventRegisterAny", libvirt_virConnectDomainEventRegisterAny, METH_VARARGS, NULL},
{(char *) "virConnectDomainEventDeregisterAny", libvirt_virConnectDomainEventDeregisterAny, METH_VARARGS, NULL},
{(char *) "virStreamEventAddCallback", libvirt_virStreamEventAddCallback, METH_VARARGS, NULL},
+ {(char *) "virStreamRecv", libvirt_virStreamRecv, METH_VARARGS, NULL},
+ {(char *) "virStreamSend", libvirt_virStreamSend, METH_VARARGS, NULL},
{(char *) "virDomainGetInfo", libvirt_virDomainGetInfo, METH_VARARGS, NULL},
{(char *) "virDomainGetState", libvirt_virDomainGetState, METH_VARARGS, NULL},
{(char *) "virDomainGetControlInfo", libvirt_virDomainGetControlInfo, METH_VARARGS, NULL},