bool virNetClientStreamRaiseError(virNetClientStreamPtr st) { virObjectLock(st); if (st->err.code == VIR_ERR_OK) { virObjectUnlock(st); return false; } virRaiseErrorFull(__FILE__, __FUNCTION__, __LINE__, st->err.domain, st->err.code, st->err.level, st->err.str1, st->err.str2, st->err.str3, st->err.int1, st->err.int2, "%s", st->err.message ? st->err.message : _("Unknown error")); virObjectUnlock(st); return true; }
static int virNetClientProgramDispatchError(virNetClientProgramPtr prog ATTRIBUTE_UNUSED, virNetMessagePtr msg) { virNetMessageError err; int ret = -1; memset(&err, 0, sizeof(err)); if (virNetMessageDecodePayload(msg, (xdrproc_t)xdr_virNetMessageError, &err) < 0) goto cleanup; /* Interop for virErrorNumber glitch in 0.8.0, if server is * 0.7.1 through 0.7.7; see comments in virterror.h. */ switch (err.code) { case VIR_WAR_NO_NWFILTER: /* no way to tell old VIR_WAR_NO_SECRET apart from * VIR_WAR_NO_NWFILTER, but both are very similar * warnings, so ignore the difference */ break; case VIR_ERR_INVALID_NWFILTER: case VIR_ERR_NO_NWFILTER: case VIR_ERR_BUILD_FIREWALL: /* server was trying to pass VIR_ERR_INVALID_SECRET, * VIR_ERR_NO_SECRET, or VIR_ERR_CONFIG_UNSUPPORTED */ if (err.domain != VIR_FROM_NWFILTER) err.code += 4; break; case VIR_WAR_NO_SECRET: if (err.domain == VIR_FROM_QEMU) err.code = VIR_ERR_OPERATION_TIMEOUT; break; case VIR_ERR_INVALID_SECRET: if (err.domain == VIR_FROM_XEN) err.code = VIR_ERR_MIGRATE_PERSIST_FAILED; break; default: /* Nothing to alter. */ break; } if ((err.domain == VIR_FROM_REMOTE || err.domain == VIR_FROM_RPC) && err.code == VIR_ERR_RPC && err.level == VIR_ERR_ERROR && err.message && STRPREFIX(*err.message, "unknown procedure")) { virRaiseErrorFull(__FILE__, __FUNCTION__, __LINE__, err.domain, VIR_ERR_NO_SUPPORT, err.level, err.str1 ? *err.str1 : NULL, err.str2 ? *err.str2 : NULL, err.str3 ? *err.str3 : NULL, err.int1, err.int2, "%s", *err.message); } else { virRaiseErrorFull(__FILE__, __FUNCTION__, __LINE__, err.domain, err.code, err.level, err.str1 ? *err.str1 : NULL, err.str2 ? *err.str2 : NULL, err.str3 ? *err.str3 : NULL, err.int1, err.int2, "%s", err.message ? *err.message : _("Unknown error")); } ret = 0; cleanup: xdr_free((xdrproc_t)xdr_virNetMessageError, (void*)&err); return ret; }