#define virLibDomainError(code, ...) \
virReportErrorHelper(VIR_FROM_DOM, code, __FILE__, \
__FUNCTION__, __LINE__, __VA_ARGS__)
-#define virLibStreamError(code, ...) \
- virReportErrorHelper(VIR_FROM_STREAMS, code, __FILE__, \
- __FUNCTION__, __LINE__, __VA_ARGS__)
#define virLibNWFilterError(code, ...) \
virReportErrorHelper(VIR_FROM_NWFILTER, code, __FILE__, \
__FUNCTION__, __LINE__, __VA_ARGS__)
virResetLastError();
virCheckDomainReturn(domain, NULL);
- if (!VIR_IS_STREAM(stream)) {
- virLibConnError(VIR_ERR_INVALID_STREAM, __FUNCTION__);
- return NULL;
+ virCheckStreamGoto(stream, error);
+ virCheckReadOnlyGoto(domain->conn->flags, error);
+
+ if (domain->conn != stream->conn) {
+ virReportInvalidArg(stream,
+ _("stream in %s must match connection of domain '%s'"),
+ __FUNCTION__, domain->name);
+ goto error;
}
- virCheckReadOnlyGoto(domain->conn->flags | stream->conn->flags, error);
if (domain->conn->driver->domainScreenshot) {
- char * ret;
+ char *ret;
ret = domain->conn->driver->domainScreenshot(domain, stream,
screen, flags);
virResetLastError();
virCheckStorageVolReturn(vol, -1);
+ virCheckStreamGoto(stream, error);
+ virCheckReadOnlyGoto(vol->conn->flags, error);
- if (!VIR_IS_STREAM(stream)) {
- virLibConnError(VIR_ERR_INVALID_STREAM, __FUNCTION__);
- return -1;
+ if (vol->conn != stream->conn) {
+ virReportInvalidArg(stream,
+ _("stream in %s must match connection of volume '%s'"),
+ __FUNCTION__, vol->name);
+ goto error;
}
- virCheckReadOnlyGoto(vol->conn->flags | stream->conn->flags, error);
-
if (vol->conn->storageDriver &&
vol->conn->storageDriver->storageVolDownload) {
int ret;
virResetLastError();
virCheckStorageVolReturn(vol, -1);
+ virCheckStreamGoto(stream, error);
+ virCheckReadOnlyGoto(vol->conn->flags, error);
- if (!VIR_IS_STREAM(stream)) {
- virLibConnError(VIR_ERR_INVALID_STREAM, __FUNCTION__);
- return -1;
+ if (vol->conn != stream->conn) {
+ virReportInvalidArg(stream,
+ _("stream in %s must match connection of volume '%s'"),
+ __FUNCTION__, vol->name);
+ goto error;
}
- virCheckReadOnlyGoto(vol->conn->flags | stream->conn->flags, error);
-
if (vol->conn->storageDriver &&
vol->conn->storageDriver->storageVolUpload) {
int ret;
virResetLastError();
- if ((!VIR_IS_CONNECTED_STREAM(stream))) {
- virLibConnError(VIR_ERR_INVALID_STREAM, __FUNCTION__);
- virDispatchError(NULL);
- return -1;
- }
+ virCheckStreamReturn(stream, -1);
+
virObjectRef(stream);
return 0;
}
virResetLastError();
- if (!VIR_IS_CONNECTED_STREAM(stream)) {
- virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
- virDispatchError(NULL);
- return -1;
- }
-
+ virCheckStreamReturn(stream, -1);
virCheckNonNullArgGoto(data, error);
if (stream->driver &&
virResetLastError();
- if (!VIR_IS_CONNECTED_STREAM(stream)) {
- virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
- virDispatchError(NULL);
- return -1;
- }
-
+ virCheckStreamReturn(stream, -1);
virCheckNonNullArgGoto(data, error);
if (stream->driver &&
virResetLastError();
- if (!VIR_IS_CONNECTED_STREAM(stream)) {
- virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
- virDispatchError(NULL);
- return -1;
- }
-
+ virCheckStreamReturn(stream, -1);
virCheckNonNullArgGoto(handler, cleanup);
if (stream->flags & VIR_STREAM_NONBLOCK) {
virResetLastError();
- if (!VIR_IS_CONNECTED_STREAM(stream)) {
- virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
- virDispatchError(NULL);
- return -1;
- }
-
+ virCheckStreamReturn(stream, -1);
virCheckNonNullArgGoto(handler, cleanup);
if (stream->flags & VIR_STREAM_NONBLOCK) {
virResetLastError();
- if (!VIR_IS_CONNECTED_STREAM(stream)) {
- virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
- virDispatchError(NULL);
- return -1;
- }
+ virCheckStreamReturn(stream, -1);
if (stream->driver &&
stream->driver->streamEventAddCallback) {
virResetLastError();
- if (!VIR_IS_CONNECTED_STREAM(stream)) {
- virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
- virDispatchError(NULL);
- return -1;
- }
+ virCheckStreamReturn(stream, -1);
if (stream->driver &&
stream->driver->streamEventUpdateCallback) {
virResetLastError();
- if (!VIR_IS_CONNECTED_STREAM(stream)) {
- virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
- virDispatchError(NULL);
- return -1;
- }
+ virCheckStreamReturn(stream, -1);
if (stream->driver &&
stream->driver->streamEventRemoveCallback) {
virResetLastError();
- if (!VIR_IS_CONNECTED_STREAM(stream)) {
- virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
- virDispatchError(NULL);
- return -1;
- }
+ virCheckStreamReturn(stream, -1);
if (stream->driver &&
stream->driver->streamFinish) {
virResetLastError();
- if (!VIR_IS_CONNECTED_STREAM(stream)) {
- virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
- virDispatchError(NULL);
- return -1;
- }
+ virCheckStreamReturn(stream, -1);
if (!stream->driver) {
VIR_DEBUG("aborting unused stream");
virResetLastError();
- if (!VIR_IS_CONNECTED_STREAM(stream)) {
- virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
- virDispatchError(NULL);
- return -1;
- }
+ virCheckStreamReturn(stream, -1);
/* XXX Enforce shutdown before free'ing resources ? */
virCheckDomainReturn(dom, -1);
conn = dom->conn;
+ virCheckStreamGoto(st, error);
virCheckReadOnlyGoto(conn->flags, error);
+ if (conn != st->conn) {
+ virReportInvalidArg(st,
+ _("stream in %s must match connection of domain '%s'"),
+ __FUNCTION__, dom->name);
+ goto error;
+ }
+
if (conn->driver->domainOpenConsole) {
int ret;
ret = conn->driver->domainOpenConsole(dom, dev_name, st, flags);
virCheckDomainReturn(dom, -1);
conn = dom->conn;
+ virCheckStreamGoto(st, error);
virCheckReadOnlyGoto(conn->flags, error);
+ if (conn != st->conn) {
+ virReportInvalidArg(st,
+ _("stream in %s must match connection of domain '%s'"),
+ __FUNCTION__, dom->name);
+ goto error;
+ }
+
if (conn->driver->domainOpenChannel) {
int ret;
ret = conn->driver->domainOpenChannel(dom, name, st, flags);