]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Simplify error reporting rules
authorDaniel P. Berrange <berrange@redhat.com>
Thu, 4 Dec 2008 22:12:53 +0000 (22:12 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Thu, 4 Dec 2008 22:12:53 +0000 (22:12 +0000)
ChangeLog
qemud/qemud.c
qemud/qemud.h
qemud/remote.c
qemud/remote_dispatch_prototypes.h
qemud/remote_generate_stubs.pl

index f90b4671223ed167f8a1566c99081edb353c06c1..a9452b3460556f0e94815df39a8a6103f77b0bbd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Thu Dec  4 22:12:41 GMT 2008 Daniel P. Berrange <berrange@redhat.com>
+
+       * qemud/qemud.c, qemud/qemud.h, qemud/remote.c: Make all
+       error reporting the responsibility of the RPC handler
+       methods
+       * qemud/remote_generate_stubs.pl: Add remote_error *
+       arg to all RPC handlers
+       * qemud/remote_dispatch_prototypes.h: Re-generated
+
 Thu Dec  4 22:09:41 GMT 2008 Daniel P. Berrange <berrange@redhat.com>
 
        * qemud/qemud.h, qemud/qemud.c: Change client linked list into
index 117fadda4ee8a95bfe0d404823c3a1511bddafc0..bd35756f3001bcac3059b49fa4d7976fb6c6a841 100644 (file)
@@ -1403,13 +1403,12 @@ static int qemudClientRead(struct qemud_server *server,
 
 
 static void qemudDispatchClientRead(struct qemud_server *server, struct qemud_client *client) {
-
+    unsigned int len;
     /*qemudDebug ("qemudDispatchClientRead: mode = %d", client->mode);*/
 
     switch (client->mode) {
     case QEMUD_MODE_RX_HEADER: {
         XDR x;
-        unsigned int len;
 
         if (qemudClientRead(server, client) < 0)
             return; /* Error, or blocking */
@@ -1460,7 +1459,14 @@ static void qemudDispatchClientRead(struct qemud_server *server, struct qemud_cl
         if (client->bufferOffset < client->bufferLength)
             return; /* Not read enough */
 
-        remoteDispatchClientRequest (server, client);
+        if ((len = remoteDispatchClientRequest (server, client)) == 0)
+            qemudDispatchClientFailure(server, client);
+
+        /* Set up the output buffer. */
+        client->mode = QEMUD_MODE_TX_PACKET;
+        client->bufferLength = len;
+        client->bufferOffset = 0;
+
         if (qemudRegisterClientEvent(server, client, 1) < 0)
             qemudDispatchClientFailure(server, client);
 
index 1639ae06fa021fe82100145d29fc5380ca9b8c9f..f889c72a02cfb5f6ae1e3cce458fa5de652f9765 100644 (file)
@@ -177,8 +177,9 @@ void qemudLog(int priority, const char *fmt, ...)
 #define qemudDebug(fmt, ...) do {} while(0)
 #endif
 
-void remoteDispatchClientRequest (struct qemud_server *server,
-                                  struct qemud_client *client);
+unsigned int
+remoteDispatchClientRequest (struct qemud_server *server,
+                             struct qemud_client *client);
 
 void qemudDispatchClientWrite(struct qemud_server *server,
                              struct qemud_client *client);
index caf0068ff11a634cd03ad3e915d165c09f8d898d..8ccda11abfb6c1876f29ee39937bdc6c51a35147 100644 (file)
 
 #define REMOTE_DEBUG(fmt,...) qemudDebug("REMOTE: " fmt, __VA_ARGS__)
 
-static void remoteDispatchError (struct qemud_client *client,
-                                 remote_message_header *req,
-                                 const char *fmt, ...)
-    ATTRIBUTE_FORMAT(printf, 3, 4);
+static void remoteDispatchFormatError (remote_error *rerr,
+                                       const char *fmt, ...)
+    ATTRIBUTE_FORMAT(printf, 2, 3);
 static virDomainPtr get_nonnull_domain (virConnectPtr conn, remote_nonnull_domain domain);
 static virNetworkPtr get_nonnull_network (virConnectPtr conn, remote_nonnull_network network);
 static virStoragePoolPtr get_nonnull_storage_pool (virConnectPtr conn, remote_nonnull_storage_pool pool);
@@ -82,7 +81,7 @@ typedef union {
 
 typedef int (*dispatch_fn) (struct qemud_server *server,
                             struct qemud_client *client,
-                            remote_message_header *req,
+                            remote_error *err,
                             dispatch_args *args,
                             dispatch_ret *ret);
 
@@ -103,59 +102,151 @@ remoteDispatchDomainEventSend (struct qemud_client *client,
                                int event,
                                int detail);
 
+
+/* Convert a libvirt  virError object into wire format */
+static void
+remoteDispatchCopyError (remote_error *rerr,
+                         virErrorPtr verr)
+{
+    rerr->code = verr->code;
+    rerr->domain = verr->domain;
+    rerr->message = verr->message ? malloc(sizeof(char*)) : NULL;
+    if (rerr->message) *rerr->message = strdup(verr->message);
+    rerr->level = verr->level;
+    rerr->str1 = verr->str1 ? malloc(sizeof(char*)) : NULL;
+    if (rerr->str1) *rerr->str1 = strdup(verr->str1);
+    rerr->str2 = verr->str2 ? malloc(sizeof(char*)) : NULL;
+    if (rerr->str2) *rerr->str2 = strdup(verr->str2);
+    rerr->str3 = verr->str3 ? malloc(sizeof(char*)) : NULL;
+    if (rerr->str3) *rerr->str3 = strdup(verr->str3);
+    rerr->int1 = verr->int1;
+    rerr->int2 = verr->int2;
+}
+
+
+/* A set of helpers for sending back errors to client
+   in various ways .... */
+
+static void
+remoteDispatchStringError (remote_error *rerr,
+                           int code, const char *msg)
+{
+    virError verr;
+
+    memset(&verr, 0, sizeof verr);
+
+    /* Construct the dummy libvirt virError. */
+    verr.code = code;
+    verr.domain = VIR_FROM_REMOTE;
+    verr.message = (char *)msg;
+    verr.level = VIR_ERR_ERROR;
+    verr.str1 = (char *)msg;
+
+    remoteDispatchCopyError(rerr, &verr);
+}
+
+static void
+remoteDispatchAuthError (remote_error *rerr)
+{
+    remoteDispatchStringError (rerr, VIR_ERR_AUTH_FAILED, "authentication failed");
+}
+
+static void
+remoteDispatchFormatError (remote_error *rerr,
+                           const char *fmt, ...)
+{
+    va_list args;
+    char msgbuf[1024];
+    char *msg = msgbuf;
+
+    va_start (args, fmt);
+    vsnprintf (msgbuf, sizeof msgbuf, fmt, args);
+    va_end (args);
+
+    remoteDispatchStringError (rerr, VIR_ERR_RPC, msg);
+}
+
+static void
+remoteDispatchGenericError (remote_error *rerr)
+{
+    remoteDispatchStringError(rerr,
+                              VIR_ERR_INTERNAL_ERROR,
+                              "library function returned error but did not set virterror");
+}
+
+static void
+remoteDispatchOOMError (remote_error *rerr)
+{
+    remoteDispatchStringError(rerr,
+                              VIR_ERR_NO_MEMORY,
+                              NULL);
+}
+
+static void
+remoteDispatchConnError (remote_error *rerr,
+                         virConnectPtr conn)
+{
+    virErrorPtr verr;
+
+    if (conn)
+        verr = virConnGetLastError(conn);
+    else
+        verr = virGetLastError();
+    if (verr)
+        remoteDispatchCopyError(rerr, verr);
+    else
+        remoteDispatchGenericError(rerr);
+}
+
+
 /* This function gets called from qemud when it detects an incoming
  * remote protocol message.  At this point, client->buffer contains
  * the full call message (including length word which we skip).
  */
-void
+unsigned int
 remoteDispatchClientRequest (struct qemud_server *server,
                              struct qemud_client *client)
 {
     XDR xdr;
     remote_message_header req, rep;
+    remote_error rerr;
     dispatch_args args;
     dispatch_ret ret;
     const dispatch_data *data = NULL;
-    int rv, len;
+    int rv = -1, len;
 
     memset(&args, 0, sizeof args);
     memset(&ret, 0, sizeof ret);
+    memset(&rerr, 0, sizeof rerr);
 
     /* Parse the header. */
     xdrmem_create (&xdr, client->buffer, client->bufferLength, XDR_DECODE);
 
-    if (!xdr_remote_message_header (&xdr, &req)) {
-        remoteDispatchError (client, NULL, "%s", _("xdr_remote_message_header"));
-        xdr_destroy (&xdr);
-        return;
-    }
+    if (!xdr_remote_message_header (&xdr, &req))
+        goto fatal_error;
 
     /* Check version, etc. */
     if (req.prog != REMOTE_PROGRAM) {
-        remoteDispatchError (client, &req,
-                             _("program mismatch (actual %x, expected %x)"),
-                             req.prog, REMOTE_PROGRAM);
-        xdr_destroy (&xdr);
-        return;
+        remoteDispatchFormatError (&rerr,
+                                   _("program mismatch (actual %x, expected %x)"),
+                                   req.prog, REMOTE_PROGRAM);
+        goto rpc_error;
     }
     if (req.vers != REMOTE_PROTOCOL_VERSION) {
-        remoteDispatchError (client, &req,
-                             _("version mismatch (actual %x, expected %x)"),
-                             req.vers, REMOTE_PROTOCOL_VERSION);
-        xdr_destroy (&xdr);
-        return;
+        remoteDispatchFormatError (&rerr,
+                                   _("version mismatch (actual %x, expected %x)"),
+                                   req.vers, REMOTE_PROTOCOL_VERSION);
+        goto rpc_error;
     }
     if (req.direction != REMOTE_CALL) {
-        remoteDispatchError (client, &req, _("direction (%d) != REMOTE_CALL"),
-                             (int) req.direction);
-        xdr_destroy (&xdr);
-        return;
+        remoteDispatchFormatError (&rerr, _("direction (%d) != REMOTE_CALL"),
+                                   (int) req.direction);
+        goto rpc_error;
     }
     if (req.status != REMOTE_OK) {
-        remoteDispatchError (client, &req, _("status (%d) != REMOTE_OK"),
-                             (int) req.status);
-        xdr_destroy (&xdr);
-        return;
+        remoteDispatchFormatError (&rerr, _("status (%d) != REMOTE_OK"),
+                                   (int) req.status);
+        goto rpc_error;
     }
 
     /* If client is marked as needing auth, don't allow any RPC ops,
@@ -168,47 +259,35 @@ remoteDispatchClientRequest (struct qemud_server *server,
             req.proc != REMOTE_PROC_AUTH_SASL_STEP &&
             req.proc != REMOTE_PROC_AUTH_POLKIT
             ) {
-            remoteDispatchError (client, &req, "%s", _("authentication required"));
-            xdr_destroy (&xdr);
-            return;
+            /* Explicitly *NOT* calling  remoteDispatchAuthError() because
+               we want back-compatability with libvirt clients which don't
+               support the VIR_ERR_AUTH_FAILED error code */
+            remoteDispatchFormatError (&rerr, "%s", _("authentication required"));
+            goto rpc_error;
         }
     }
 
     if (req.proc >= ARRAY_CARDINALITY(dispatch_table) ||
         dispatch_table[req.proc].fn == NULL) {
-        remoteDispatchError (client, &req, _("unknown procedure: %d"),
-                             req.proc);
-        xdr_destroy (&xdr);
-        return;
+        remoteDispatchFormatError (&rerr, _("unknown procedure: %d"),
+                                   req.proc);
+        goto rpc_error;
     }
 
     data = &(dispatch_table[req.proc]);
 
     /* De-serialize args off the wire */
     if (!((data->args_filter)(&xdr, &args))) {
-        remoteDispatchError (client, &req, "%s", _("parse args failed"));
-        xdr_destroy (&xdr);
+        remoteDispatchFormatError (&rerr, "%s", _("parse args failed"));
+        goto rpc_error;
     }
 
-    xdr_destroy (&xdr);
-
     /* Call function. */
-    rv = (data->fn)(server, client, &req, &args, &ret);
+    rv = (data->fn)(server, client, &rerr, &args, &ret);
     xdr_free (data->args_filter, (char*)&args);
 
-    /* Dispatch function must return -2, -1 or 0.  Anything else is
-     * an internal error.
-     */
-    if (rv < -2 || rv > 0) {
-        remoteDispatchError (client, &req,
-                             _("internal error - dispatch function returned invalid code %d"), rv);
-        return;
-    }
-
-    /* Dispatch error?  If so then the function has already set up the
-     * return buffer, so just return immediately.
-     */
-    if (rv == -2) return;
+rpc_error:
+    xdr_destroy (&xdr);
 
     /* Return header. */
     rep.prog = req.prog;
@@ -216,217 +295,51 @@ remoteDispatchClientRequest (struct qemud_server *server,
     rep.proc = req.proc;
     rep.direction = REMOTE_REPLY;
     rep.serial = req.serial;
-    rep.status = rv == 0 ? REMOTE_OK : REMOTE_ERROR;
+    rep.status = rv < 0 ? REMOTE_ERROR : REMOTE_OK;
 
     /* Serialise the return header. */
     xdrmem_create (&xdr, client->buffer, sizeof client->buffer, XDR_ENCODE);
 
     len = 0; /* We'll come back and write this later. */
     if (!xdr_int (&xdr, &len)) {
-        remoteDispatchError (client, &req, "%s", _("dummy length"));
-        xdr_destroy (&xdr);
         if (rv == 0) xdr_free (data->ret_filter, (char*)&ret);
-        return;
+        goto fatal_error;
     }
 
     if (!xdr_remote_message_header (&xdr, &rep)) {
-        remoteDispatchError (client, &req, "%s", _("serialise reply header"));
-        xdr_destroy (&xdr);
         if (rv == 0) xdr_free (data->ret_filter, (char*)&ret);
-        return;
+        goto fatal_error;
     }
 
     /* If OK, serialise return structure, if error serialise error. */
-    if (rv == 0) {
-        if (!((data->ret_filter) (&xdr, &ret))) {
-            remoteDispatchError (client, &req, "%s", _("serialise return struct"));
-            xdr_destroy (&xdr);
-            return;
-        }
+    if (rv >= 0) {
+        if (!((data->ret_filter) (&xdr, &ret)))
+            goto fatal_error;
         xdr_free (data->ret_filter, (char*)&ret);
     } else /* error */ {
-        virErrorPtr verr;
-        remote_error error;
-        remote_nonnull_domain dom;
-        remote_nonnull_network net;
-
-        verr = client->conn
-            ? virConnGetLastError (client->conn)
-            : virGetLastError ();
-
-        if (verr) {
-            error.code = verr->code;
-            error.domain = verr->domain;
-            error.message = verr->message ? &verr->message : NULL;
-            error.level = verr->level;
-            if (verr->dom) {
-                dom.name = verr->dom->name;
-                memcpy (dom.uuid, verr->dom->uuid, VIR_UUID_BUFLEN);
-                dom.id = verr->dom->id;
-            }
-            error.dom = verr->dom ? &dom : NULL;
-            error.str1 = verr->str1 ? &verr->str1 : NULL;
-            error.str2 = verr->str2 ? &verr->str2 : NULL;
-            error.str3 = verr->str3 ? &verr->str3 : NULL;
-            error.int1 = verr->int1;
-            error.int2 = verr->int2;
-            if (verr->net) {
-                net.name = verr->net->name;
-                memcpy (net.uuid, verr->net->uuid, VIR_UUID_BUFLEN);
-            }
-            error.net = verr->net ? &net : NULL;
-        } else {
-            /* Error was NULL so synthesize an error. */
-            char msgbuf[] = "remoteDispatchClientRequest: internal error: library function returned error but did not set virterror";
-            char *msg = msgbuf;
-
-            error.code = VIR_ERR_RPC;
-            error.domain = VIR_FROM_REMOTE;
-            error.message = &msg;
-            error.level = VIR_ERR_ERROR;
-            error.dom = NULL;
-            error.str1 = &msg;
-            error.str2 = NULL;
-            error.str3 = NULL;
-            error.int1 = 0;
-            error.int2 = 0;
-            error.net = NULL;
-        }
-
-        if (!xdr_remote_error (&xdr, &error)) {
-            remoteDispatchError (client, &req, "%s", _("serialise return error"));
-            xdr_destroy (&xdr);
-            return;
-        }
+        /* Error was NULL so synthesize an error. */
+        if (rerr.code == 0)
+            remoteDispatchGenericError(&rerr);
+        if (!xdr_remote_error (&xdr, &rerr))
+            goto fatal_error;
     }
 
     /* Write the length word. */
     len = xdr_getpos (&xdr);
-    if (xdr_setpos (&xdr, 0) == 0) {
-        remoteDispatchError (client, &req, "%s", _("xdr_setpos"));
-        xdr_destroy (&xdr);
-        return;
-    }
+    if (xdr_setpos (&xdr, 0) == 0)
+        goto fatal_error;
 
-    if (!xdr_int (&xdr, &len)) {
-        remoteDispatchError (client, &req, "%s", _("serialise return length"));
-        xdr_destroy (&xdr);
-        return;
-    }
+    if (!xdr_int (&xdr, &len))
+        goto fatal_error;
 
     xdr_destroy (&xdr);
+    return len;
 
-    /* Set up the output buffer. */
-    client->mode = QEMUD_MODE_TX_PACKET;
-    client->bufferLength = len;
-    client->bufferOffset = 0;
-}
-
-/* An error occurred during the dispatching process itself (ie. not
- * an error from the function being called).  We return an error
- * reply.
- */
-static void
-remoteDispatchSendError (struct qemud_client *client,
-                         remote_message_header *req,
-                         int code, const char *msg)
-{
-    remote_message_header rep;
-    remote_error error;
-    XDR xdr;
-    int len;
-
-    /* Future versions of the protocol may use different vers or prog.  Try
-     * our hardest to send back a message that such clients could see.
-     */
-    if (req) {
-        rep.prog = req->prog;
-        rep.vers = req->vers;
-        rep.proc = req->proc;
-        rep.direction = REMOTE_REPLY;
-        rep.serial = req->serial;
-        rep.status = REMOTE_ERROR;
-    } else {
-        rep.prog = REMOTE_PROGRAM;
-        rep.vers = REMOTE_PROTOCOL_VERSION;
-        rep.proc = REMOTE_PROC_OPEN;
-        rep.direction = REMOTE_REPLY;
-        rep.serial = 1;
-        rep.status = REMOTE_ERROR;
-    }
-
-    /* Construct the error. */
-    error.code = code;
-    error.domain = VIR_FROM_REMOTE;
-    error.message = (char**)&msg;
-    error.level = VIR_ERR_ERROR;
-    error.dom = NULL;
-    error.str1 = (char**)&msg;
-    error.str2 = NULL;
-    error.str3 = NULL;
-    error.int1 = 0;
-    error.int2 = 0;
-    error.net = NULL;
-
-    /* Serialise the return header and error. */
-    xdrmem_create (&xdr, client->buffer, sizeof client->buffer, XDR_ENCODE);
-
-    len = 0; /* We'll come back and write this later. */
-    if (!xdr_int (&xdr, &len)) {
-        xdr_destroy (&xdr);
-        return;
-    }
-
-    if (!xdr_remote_message_header (&xdr, &rep)) {
-        xdr_destroy (&xdr);
-        return;
-    }
-
-    if (!xdr_remote_error (&xdr, &error)) {
-        xdr_destroy (&xdr);
-        return;
-    }
-
-    len = xdr_getpos (&xdr);
-    if (xdr_setpos (&xdr, 0) == 0) {
-        xdr_destroy (&xdr);
-        return;
-    }
-
-    if (!xdr_int (&xdr, &len)) {
-        xdr_destroy (&xdr);
-        return;
-    }
-
+fatal_error:
+    /* Seriously bad stuff happened, so we'll kill off this client
+       and not send back any RPC error */
     xdr_destroy (&xdr);
-
-    /* Send it. */
-    client->mode = QEMUD_MODE_TX_PACKET;
-    client->bufferLength = len;
-    client->bufferOffset = 0;
-}
-
-static void
-remoteDispatchFailAuth (struct qemud_client *client,
-                        remote_message_header *req)
-{
-    remoteDispatchSendError (client, req, VIR_ERR_AUTH_FAILED, "authentication failed");
-}
-
-static void
-remoteDispatchError (struct qemud_client *client,
-                     remote_message_header *req,
-                     const char *fmt, ...)
-{
-    va_list args;
-    char msgbuf[1024];
-    char *msg = msgbuf;
-
-    va_start (args, fmt);
-    vsnprintf (msgbuf, sizeof msgbuf, fmt, args);
-    va_end (args);
-
-    remoteDispatchSendError (client, req, VIR_ERR_RPC, msg);
+    return 0;
 }
 
 int remoteRelayDomainEvent (virConnectPtr conn ATTRIBUTE_UNUSED,
@@ -450,7 +363,8 @@ int remoteRelayDomainEvent (virConnectPtr conn ATTRIBUTE_UNUSED,
 
 static int
 remoteDispatchOpen (struct qemud_server *server ATTRIBUTE_UNUSED,
-                    struct qemud_client *client, remote_message_header *req,
+                    struct qemud_client *client,
+                    remote_error *rerr,
                     struct remote_open_args *args, void *ret ATTRIBUTE_UNUSED)
 {
     const char *name;
@@ -458,8 +372,8 @@ remoteDispatchOpen (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     /* Already opened? */
     if (client->conn) {
-        remoteDispatchError (client, req, "%s", _("connection already open"));
-        return -2;
+        remoteDispatchFormatError (rerr, "%s", _("connection already open"));
+        return -1;
     }
 
     name = args->name ? *args->name : NULL;
@@ -475,60 +389,76 @@ remoteDispatchOpen (struct qemud_server *server ATTRIBUTE_UNUSED,
         ? virConnectOpenReadOnly (name)
         : virConnectOpen (name);
 
-    return client->conn ? 0 : -1;
+    if (client->conn == NULL) {
+        remoteDispatchConnError(rerr, NULL);
+        return -1;
+    }
+
+    return 0;
 }
 
-#define CHECK_CONN(client)                      \
-    if (!client->conn) {                        \
-        remoteDispatchError (client, req, "%s", _("connection not open"));   \
-        return -2;                                                  \
+#define CHECK_CONN(client)                                              \
+    if (!client->conn) {                                                \
+        remoteDispatchFormatError (rerr, "%s", _("connection not open")); \
+        return -1;                                                      \
     }
 
 static int
 remoteDispatchClose (struct qemud_server *server ATTRIBUTE_UNUSED,
-                     struct qemud_client *client, remote_message_header *req,
+                     struct qemud_client *client,
+                     remote_error *rerr,
                      void *args ATTRIBUTE_UNUSED, void *ret ATTRIBUTE_UNUSED)
 {
-    int rv;
     CHECK_CONN(client);
 
-    rv = virConnectClose (client->conn);
-    if (rv == 0) client->conn = NULL;
+    if (virConnectClose (client->conn) < 0) {
+        remoteDispatchConnError(rerr, NULL);
+        return -1;
+    }
 
-    return rv;
+    return 0;
 }
 
 static int
 remoteDispatchSupportsFeature (struct qemud_server *server ATTRIBUTE_UNUSED,
-                               struct qemud_client *client, remote_message_header *req,
+                               struct qemud_client *client,
+                               remote_error *rerr,
                                remote_supports_feature_args *args, remote_supports_feature_ret *ret)
 {
     CHECK_CONN(client);
 
     ret->supported = virDrvSupportsFeature (client->conn, args->feature);
-    if (ret->supported == -1) return -1;
+
+    if (ret->supported == -1) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     return 0;
 }
 
 static int
 remoteDispatchGetType (struct qemud_server *server ATTRIBUTE_UNUSED,
-                       struct qemud_client *client, remote_message_header *req,
+                       struct qemud_client *client,
+                       remote_error *rerr,
                        void *args ATTRIBUTE_UNUSED, remote_get_type_ret *ret)
 {
     const char *type;
     CHECK_CONN(client);
 
     type = virConnectGetType (client->conn);
-    if (type == NULL) return -1;
+    if (type == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     /* We have to strdup because remoteDispatchClientRequest will
      * free this string after it's been serialised.
      */
     ret->type = strdup (type);
     if (!ret->type) {
-        remoteDispatchError (client, req, "%s", _("out of memory in strdup"));
-        return -2;
+        remoteDispatchFormatError (rerr, "%s", _("out of memory in strdup"));
+        return -1;
     }
 
     return 0;
@@ -537,15 +467,17 @@ remoteDispatchGetType (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchGetVersion (struct qemud_server *server ATTRIBUTE_UNUSED,
                           struct qemud_client *client,
-                          remote_message_header *req,
+                          remote_error *rerr,
                           void *args ATTRIBUTE_UNUSED,
                           remote_get_version_ret *ret)
 {
     unsigned long hvVer;
     CHECK_CONN(client);
 
-    if (virConnectGetVersion (client->conn, &hvVer) == -1)
+    if (virConnectGetVersion (client->conn, &hvVer) == -1) {
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
+    }
 
     ret->hv_ver = hvVer;
     return 0;
@@ -554,7 +486,7 @@ remoteDispatchGetVersion (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchGetHostname (struct qemud_server *server ATTRIBUTE_UNUSED,
                            struct qemud_client *client,
-                           remote_message_header *req,
+                           remote_error *rerr,
                            void *args ATTRIBUTE_UNUSED,
                            remote_get_hostname_ret *ret)
 {
@@ -562,7 +494,10 @@ remoteDispatchGetHostname (struct qemud_server *server ATTRIBUTE_UNUSED,
     CHECK_CONN(client);
 
     hostname = virConnectGetHostname (client->conn);
-    if (hostname == NULL) return -1;
+    if (hostname == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     ret->hostname = hostname;
     return 0;
@@ -571,7 +506,7 @@ remoteDispatchGetHostname (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchGetUri (struct qemud_server *server ATTRIBUTE_UNUSED,
                       struct qemud_client *client,
-                      remote_message_header *req,
+                      remote_error *rerr,
                       void *args ATTRIBUTE_UNUSED,
                       remote_get_uri_ret *ret)
 {
@@ -579,7 +514,10 @@ remoteDispatchGetUri (struct qemud_server *server ATTRIBUTE_UNUSED,
     CHECK_CONN(client);
 
     uri = virConnectGetURI (client->conn);
-    if (uri == NULL) return -1;
+    if (uri == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     ret->uri = uri;
     return 0;
@@ -588,7 +526,7 @@ remoteDispatchGetUri (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchGetMaxVcpus (struct qemud_server *server ATTRIBUTE_UNUSED,
                            struct qemud_client *client,
-                           remote_message_header *req,
+                           remote_error *rerr,
                            remote_get_max_vcpus_args *args,
                            remote_get_max_vcpus_ret *ret)
 {
@@ -597,7 +535,10 @@ remoteDispatchGetMaxVcpus (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     type = args->type ? *args->type : NULL;
     ret->max_vcpus = virConnectGetMaxVcpus (client->conn, type);
-    if (ret->max_vcpus == -1) return -1;
+    if (ret->max_vcpus == -1) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     return 0;
 }
@@ -605,15 +546,17 @@ remoteDispatchGetMaxVcpus (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchNodeGetInfo (struct qemud_server *server ATTRIBUTE_UNUSED,
                            struct qemud_client *client,
-                           remote_message_header *req,
+                           remote_error *rerr,
                            void *args ATTRIBUTE_UNUSED,
                            remote_node_get_info_ret *ret)
 {
     virNodeInfo info;
     CHECK_CONN(client);
 
-    if (virNodeGetInfo (client->conn, &info) == -1)
+    if (virNodeGetInfo (client->conn, &info) == -1) {
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
+    }
 
     memcpy (ret->model, info.model, sizeof ret->model);
     ret->memory = info.memory;
@@ -630,7 +573,7 @@ remoteDispatchNodeGetInfo (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchGetCapabilities (struct qemud_server *server ATTRIBUTE_UNUSED,
                                struct qemud_client *client,
-                               remote_message_header *req,
+                               remote_error *rerr,
                                void *args ATTRIBUTE_UNUSED,
                                remote_get_capabilities_ret *ret)
 {
@@ -638,7 +581,10 @@ remoteDispatchGetCapabilities (struct qemud_server *server ATTRIBUTE_UNUSED,
     CHECK_CONN(client);
 
     caps = virConnectGetCapabilities (client->conn);
-    if (caps == NULL) return -1;
+    if (caps == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     ret->capabilities = caps;
     return 0;
@@ -647,22 +593,22 @@ remoteDispatchGetCapabilities (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchNodeGetCellsFreeMemory (struct qemud_server *server ATTRIBUTE_UNUSED,
                                       struct qemud_client *client,
-                                      remote_message_header *req,
+                                      remote_error *rerr,
                                       remote_node_get_cells_free_memory_args *args,
                                       remote_node_get_cells_free_memory_ret *ret)
 {
     CHECK_CONN(client);
 
     if (args->maxCells > REMOTE_NODE_MAX_CELLS) {
-        remoteDispatchError (client, req,
-                             "%s", _("maxCells > REMOTE_NODE_MAX_CELLS"));
-        return -2;
+        remoteDispatchFormatError (rerr,
+                                   "%s", _("maxCells > REMOTE_NODE_MAX_CELLS"));
+        return -1;
     }
 
     /* Allocate return buffer. */
     if (VIR_ALLOC_N(ret->freeMems.freeMems_val, args->maxCells) < 0) {
-        remoteDispatchSendError(client, req, VIR_ERR_NO_MEMORY, NULL);
-        return -2;
+        remoteDispatchOOMError(rerr);
+        return -1;
     }
 
     ret->freeMems.freeMems_len = virNodeGetCellsFreeMemory(client->conn,
@@ -671,6 +617,7 @@ remoteDispatchNodeGetCellsFreeMemory (struct qemud_server *server ATTRIBUTE_UNUS
                                                            args->maxCells);
     if (ret->freeMems.freeMems_len == 0) {
         VIR_FREE(ret->freeMems.freeMems_val);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
 
@@ -681,7 +628,7 @@ remoteDispatchNodeGetCellsFreeMemory (struct qemud_server *server ATTRIBUTE_UNUS
 static int
 remoteDispatchNodeGetFreeMemory (struct qemud_server *server ATTRIBUTE_UNUSED,
                                  struct qemud_client *client,
-                                 remote_message_header *req,
+                                 remote_error *rerr,
                                  void *args ATTRIBUTE_UNUSED,
                                  remote_node_get_free_memory_ret *ret)
 {
@@ -689,8 +636,10 @@ remoteDispatchNodeGetFreeMemory (struct qemud_server *server ATTRIBUTE_UNUSED,
     CHECK_CONN(client);
 
     freeMem = virNodeGetFreeMemory(client->conn);
-    if (freeMem == 0) return -1;
-
+    if (freeMem == 0) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
     ret->freeMem = freeMem;
     return 0;
 }
@@ -699,7 +648,7 @@ remoteDispatchNodeGetFreeMemory (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainGetSchedulerType (struct qemud_server *server ATTRIBUTE_UNUSED,
                                       struct qemud_client *client,
-                                      remote_message_header *req,
+                                      remote_error *rerr,
                                       remote_domain_get_scheduler_type_args *args,
                                       remote_domain_get_scheduler_type_ret *ret)
 {
@@ -710,13 +659,14 @@ remoteDispatchDomainGetSchedulerType (struct qemud_server *server ATTRIBUTE_UNUS
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     type = virDomainGetSchedulerType (dom, &nparams);
     if (type == NULL) {
         virDomainFree(dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
 
@@ -729,7 +679,7 @@ remoteDispatchDomainGetSchedulerType (struct qemud_server *server ATTRIBUTE_UNUS
 static int
 remoteDispatchDomainGetSchedulerParameters (struct qemud_server *server ATTRIBUTE_UNUSED,
                                             struct qemud_client *client,
-                                            remote_message_header *req,
+                                            remote_error *rerr,
                                             remote_domain_get_scheduler_parameters_args *args,
                                             remote_domain_get_scheduler_parameters_ret *ret)
 {
@@ -741,25 +691,26 @@ remoteDispatchDomainGetSchedulerParameters (struct qemud_server *server ATTRIBUT
     nparams = args->nparams;
 
     if (nparams > REMOTE_DOMAIN_SCHEDULER_PARAMETERS_MAX) {
-        remoteDispatchError (client, req, "%s", _("nparams too large"));
-        return -2;
+        remoteDispatchFormatError (rerr, "%s", _("nparams too large"));
+        return -1;
     }
     if (VIR_ALLOC_N(params, nparams) < 0) {
-        remoteDispatchSendError(client, req, VIR_ERR_NO_MEMORY, NULL);
-        return -2;
+        remoteDispatchOOMError(rerr);
+        return -1;
     }
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
         VIR_FREE(params);
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     r = virDomainGetSchedulerParameters (dom, params, &nparams);
     if (r == -1) {
         virDomainFree(dom);
         VIR_FREE(params);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
 
@@ -789,7 +740,7 @@ remoteDispatchDomainGetSchedulerParameters (struct qemud_server *server ATTRIBUT
         case VIR_DOMAIN_SCHED_FIELD_BOOLEAN:
             ret->params.params_val[i].value.remote_sched_param_value_u.b = params[i].value.b; break;
         default:
-            remoteDispatchError (client, req, "%s", _("unknown type"));
+            remoteDispatchFormatError (rerr, "%s", _("unknown type"));
             goto cleanup;
         }
     }
@@ -799,19 +750,19 @@ remoteDispatchDomainGetSchedulerParameters (struct qemud_server *server ATTRIBUT
     return 0;
 
 oom:
-    remoteDispatchSendError(client, req, VIR_ERR_NO_MEMORY, NULL);
+    remoteDispatchOOMError(rerr);
 cleanup:
     virDomainFree(dom);
     for (i = 0 ; i < nparams ; i++)
         VIR_FREE(ret->params.params_val[i].field);
     VIR_FREE(params);
-    return -2;
+    return -1;
 }
 
 static int
 remoteDispatchDomainSetSchedulerParameters (struct qemud_server *server ATTRIBUTE_UNUSED,
                                             struct qemud_client *client,
-                                            remote_message_header *req,
+                                            remote_error *rerr,
                                             remote_domain_set_scheduler_parameters_args *args,
                                             void *ret ATTRIBUTE_UNUSED)
 {
@@ -823,12 +774,12 @@ remoteDispatchDomainSetSchedulerParameters (struct qemud_server *server ATTRIBUT
     nparams = args->params.params_len;
 
     if (nparams > REMOTE_DOMAIN_SCHEDULER_PARAMETERS_MAX) {
-        remoteDispatchError (client, req, "%s", _("nparams too large"));
-        return -2;
+        remoteDispatchFormatError (rerr, "%s", _("nparams too large"));
+        return -1;
     }
     if (VIR_ALLOC_N(params, nparams)) {
-        remoteDispatchSendError(client, req, VIR_ERR_NO_MEMORY, NULL);
-        return -2;
+        remoteDispatchOOMError(rerr);
+        return -1;
     }
 
     /* Deserialise parameters. */
@@ -856,14 +807,17 @@ remoteDispatchDomainSetSchedulerParameters (struct qemud_server *server ATTRIBUT
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
         VIR_FREE(params);
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     r = virDomainSetSchedulerParameters (dom, params, nparams);
     virDomainFree(dom);
     VIR_FREE(params);
-    if (r == -1) return -1;
+    if (r == -1) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     return 0;
 }
@@ -871,7 +825,7 @@ remoteDispatchDomainSetSchedulerParameters (struct qemud_server *server ATTRIBUT
 static int
 remoteDispatchDomainBlockStats (struct qemud_server *server ATTRIBUTE_UNUSED,
                                 struct qemud_client *client,
-                                remote_message_header *req,
+                                remote_error *rerr,
                                 remote_domain_block_stats_args *args,
                                 remote_domain_block_stats_ret *ret)
 {
@@ -882,13 +836,14 @@ remoteDispatchDomainBlockStats (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
     path = args->path;
 
     if (virDomainBlockStats (dom, path, &stats, sizeof stats) == -1) {
         virDomainFree (dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virDomainFree (dom);
@@ -905,7 +860,7 @@ remoteDispatchDomainBlockStats (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainInterfaceStats (struct qemud_server *server ATTRIBUTE_UNUSED,
                                     struct qemud_client *client,
-                                    remote_message_header *req,
+                                    remote_error *rerr,
                                     remote_domain_interface_stats_args *args,
                                     remote_domain_interface_stats_ret *ret)
 {
@@ -916,13 +871,14 @@ remoteDispatchDomainInterfaceStats (struct qemud_server *server ATTRIBUTE_UNUSED
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
     path = args->path;
 
     if (virDomainInterfaceStats (dom, path, &stats, sizeof stats) == -1) {
         virDomainFree (dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virDomainFree (dom);
@@ -942,7 +898,7 @@ remoteDispatchDomainInterfaceStats (struct qemud_server *server ATTRIBUTE_UNUSED
 static int
 remoteDispatchDomainBlockPeek (struct qemud_server *server ATTRIBUTE_UNUSED,
                                struct qemud_client *client,
-                               remote_message_header *req,
+                               remote_error *rerr,
                                remote_domain_block_peek_args *args,
                                remote_domain_block_peek_ret *ret)
 {
@@ -955,8 +911,8 @@ remoteDispatchDomainBlockPeek (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
     path = args->path;
     offset = args->offset;
@@ -965,22 +921,23 @@ remoteDispatchDomainBlockPeek (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     if (size > REMOTE_DOMAIN_BLOCK_PEEK_BUFFER_MAX) {
         virDomainFree (dom);
-        remoteDispatchError (client, req,
-                             "%s", _("size > maximum buffer size"));
-        return -2;
+        remoteDispatchFormatError (rerr,
+                                   "%s", _("size > maximum buffer size"));
+        return -1;
     }
 
     ret->buffer.buffer_len = size;
     if (VIR_ALLOC_N(ret->buffer.buffer_val, size) < 0) {
         virDomainFree (dom);
-        remoteDispatchError (client, req, "%s", strerror (errno));
-        return -2;
+        remoteDispatchFormatError (rerr, "%s", strerror (errno));
+        return -1;
     }
 
     if (virDomainBlockPeek (dom, path, offset, size,
                             ret->buffer.buffer_val, flags) == -1) {
         /* free (ret->buffer.buffer_val); - caller frees */
         virDomainFree (dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virDomainFree (dom);
@@ -991,7 +948,7 @@ remoteDispatchDomainBlockPeek (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainMemoryPeek (struct qemud_server *server ATTRIBUTE_UNUSED,
                                 struct qemud_client *client,
-                                remote_message_header *req,
+                                remote_error *rerr,
                                 remote_domain_memory_peek_args *args,
                                 remote_domain_memory_peek_ret *ret)
 {
@@ -1003,31 +960,32 @@ remoteDispatchDomainMemoryPeek (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
     offset = args->offset;
     size = args->size;
     flags = args->flags;
 
     if (size > REMOTE_DOMAIN_MEMORY_PEEK_BUFFER_MAX) {
-        remoteDispatchError (client, req,
-                             "%s", _("size > maximum buffer size"));
+        remoteDispatchFormatError (rerr,
+                                   "%s", _("size > maximum buffer size"));
         virDomainFree (dom);
-        return -2;
+        return -1;
     }
 
     ret->buffer.buffer_len = size;
     if (VIR_ALLOC_N (ret->buffer.buffer_val, size) < 0) {
-        remoteDispatchError (client, req, "%s", strerror (errno));
+        remoteDispatchFormatError (rerr, "%s", strerror (errno));
         virDomainFree (dom);
-        return -2;
+        return -1;
     }
 
     if (virDomainMemoryPeek (dom, offset, size,
                              ret->buffer.buffer_val, flags) == -1) {
         /* free (ret->buffer.buffer_val); - caller frees */
         virDomainFree (dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virDomainFree (dom);
@@ -1038,7 +996,7 @@ remoteDispatchDomainMemoryPeek (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainAttachDevice (struct qemud_server *server ATTRIBUTE_UNUSED,
                                   struct qemud_client *client,
-                                  remote_message_header *req,
+                                  remote_error *rerr,
                                   remote_domain_attach_device_args *args,
                                   void *ret ATTRIBUTE_UNUSED)
 {
@@ -1047,12 +1005,13 @@ remoteDispatchDomainAttachDevice (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virDomainAttachDevice (dom, args->xml) == -1) {
         virDomainFree(dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virDomainFree(dom);
@@ -1062,7 +1021,7 @@ remoteDispatchDomainAttachDevice (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainCreate (struct qemud_server *server ATTRIBUTE_UNUSED,
                             struct qemud_client *client,
-                            remote_message_header *req,
+                            remote_error *rerr,
                             remote_domain_create_args *args,
                             void *ret ATTRIBUTE_UNUSED)
 {
@@ -1071,12 +1030,13 @@ remoteDispatchDomainCreate (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virDomainCreate (dom) == -1) {
         virDomainFree(dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virDomainFree(dom);
@@ -1086,7 +1046,7 @@ remoteDispatchDomainCreate (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainCreateXml (struct qemud_server *server ATTRIBUTE_UNUSED,
                                  struct qemud_client *client,
-                                 remote_message_header *req,
+                                 remote_error *rerr,
                                  remote_domain_create_xml_args *args,
                                  remote_domain_create_xml_ret *ret)
 {
@@ -1094,7 +1054,10 @@ remoteDispatchDomainCreateXml (struct qemud_server *server ATTRIBUTE_UNUSED,
     CHECK_CONN(client);
 
     dom = virDomainCreateXML (client->conn, args->xml_desc, args->flags);
-    if (dom == NULL) return -1;
+    if (dom == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     make_nonnull_domain (&ret->dom, dom);
     virDomainFree(dom);
@@ -1105,7 +1068,7 @@ remoteDispatchDomainCreateXml (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainDefineXml (struct qemud_server *server ATTRIBUTE_UNUSED,
                                struct qemud_client *client,
-                               remote_message_header *req,
+                               remote_error *rerr,
                                remote_domain_define_xml_args *args,
                                remote_domain_define_xml_ret *ret)
 {
@@ -1113,7 +1076,10 @@ remoteDispatchDomainDefineXml (struct qemud_server *server ATTRIBUTE_UNUSED,
     CHECK_CONN(client);
 
     dom = virDomainDefineXML (client->conn, args->xml);
-    if (dom == NULL) return -1;
+    if (dom == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     make_nonnull_domain (&ret->dom, dom);
     virDomainFree(dom);
@@ -1124,7 +1090,7 @@ remoteDispatchDomainDefineXml (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainDestroy (struct qemud_server *server ATTRIBUTE_UNUSED,
                              struct qemud_client *client,
-                             remote_message_header *req,
+                             remote_error *rerr,
                              remote_domain_destroy_args *args,
                              void *ret ATTRIBUTE_UNUSED)
 {
@@ -1133,12 +1099,13 @@ remoteDispatchDomainDestroy (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virDomainDestroy (dom) == -1) {
         virDomainFree(dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virDomainFree(dom);
@@ -1148,7 +1115,7 @@ remoteDispatchDomainDestroy (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainDetachDevice (struct qemud_server *server ATTRIBUTE_UNUSED,
                                   struct qemud_client *client,
-                                  remote_message_header *req,
+                                  remote_error *rerr,
                                   remote_domain_detach_device_args *args,
                                   void *ret ATTRIBUTE_UNUSED)
 {
@@ -1157,12 +1124,13 @@ remoteDispatchDomainDetachDevice (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virDomainDetachDevice (dom, args->xml) == -1) {
         virDomainFree(dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
 
@@ -1173,7 +1141,7 @@ remoteDispatchDomainDetachDevice (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainDumpXml (struct qemud_server *server ATTRIBUTE_UNUSED,
                              struct qemud_client *client,
-                             remote_message_header *req,
+                             remote_error *rerr,
                              remote_domain_dump_xml_args *args,
                              remote_domain_dump_xml_ret *ret)
 {
@@ -1182,15 +1150,16 @@ remoteDispatchDomainDumpXml (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     /* remoteDispatchClientRequest will free this. */
     ret->xml = virDomainGetXMLDesc (dom, args->flags);
     if (!ret->xml) {
-            virDomainFree(dom);
-            return -1;
+        virDomainFree(dom);
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
     virDomainFree(dom);
     return 0;
@@ -1199,7 +1168,7 @@ remoteDispatchDomainDumpXml (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainGetAutostart (struct qemud_server *server ATTRIBUTE_UNUSED,
                                   struct qemud_client *client,
-                                  remote_message_header *req,
+                                  remote_error *rerr,
                                   remote_domain_get_autostart_args *args,
                                   remote_domain_get_autostart_ret *ret)
 {
@@ -1208,12 +1177,13 @@ remoteDispatchDomainGetAutostart (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virDomainGetAutostart (dom, &ret->autostart) == -1) {
         virDomainFree(dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virDomainFree(dom);
@@ -1223,7 +1193,7 @@ remoteDispatchDomainGetAutostart (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainGetInfo (struct qemud_server *server ATTRIBUTE_UNUSED,
                              struct qemud_client *client,
-                             remote_message_header *req,
+                             remote_error *rerr,
                              remote_domain_get_info_args *args,
                              remote_domain_get_info_ret *ret)
 {
@@ -1233,12 +1203,13 @@ remoteDispatchDomainGetInfo (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virDomainGetInfo (dom, &info) == -1) {
         virDomainFree(dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
 
@@ -1256,7 +1227,7 @@ remoteDispatchDomainGetInfo (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainGetMaxMemory (struct qemud_server *server ATTRIBUTE_UNUSED,
                                   struct qemud_client *client,
-                                  remote_message_header *req,
+                                  remote_error *rerr,
                                   remote_domain_get_max_memory_args *args,
                                   remote_domain_get_max_memory_ret *ret)
 {
@@ -1265,13 +1236,14 @@ remoteDispatchDomainGetMaxMemory (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     ret->memory = virDomainGetMaxMemory (dom);
     if (ret->memory == 0) {
         virDomainFree(dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virDomainFree(dom);
@@ -1281,7 +1253,7 @@ remoteDispatchDomainGetMaxMemory (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainGetMaxVcpus (struct qemud_server *server ATTRIBUTE_UNUSED,
                                  struct qemud_client *client,
-                                 remote_message_header *req,
+                                 remote_error *rerr,
                                  remote_domain_get_max_vcpus_args *args,
                                  remote_domain_get_max_vcpus_ret *ret)
 {
@@ -1290,13 +1262,14 @@ remoteDispatchDomainGetMaxVcpus (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     ret->num = virDomainGetMaxVcpus (dom);
     if (ret->num == -1) {
         virDomainFree(dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virDomainFree(dom);
@@ -1306,7 +1279,7 @@ remoteDispatchDomainGetMaxVcpus (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainGetOsType (struct qemud_server *server ATTRIBUTE_UNUSED,
                                struct qemud_client *client,
-                               remote_message_header *req,
+                               remote_error *rerr,
                                remote_domain_get_os_type_args *args,
                                remote_domain_get_os_type_ret *ret)
 {
@@ -1315,15 +1288,16 @@ remoteDispatchDomainGetOsType (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     /* remoteDispatchClientRequest will free this */
     ret->type = virDomainGetOSType (dom);
     if (ret->type == NULL) {
-            virDomainFree(dom);
-            return -1;
+        virDomainFree(dom);
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
     virDomainFree(dom);
     return 0;
@@ -1332,7 +1306,7 @@ remoteDispatchDomainGetOsType (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainGetVcpus (struct qemud_server *server ATTRIBUTE_UNUSED,
                               struct qemud_client *client,
-                              remote_message_header *req,
+                              remote_error *rerr,
                               remote_domain_get_vcpus_args *args,
                               remote_domain_get_vcpus_ret *ret)
 {
@@ -1344,20 +1318,20 @@ remoteDispatchDomainGetVcpus (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (args->maxinfo > REMOTE_VCPUINFO_MAX) {
         virDomainFree(dom);
-        remoteDispatchError (client, req, "%s", _("maxinfo > REMOTE_VCPUINFO_MAX"));
-        return -2;
+        remoteDispatchFormatError (rerr, "%s", _("maxinfo > REMOTE_VCPUINFO_MAX"));
+        return -1;
     }
 
     if (args->maxinfo * args->maplen > REMOTE_CPUMAPS_MAX) {
         virDomainFree(dom);
-        remoteDispatchError (client, req, "%s", _("maxinfo * maplen > REMOTE_CPUMAPS_MAX"));
-        return -2;
+        remoteDispatchFormatError (rerr, "%s", _("maxinfo * maplen > REMOTE_CPUMAPS_MAX"));
+        return -1;
     }
 
     /* Allocate buffers to take the results. */
@@ -1373,6 +1347,7 @@ remoteDispatchDomainGetVcpus (struct qemud_server *server ATTRIBUTE_UNUSED,
         VIR_FREE(info);
         VIR_FREE(cpumaps);
         virDomainFree(dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
 
@@ -1403,14 +1378,14 @@ oom:
     VIR_FREE(info);
     VIR_FREE(cpumaps);
     virDomainFree(dom);
-    remoteDispatchSendError(client, req, VIR_ERR_NO_MEMORY, NULL);
-    return -2;
+    remoteDispatchOOMError(rerr);
+    return -1;
 }
 
 static int
 remoteDispatchDomainMigratePrepare (struct qemud_server *server ATTRIBUTE_UNUSED,
                                     struct qemud_client *client,
-                                    remote_message_header *req,
+                                    remote_error *rerr,
                                     remote_domain_migrate_prepare_args *args,
                                     remote_domain_migrate_prepare_ret *ret)
 {
@@ -1427,8 +1402,8 @@ remoteDispatchDomainMigratePrepare (struct qemud_server *server ATTRIBUTE_UNUSED
 
     /* Wacky world of XDR ... */
     if (VIR_ALLOC(uri_out) < 0) {
-        remoteDispatchSendError(client, req, VIR_ERR_NO_MEMORY, NULL);
-        return -2;
+        remoteDispatchOOMError(rerr);
+        return -1;
     }
 
     r = virDomainMigratePrepare (client->conn, &cookie, &cookielen,
@@ -1436,6 +1411,7 @@ remoteDispatchDomainMigratePrepare (struct qemud_server *server ATTRIBUTE_UNUSED
                                  args->flags, dname, args->resource);
     if (r == -1) {
         VIR_FREE(uri_out);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
 
@@ -1457,7 +1433,7 @@ remoteDispatchDomainMigratePrepare (struct qemud_server *server ATTRIBUTE_UNUSED
 static int
 remoteDispatchDomainMigratePerform (struct qemud_server *server ATTRIBUTE_UNUSED,
                                     struct qemud_client *client,
-                                    remote_message_header *req,
+                                    remote_error *rerr,
                                     remote_domain_migrate_perform_args *args,
                                     void *ret ATTRIBUTE_UNUSED)
 {
@@ -1468,8 +1444,8 @@ remoteDispatchDomainMigratePerform (struct qemud_server *server ATTRIBUTE_UNUSED
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     dname = args->dname == NULL ? NULL : *args->dname;
@@ -1480,7 +1456,10 @@ remoteDispatchDomainMigratePerform (struct qemud_server *server ATTRIBUTE_UNUSED
                                  args->uri,
                                  args->flags, dname, args->resource);
     virDomainFree (dom);
-    if (r == -1) return -1;
+    if (r == -1) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     return 0;
 }
@@ -1488,7 +1467,7 @@ remoteDispatchDomainMigratePerform (struct qemud_server *server ATTRIBUTE_UNUSED
 static int
 remoteDispatchDomainMigrateFinish (struct qemud_server *server ATTRIBUTE_UNUSED,
                                    struct qemud_client *client,
-                                   remote_message_header *req,
+                                   remote_error *rerr,
                                    remote_domain_migrate_finish_args *args,
                                    remote_domain_migrate_finish_ret *ret)
 {
@@ -1500,7 +1479,10 @@ remoteDispatchDomainMigrateFinish (struct qemud_server *server ATTRIBUTE_UNUSED,
                                    args->cookie.cookie_len,
                                    args->uri,
                                    args->flags);
-    if (ddom == NULL) return -1;
+    if (ddom == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     make_nonnull_domain (&ret->ddom, ddom);
     virDomainFree (ddom);
@@ -1510,7 +1492,7 @@ remoteDispatchDomainMigrateFinish (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainMigratePrepare2 (struct qemud_server *server ATTRIBUTE_UNUSED,
                                      struct qemud_client *client,
-                                     remote_message_header *req,
+                                     remote_error *rerr,
                                      remote_domain_migrate_prepare2_args *args,
                                      remote_domain_migrate_prepare2_ret *ret)
 {
@@ -1527,15 +1509,18 @@ remoteDispatchDomainMigratePrepare2 (struct qemud_server *server ATTRIBUTE_UNUSE
 
     /* Wacky world of XDR ... */
     if (VIR_ALLOC(uri_out) < 0) {
-        remoteDispatchSendError(client, req, VIR_ERR_NO_MEMORY, NULL);
-        return -2;
+        remoteDispatchOOMError(rerr);
+        return -1;
     }
 
     r = virDomainMigratePrepare2 (client->conn, &cookie, &cookielen,
                                   uri_in, uri_out,
                                   args->flags, dname, args->resource,
                                   args->dom_xml);
-    if (r == -1) return -1;
+    if (r == -1) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     /* remoteDispatchClientRequest will free cookie, uri_out and
      * the string if there is one.
@@ -1550,7 +1535,7 @@ remoteDispatchDomainMigratePrepare2 (struct qemud_server *server ATTRIBUTE_UNUSE
 static int
 remoteDispatchDomainMigrateFinish2 (struct qemud_server *server ATTRIBUTE_UNUSED,
                                     struct qemud_client *client,
-                                    remote_message_header *req,
+                                    remote_error *rerr,
                                     remote_domain_migrate_finish2_args *args,
                                     remote_domain_migrate_finish2_ret *ret)
 {
@@ -1563,7 +1548,10 @@ remoteDispatchDomainMigrateFinish2 (struct qemud_server *server ATTRIBUTE_UNUSED
                                     args->uri,
                                     args->flags,
                                     args->retcode);
-    if (ddom == NULL) return -1;
+    if (ddom == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     make_nonnull_domain (&ret->ddom, ddom);
 
@@ -1573,22 +1561,22 @@ remoteDispatchDomainMigrateFinish2 (struct qemud_server *server ATTRIBUTE_UNUSED
 static int
 remoteDispatchListDefinedDomains (struct qemud_server *server ATTRIBUTE_UNUSED,
                                   struct qemud_client *client,
-                                  remote_message_header *req,
+                                  remote_error *rerr,
                                   remote_list_defined_domains_args *args,
                                   remote_list_defined_domains_ret *ret)
 {
     CHECK_CONN(client);
 
     if (args->maxnames > REMOTE_DOMAIN_NAME_LIST_MAX) {
-        remoteDispatchError (client, req,
-                             "%s", _("maxnames > REMOTE_DOMAIN_NAME_LIST_MAX"));
-        return -2;
+        remoteDispatchFormatError (rerr,
+                                   "%s", _("maxnames > REMOTE_DOMAIN_NAME_LIST_MAX"));
+        return -1;
     }
 
     /* Allocate return buffer. */
     if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
-        remoteDispatchSendError(client, req, VIR_ERR_NO_MEMORY, NULL);
-        return -2;
+        remoteDispatchOOMError(rerr);
+        return -1;
     }
 
     ret->names.names_len =
@@ -1596,6 +1584,7 @@ remoteDispatchListDefinedDomains (struct qemud_server *server ATTRIBUTE_UNUSED,
                                       ret->names.names_val, args->maxnames);
     if (ret->names.names_len == -1) {
         VIR_FREE(ret->names.names_val);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
 
@@ -1605,7 +1594,7 @@ remoteDispatchListDefinedDomains (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainLookupById (struct qemud_server *server ATTRIBUTE_UNUSED,
                                 struct qemud_client *client,
-                                remote_message_header *req,
+                                remote_error *rerr,
                                 remote_domain_lookup_by_id_args *args,
                                 remote_domain_lookup_by_id_ret *ret)
 {
@@ -1613,7 +1602,10 @@ remoteDispatchDomainLookupById (struct qemud_server *server ATTRIBUTE_UNUSED,
     CHECK_CONN(client);
 
     dom = virDomainLookupByID (client->conn, args->id);
-    if (dom == NULL) return -1;
+    if (dom == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     make_nonnull_domain (&ret->dom, dom);
     virDomainFree(dom);
@@ -1623,7 +1615,7 @@ remoteDispatchDomainLookupById (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainLookupByName (struct qemud_server *server ATTRIBUTE_UNUSED,
                                   struct qemud_client *client,
-                                  remote_message_header *req,
+                                  remote_error *rerr,
                                   remote_domain_lookup_by_name_args *args,
                                   remote_domain_lookup_by_name_ret *ret)
 {
@@ -1631,7 +1623,10 @@ remoteDispatchDomainLookupByName (struct qemud_server *server ATTRIBUTE_UNUSED,
     CHECK_CONN(client);
 
     dom = virDomainLookupByName (client->conn, args->name);
-    if (dom == NULL) return -1;
+    if (dom == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     make_nonnull_domain (&ret->dom, dom);
     virDomainFree(dom);
@@ -1641,7 +1636,7 @@ remoteDispatchDomainLookupByName (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainLookupByUuid (struct qemud_server *server ATTRIBUTE_UNUSED,
                                   struct qemud_client *client,
-                                  remote_message_header *req,
+                                  remote_error *rerr,
                                   remote_domain_lookup_by_uuid_args *args,
                                   remote_domain_lookup_by_uuid_ret *ret)
 {
@@ -1649,7 +1644,10 @@ remoteDispatchDomainLookupByUuid (struct qemud_server *server ATTRIBUTE_UNUSED,
     CHECK_CONN(client);
 
     dom = virDomainLookupByUUID (client->conn, (unsigned char *) args->uuid);
-    if (dom == NULL) return -1;
+    if (dom == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     make_nonnull_domain (&ret->dom, dom);
     virDomainFree(dom);
@@ -1659,14 +1657,17 @@ remoteDispatchDomainLookupByUuid (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchNumOfDefinedDomains (struct qemud_server *server ATTRIBUTE_UNUSED,
                                    struct qemud_client *client,
-                                   remote_message_header *req,
+                                   remote_error *rerr,
                                    void *args ATTRIBUTE_UNUSED,
                                    remote_num_of_defined_domains_ret *ret)
 {
     CHECK_CONN(client);
 
     ret->num = virConnectNumOfDefinedDomains (client->conn);
-    if (ret->num == -1) return -1;
+    if (ret->num == -1) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     return 0;
 }
@@ -1674,7 +1675,7 @@ remoteDispatchNumOfDefinedDomains (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainPinVcpu (struct qemud_server *server ATTRIBUTE_UNUSED,
                              struct qemud_client *client,
-                             remote_message_header *req,
+                             remote_error *rerr,
                              remote_domain_pin_vcpu_args *args,
                              void *ret ATTRIBUTE_UNUSED)
 {
@@ -1684,14 +1685,14 @@ remoteDispatchDomainPinVcpu (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (args->cpumap.cpumap_len > REMOTE_CPUMAP_MAX) {
         virDomainFree(dom);
-        remoteDispatchError (client, req, "%s", _("cpumap_len > REMOTE_CPUMAP_MAX"));
-        return -2;
+        remoteDispatchFormatError (rerr, "%s", _("cpumap_len > REMOTE_CPUMAP_MAX"));
+        return -1;
     }
 
     rv = virDomainPinVcpu (dom, args->vcpu,
@@ -1699,6 +1700,7 @@ remoteDispatchDomainPinVcpu (struct qemud_server *server ATTRIBUTE_UNUSED,
                            args->cpumap.cpumap_len);
     if (rv == -1) {
         virDomainFree(dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virDomainFree(dom);
@@ -1708,7 +1710,7 @@ remoteDispatchDomainPinVcpu (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainReboot (struct qemud_server *server ATTRIBUTE_UNUSED,
                             struct qemud_client *client,
-                            remote_message_header *req,
+                            remote_error *rerr,
                             remote_domain_reboot_args *args,
                             void *ret ATTRIBUTE_UNUSED)
 {
@@ -1717,12 +1719,13 @@ remoteDispatchDomainReboot (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virDomainReboot (dom, args->flags) == -1) {
         virDomainFree(dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virDomainFree(dom);
@@ -1732,14 +1735,16 @@ remoteDispatchDomainReboot (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainRestore (struct qemud_server *server ATTRIBUTE_UNUSED,
                              struct qemud_client *client,
-                             remote_message_header *req,
+                             remote_error *rerr,
                              remote_domain_restore_args *args,
                              void *ret ATTRIBUTE_UNUSED)
 {
     CHECK_CONN(client);
 
-    if (virDomainRestore (client->conn, args->from) == -1)
+    if (virDomainRestore (client->conn, args->from) == -1) {
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
+    }
 
     return 0;
 }
@@ -1747,7 +1752,7 @@ remoteDispatchDomainRestore (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainResume (struct qemud_server *server ATTRIBUTE_UNUSED,
                             struct qemud_client *client,
-                            remote_message_header *req,
+                            remote_error *rerr,
                             remote_domain_resume_args *args,
                             void *ret ATTRIBUTE_UNUSED)
 {
@@ -1756,12 +1761,13 @@ remoteDispatchDomainResume (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virDomainResume (dom) == -1) {
         virDomainFree(dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virDomainFree(dom);
@@ -1771,7 +1777,7 @@ remoteDispatchDomainResume (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainSave (struct qemud_server *server ATTRIBUTE_UNUSED,
                           struct qemud_client *client,
-                          remote_message_header *req,
+                          remote_error *rerr,
                           remote_domain_save_args *args,
                           void *ret ATTRIBUTE_UNUSED)
 {
@@ -1780,12 +1786,13 @@ remoteDispatchDomainSave (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virDomainSave (dom, args->to) == -1) {
         virDomainFree(dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virDomainFree(dom);
@@ -1795,7 +1802,7 @@ remoteDispatchDomainSave (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainCoreDump (struct qemud_server *server ATTRIBUTE_UNUSED,
                               struct qemud_client *client,
-                              remote_message_header *req,
+                              remote_error *rerr,
                               remote_domain_core_dump_args *args,
                               void *ret ATTRIBUTE_UNUSED)
 {
@@ -1804,12 +1811,13 @@ remoteDispatchDomainCoreDump (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virDomainCoreDump (dom, args->to, args->flags) == -1) {
         virDomainFree(dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virDomainFree(dom);
@@ -1819,7 +1827,7 @@ remoteDispatchDomainCoreDump (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainSetAutostart (struct qemud_server *server ATTRIBUTE_UNUSED,
                                   struct qemud_client *client,
-                                  remote_message_header *req,
+                                  remote_error *rerr,
                                   remote_domain_set_autostart_args *args,
                                   void *ret ATTRIBUTE_UNUSED)
 {
@@ -1828,12 +1836,13 @@ remoteDispatchDomainSetAutostart (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virDomainSetAutostart (dom, args->autostart) == -1) {
         virDomainFree(dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virDomainFree(dom);
@@ -1843,7 +1852,7 @@ remoteDispatchDomainSetAutostart (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainSetMaxMemory (struct qemud_server *server ATTRIBUTE_UNUSED,
                                   struct qemud_client *client,
-                                  remote_message_header *req,
+                                  remote_error *rerr,
                                   remote_domain_set_max_memory_args *args,
                                   void *ret ATTRIBUTE_UNUSED)
 {
@@ -1852,12 +1861,13 @@ remoteDispatchDomainSetMaxMemory (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virDomainSetMaxMemory (dom, args->memory) == -1) {
         virDomainFree(dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virDomainFree(dom);
@@ -1867,7 +1877,7 @@ remoteDispatchDomainSetMaxMemory (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainSetMemory (struct qemud_server *server ATTRIBUTE_UNUSED,
                                struct qemud_client *client,
-                               remote_message_header *req,
+                               remote_error *rerr,
                                remote_domain_set_memory_args *args,
                                void *ret ATTRIBUTE_UNUSED)
 {
@@ -1876,12 +1886,13 @@ remoteDispatchDomainSetMemory (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virDomainSetMemory (dom, args->memory) == -1) {
         virDomainFree(dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virDomainFree(dom);
@@ -1891,7 +1902,7 @@ remoteDispatchDomainSetMemory (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainSetVcpus (struct qemud_server *server ATTRIBUTE_UNUSED,
                               struct qemud_client *client,
-                              remote_message_header *req,
+                              remote_error *rerr,
                               remote_domain_set_vcpus_args *args,
                               void *ret ATTRIBUTE_UNUSED)
 {
@@ -1900,12 +1911,13 @@ remoteDispatchDomainSetVcpus (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virDomainSetVcpus (dom, args->nvcpus) == -1) {
         virDomainFree(dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virDomainFree(dom);
@@ -1915,7 +1927,7 @@ remoteDispatchDomainSetVcpus (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainShutdown (struct qemud_server *server ATTRIBUTE_UNUSED,
                               struct qemud_client *client,
-                              remote_message_header *req,
+                              remote_error *rerr,
                               remote_domain_shutdown_args *args,
                               void *ret ATTRIBUTE_UNUSED)
 {
@@ -1924,12 +1936,13 @@ remoteDispatchDomainShutdown (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virDomainShutdown (dom) == -1) {
         virDomainFree(dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virDomainFree(dom);
@@ -1939,7 +1952,7 @@ remoteDispatchDomainShutdown (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainSuspend (struct qemud_server *server ATTRIBUTE_UNUSED,
                              struct qemud_client *client,
-                             remote_message_header *req,
+                             remote_error *rerr,
                              remote_domain_suspend_args *args,
                              void *ret ATTRIBUTE_UNUSED)
 {
@@ -1948,12 +1961,13 @@ remoteDispatchDomainSuspend (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virDomainSuspend (dom) == -1) {
         virDomainFree(dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virDomainFree(dom);
@@ -1963,7 +1977,7 @@ remoteDispatchDomainSuspend (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainUndefine (struct qemud_server *server ATTRIBUTE_UNUSED,
                               struct qemud_client *client,
-                              remote_message_header *req,
+                              remote_error *rerr,
                               remote_domain_undefine_args *args,
                               void *ret ATTRIBUTE_UNUSED)
 {
@@ -1972,12 +1986,13 @@ remoteDispatchDomainUndefine (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dom = get_nonnull_domain (client->conn, args->dom);
     if (dom == NULL) {
-        remoteDispatchError (client, req, "%s", _("domain not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virDomainUndefine (dom) == -1) {
         virDomainFree(dom);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virDomainFree(dom);
@@ -1987,22 +2002,22 @@ remoteDispatchDomainUndefine (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchListDefinedNetworks (struct qemud_server *server ATTRIBUTE_UNUSED,
                                    struct qemud_client *client,
-                                   remote_message_header *req,
+                                   remote_error *rerr,
                                    remote_list_defined_networks_args *args,
                                    remote_list_defined_networks_ret *ret)
 {
     CHECK_CONN(client);
 
     if (args->maxnames > REMOTE_NETWORK_NAME_LIST_MAX) {
-        remoteDispatchError (client, req,
-                             "%s", _("maxnames > REMOTE_NETWORK_NAME_LIST_MAX"));
-        return -2;
+        remoteDispatchFormatError (rerr,
+                                   "%s", _("maxnames > REMOTE_NETWORK_NAME_LIST_MAX"));
+        return -1;
     }
 
     /* Allocate return buffer. */
     if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
-        remoteDispatchSendError(client, req, VIR_ERR_NO_MEMORY, NULL);
-        return -2;
+        remoteDispatchOOMError(rerr);
+        return -1;
     }
 
     ret->names.names_len =
@@ -2010,6 +2025,7 @@ remoteDispatchListDefinedNetworks (struct qemud_server *server ATTRIBUTE_UNUSED,
                                        ret->names.names_val, args->maxnames);
     if (ret->names.names_len == -1) {
         VIR_FREE(ret->names.names_val);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
 
@@ -2019,28 +2035,29 @@ remoteDispatchListDefinedNetworks (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchListDomains (struct qemud_server *server ATTRIBUTE_UNUSED,
                            struct qemud_client *client,
-                           remote_message_header *req,
+                           remote_error *rerr,
                            remote_list_domains_args *args,
                            remote_list_domains_ret *ret)
 {
     CHECK_CONN(client);
 
     if (args->maxids > REMOTE_DOMAIN_ID_LIST_MAX) {
-        remoteDispatchError (client, req,
-                             "%s", _("maxids > REMOTE_DOMAIN_ID_LIST_MAX"));
-        return -2;
+        remoteDispatchFormatError (rerr,
+                                   "%s", _("maxids > REMOTE_DOMAIN_ID_LIST_MAX"));
+        return -1;
     }
 
     /* Allocate return buffer. */
     if (VIR_ALLOC_N(ret->ids.ids_val, args->maxids) < 0) {
-        remoteDispatchSendError(client, req, VIR_ERR_NO_MEMORY, NULL);
-        return -2;
+        remoteDispatchOOMError(rerr);
+        return -1;
     }
 
     ret->ids.ids_len = virConnectListDomains (client->conn,
                                               ret->ids.ids_val, args->maxids);
     if (ret->ids.ids_len == -1) {
         VIR_FREE(ret->ids.ids_val);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
 
@@ -2050,22 +2067,22 @@ remoteDispatchListDomains (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchListNetworks (struct qemud_server *server ATTRIBUTE_UNUSED,
                             struct qemud_client *client,
-                            remote_message_header *req,
+                            remote_error *rerr,
                             remote_list_networks_args *args,
                             remote_list_networks_ret *ret)
 {
     CHECK_CONN(client);
 
     if (args->maxnames > REMOTE_NETWORK_NAME_LIST_MAX) {
-        remoteDispatchError (client, req,
-                             "%s", _("maxnames > REMOTE_NETWORK_NAME_LIST_MAX"));
-        return -2;
+        remoteDispatchFormatError (rerr,
+                                   "%s", _("maxnames > REMOTE_NETWORK_NAME_LIST_MAX"));
+        return -1;
     }
 
     /* Allocate return buffer. */
     if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
-        remoteDispatchSendError(client, req, VIR_ERR_NO_MEMORY, NULL);
-        return -2;
+        remoteDispatchOOMError(rerr);
+        return -1;
     }
 
     ret->names.names_len =
@@ -2073,6 +2090,7 @@ remoteDispatchListNetworks (struct qemud_server *server ATTRIBUTE_UNUSED,
                                 ret->names.names_val, args->maxnames);
     if (ret->names.names_len == -1) {
         VIR_FREE(ret->names.names_len);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
 
@@ -2082,7 +2100,7 @@ remoteDispatchListNetworks (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchNetworkCreate (struct qemud_server *server ATTRIBUTE_UNUSED,
                              struct qemud_client *client,
-                             remote_message_header *req,
+                             remote_error *rerr,
                              remote_network_create_args *args,
                              void *ret ATTRIBUTE_UNUSED)
 {
@@ -2091,12 +2109,13 @@ remoteDispatchNetworkCreate (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     net = get_nonnull_network (client->conn, args->net);
     if (net == NULL) {
-        remoteDispatchError (client, req, "%s", _("network not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virNetworkCreate (net) == -1) {
         virNetworkFree(net);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virNetworkFree(net);
@@ -2106,7 +2125,7 @@ remoteDispatchNetworkCreate (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchNetworkCreateXml (struct qemud_server *server ATTRIBUTE_UNUSED,
                                 struct qemud_client *client,
-                                remote_message_header *req,
+                                remote_error *rerr,
                                 remote_network_create_xml_args *args,
                                 remote_network_create_xml_ret *ret)
 {
@@ -2114,7 +2133,10 @@ remoteDispatchNetworkCreateXml (struct qemud_server *server ATTRIBUTE_UNUSED,
     CHECK_CONN(client);
 
     net = virNetworkCreateXML (client->conn, args->xml);
-    if (net == NULL) return -1;
+    if (net == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     make_nonnull_network (&ret->net, net);
     virNetworkFree(net);
@@ -2124,7 +2146,7 @@ remoteDispatchNetworkCreateXml (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchNetworkDefineXml (struct qemud_server *server ATTRIBUTE_UNUSED,
                                 struct qemud_client *client,
-                                remote_message_header *req,
+                                remote_error *rerr,
                                 remote_network_define_xml_args *args,
                                 remote_network_define_xml_ret *ret)
 {
@@ -2132,7 +2154,10 @@ remoteDispatchNetworkDefineXml (struct qemud_server *server ATTRIBUTE_UNUSED,
     CHECK_CONN(client);
 
     net = virNetworkDefineXML (client->conn, args->xml);
-    if (net == NULL) return -1;
+    if (net == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     make_nonnull_network (&ret->net, net);
     virNetworkFree(net);
@@ -2142,7 +2167,7 @@ remoteDispatchNetworkDefineXml (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchNetworkDestroy (struct qemud_server *server ATTRIBUTE_UNUSED,
                               struct qemud_client *client,
-                              remote_message_header *req,
+                              remote_error *rerr,
                               remote_network_destroy_args *args,
                               void *ret ATTRIBUTE_UNUSED)
 {
@@ -2151,12 +2176,13 @@ remoteDispatchNetworkDestroy (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     net = get_nonnull_network (client->conn, args->net);
     if (net == NULL) {
-        remoteDispatchError (client, req, "%s", _("network not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virNetworkDestroy (net) == -1) {
         virNetworkFree(net);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virNetworkFree(net);
@@ -2166,7 +2192,7 @@ remoteDispatchNetworkDestroy (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchNetworkDumpXml (struct qemud_server *server ATTRIBUTE_UNUSED,
                               struct qemud_client *client,
-                              remote_message_header *req,
+                              remote_error *rerr,
                               remote_network_dump_xml_args *args,
                               remote_network_dump_xml_ret *ret)
 {
@@ -2175,14 +2201,15 @@ remoteDispatchNetworkDumpXml (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     net = get_nonnull_network (client->conn, args->net);
     if (net == NULL) {
-        remoteDispatchError (client, req, "%s", _("network not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     /* remoteDispatchClientRequest will free this. */
     ret->xml = virNetworkGetXMLDesc (net, args->flags);
     if (!ret->xml) {
         virNetworkFree(net);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virNetworkFree(net);
@@ -2192,7 +2219,7 @@ remoteDispatchNetworkDumpXml (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchNetworkGetAutostart (struct qemud_server *server ATTRIBUTE_UNUSED,
                                    struct qemud_client *client,
-                                   remote_message_header *req,
+                                   remote_error *rerr,
                                    remote_network_get_autostart_args *args,
                                    remote_network_get_autostart_ret *ret)
 {
@@ -2201,12 +2228,13 @@ remoteDispatchNetworkGetAutostart (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     net = get_nonnull_network (client->conn, args->net);
     if (net == NULL) {
-        remoteDispatchError (client, req, "%s", _("network not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virNetworkGetAutostart (net, &ret->autostart) == -1) {
         virNetworkFree(net);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virNetworkFree(net);
@@ -2216,7 +2244,7 @@ remoteDispatchNetworkGetAutostart (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchNetworkGetBridgeName (struct qemud_server *server ATTRIBUTE_UNUSED,
                                     struct qemud_client *client,
-                                    remote_message_header *req,
+                                    remote_error *rerr,
                                     remote_network_get_bridge_name_args *args,
                                     remote_network_get_bridge_name_ret *ret)
 {
@@ -2225,14 +2253,15 @@ remoteDispatchNetworkGetBridgeName (struct qemud_server *server ATTRIBUTE_UNUSED
 
     net = get_nonnull_network (client->conn, args->net);
     if (net == NULL) {
-        remoteDispatchError (client, req, "%s", _("network not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     /* remoteDispatchClientRequest will free this. */
     ret->name = virNetworkGetBridgeName (net);
     if (!ret->name) {
         virNetworkFree(net);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virNetworkFree(net);
@@ -2242,7 +2271,7 @@ remoteDispatchNetworkGetBridgeName (struct qemud_server *server ATTRIBUTE_UNUSED
 static int
 remoteDispatchNetworkLookupByName (struct qemud_server *server ATTRIBUTE_UNUSED,
                                    struct qemud_client *client,
-                                   remote_message_header *req,
+                                   remote_error *rerr,
                                    remote_network_lookup_by_name_args *args,
                                    remote_network_lookup_by_name_ret *ret)
 {
@@ -2250,7 +2279,10 @@ remoteDispatchNetworkLookupByName (struct qemud_server *server ATTRIBUTE_UNUSED,
     CHECK_CONN(client);
 
     net = virNetworkLookupByName (client->conn, args->name);
-    if (net == NULL) return -1;
+    if (net == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     make_nonnull_network (&ret->net, net);
     virNetworkFree(net);
@@ -2260,7 +2292,7 @@ remoteDispatchNetworkLookupByName (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchNetworkLookupByUuid (struct qemud_server *server ATTRIBUTE_UNUSED,
                                    struct qemud_client *client,
-                                   remote_message_header *req,
+                                   remote_error *rerr,
                                    remote_network_lookup_by_uuid_args *args,
                                    remote_network_lookup_by_uuid_ret *ret)
 {
@@ -2268,7 +2300,10 @@ remoteDispatchNetworkLookupByUuid (struct qemud_server *server ATTRIBUTE_UNUSED,
     CHECK_CONN(client);
 
     net = virNetworkLookupByUUID (client->conn, (unsigned char *) args->uuid);
-    if (net == NULL) return -1;
+    if (net == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     make_nonnull_network (&ret->net, net);
     virNetworkFree(net);
@@ -2278,7 +2313,7 @@ remoteDispatchNetworkLookupByUuid (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchNetworkSetAutostart (struct qemud_server *server ATTRIBUTE_UNUSED,
                                    struct qemud_client *client,
-                                   remote_message_header *req,
+                                   remote_error *rerr,
                                    remote_network_set_autostart_args *args,
                                    void *ret ATTRIBUTE_UNUSED)
 {
@@ -2287,12 +2322,13 @@ remoteDispatchNetworkSetAutostart (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     net = get_nonnull_network (client->conn, args->net);
     if (net == NULL) {
-        remoteDispatchError (client, req, "%s", _("network not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virNetworkSetAutostart (net, args->autostart) == -1) {
         virNetworkFree(net);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virNetworkFree(net);
@@ -2302,7 +2338,7 @@ remoteDispatchNetworkSetAutostart (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchNetworkUndefine (struct qemud_server *server ATTRIBUTE_UNUSED,
                                struct qemud_client *client,
-                               remote_message_header *req,
+                               remote_error *rerr,
                                remote_network_undefine_args *args,
                                void *ret ATTRIBUTE_UNUSED)
 {
@@ -2311,12 +2347,13 @@ remoteDispatchNetworkUndefine (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     net = get_nonnull_network (client->conn, args->net);
     if (net == NULL) {
-        remoteDispatchError (client, req, "%s", _("network not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virNetworkUndefine (net) == -1) {
         virNetworkFree(net);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virNetworkFree(net);
@@ -2326,14 +2363,17 @@ remoteDispatchNetworkUndefine (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchNumOfDefinedNetworks (struct qemud_server *server ATTRIBUTE_UNUSED,
                                     struct qemud_client *client,
-                                    remote_message_header *req,
+                                    remote_error *rerr,
                                     void *args ATTRIBUTE_UNUSED,
                                     remote_num_of_defined_networks_ret *ret)
 {
     CHECK_CONN(client);
 
     ret->num = virConnectNumOfDefinedNetworks (client->conn);
-    if (ret->num == -1) return -1;
+    if (ret->num == -1) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     return 0;
 }
@@ -2341,14 +2381,17 @@ remoteDispatchNumOfDefinedNetworks (struct qemud_server *server ATTRIBUTE_UNUSED
 static int
 remoteDispatchNumOfDomains (struct qemud_server *server ATTRIBUTE_UNUSED,
                             struct qemud_client *client,
-                            remote_message_header *req,
+                            remote_error *rerr,
                             void *args ATTRIBUTE_UNUSED,
                             remote_num_of_domains_ret *ret)
 {
     CHECK_CONN(client);
 
     ret->num = virConnectNumOfDomains (client->conn);
-    if (ret->num == -1) return -1;
+    if (ret->num == -1) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     return 0;
 }
@@ -2356,14 +2399,17 @@ remoteDispatchNumOfDomains (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchNumOfNetworks (struct qemud_server *server ATTRIBUTE_UNUSED,
                              struct qemud_client *client,
-                             remote_message_header *req,
+                             remote_error *rerr,
                              void *args ATTRIBUTE_UNUSED,
                              remote_num_of_networks_ret *ret)
 {
     CHECK_CONN(client);
 
     ret->num = virConnectNumOfNetworks (client->conn);
-    if (ret->num == -1) return -1;
+    if (ret->num == -1) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     return 0;
 }
@@ -2372,14 +2418,14 @@ remoteDispatchNumOfNetworks (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchAuthList (struct qemud_server *server ATTRIBUTE_UNUSED,
                         struct qemud_client *client,
-                        remote_message_header *req ATTRIBUTE_UNUSED,
+                        remote_error *rerr,
                         void *args ATTRIBUTE_UNUSED,
                         remote_auth_list_ret *ret)
 {
     ret->types.types_len = 1;
     if (VIR_ALLOC_N(ret->types.types_val, ret->types.types_len) < 0) {
-        remoteDispatchSendError(client, req, VIR_ERR_NO_MEMORY, NULL);
-        return -2;
+        remoteDispatchOOMError(rerr);
+        return -1;
     }
     ret->types.types_val[0] = client->auth;
     return 0;
@@ -2390,8 +2436,7 @@ remoteDispatchAuthList (struct qemud_server *server ATTRIBUTE_UNUSED,
 /*
  * NB, keep in sync with similar method in src/remote_internal.c
  */
-static char *addrToString(struct qemud_client *client,
-                          remote_message_header *req,
+static char *addrToString(remote_error *rerr,
                           struct sockaddr_storage *sa, socklen_t salen) {
     char host[1024], port[20];
     char *addr;
@@ -2401,14 +2446,14 @@ static char *addrToString(struct qemud_client *client,
                            host, sizeof(host),
                            port, sizeof(port),
                            NI_NUMERICHOST | NI_NUMERICSERV)) != 0) {
-        remoteDispatchError(client, req,
-                            _("Cannot resolve address %d: %s"),
-                            err, gai_strerror(err));
+        remoteDispatchFormatError(rerr,
+                                  _("Cannot resolve address %d: %s"),
+                                  err, gai_strerror(err));
         return NULL;
     }
 
     if (VIR_ALLOC_N(addr, strlen(host) + 1 + strlen(port) + 1) < 0) {
-        remoteDispatchSendError(client, req, VIR_ERR_NO_MEMORY, NULL);
+        remoteDispatchOOMError(rerr);
         return NULL;
     }
 
@@ -2428,7 +2473,7 @@ static char *addrToString(struct qemud_client *client,
 static int
 remoteDispatchAuthSaslInit (struct qemud_server *server ATTRIBUTE_UNUSED,
                             struct qemud_client *client,
-                            remote_message_header *req,
+                            remote_error *rerr,
                             void *args ATTRIBUTE_UNUSED,
                             remote_auth_sasl_init_ret *ret)
 {
@@ -2443,33 +2488,33 @@ remoteDispatchAuthSaslInit (struct qemud_server *server ATTRIBUTE_UNUSED,
     if (client->auth != REMOTE_AUTH_SASL ||
         client->saslconn != NULL) {
         qemudLog(QEMUD_ERR, "%s", _("client tried invalid SASL init request"));
-        remoteDispatchFailAuth(client, req);
-        return -2;
+        remoteDispatchAuthError(rerr);
+        return -1;
     }
 
     /* Get local address in form  IPADDR:PORT */
     salen = sizeof(sa);
     if (getsockname(client->fd, (struct sockaddr*)&sa, &salen) < 0) {
-        remoteDispatchError(client, req,
-                            _("failed to get sock address %d (%s)"),
-                            errno, strerror(errno));
-        return -2;
+        remoteDispatchFormatError(rerr,
+                                  _("failed to get sock address %d (%s)"),
+                                  errno, strerror(errno));
+        return -1;
     }
-    if ((localAddr = addrToString(client, req, &sa, salen)) == NULL) {
-        return -2;
+    if ((localAddr = addrToString(rerr, &sa, salen)) == NULL) {
+        return -1;
     }
 
     /* Get remote address in form  IPADDR:PORT */
     salen = sizeof(sa);
     if (getpeername(client->fd, (struct sockaddr*)&sa, &salen) < 0) {
-        remoteDispatchError(client, req, _("failed to get peer address %d (%s)"),
-                            errno, strerror(errno));
+        remoteDispatchFormatError(rerr, _("failed to get peer address %d (%s)"),
+                                  errno, strerror(errno));
         VIR_FREE(localAddr);
-        return -2;
+        return -1;
     }
-    if ((remoteAddr = addrToString(client, req, &sa, salen)) == NULL) {
+    if ((remoteAddr = addrToString(rerr, &sa, salen)) == NULL) {
         VIR_FREE(localAddr);
-        return -2;
+        return -1;
     }
 
     err = sasl_server_new("libvirt",
@@ -2485,9 +2530,9 @@ remoteDispatchAuthSaslInit (struct qemud_server *server ATTRIBUTE_UNUSED,
     if (err != SASL_OK) {
         qemudLog(QEMUD_ERR, _("sasl context setup failed %d (%s)"),
                  err, sasl_errstring(err, NULL, NULL));
-        remoteDispatchFailAuth(client, req);
+        remoteDispatchAuthError(rerr);
         client->saslconn = NULL;
-        return -2;
+        return -1;
     }
 
     /* Inform SASL that we've got an external SSF layer from TLS */
@@ -2498,10 +2543,10 @@ remoteDispatchAuthSaslInit (struct qemud_server *server ATTRIBUTE_UNUSED,
         cipher = gnutls_cipher_get(client->tlssession);
         if (!(ssf = (sasl_ssf_t)gnutls_cipher_get_key_size(cipher))) {
             qemudLog(QEMUD_ERR, "%s", _("cannot TLS get cipher size"));
-            remoteDispatchFailAuth(client, req);
+            remoteDispatchAuthError(rerr);
             sasl_dispose(&client->saslconn);
             client->saslconn = NULL;
-            return -2;
+            return -1;
         }
         ssf *= 8; /* tls key size is bytes, sasl wants bits */
 
@@ -2509,10 +2554,10 @@ remoteDispatchAuthSaslInit (struct qemud_server *server ATTRIBUTE_UNUSED,
         if (err != SASL_OK) {
             qemudLog(QEMUD_ERR, _("cannot set SASL external SSF %d (%s)"),
                      err, sasl_errstring(err, NULL, NULL));
-            remoteDispatchFailAuth(client, req);
+            remoteDispatchAuthError(rerr);
             sasl_dispose(&client->saslconn);
             client->saslconn = NULL;
-            return -2;
+            return -1;
         }
     }
 
@@ -2538,10 +2583,10 @@ remoteDispatchAuthSaslInit (struct qemud_server *server ATTRIBUTE_UNUSED,
     if (err != SASL_OK) {
         qemudLog(QEMUD_ERR, _("cannot set SASL security props %d (%s)"),
                  err, sasl_errstring(err, NULL, NULL));
-        remoteDispatchFailAuth(client, req);
+        remoteDispatchAuthError(rerr);
         sasl_dispose(&client->saslconn);
         client->saslconn = NULL;
-        return -2;
+        return -1;
     }
 
     err = sasl_listmech(client->saslconn,
@@ -2555,19 +2600,19 @@ remoteDispatchAuthSaslInit (struct qemud_server *server ATTRIBUTE_UNUSED,
     if (err != SASL_OK) {
         qemudLog(QEMUD_ERR, _("cannot list SASL mechanisms %d (%s)"),
                  err, sasl_errdetail(client->saslconn));
-        remoteDispatchFailAuth(client, req);
+        remoteDispatchAuthError(rerr);
         sasl_dispose(&client->saslconn);
         client->saslconn = NULL;
-        return -2;
+        return -1;
     }
     REMOTE_DEBUG("Available mechanisms for client: '%s'", mechlist);
     ret->mechlist = strdup(mechlist);
     if (!ret->mechlist) {
         qemudLog(QEMUD_ERR, "%s", _("cannot allocate mechlist"));
-        remoteDispatchFailAuth(client, req);
+        remoteDispatchAuthError(rerr);
         sasl_dispose(&client->saslconn);
         client->saslconn = NULL;
-        return -2;
+        return -1;
     }
 
     return 0;
@@ -2578,7 +2623,7 @@ remoteDispatchAuthSaslInit (struct qemud_server *server ATTRIBUTE_UNUSED,
  * got what we asked for */
 static int
 remoteSASLCheckSSF (struct qemud_client *client,
-                    remote_message_header *req) {
+                    remote_error *rerr) {
     const void *val;
     int err, ssf;
 
@@ -2590,7 +2635,7 @@ remoteSASLCheckSSF (struct qemud_client *client,
     if (err != SASL_OK) {
         qemudLog(QEMUD_ERR, _("cannot query SASL ssf on connection %d (%s)"),
                  err, sasl_errstring(err, NULL, NULL));
-        remoteDispatchFailAuth(client, req);
+        remoteDispatchAuthError(rerr);
         sasl_dispose(&client->saslconn);
         client->saslconn = NULL;
         return -1;
@@ -2599,7 +2644,7 @@ remoteSASLCheckSSF (struct qemud_client *client,
     REMOTE_DEBUG("negotiated an SSF of %d", ssf);
     if (ssf < 56) { /* 56 is good for Kerberos */
         qemudLog(QEMUD_ERR, _("negotiated SSF %d was not strong enough"), ssf);
-        remoteDispatchFailAuth(client, req);
+        remoteDispatchAuthError(rerr);
         sasl_dispose(&client->saslconn);
         client->saslconn = NULL;
         return -1;
@@ -2620,7 +2665,7 @@ remoteSASLCheckSSF (struct qemud_client *client,
 static int
 remoteSASLCheckAccess (struct qemud_server *server,
                        struct qemud_client *client,
-                       remote_message_header *req) {
+                       remote_error *rerr) {
     const void *val;
     int err;
     char **wildcards;
@@ -2630,14 +2675,14 @@ remoteSASLCheckAccess (struct qemud_server *server,
         qemudLog(QEMUD_ERR,
                  _("cannot query SASL username on connection %d (%s)"),
                  err, sasl_errstring(err, NULL, NULL));
-        remoteDispatchFailAuth(client, req);
+        remoteDispatchAuthError(rerr);
         sasl_dispose(&client->saslconn);
         client->saslconn = NULL;
         return -1;
     }
     if (val == NULL) {
         qemudLog(QEMUD_ERR, "%s", _("no client username was found"));
-        remoteDispatchFailAuth(client, req);
+        remoteDispatchAuthError(rerr);
         sasl_dispose(&client->saslconn);
         client->saslconn = NULL;
         return -1;
@@ -2647,7 +2692,7 @@ remoteSASLCheckAccess (struct qemud_server *server,
     client->saslUsername = strdup((const char*)val);
     if (client->saslUsername == NULL) {
         qemudLog(QEMUD_ERR, "%s", _("out of memory copying username"));
-        remoteDispatchFailAuth(client, req);
+        remoteDispatchAuthError(rerr);
         sasl_dispose(&client->saslconn);
         client->saslconn = NULL;
         return -1;
@@ -2667,7 +2712,7 @@ remoteSASLCheckAccess (struct qemud_server *server,
     /* Denied */
     qemudLog(QEMUD_ERR, _("SASL client %s not allowed in whitelist"),
              client->saslUsername);
-    remoteDispatchFailAuth(client, req);
+    remoteDispatchAuthError(rerr);
     sasl_dispose(&client->saslconn);
     client->saslconn = NULL;
     return -1;
@@ -2680,7 +2725,7 @@ remoteSASLCheckAccess (struct qemud_server *server,
 static int
 remoteDispatchAuthSaslStart (struct qemud_server *server,
                              struct qemud_client *client,
-                             remote_message_header *req,
+                             remote_error *rerr,
                              remote_auth_sasl_start_args *args,
                              remote_auth_sasl_start_ret *ret)
 {
@@ -2692,8 +2737,8 @@ remoteDispatchAuthSaslStart (struct qemud_server *server,
     if (client->auth != REMOTE_AUTH_SASL ||
         client->saslconn == NULL) {
         qemudLog(QEMUD_ERR, "%s", _("client tried invalid SASL start request"));
-        remoteDispatchFailAuth(client, req);
-        return -2;
+        remoteDispatchAuthError(rerr);
+        return -1;
     }
 
     REMOTE_DEBUG("Using SASL mechanism %s. Data %d bytes, nil: %d",
@@ -2711,23 +2756,23 @@ remoteDispatchAuthSaslStart (struct qemud_server *server,
                  err, sasl_errdetail(client->saslconn));
         sasl_dispose(&client->saslconn);
         client->saslconn = NULL;
-        remoteDispatchFailAuth(client, req);
-        return -2;
+        remoteDispatchAuthError(rerr);
+        return -1;
     }
     if (serveroutlen > REMOTE_AUTH_SASL_DATA_MAX) {
         qemudLog(QEMUD_ERR, _("sasl start reply data too long %d"),
                  serveroutlen);
         sasl_dispose(&client->saslconn);
         client->saslconn = NULL;
-        remoteDispatchFailAuth(client, req);
-        return -2;
+        remoteDispatchAuthError(rerr);
+        return -1;
     }
 
     /* NB, distinction of NULL vs "" is *critical* in SASL */
     if (serverout) {
         if (VIR_ALLOC_N(ret->data.data_val, serveroutlen) < 0) {
-            remoteDispatchSendError(client, req, VIR_ERR_NO_MEMORY, NULL);
-            return -2;
+            remoteDispatchOOMError(rerr);
+            return -1;
         }
         memcpy(ret->data.data_val, serverout, serveroutlen);
     } else {
@@ -2740,12 +2785,12 @@ remoteDispatchAuthSaslStart (struct qemud_server *server,
     if (err == SASL_CONTINUE) {
         ret->complete = 0;
     } else {
-        if (remoteSASLCheckSSF(client, req) < 0)
-            return -2;
+        if (remoteSASLCheckSSF(client, rerr) < 0)
+            return -1;
 
         /* Check username whitelist ACL */
-        if (remoteSASLCheckAccess(server, client, req) < 0)
-            return -2;
+        if (remoteSASLCheckAccess(server, client, rerr) < 0)
+            return -1;
 
         REMOTE_DEBUG("Authentication successful %d", client->fd);
         ret->complete = 1;
@@ -2759,7 +2804,7 @@ remoteDispatchAuthSaslStart (struct qemud_server *server,
 static int
 remoteDispatchAuthSaslStep (struct qemud_server *server,
                             struct qemud_client *client,
-                            remote_message_header *req,
+                            remote_error *rerr,
                             remote_auth_sasl_step_args *args,
                             remote_auth_sasl_step_ret *ret)
 {
@@ -2771,8 +2816,8 @@ remoteDispatchAuthSaslStep (struct qemud_server *server,
     if (client->auth != REMOTE_AUTH_SASL ||
         client->saslconn == NULL) {
         qemudLog(QEMUD_ERR, "%s", _("client tried invalid SASL start request"));
-        remoteDispatchFailAuth(client, req);
-        return -2;
+        remoteDispatchAuthError(rerr);
+        return -1;
     }
 
     REMOTE_DEBUG("Using SASL Data %d bytes, nil: %d",
@@ -2789,8 +2834,8 @@ remoteDispatchAuthSaslStep (struct qemud_server *server,
                  err, sasl_errdetail(client->saslconn));
         sasl_dispose(&client->saslconn);
         client->saslconn = NULL;
-        remoteDispatchFailAuth(client, req);
-        return -2;
+        remoteDispatchAuthError(rerr);
+        return -1;
     }
 
     if (serveroutlen > REMOTE_AUTH_SASL_DATA_MAX) {
@@ -2798,15 +2843,15 @@ remoteDispatchAuthSaslStep (struct qemud_server *server,
                  serveroutlen);
         sasl_dispose(&client->saslconn);
         client->saslconn = NULL;
-        remoteDispatchFailAuth(client, req);
-        return -2;
+        remoteDispatchAuthError(rerr);
+        return -1;
     }
 
     /* NB, distinction of NULL vs "" is *critical* in SASL */
     if (serverout) {
         if (VIR_ALLOC_N(ret->data.data_val, serveroutlen) < 0) {
-            remoteDispatchSendError(client, req, VIR_ERR_NO_MEMORY, NULL);
-            return -2;
+            remoteDispatchOOMError(rerr);
+            return -1;
         }
         memcpy(ret->data.data_val, serverout, serveroutlen);
     } else {
@@ -2819,12 +2864,12 @@ remoteDispatchAuthSaslStep (struct qemud_server *server,
     if (err == SASL_CONTINUE) {
         ret->complete = 0;
     } else {
-        if (remoteSASLCheckSSF(client, req) < 0)
-            return -2;
+        if (remoteSASLCheckSSF(client, rerr) < 0)
+            return -1;
 
         /* Check username whitelist ACL */
-        if (remoteSASLCheckAccess(server, client, req) < 0)
-            return -2;
+        if (remoteSASLCheckAccess(server, client, rerr) < 0)
+            return -1;
 
         REMOTE_DEBUG("Authentication successful %d", client->fd);
         ret->complete = 1;
@@ -2839,36 +2884,36 @@ remoteDispatchAuthSaslStep (struct qemud_server *server,
 static int
 remoteDispatchAuthSaslInit (struct qemud_server *server ATTRIBUTE_UNUSED,
                             struct qemud_client *client,
-                            remote_message_header *req,
+                            remote_error *rerr,
                             void *args ATTRIBUTE_UNUSED,
                             remote_auth_sasl_init_ret *ret ATTRIBUTE_UNUSED)
 {
     qemudLog(QEMUD_ERR, "%s", _("client tried unsupported SASL init request"));
-    remoteDispatchFailAuth(client, req);
+    remoteDispatchAuthError(rerr);
     return -1;
 }
 
 static int
 remoteDispatchAuthSaslStart (struct qemud_server *server ATTRIBUTE_UNUSED,
                              struct qemud_client *client,
-                             remote_message_header *req,
+                             remote_error *rerr,
                              remote_auth_sasl_start_args *args ATTRIBUTE_UNUSED,
                              remote_auth_sasl_start_ret *ret ATTRIBUTE_UNUSED)
 {
     qemudLog(QEMUD_ERR, "%s", _("client tried unsupported SASL start request"));
-    remoteDispatchFailAuth(client, req);
+    remoteDispatchAuthError(rerr);
     return -1;
 }
 
 static int
 remoteDispatchAuthSaslStep (struct qemud_server *server ATTRIBUTE_UNUSED,
                             struct qemud_client *client,
-                            remote_message_header *req,
+                            remote_error *rerr,
                             remote_auth_sasl_step_args *args ATTRIBUTE_UNUSED,
                             remote_auth_sasl_step_ret *ret ATTRIBUTE_UNUSED)
 {
     qemudLog(QEMUD_ERR, "%s", _("client tried unsupported SASL step request"));
-    remoteDispatchFailAuth(client, req);
+    remoteDispatchAuthError(rerr);
     return -1;
 }
 #endif /* HAVE_SASL */
@@ -2878,7 +2923,7 @@ remoteDispatchAuthSaslStep (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchAuthPolkit (struct qemud_server *server ATTRIBUTE_UNUSED,
                           struct qemud_client *client,
-                          remote_message_header *req,
+                          remote_error *rerr,
                           void *args ATTRIBUTE_UNUSED,
                           remote_auth_polkit_ret *ret)
 {
@@ -2898,14 +2943,14 @@ remoteDispatchAuthPolkit (struct qemud_server *server ATTRIBUTE_UNUSED,
     if (client->auth != REMOTE_AUTH_POLKIT) {
         qemudLog(QEMUD_ERR,
                  "%s", _("client tried invalid PolicyKit init request"));
-        remoteDispatchFailAuth(client, req);
-        return -2;
+        remoteDispatchAuthError(rerr);
+        return -1;
     }
 
     if (qemudGetSocketIdentity(client->fd, &callerUid, &callerPid) < 0) {
         qemudLog(QEMUD_ERR, "%s", _("cannot get peer socket identity"));
-        remoteDispatchFailAuth(client, req);
-        return -2;
+        remoteDispatchAuthError(rerr);
+        return -1;
     }
 
     qemudLog(QEMUD_INFO, _("Checking PID %d running as %d"),
@@ -2916,16 +2961,16 @@ remoteDispatchAuthPolkit (struct qemud_server *server ATTRIBUTE_UNUSED,
         qemudLog(QEMUD_ERR, _("Failed to lookup policy kit caller: %s"),
                  err.message);
         dbus_error_free(&err);
-        remoteDispatchFailAuth(client, req);
-        return -2;
+        remoteDispatchAuthError(rerr);
+        return -1;
     }
 
     if (!(pkaction = polkit_action_new())) {
         qemudLog(QEMUD_ERR, _("Failed to create polkit action %s\n"),
                  strerror(errno));
         polkit_caller_unref(pkcaller);
-        remoteDispatchFailAuth(client, req);
-        return -2;
+        remoteDispatchAuthError(rerr);
+        return -1;
     }
     polkit_action_set_action_id(pkaction, action);
 
@@ -2939,8 +2984,8 @@ remoteDispatchAuthPolkit (struct qemud_server *server ATTRIBUTE_UNUSED,
         polkit_caller_unref(pkcaller);
         polkit_action_unref(pkaction);
         dbus_error_free(&err);
-        remoteDispatchFailAuth(client, req);
-        return -2;
+        remoteDispatchAuthError(rerr);
+        return -1;
     }
 
 #if HAVE_POLKIT_CONTEXT_IS_CALLER_AUTHORIZED
@@ -2954,8 +2999,8 @@ remoteDispatchAuthPolkit (struct qemud_server *server ATTRIBUTE_UNUSED,
                  _("Policy kit failed to check authorization %d %s"),
                  polkit_error_get_error_code(pkerr),
                  polkit_error_get_error_message(pkerr));
-        remoteDispatchFailAuth(client, req);
-        return -2;
+        remoteDispatchAuthError(rerr);
+        return -1;
     }
 #else
     pkresult = polkit_context_can_caller_do_action(pkcontext,
@@ -2971,8 +3016,8 @@ remoteDispatchAuthPolkit (struct qemud_server *server ATTRIBUTE_UNUSED,
                    " result: %s\n"),
                  action, callerPid, callerUid,
                  polkit_result_to_string_representation(pkresult));
-        remoteDispatchFailAuth(client, req);
-        return -2;
+        remoteDispatchAuthError(rerr);
+        return -1;
     }
     qemudLog(QEMUD_INFO,
              _("Policy allowed action %s from pid %d, uid %d, result %s"),
@@ -2988,14 +3033,14 @@ remoteDispatchAuthPolkit (struct qemud_server *server ATTRIBUTE_UNUSED,
 
 static int
 remoteDispatchAuthPolkit (struct qemud_server *server ATTRIBUTE_UNUSED,
-                              struct qemud_client *client,
-                              remote_message_header *req,
-                              void *args ATTRIBUTE_UNUSED,
-                              remote_auth_polkit_ret *ret ATTRIBUTE_UNUSED)
+                          struct qemud_client *client,
+                          remote_error *rerr,
+                          void *args ATTRIBUTE_UNUSED,
+                          remote_auth_polkit_ret *ret ATTRIBUTE_UNUSED)
 {
     qemudLog(QEMUD_ERR,
              "%s", _("client tried unsupported PolicyKit init request"));
-    remoteDispatchFailAuth(client, req);
+    remoteDispatchAuthError(rerr);
     return -1;
 }
 #endif /* HAVE_POLKIT */
@@ -3009,22 +3054,22 @@ remoteDispatchAuthPolkit (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchListDefinedStoragePools (struct qemud_server *server ATTRIBUTE_UNUSED,
                                        struct qemud_client *client,
-                                       remote_message_header *req,
+                                       remote_error *rerr,
                                        remote_list_defined_storage_pools_args *args,
                                        remote_list_defined_storage_pools_ret *ret)
 {
     CHECK_CONN(client);
 
     if (args->maxnames > REMOTE_NETWORK_NAME_LIST_MAX) {
-        remoteDispatchError (client, req,
-                             "%s", _("maxnames > REMOTE_NETWORK_NAME_LIST_MAX"));
-        return -2;
+        remoteDispatchFormatError (rerr,
+                                   "%s", _("maxnames > REMOTE_NETWORK_NAME_LIST_MAX"));
+        return -1;
     }
 
     /* Allocate return buffer. */
     if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
-        remoteDispatchSendError(client, req, VIR_ERR_NO_MEMORY, NULL);
-        return -2;
+        remoteDispatchOOMError(rerr);
+        return -1;
     }
 
     ret->names.names_len =
@@ -3032,6 +3077,7 @@ remoteDispatchListDefinedStoragePools (struct qemud_server *server ATTRIBUTE_UNU
                                            ret->names.names_val, args->maxnames);
     if (ret->names.names_len == -1) {
         VIR_FREE(ret->names.names_val);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
 
@@ -3041,22 +3087,22 @@ remoteDispatchListDefinedStoragePools (struct qemud_server *server ATTRIBUTE_UNU
 static int
 remoteDispatchListStoragePools (struct qemud_server *server ATTRIBUTE_UNUSED,
                                 struct qemud_client *client,
-                                remote_message_header *req,
+                                remote_error *rerr,
                                 remote_list_storage_pools_args *args,
                                 remote_list_storage_pools_ret *ret)
 {
     CHECK_CONN(client);
 
     if (args->maxnames > REMOTE_STORAGE_POOL_NAME_LIST_MAX) {
-        remoteDispatchError (client, req,
-                             "%s", _("maxnames > REMOTE_STORAGE_POOL_NAME_LIST_MAX"));
-        return -2;
+        remoteDispatchFormatError (rerr,
+                                   "%s", _("maxnames > REMOTE_STORAGE_POOL_NAME_LIST_MAX"));
+        return -1;
     }
 
     /* Allocate return buffer. */
     if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
-        remoteDispatchSendError(client, req, VIR_ERR_NO_MEMORY, NULL);
-        return -2;
+        remoteDispatchOOMError(rerr);
+        return -1;
     }
 
     ret->names.names_len =
@@ -3064,6 +3110,7 @@ remoteDispatchListStoragePools (struct qemud_server *server ATTRIBUTE_UNUSED,
                                 ret->names.names_val, args->maxnames);
     if (ret->names.names_len == -1) {
         VIR_FREE(ret->names.names_val);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
 
@@ -3073,7 +3120,7 @@ remoteDispatchListStoragePools (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchFindStoragePoolSources (struct qemud_server *server ATTRIBUTE_UNUSED,
                                       struct qemud_client *client,
-                                      remote_message_header *req,
+                                      remote_error *rerr,
                                       remote_find_storage_pool_sources_args *args,
                                       remote_find_storage_pool_sources_ret *ret)
 {
@@ -3084,8 +3131,10 @@ remoteDispatchFindStoragePoolSources (struct qemud_server *server ATTRIBUTE_UNUS
                                           args->type,
                                           args->srcSpec ? *args->srcSpec : NULL,
                                           args->flags);
-    if (ret->xml == NULL)
+    if (ret->xml == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
+    }
 
     return 0;
 }
@@ -3094,7 +3143,7 @@ remoteDispatchFindStoragePoolSources (struct qemud_server *server ATTRIBUTE_UNUS
 static int
 remoteDispatchStoragePoolCreate (struct qemud_server *server ATTRIBUTE_UNUSED,
                                  struct qemud_client *client,
-                                 remote_message_header *req,
+                                 remote_error *rerr,
                                  remote_storage_pool_create_args *args,
                                  void *ret ATTRIBUTE_UNUSED)
 {
@@ -3103,12 +3152,13 @@ remoteDispatchStoragePoolCreate (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     pool = get_nonnull_storage_pool (client->conn, args->pool);
     if (pool == NULL) {
-        remoteDispatchError (client, req, "%s", _("storage_pool not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virStoragePoolCreate (pool, args->flags) == -1) {
         virStoragePoolFree(pool);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virStoragePoolFree(pool);
@@ -3118,7 +3168,7 @@ remoteDispatchStoragePoolCreate (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchStoragePoolCreateXml (struct qemud_server *server ATTRIBUTE_UNUSED,
                                     struct qemud_client *client,
-                                    remote_message_header *req,
+                                    remote_error *rerr,
                                     remote_storage_pool_create_xml_args *args,
                                     remote_storage_pool_create_xml_ret *ret)
 {
@@ -3126,7 +3176,10 @@ remoteDispatchStoragePoolCreateXml (struct qemud_server *server ATTRIBUTE_UNUSED
     CHECK_CONN(client);
 
     pool = virStoragePoolCreateXML (client->conn, args->xml, args->flags);
-    if (pool == NULL) return -1;
+    if (pool == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     make_nonnull_storage_pool (&ret->pool, pool);
     virStoragePoolFree(pool);
@@ -3136,7 +3189,7 @@ remoteDispatchStoragePoolCreateXml (struct qemud_server *server ATTRIBUTE_UNUSED
 static int
 remoteDispatchStoragePoolDefineXml (struct qemud_server *server ATTRIBUTE_UNUSED,
                                     struct qemud_client *client,
-                                    remote_message_header *req,
+                                    remote_error *rerr,
                                     remote_storage_pool_define_xml_args *args,
                                     remote_storage_pool_define_xml_ret *ret)
 {
@@ -3144,7 +3197,10 @@ remoteDispatchStoragePoolDefineXml (struct qemud_server *server ATTRIBUTE_UNUSED
     CHECK_CONN(client);
 
     pool = virStoragePoolDefineXML (client->conn, args->xml, args->flags);
-    if (pool == NULL) return -1;
+    if (pool == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     make_nonnull_storage_pool (&ret->pool, pool);
     virStoragePoolFree(pool);
@@ -3153,22 +3209,23 @@ remoteDispatchStoragePoolDefineXml (struct qemud_server *server ATTRIBUTE_UNUSED
 
 static int
 remoteDispatchStoragePoolBuild (struct qemud_server *server ATTRIBUTE_UNUSED,
-                                 struct qemud_client *client,
-                                 remote_message_header *req,
-                                 remote_storage_pool_build_args *args,
-                                 void *ret ATTRIBUTE_UNUSED)
+                                struct qemud_client *client,
+                                remote_error *rerr,
+                                remote_storage_pool_build_args *args,
+                                void *ret ATTRIBUTE_UNUSED)
 {
     virStoragePoolPtr pool;
     CHECK_CONN(client);
 
     pool = get_nonnull_storage_pool (client->conn, args->pool);
     if (pool == NULL) {
-        remoteDispatchError (client, req, "%s", _("storage_pool not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virStoragePoolBuild (pool, args->flags) == -1) {
         virStoragePoolFree(pool);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virStoragePoolFree(pool);
@@ -3179,7 +3236,7 @@ remoteDispatchStoragePoolBuild (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchStoragePoolDestroy (struct qemud_server *server ATTRIBUTE_UNUSED,
                                   struct qemud_client *client,
-                                  remote_message_header *req,
+                                  remote_error *rerr,
                                   remote_storage_pool_destroy_args *args,
                                   void *ret ATTRIBUTE_UNUSED)
 {
@@ -3188,12 +3245,13 @@ remoteDispatchStoragePoolDestroy (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     pool = get_nonnull_storage_pool (client->conn, args->pool);
     if (pool == NULL) {
-        remoteDispatchError (client, req, "%s", _("storage_pool not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virStoragePoolDestroy (pool) == -1) {
         virStoragePoolFree(pool);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virStoragePoolFree(pool);
@@ -3203,7 +3261,7 @@ remoteDispatchStoragePoolDestroy (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchStoragePoolDelete (struct qemud_server *server ATTRIBUTE_UNUSED,
                                  struct qemud_client *client,
-                                 remote_message_header *req,
+                                 remote_error *rerr,
                                  remote_storage_pool_delete_args *args,
                                  void *ret ATTRIBUTE_UNUSED)
 {
@@ -3212,12 +3270,13 @@ remoteDispatchStoragePoolDelete (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     pool = get_nonnull_storage_pool (client->conn, args->pool);
     if (pool == NULL) {
-        remoteDispatchError (client, req, "%s", _("storage_pool not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virStoragePoolDelete (pool, args->flags) == -1) {
         virStoragePoolFree(pool);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virStoragePoolFree(pool);
@@ -3227,7 +3286,7 @@ remoteDispatchStoragePoolDelete (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchStoragePoolRefresh (struct qemud_server *server ATTRIBUTE_UNUSED,
                                   struct qemud_client *client,
-                                  remote_message_header *req,
+                                  remote_error *rerr,
                                   remote_storage_pool_refresh_args *args,
                                   void *ret ATTRIBUTE_UNUSED)
 {
@@ -3236,12 +3295,13 @@ remoteDispatchStoragePoolRefresh (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     pool = get_nonnull_storage_pool (client->conn, args->pool);
     if (pool == NULL) {
-        remoteDispatchError (client, req, "%s", _("storage_pool not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virStoragePoolRefresh (pool, args->flags) == -1) {
         virStoragePoolFree(pool);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virStoragePoolFree(pool);
@@ -3251,7 +3311,7 @@ remoteDispatchStoragePoolRefresh (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchStoragePoolGetInfo (struct qemud_server *server ATTRIBUTE_UNUSED,
                                   struct qemud_client *client,
-                                  remote_message_header *req,
+                                  remote_error *rerr,
                                   remote_storage_pool_get_info_args *args,
                                   remote_storage_pool_get_info_ret *ret)
 {
@@ -3261,12 +3321,13 @@ remoteDispatchStoragePoolGetInfo (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     pool = get_nonnull_storage_pool (client->conn, args->pool);
     if (pool == NULL) {
-        remoteDispatchError (client, req, "%s", _("storage_pool not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virStoragePoolGetInfo (pool, &info) == -1) {
         virStoragePoolFree(pool);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
 
@@ -3283,7 +3344,7 @@ remoteDispatchStoragePoolGetInfo (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchStoragePoolDumpXml (struct qemud_server *server ATTRIBUTE_UNUSED,
                                   struct qemud_client *client,
-                                  remote_message_header *req,
+                                  remote_error *rerr,
                                   remote_storage_pool_dump_xml_args *args,
                                   remote_storage_pool_dump_xml_ret *ret)
 {
@@ -3292,14 +3353,15 @@ remoteDispatchStoragePoolDumpXml (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     pool = get_nonnull_storage_pool (client->conn, args->pool);
     if (pool == NULL) {
-        remoteDispatchError (client, req, "%s", _("storage_pool not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     /* remoteDispatchClientRequest will free this. */
     ret->xml = virStoragePoolGetXMLDesc (pool, args->flags);
     if (!ret->xml) {
         virStoragePoolFree(pool);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virStoragePoolFree(pool);
@@ -3309,7 +3371,7 @@ remoteDispatchStoragePoolDumpXml (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchStoragePoolGetAutostart (struct qemud_server *server ATTRIBUTE_UNUSED,
                                        struct qemud_client *client,
-                                       remote_message_header *req,
+                                       remote_error *rerr,
                                        remote_storage_pool_get_autostart_args *args,
                                        remote_storage_pool_get_autostart_ret *ret)
 {
@@ -3318,12 +3380,13 @@ remoteDispatchStoragePoolGetAutostart (struct qemud_server *server ATTRIBUTE_UNU
 
     pool = get_nonnull_storage_pool (client->conn, args->pool);
     if (pool == NULL) {
-        remoteDispatchError (client, req, "%s", _("storage_pool not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virStoragePoolGetAutostart (pool, &ret->autostart) == -1) {
         virStoragePoolFree(pool);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virStoragePoolFree(pool);
@@ -3334,7 +3397,7 @@ remoteDispatchStoragePoolGetAutostart (struct qemud_server *server ATTRIBUTE_UNU
 static int
 remoteDispatchStoragePoolLookupByName (struct qemud_server *server ATTRIBUTE_UNUSED,
                                        struct qemud_client *client,
-                                       remote_message_header *req,
+                                       remote_error *rerr,
                                        remote_storage_pool_lookup_by_name_args *args,
                                        remote_storage_pool_lookup_by_name_ret *ret)
 {
@@ -3342,7 +3405,10 @@ remoteDispatchStoragePoolLookupByName (struct qemud_server *server ATTRIBUTE_UNU
     CHECK_CONN(client);
 
     pool = virStoragePoolLookupByName (client->conn, args->name);
-    if (pool == NULL) return -1;
+    if (pool == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     make_nonnull_storage_pool (&ret->pool, pool);
     virStoragePoolFree(pool);
@@ -3352,7 +3418,7 @@ remoteDispatchStoragePoolLookupByName (struct qemud_server *server ATTRIBUTE_UNU
 static int
 remoteDispatchStoragePoolLookupByUuid (struct qemud_server *server ATTRIBUTE_UNUSED,
                                        struct qemud_client *client,
-                                       remote_message_header *req,
+                                       remote_error *rerr,
                                        remote_storage_pool_lookup_by_uuid_args *args,
                                        remote_storage_pool_lookup_by_uuid_ret *ret)
 {
@@ -3360,7 +3426,10 @@ remoteDispatchStoragePoolLookupByUuid (struct qemud_server *server ATTRIBUTE_UNU
     CHECK_CONN(client);
 
     pool = virStoragePoolLookupByUUID (client->conn, (unsigned char *) args->uuid);
-    if (pool == NULL) return -1;
+    if (pool == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     make_nonnull_storage_pool (&ret->pool, pool);
     virStoragePoolFree(pool);
@@ -3370,7 +3439,7 @@ remoteDispatchStoragePoolLookupByUuid (struct qemud_server *server ATTRIBUTE_UNU
 static int
 remoteDispatchStoragePoolLookupByVolume (struct qemud_server *server ATTRIBUTE_UNUSED,
                                          struct qemud_client *client,
-                                         remote_message_header *req,
+                                         remote_error *rerr,
                                          remote_storage_pool_lookup_by_volume_args *args,
                                          remote_storage_pool_lookup_by_volume_ret *ret)
 {
@@ -3379,10 +3448,17 @@ remoteDispatchStoragePoolLookupByVolume (struct qemud_server *server ATTRIBUTE_U
     CHECK_CONN(client);
 
     vol = get_nonnull_storage_vol (client->conn, args->vol);
+    if (vol == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     pool = virStoragePoolLookupByVolume (vol);
     virStorageVolFree(vol);
-    if (pool == NULL) return -1;
+    if (pool == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     make_nonnull_storage_pool (&ret->pool, pool);
     virStoragePoolFree(pool);
@@ -3392,7 +3468,7 @@ remoteDispatchStoragePoolLookupByVolume (struct qemud_server *server ATTRIBUTE_U
 static int
 remoteDispatchStoragePoolSetAutostart (struct qemud_server *server ATTRIBUTE_UNUSED,
                                        struct qemud_client *client,
-                                       remote_message_header *req,
+                                       remote_error *rerr,
                                        remote_storage_pool_set_autostart_args *args,
                                        void *ret ATTRIBUTE_UNUSED)
 {
@@ -3401,12 +3477,13 @@ remoteDispatchStoragePoolSetAutostart (struct qemud_server *server ATTRIBUTE_UNU
 
     pool = get_nonnull_storage_pool (client->conn, args->pool);
     if (pool == NULL) {
-        remoteDispatchError (client, req, "%s", _("storage_pool not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virStoragePoolSetAutostart (pool, args->autostart) == -1) {
         virStoragePoolFree(pool);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virStoragePoolFree(pool);
@@ -3416,7 +3493,7 @@ remoteDispatchStoragePoolSetAutostart (struct qemud_server *server ATTRIBUTE_UNU
 static int
 remoteDispatchStoragePoolUndefine (struct qemud_server *server ATTRIBUTE_UNUSED,
                                    struct qemud_client *client,
-                                   remote_message_header *req,
+                                   remote_error *rerr,
                                    remote_storage_pool_undefine_args *args,
                                    void *ret ATTRIBUTE_UNUSED)
 {
@@ -3425,12 +3502,13 @@ remoteDispatchStoragePoolUndefine (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     pool = get_nonnull_storage_pool (client->conn, args->pool);
     if (pool == NULL) {
-        remoteDispatchError (client, req, "%s", _("storage_pool not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virStoragePoolUndefine (pool) == -1) {
         virStoragePoolFree(pool);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virStoragePoolFree(pool);
@@ -3440,14 +3518,17 @@ remoteDispatchStoragePoolUndefine (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchNumOfStoragePools (struct qemud_server *server ATTRIBUTE_UNUSED,
                                  struct qemud_client *client,
-                                 remote_message_header *req,
+                                 remote_error *rerr,
                                  void *args ATTRIBUTE_UNUSED,
                                  remote_num_of_storage_pools_ret *ret)
 {
     CHECK_CONN(client);
 
     ret->num = virConnectNumOfStoragePools (client->conn);
-    if (ret->num == -1) return -1;
+    if (ret->num == -1) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     return 0;
 }
@@ -3455,14 +3536,17 @@ remoteDispatchNumOfStoragePools (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchNumOfDefinedStoragePools (struct qemud_server *server ATTRIBUTE_UNUSED,
                                         struct qemud_client *client,
-                                        remote_message_header *req,
+                                        remote_error *rerr,
                                         void *args ATTRIBUTE_UNUSED,
                                         remote_num_of_defined_storage_pools_ret *ret)
 {
     CHECK_CONN(client);
 
     ret->num = virConnectNumOfDefinedStoragePools (client->conn);
-    if (ret->num == -1) return -1;
+    if (ret->num == -1) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     return 0;
 }
@@ -3470,7 +3554,7 @@ remoteDispatchNumOfDefinedStoragePools (struct qemud_server *server ATTRIBUTE_UN
 static int
 remoteDispatchStoragePoolListVolumes (struct qemud_server *server ATTRIBUTE_UNUSED,
                                       struct qemud_client *client,
-                                      remote_message_header *req,
+                                      remote_error *rerr,
                                       remote_storage_pool_list_volumes_args *args,
                                       remote_storage_pool_list_volumes_ret *ret)
 {
@@ -3478,22 +3562,22 @@ remoteDispatchStoragePoolListVolumes (struct qemud_server *server ATTRIBUTE_UNUS
     CHECK_CONN(client);
 
     if (args->maxnames > REMOTE_STORAGE_VOL_NAME_LIST_MAX) {
-        remoteDispatchError (client, req,
-                             "%s", _("maxnames > REMOTE_STORAGE_VOL_NAME_LIST_MAX"));
-        return -2;
+        remoteDispatchFormatError (rerr,
+                                   "%s", _("maxnames > REMOTE_STORAGE_VOL_NAME_LIST_MAX"));
+        return -1;
     }
 
     pool = get_nonnull_storage_pool (client->conn, args->pool);
     if (pool == NULL) {
-        remoteDispatchError (client, req, "%s", _("storage_pool not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     /* Allocate return buffer. */
     if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
         virStoragePoolFree(pool);
-        remoteDispatchSendError(client, req, VIR_ERR_NO_MEMORY, NULL);
-        return -2;
+        remoteDispatchOOMError(rerr);
+        return -1;
     }
 
     ret->names.names_len =
@@ -3502,6 +3586,7 @@ remoteDispatchStoragePoolListVolumes (struct qemud_server *server ATTRIBUTE_UNUS
     virStoragePoolFree(pool);
     if (ret->names.names_len == -1) {
         VIR_FREE(ret->names.names_val);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
 
@@ -3512,7 +3597,7 @@ remoteDispatchStoragePoolListVolumes (struct qemud_server *server ATTRIBUTE_UNUS
 static int
 remoteDispatchStoragePoolNumOfVolumes (struct qemud_server *server ATTRIBUTE_UNUSED,
                                        struct qemud_client *client,
-                                       remote_message_header *req,
+                                       remote_error *rerr,
                                        remote_storage_pool_num_of_volumes_args *args,
                                        remote_storage_pool_num_of_volumes_ret *ret)
 {
@@ -3521,13 +3606,16 @@ remoteDispatchStoragePoolNumOfVolumes (struct qemud_server *server ATTRIBUTE_UNU
 
     pool = get_nonnull_storage_pool (client->conn, args->pool);
     if (pool == NULL) {
-        remoteDispatchError (client, req, "%s", _("storage_pool not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     ret->num = virStoragePoolNumOfVolumes (pool);
     virStoragePoolFree(pool);
-    if (ret->num == -1) return -1;
+    if (ret->num == -1) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     return 0;
 }
@@ -3542,7 +3630,7 @@ remoteDispatchStoragePoolNumOfVolumes (struct qemud_server *server ATTRIBUTE_UNU
 static int
 remoteDispatchStorageVolCreateXml (struct qemud_server *server ATTRIBUTE_UNUSED,
                                    struct qemud_client *client,
-                                   remote_message_header *req,
+                                   remote_error *rerr,
                                    remote_storage_vol_create_xml_args *args,
                                    remote_storage_vol_create_xml_ret *ret)
 {
@@ -3552,13 +3640,16 @@ remoteDispatchStorageVolCreateXml (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     pool = get_nonnull_storage_pool (client->conn, args->pool);
     if (pool == NULL) {
-        remoteDispatchError (client, req, "%s", _("storage_pool not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     vol = virStorageVolCreateXML (pool, args->xml, args->flags);
     virStoragePoolFree(pool);
-    if (vol == NULL) return -1;
+    if (vol == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     make_nonnull_storage_vol (&ret->vol, vol);
     virStorageVolFree(vol);
@@ -3569,7 +3660,7 @@ remoteDispatchStorageVolCreateXml (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchStorageVolDelete (struct qemud_server *server ATTRIBUTE_UNUSED,
                                 struct qemud_client *client,
-                                remote_message_header *req,
+                                remote_error *rerr,
                                 remote_storage_vol_delete_args *args,
                                 void *ret ATTRIBUTE_UNUSED)
 {
@@ -3578,12 +3669,13 @@ remoteDispatchStorageVolDelete (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     vol = get_nonnull_storage_vol (client->conn, args->vol);
     if (vol == NULL) {
-        remoteDispatchError (client, req, "%s", _("storage_vol not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virStorageVolDelete (vol, args->flags) == -1) {
         virStorageVolFree(vol);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virStorageVolFree(vol);
@@ -3593,7 +3685,7 @@ remoteDispatchStorageVolDelete (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchStorageVolGetInfo (struct qemud_server *server ATTRIBUTE_UNUSED,
                                  struct qemud_client *client,
-                                 remote_message_header *req,
+                                 remote_error *rerr,
                                  remote_storage_vol_get_info_args *args,
                                  remote_storage_vol_get_info_ret *ret)
 {
@@ -3603,12 +3695,13 @@ remoteDispatchStorageVolGetInfo (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     vol = get_nonnull_storage_vol (client->conn, args->vol);
     if (vol == NULL) {
-        remoteDispatchError (client, req, "%s", _("storage_vol not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     if (virStorageVolGetInfo (vol, &info) == -1) {
         virStorageVolFree(vol);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
 
@@ -3624,7 +3717,7 @@ remoteDispatchStorageVolGetInfo (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchStorageVolDumpXml (struct qemud_server *server ATTRIBUTE_UNUSED,
                                  struct qemud_client *client,
-                                 remote_message_header *req,
+                                 remote_error *rerr,
                                  remote_storage_vol_dump_xml_args *args,
                                  remote_storage_vol_dump_xml_ret *ret)
 {
@@ -3633,14 +3726,15 @@ remoteDispatchStorageVolDumpXml (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     vol = get_nonnull_storage_vol (client->conn, args->vol);
     if (vol == NULL) {
-        remoteDispatchError (client, req, "%s", _("storage_vol not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     /* remoteDispatchClientRequest will free this. */
     ret->xml = virStorageVolGetXMLDesc (vol, args->flags);
     if (!ret->xml) {
         virStorageVolFree(vol);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virStorageVolFree(vol);
@@ -3651,7 +3745,7 @@ remoteDispatchStorageVolDumpXml (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchStorageVolGetPath (struct qemud_server *server ATTRIBUTE_UNUSED,
                                  struct qemud_client *client,
-                                 remote_message_header *req,
+                                 remote_error *rerr,
                                  remote_storage_vol_get_path_args *args,
                                  remote_storage_vol_get_path_ret *ret)
 {
@@ -3660,14 +3754,15 @@ remoteDispatchStorageVolGetPath (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     vol = get_nonnull_storage_vol (client->conn, args->vol);
     if (vol == NULL) {
-        remoteDispatchError (client, req, "%s", _("storage_vol not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     /* remoteDispatchClientRequest will free this. */
     ret->name = virStorageVolGetPath (vol);
     if (!ret->name) {
         virStorageVolFree(vol);
+        remoteDispatchConnError(rerr, client->conn);
         return -1;
     }
     virStorageVolFree(vol);
@@ -3678,7 +3773,7 @@ remoteDispatchStorageVolGetPath (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchStorageVolLookupByName (struct qemud_server *server ATTRIBUTE_UNUSED,
                                       struct qemud_client *client,
-                                      remote_message_header *req,
+                                      remote_error *rerr,
                                       remote_storage_vol_lookup_by_name_args *args,
                                       remote_storage_vol_lookup_by_name_ret *ret)
 {
@@ -3688,13 +3783,16 @@ remoteDispatchStorageVolLookupByName (struct qemud_server *server ATTRIBUTE_UNUS
 
     pool = get_nonnull_storage_pool (client->conn, args->pool);
     if (pool == NULL) {
-        remoteDispatchError (client, req, "%s", _("storage_pool not found"));
-        return -2;
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
     }
 
     vol = virStorageVolLookupByName (pool, args->name);
     virStoragePoolFree(pool);
-    if (vol == NULL) return -1;
+    if (vol == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     make_nonnull_storage_vol (&ret->vol, vol);
     virStorageVolFree(vol);
@@ -3704,7 +3802,7 @@ remoteDispatchStorageVolLookupByName (struct qemud_server *server ATTRIBUTE_UNUS
 static int
 remoteDispatchStorageVolLookupByKey (struct qemud_server *server ATTRIBUTE_UNUSED,
                                      struct qemud_client *client,
-                                     remote_message_header *req,
+                                     remote_error *rerr,
                                      remote_storage_vol_lookup_by_key_args *args,
                                      remote_storage_vol_lookup_by_key_ret *ret)
 {
@@ -3712,7 +3810,10 @@ remoteDispatchStorageVolLookupByKey (struct qemud_server *server ATTRIBUTE_UNUSE
     CHECK_CONN(client);
 
     vol = virStorageVolLookupByKey (client->conn, args->key);
-    if (vol == NULL) return -1;
+    if (vol == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     make_nonnull_storage_vol (&ret->vol, vol);
     virStorageVolFree(vol);
@@ -3723,7 +3824,7 @@ remoteDispatchStorageVolLookupByKey (struct qemud_server *server ATTRIBUTE_UNUSE
 static int
 remoteDispatchStorageVolLookupByPath (struct qemud_server *server ATTRIBUTE_UNUSED,
                                       struct qemud_client *client,
-                                      remote_message_header *req,
+                                      remote_error *rerr,
                                       remote_storage_vol_lookup_by_path_args *args,
                                       remote_storage_vol_lookup_by_path_ret *ret)
 {
@@ -3731,7 +3832,10 @@ remoteDispatchStorageVolLookupByPath (struct qemud_server *server ATTRIBUTE_UNUS
     CHECK_CONN(client);
 
     vol = virStorageVolLookupByPath (client->conn, args->path);
-    if (vol == NULL) return -1;
+    if (vol == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     make_nonnull_storage_vol (&ret->vol, vol);
     virStorageVolFree(vol);
@@ -3746,7 +3850,7 @@ remoteDispatchStorageVolLookupByPath (struct qemud_server *server ATTRIBUTE_UNUS
 static int
 remoteDispatchNodeNumOfDevices (struct qemud_server *server ATTRIBUTE_UNUSED,
                                 struct qemud_client *client,
-                                remote_message_header *req,
+                                remote_error *rerr,
                                 remote_node_num_of_devices_args *args,
                                 remote_node_num_of_devices_ret *ret)
 {
@@ -3755,7 +3859,10 @@ remoteDispatchNodeNumOfDevices (struct qemud_server *server ATTRIBUTE_UNUSED,
     ret->num = virNodeNumOfDevices (client->conn,
                                     args->cap ? *args->cap : NULL,
                                     args->flags);
-    if (ret->num == -1) return -1;
+    if (ret->num == -1) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     return 0;
 }
@@ -3764,22 +3871,22 @@ remoteDispatchNodeNumOfDevices (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchNodeListDevices (struct qemud_server *server ATTRIBUTE_UNUSED,
                                struct qemud_client *client,
-                               remote_message_header *req,
+                               remote_error *rerr,
                                remote_node_list_devices_args *args,
                                remote_node_list_devices_ret *ret)
 {
     CHECK_CONN(client);
 
     if (args->maxnames > REMOTE_NODE_DEVICE_NAME_LIST_MAX) {
-        remoteDispatchError (client, req,
-                             "%s", _("maxnames > REMOTE_NODE_DEVICE_NAME_LIST_MAX"));
-        return -2;
+        remoteDispatchFormatError(rerr,
+                                  "%s", _("maxnames > REMOTE_NODE_DEVICE_NAME_LIST_MAX"));
+        return -1;
     }
 
     /* Allocate return buffer. */
     if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
-        remoteDispatchSendError(client, req, VIR_ERR_NO_MEMORY, NULL);
-        return -2;
+        remoteDispatchOOMError(rerr);
+        return -1;
     }
 
     ret->names.names_len =
@@ -3787,6 +3894,7 @@ remoteDispatchNodeListDevices (struct qemud_server *server ATTRIBUTE_UNUSED,
                             args->cap ? *args->cap : NULL,
                             ret->names.names_val, args->maxnames, args->flags);
     if (ret->names.names_len == -1) {
+        remoteDispatchConnError(rerr, client->conn);
         VIR_FREE(ret->names.names_val);
         return -1;
     }
@@ -3798,7 +3906,7 @@ remoteDispatchNodeListDevices (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchNodeDeviceLookupByName (struct qemud_server *server ATTRIBUTE_UNUSED,
                                       struct qemud_client *client,
-                                      remote_message_header *req,
+                                      remote_error *rerr,
                                       remote_node_device_lookup_by_name_args *args,
                                       remote_node_device_lookup_by_name_ret *ret)
 {
@@ -3807,7 +3915,10 @@ remoteDispatchNodeDeviceLookupByName (struct qemud_server *server ATTRIBUTE_UNUS
     CHECK_CONN(client);
 
     dev = virNodeDeviceLookupByName (client->conn, args->name);
-    if (dev == NULL) return -1;
+    if (dev == NULL) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     make_nonnull_node_device (&ret->dev, dev);
     virNodeDeviceFree(dev);
@@ -3818,7 +3929,7 @@ remoteDispatchNodeDeviceLookupByName (struct qemud_server *server ATTRIBUTE_UNUS
 static int
 remoteDispatchNodeDeviceDumpXml (struct qemud_server *server ATTRIBUTE_UNUSED,
                                  struct qemud_client *client,
-                                 remote_message_header *req,
+                                 remote_error *rerr,
                                  remote_node_device_dump_xml_args *args,
                                  remote_node_device_dump_xml_ret *ret)
 {
@@ -3827,13 +3938,14 @@ remoteDispatchNodeDeviceDumpXml (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dev = virNodeDeviceLookupByName(client->conn, args->name);
     if (dev == NULL) {
-        remoteDispatchError (client, req, "%s", _("node_device not found"));
-        return -2;
+        remoteDispatchFormatError(rerr, "%s", _("node_device not found"));
+        return -1;
     }
 
     /* remoteDispatchClientRequest will free this. */
     ret->xml = virNodeDeviceGetXMLDesc (dev, args->flags);
     if (!ret->xml) {
+        remoteDispatchConnError(rerr, client->conn);
         virNodeDeviceFree(dev);
         return -1;
     }
@@ -3845,7 +3957,7 @@ remoteDispatchNodeDeviceDumpXml (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchNodeDeviceGetParent (struct qemud_server *server ATTRIBUTE_UNUSED,
                                    struct qemud_client *client,
-                                   remote_message_header *req,
+                                   remote_error *rerr,
                                    remote_node_device_get_parent_args *args,
                                    remote_node_device_get_parent_ret *ret)
 {
@@ -3855,8 +3967,8 @@ remoteDispatchNodeDeviceGetParent (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dev = virNodeDeviceLookupByName(client->conn, args->name);
     if (dev == NULL) {
-        remoteDispatchError (client, req, "%s", _("node_device not found"));
-        return -2;
+        remoteDispatchFormatError(rerr, "%s", _("node_device not found"));
+        return -1;
     }
 
     parent = virNodeDeviceGetParent(dev);
@@ -3867,13 +3979,13 @@ remoteDispatchNodeDeviceGetParent (struct qemud_server *server ATTRIBUTE_UNUSED,
         /* remoteDispatchClientRequest will free this. */
         char **parent_p;
         if (VIR_ALLOC(parent_p) < 0) {
-            remoteDispatchSendError(client, req, VIR_ERR_NO_MEMORY, NULL);
-            return -2;
+            remoteDispatchOOMError(rerr);
+            return -1;
         }
         *parent_p = strdup(parent);
         if (*parent_p == NULL) {
-            remoteDispatchSendError(client, req, VIR_ERR_NO_MEMORY, NULL);
-            return -2;
+            remoteDispatchOOMError(rerr);
+            return -1;
         }
         ret->parent = parent_p;
     }
@@ -3886,7 +3998,7 @@ remoteDispatchNodeDeviceGetParent (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchNodeDeviceNumOfCaps (struct qemud_server *server ATTRIBUTE_UNUSED,
                                    struct qemud_client *client,
-                                   remote_message_header *req,
+                                   remote_error *rerr,
                                    remote_node_device_num_of_caps_args *args,
                                    remote_node_device_num_of_caps_ret *ret)
 {
@@ -3895,11 +4007,15 @@ remoteDispatchNodeDeviceNumOfCaps (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dev = virNodeDeviceLookupByName(client->conn, args->name);
     if (dev == NULL) {
-        remoteDispatchError (client, req, "%s", _("node_device not found"));
-        return -2;
+        remoteDispatchFormatError(rerr, "%s", _("node_device not found"));
+        return -1;
     }
 
     ret->num = virNodeDeviceNumOfCaps(dev);
+    if (ret->num < 0) {
+        remoteDispatchConnError(rerr, client->conn);
+        return -1;
+    }
 
     virNodeDeviceFree(dev);
     return 0;
@@ -3909,7 +4025,7 @@ remoteDispatchNodeDeviceNumOfCaps (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchNodeDeviceListCaps (struct qemud_server *server ATTRIBUTE_UNUSED,
                                   struct qemud_client *client,
-                                  remote_message_header *req,
+                                  remote_error *rerr,
                                   remote_node_device_list_caps_args *args,
                                   remote_node_device_list_caps_ret *ret)
 {
@@ -3918,26 +4034,27 @@ remoteDispatchNodeDeviceListCaps (struct qemud_server *server ATTRIBUTE_UNUSED,
 
     dev = virNodeDeviceLookupByName(client->conn, args->name);
     if (dev == NULL) {
-        remoteDispatchError (client, req, "%s", _("node_device not found"));
-        return -2;
+        remoteDispatchFormatError(rerr, "%s", _("node_device not found"));
+        return -1;
     }
 
     if (args->maxnames > REMOTE_NODE_DEVICE_NAME_LIST_MAX) {
-        remoteDispatchError (client, req,
-                             "%s", _("maxnames > REMOTE_NODE_DEVICE_NAME_LIST_MAX"));
-        return -2;
+        remoteDispatchFormatError(rerr,
+                                  "%s", _("maxnames > REMOTE_NODE_DEVICE_NAME_LIST_MAX"));
+        return -1;
     }
 
     /* Allocate return buffer. */
     if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
-        remoteDispatchSendError(client, req, VIR_ERR_NO_MEMORY, NULL);
-        return -2;
+        remoteDispatchOOMError(rerr);
+        return -1;
     }
 
     ret->names.names_len =
         virNodeDeviceListCaps (dev, ret->names.names_val,
                                args->maxnames);
     if (ret->names.names_len == -1) {
+        remoteDispatchConnError(rerr, client->conn);
         VIR_FREE(ret->names.names_val);
         return -1;
     }
@@ -3952,7 +4069,7 @@ remoteDispatchNodeDeviceListCaps (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainEvent (struct qemud_server *server ATTRIBUTE_UNUSED,
                            struct qemud_client *client ATTRIBUTE_UNUSED,
-                           remote_message_header *req ATTRIBUTE_UNUSED,
+                           remote_error *rerr ATTRIBUTE_UNUSED,
                            void *args ATTRIBUTE_UNUSED,
                            remote_domain_event_ret *ret ATTRIBUTE_UNUSED)
 {
@@ -3960,7 +4077,8 @@ remoteDispatchDomainEvent (struct qemud_server *server ATTRIBUTE_UNUSED,
      * This does not make sense, as this should not be intiated
      * from the client side in generated code.
      */
-     return -1;
+    remoteDispatchFormatError(rerr, "%s", _("unexpected async event method call"));
+    return -1;
 }
 
 /***************************
@@ -3969,7 +4087,7 @@ remoteDispatchDomainEvent (struct qemud_server *server ATTRIBUTE_UNUSED,
 static int
 remoteDispatchDomainEventsRegister (struct qemud_server *server ATTRIBUTE_UNUSED,
                                     struct qemud_client *client,
-                                    remote_message_header *req ATTRIBUTE_UNUSED,
+                                    remote_error *rerr ATTRIBUTE_UNUSED,
                                     void *args ATTRIBUTE_UNUSED,
                                     remote_domain_events_register_ret *ret ATTRIBUTE_UNUSED)
 {
@@ -3987,7 +4105,7 @@ remoteDispatchDomainEventsRegister (struct qemud_server *server ATTRIBUTE_UNUSED
 static int
 remoteDispatchDomainEventsDeregister (struct qemud_server *server ATTRIBUTE_UNUSED,
                                       struct qemud_client *client,
-                                      remote_message_header *req ATTRIBUTE_UNUSED,
+                                      remote_error *rerr ATTRIBUTE_UNUSED,
                                       void *args ATTRIBUTE_UNUSED,
                                       remote_domain_events_deregister_ret *ret ATTRIBUTE_UNUSED)
 {
@@ -4013,10 +4131,8 @@ remoteDispatchDomainEventSend (struct qemud_client *client,
     int len;
     remote_domain_event_ret data;
 
-    if(!client) {
-        remoteDispatchError (client, NULL, "%s", _("Invalid Client"));
+    if (!client)
         return;
-    }
 
     rep.prog = REMOTE_PROGRAM;
     rep.vers = REMOTE_PROTOCOL_VERSION;
@@ -4030,7 +4146,7 @@ remoteDispatchDomainEventSend (struct qemud_client *client,
 
     len = 0; /* We'll come back and write this later. */
     if (!xdr_int (&xdr, &len)) {
-        remoteDispatchError (client, NULL, "%s", _("xdr_int failed (1)"));
+        /*remoteDispatchError (client, NULL, "%s", _("xdr_int failed (1)"));*/
         xdr_destroy (&xdr);
         return;
     }
@@ -4046,20 +4162,20 @@ remoteDispatchDomainEventSend (struct qemud_client *client,
     data.detail = detail;
 
     if (!xdr_remote_domain_event_ret(&xdr, &data)) {
-        remoteDispatchError (client, NULL, "%s", _("serialise return struct"));
+        /*remoteDispatchError (client, NULL, "%s", _("serialise return struct"));*/
         xdr_destroy (&xdr);
         return;
     }
 
     len = xdr_getpos (&xdr);
     if (xdr_setpos (&xdr, 0) == 0) {
-        remoteDispatchError (client, NULL, "%s", _("xdr_setpos failed"));
+        /*remoteDispatchError (client, NULL, "%s", _("xdr_setpos failed"));*/
         xdr_destroy (&xdr);
         return;
     }
 
     if (!xdr_int (&xdr, &len)) {
-        remoteDispatchError (client, NULL, "%s", _("xdr_int failed (2)"));
+        /*remoteDispatchError (client, NULL, "%s", _("xdr_int failed (2)"));*/
         xdr_destroy (&xdr);
         return;
     }
index e0bcd29dfe115aab32d0229c56329aa1939b8746..0092b8692943a868fba28f5df7654ca12b1290ab 100644 (file)
  * Do not edit this file.  Any changes you make will be lost.
  */
 
-static int remoteDispatchAuthList (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_auth_list_ret *ret);
-static int remoteDispatchAuthPolkit (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_auth_polkit_ret *ret);
-static int remoteDispatchAuthSaslInit (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_auth_sasl_init_ret *ret);
-static int remoteDispatchAuthSaslStart (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_auth_sasl_start_args *args, remote_auth_sasl_start_ret *ret);
-static int remoteDispatchAuthSaslStep (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_auth_sasl_step_args *args, remote_auth_sasl_step_ret *ret);
-static int remoteDispatchClose (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, void *ret);
-static int remoteDispatchDomainAttachDevice (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_attach_device_args *args, void *ret);
-static int remoteDispatchDomainBlockPeek (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_block_peek_args *args, remote_domain_block_peek_ret *ret);
-static int remoteDispatchDomainBlockStats (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_block_stats_args *args, remote_domain_block_stats_ret *ret);
-static int remoteDispatchDomainCoreDump (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_core_dump_args *args, void *ret);
-static int remoteDispatchDomainCreate (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_create_args *args, void *ret);
-static int remoteDispatchDomainCreateXml (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_create_xml_args *args, remote_domain_create_xml_ret *ret);
-static int remoteDispatchDomainDefineXml (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_define_xml_args *args, remote_domain_define_xml_ret *ret);
-static int remoteDispatchDomainDestroy (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_destroy_args *args, void *ret);
-static int remoteDispatchDomainDetachDevice (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_detach_device_args *args, void *ret);
-static int remoteDispatchDomainDumpXml (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_dump_xml_args *args, remote_domain_dump_xml_ret *ret);
-static int remoteDispatchDomainEvent (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_domain_event_ret *ret);
-static int remoteDispatchDomainEventsDeregister (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_domain_events_deregister_ret *ret);
-static int remoteDispatchDomainEventsRegister (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_domain_events_register_ret *ret);
-static int remoteDispatchDomainGetAutostart (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_get_autostart_args *args, remote_domain_get_autostart_ret *ret);
-static int remoteDispatchDomainGetInfo (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_get_info_args *args, remote_domain_get_info_ret *ret);
-static int remoteDispatchDomainGetMaxMemory (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_get_max_memory_args *args, remote_domain_get_max_memory_ret *ret);
-static int remoteDispatchDomainGetMaxVcpus (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_get_max_vcpus_args *args, remote_domain_get_max_vcpus_ret *ret);
-static int remoteDispatchDomainGetOsType (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_get_os_type_args *args, remote_domain_get_os_type_ret *ret);
-static int remoteDispatchDomainGetSchedulerParameters (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_get_scheduler_parameters_args *args, remote_domain_get_scheduler_parameters_ret *ret);
-static int remoteDispatchDomainGetSchedulerType (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_get_scheduler_type_args *args, remote_domain_get_scheduler_type_ret *ret);
-static int remoteDispatchDomainGetVcpus (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_get_vcpus_args *args, remote_domain_get_vcpus_ret *ret);
-static int remoteDispatchDomainInterfaceStats (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_interface_stats_args *args, remote_domain_interface_stats_ret *ret);
-static int remoteDispatchDomainLookupById (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_lookup_by_id_args *args, remote_domain_lookup_by_id_ret *ret);
-static int remoteDispatchDomainLookupByName (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_lookup_by_name_args *args, remote_domain_lookup_by_name_ret *ret);
-static int remoteDispatchDomainLookupByUuid (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_lookup_by_uuid_args *args, remote_domain_lookup_by_uuid_ret *ret);
-static int remoteDispatchDomainMemoryPeek (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_memory_peek_args *args, remote_domain_memory_peek_ret *ret);
-static int remoteDispatchDomainMigrateFinish (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_migrate_finish_args *args, remote_domain_migrate_finish_ret *ret);
-static int remoteDispatchDomainMigrateFinish2 (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_migrate_finish2_args *args, remote_domain_migrate_finish2_ret *ret);
-static int remoteDispatchDomainMigratePerform (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_migrate_perform_args *args, void *ret);
-static int remoteDispatchDomainMigratePrepare (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_migrate_prepare_args *args, remote_domain_migrate_prepare_ret *ret);
-static int remoteDispatchDomainMigratePrepare2 (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_migrate_prepare2_args *args, remote_domain_migrate_prepare2_ret *ret);
-static int remoteDispatchDomainPinVcpu (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_pin_vcpu_args *args, void *ret);
-static int remoteDispatchDomainReboot (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_reboot_args *args, void *ret);
-static int remoteDispatchDomainRestore (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_restore_args *args, void *ret);
-static int remoteDispatchDomainResume (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_resume_args *args, void *ret);
-static int remoteDispatchDomainSave (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_save_args *args, void *ret);
-static int remoteDispatchDomainSetAutostart (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_set_autostart_args *args, void *ret);
-static int remoteDispatchDomainSetMaxMemory (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_set_max_memory_args *args, void *ret);
-static int remoteDispatchDomainSetMemory (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_set_memory_args *args, void *ret);
-static int remoteDispatchDomainSetSchedulerParameters (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_set_scheduler_parameters_args *args, void *ret);
-static int remoteDispatchDomainSetVcpus (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_set_vcpus_args *args, void *ret);
-static int remoteDispatchDomainShutdown (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_shutdown_args *args, void *ret);
-static int remoteDispatchDomainSuspend (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_suspend_args *args, void *ret);
-static int remoteDispatchDomainUndefine (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_domain_undefine_args *args, void *ret);
-static int remoteDispatchFindStoragePoolSources (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_find_storage_pool_sources_args *args, remote_find_storage_pool_sources_ret *ret);
-static int remoteDispatchGetCapabilities (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_get_capabilities_ret *ret);
-static int remoteDispatchGetHostname (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_get_hostname_ret *ret);
-static int remoteDispatchGetMaxVcpus (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_get_max_vcpus_args *args, remote_get_max_vcpus_ret *ret);
-static int remoteDispatchGetType (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_get_type_ret *ret);
-static int remoteDispatchGetUri (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_get_uri_ret *ret);
-static int remoteDispatchGetVersion (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_get_version_ret *ret);
-static int remoteDispatchListDefinedDomains (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_list_defined_domains_args *args, remote_list_defined_domains_ret *ret);
-static int remoteDispatchListDefinedNetworks (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_list_defined_networks_args *args, remote_list_defined_networks_ret *ret);
-static int remoteDispatchListDefinedStoragePools (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_list_defined_storage_pools_args *args, remote_list_defined_storage_pools_ret *ret);
-static int remoteDispatchListDomains (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_list_domains_args *args, remote_list_domains_ret *ret);
-static int remoteDispatchListNetworks (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_list_networks_args *args, remote_list_networks_ret *ret);
-static int remoteDispatchListStoragePools (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_list_storage_pools_args *args, remote_list_storage_pools_ret *ret);
-static int remoteDispatchNetworkCreate (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_network_create_args *args, void *ret);
-static int remoteDispatchNetworkCreateXml (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_network_create_xml_args *args, remote_network_create_xml_ret *ret);
-static int remoteDispatchNetworkDefineXml (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_network_define_xml_args *args, remote_network_define_xml_ret *ret);
-static int remoteDispatchNetworkDestroy (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_network_destroy_args *args, void *ret);
-static int remoteDispatchNetworkDumpXml (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_network_dump_xml_args *args, remote_network_dump_xml_ret *ret);
-static int remoteDispatchNetworkGetAutostart (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_network_get_autostart_args *args, remote_network_get_autostart_ret *ret);
-static int remoteDispatchNetworkGetBridgeName (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_network_get_bridge_name_args *args, remote_network_get_bridge_name_ret *ret);
-static int remoteDispatchNetworkLookupByName (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_network_lookup_by_name_args *args, remote_network_lookup_by_name_ret *ret);
-static int remoteDispatchNetworkLookupByUuid (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_network_lookup_by_uuid_args *args, remote_network_lookup_by_uuid_ret *ret);
-static int remoteDispatchNetworkSetAutostart (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_network_set_autostart_args *args, void *ret);
-static int remoteDispatchNetworkUndefine (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_network_undefine_args *args, void *ret);
-static int remoteDispatchNodeDeviceDumpXml (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_node_device_dump_xml_args *args, remote_node_device_dump_xml_ret *ret);
-static int remoteDispatchNodeDeviceGetParent (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_node_device_get_parent_args *args, remote_node_device_get_parent_ret *ret);
-static int remoteDispatchNodeDeviceListCaps (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_node_device_list_caps_args *args, remote_node_device_list_caps_ret *ret);
-static int remoteDispatchNodeDeviceLookupByName (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_node_device_lookup_by_name_args *args, remote_node_device_lookup_by_name_ret *ret);
-static int remoteDispatchNodeDeviceNumOfCaps (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_node_device_num_of_caps_args *args, remote_node_device_num_of_caps_ret *ret);
-static int remoteDispatchNodeGetCellsFreeMemory (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_node_get_cells_free_memory_args *args, remote_node_get_cells_free_memory_ret *ret);
-static int remoteDispatchNodeGetFreeMemory (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_node_get_free_memory_ret *ret);
-static int remoteDispatchNodeGetInfo (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_node_get_info_ret *ret);
-static int remoteDispatchNodeListDevices (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_node_list_devices_args *args, remote_node_list_devices_ret *ret);
-static int remoteDispatchNodeNumOfDevices (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_node_num_of_devices_args *args, remote_node_num_of_devices_ret *ret);
-static int remoteDispatchNumOfDefinedDomains (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_num_of_defined_domains_ret *ret);
-static int remoteDispatchNumOfDefinedNetworks (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_num_of_defined_networks_ret *ret);
-static int remoteDispatchNumOfDefinedStoragePools (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_num_of_defined_storage_pools_ret *ret);
-static int remoteDispatchNumOfDomains (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_num_of_domains_ret *ret);
-static int remoteDispatchNumOfNetworks (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_num_of_networks_ret *ret);
-static int remoteDispatchNumOfStoragePools (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_num_of_storage_pools_ret *ret);
-static int remoteDispatchOpen (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_open_args *args, void *ret);
-static int remoteDispatchStoragePoolBuild (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_storage_pool_build_args *args, void *ret);
-static int remoteDispatchStoragePoolCreate (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_storage_pool_create_args *args, void *ret);
-static int remoteDispatchStoragePoolCreateXml (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_storage_pool_create_xml_args *args, remote_storage_pool_create_xml_ret *ret);
-static int remoteDispatchStoragePoolDefineXml (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_storage_pool_define_xml_args *args, remote_storage_pool_define_xml_ret *ret);
-static int remoteDispatchStoragePoolDelete (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_storage_pool_delete_args *args, void *ret);
-static int remoteDispatchStoragePoolDestroy (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_storage_pool_destroy_args *args, void *ret);
-static int remoteDispatchStoragePoolDumpXml (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_storage_pool_dump_xml_args *args, remote_storage_pool_dump_xml_ret *ret);
-static int remoteDispatchStoragePoolGetAutostart (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_storage_pool_get_autostart_args *args, remote_storage_pool_get_autostart_ret *ret);
-static int remoteDispatchStoragePoolGetInfo (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_storage_pool_get_info_args *args, remote_storage_pool_get_info_ret *ret);
-static int remoteDispatchStoragePoolListVolumes (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_storage_pool_list_volumes_args *args, remote_storage_pool_list_volumes_ret *ret);
-static int remoteDispatchStoragePoolLookupByName (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_storage_pool_lookup_by_name_args *args, remote_storage_pool_lookup_by_name_ret *ret);
-static int remoteDispatchStoragePoolLookupByUuid (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_storage_pool_lookup_by_uuid_args *args, remote_storage_pool_lookup_by_uuid_ret *ret);
-static int remoteDispatchStoragePoolLookupByVolume (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_storage_pool_lookup_by_volume_args *args, remote_storage_pool_lookup_by_volume_ret *ret);
-static int remoteDispatchStoragePoolNumOfVolumes (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_storage_pool_num_of_volumes_args *args, remote_storage_pool_num_of_volumes_ret *ret);
-static int remoteDispatchStoragePoolRefresh (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_storage_pool_refresh_args *args, void *ret);
-static int remoteDispatchStoragePoolSetAutostart (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_storage_pool_set_autostart_args *args, void *ret);
-static int remoteDispatchStoragePoolUndefine (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_storage_pool_undefine_args *args, void *ret);
-static int remoteDispatchStorageVolCreateXml (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_storage_vol_create_xml_args *args, remote_storage_vol_create_xml_ret *ret);
-static int remoteDispatchStorageVolDelete (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_storage_vol_delete_args *args, void *ret);
-static int remoteDispatchStorageVolDumpXml (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_storage_vol_dump_xml_args *args, remote_storage_vol_dump_xml_ret *ret);
-static int remoteDispatchStorageVolGetInfo (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_storage_vol_get_info_args *args, remote_storage_vol_get_info_ret *ret);
-static int remoteDispatchStorageVolGetPath (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_storage_vol_get_path_args *args, remote_storage_vol_get_path_ret *ret);
-static int remoteDispatchStorageVolLookupByKey (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_storage_vol_lookup_by_key_args *args, remote_storage_vol_lookup_by_key_ret *ret);
-static int remoteDispatchStorageVolLookupByName (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_storage_vol_lookup_by_name_args *args, remote_storage_vol_lookup_by_name_ret *ret);
-static int remoteDispatchStorageVolLookupByPath (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_storage_vol_lookup_by_path_args *args, remote_storage_vol_lookup_by_path_ret *ret);
-static int remoteDispatchSupportsFeature (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_supports_feature_args *args, remote_supports_feature_ret *ret);
+static int remoteDispatchAuthList (struct qemud_server *server, struct qemud_client *client, remote_error *err, void *args, remote_auth_list_ret *ret);
+static int remoteDispatchAuthPolkit (struct qemud_server *server, struct qemud_client *client, remote_error *err, void *args, remote_auth_polkit_ret *ret);
+static int remoteDispatchAuthSaslInit (struct qemud_server *server, struct qemud_client *client, remote_error *err, void *args, remote_auth_sasl_init_ret *ret);
+static int remoteDispatchAuthSaslStart (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_auth_sasl_start_args *args, remote_auth_sasl_start_ret *ret);
+static int remoteDispatchAuthSaslStep (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_auth_sasl_step_args *args, remote_auth_sasl_step_ret *ret);
+static int remoteDispatchClose (struct qemud_server *server, struct qemud_client *client, remote_error *err, void *args, void *ret);
+static int remoteDispatchDomainAttachDevice (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_attach_device_args *args, void *ret);
+static int remoteDispatchDomainBlockPeek (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_block_peek_args *args, remote_domain_block_peek_ret *ret);
+static int remoteDispatchDomainBlockStats (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_block_stats_args *args, remote_domain_block_stats_ret *ret);
+static int remoteDispatchDomainCoreDump (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_core_dump_args *args, void *ret);
+static int remoteDispatchDomainCreate (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_create_args *args, void *ret);
+static int remoteDispatchDomainCreateXml (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_create_xml_args *args, remote_domain_create_xml_ret *ret);
+static int remoteDispatchDomainDefineXml (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_define_xml_args *args, remote_domain_define_xml_ret *ret);
+static int remoteDispatchDomainDestroy (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_destroy_args *args, void *ret);
+static int remoteDispatchDomainDetachDevice (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_detach_device_args *args, void *ret);
+static int remoteDispatchDomainDumpXml (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_dump_xml_args *args, remote_domain_dump_xml_ret *ret);
+static int remoteDispatchDomainEvent (struct qemud_server *server, struct qemud_client *client, remote_error *err, void *args, remote_domain_event_ret *ret);
+static int remoteDispatchDomainEventsDeregister (struct qemud_server *server, struct qemud_client *client, remote_error *err, void *args, remote_domain_events_deregister_ret *ret);
+static int remoteDispatchDomainEventsRegister (struct qemud_server *server, struct qemud_client *client, remote_error *err, void *args, remote_domain_events_register_ret *ret);
+static int remoteDispatchDomainGetAutostart (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_get_autostart_args *args, remote_domain_get_autostart_ret *ret);
+static int remoteDispatchDomainGetInfo (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_get_info_args *args, remote_domain_get_info_ret *ret);
+static int remoteDispatchDomainGetMaxMemory (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_get_max_memory_args *args, remote_domain_get_max_memory_ret *ret);
+static int remoteDispatchDomainGetMaxVcpus (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_get_max_vcpus_args *args, remote_domain_get_max_vcpus_ret *ret);
+static int remoteDispatchDomainGetOsType (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_get_os_type_args *args, remote_domain_get_os_type_ret *ret);
+static int remoteDispatchDomainGetSchedulerParameters (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_get_scheduler_parameters_args *args, remote_domain_get_scheduler_parameters_ret *ret);
+static int remoteDispatchDomainGetSchedulerType (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_get_scheduler_type_args *args, remote_domain_get_scheduler_type_ret *ret);
+static int remoteDispatchDomainGetVcpus (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_get_vcpus_args *args, remote_domain_get_vcpus_ret *ret);
+static int remoteDispatchDomainInterfaceStats (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_interface_stats_args *args, remote_domain_interface_stats_ret *ret);
+static int remoteDispatchDomainLookupById (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_lookup_by_id_args *args, remote_domain_lookup_by_id_ret *ret);
+static int remoteDispatchDomainLookupByName (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_lookup_by_name_args *args, remote_domain_lookup_by_name_ret *ret);
+static int remoteDispatchDomainLookupByUuid (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_lookup_by_uuid_args *args, remote_domain_lookup_by_uuid_ret *ret);
+static int remoteDispatchDomainMemoryPeek (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_memory_peek_args *args, remote_domain_memory_peek_ret *ret);
+static int remoteDispatchDomainMigrateFinish (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_migrate_finish_args *args, remote_domain_migrate_finish_ret *ret);
+static int remoteDispatchDomainMigrateFinish2 (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_migrate_finish2_args *args, remote_domain_migrate_finish2_ret *ret);
+static int remoteDispatchDomainMigratePerform (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_migrate_perform_args *args, void *ret);
+static int remoteDispatchDomainMigratePrepare (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_migrate_prepare_args *args, remote_domain_migrate_prepare_ret *ret);
+static int remoteDispatchDomainMigratePrepare2 (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_migrate_prepare2_args *args, remote_domain_migrate_prepare2_ret *ret);
+static int remoteDispatchDomainPinVcpu (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_pin_vcpu_args *args, void *ret);
+static int remoteDispatchDomainReboot (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_reboot_args *args, void *ret);
+static int remoteDispatchDomainRestore (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_restore_args *args, void *ret);
+static int remoteDispatchDomainResume (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_resume_args *args, void *ret);
+static int remoteDispatchDomainSave (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_save_args *args, void *ret);
+static int remoteDispatchDomainSetAutostart (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_set_autostart_args *args, void *ret);
+static int remoteDispatchDomainSetMaxMemory (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_set_max_memory_args *args, void *ret);
+static int remoteDispatchDomainSetMemory (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_set_memory_args *args, void *ret);
+static int remoteDispatchDomainSetSchedulerParameters (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_set_scheduler_parameters_args *args, void *ret);
+static int remoteDispatchDomainSetVcpus (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_set_vcpus_args *args, void *ret);
+static int remoteDispatchDomainShutdown (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_shutdown_args *args, void *ret);
+static int remoteDispatchDomainSuspend (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_suspend_args *args, void *ret);
+static int remoteDispatchDomainUndefine (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_domain_undefine_args *args, void *ret);
+static int remoteDispatchFindStoragePoolSources (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_find_storage_pool_sources_args *args, remote_find_storage_pool_sources_ret *ret);
+static int remoteDispatchGetCapabilities (struct qemud_server *server, struct qemud_client *client, remote_error *err, void *args, remote_get_capabilities_ret *ret);
+static int remoteDispatchGetHostname (struct qemud_server *server, struct qemud_client *client, remote_error *err, void *args, remote_get_hostname_ret *ret);
+static int remoteDispatchGetMaxVcpus (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_get_max_vcpus_args *args, remote_get_max_vcpus_ret *ret);
+static int remoteDispatchGetType (struct qemud_server *server, struct qemud_client *client, remote_error *err, void *args, remote_get_type_ret *ret);
+static int remoteDispatchGetUri (struct qemud_server *server, struct qemud_client *client, remote_error *err, void *args, remote_get_uri_ret *ret);
+static int remoteDispatchGetVersion (struct qemud_server *server, struct qemud_client *client, remote_error *err, void *args, remote_get_version_ret *ret);
+static int remoteDispatchListDefinedDomains (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_list_defined_domains_args *args, remote_list_defined_domains_ret *ret);
+static int remoteDispatchListDefinedNetworks (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_list_defined_networks_args *args, remote_list_defined_networks_ret *ret);
+static int remoteDispatchListDefinedStoragePools (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_list_defined_storage_pools_args *args, remote_list_defined_storage_pools_ret *ret);
+static int remoteDispatchListDomains (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_list_domains_args *args, remote_list_domains_ret *ret);
+static int remoteDispatchListNetworks (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_list_networks_args *args, remote_list_networks_ret *ret);
+static int remoteDispatchListStoragePools (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_list_storage_pools_args *args, remote_list_storage_pools_ret *ret);
+static int remoteDispatchNetworkCreate (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_network_create_args *args, void *ret);
+static int remoteDispatchNetworkCreateXml (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_network_create_xml_args *args, remote_network_create_xml_ret *ret);
+static int remoteDispatchNetworkDefineXml (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_network_define_xml_args *args, remote_network_define_xml_ret *ret);
+static int remoteDispatchNetworkDestroy (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_network_destroy_args *args, void *ret);
+static int remoteDispatchNetworkDumpXml (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_network_dump_xml_args *args, remote_network_dump_xml_ret *ret);
+static int remoteDispatchNetworkGetAutostart (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_network_get_autostart_args *args, remote_network_get_autostart_ret *ret);
+static int remoteDispatchNetworkGetBridgeName (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_network_get_bridge_name_args *args, remote_network_get_bridge_name_ret *ret);
+static int remoteDispatchNetworkLookupByName (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_network_lookup_by_name_args *args, remote_network_lookup_by_name_ret *ret);
+static int remoteDispatchNetworkLookupByUuid (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_network_lookup_by_uuid_args *args, remote_network_lookup_by_uuid_ret *ret);
+static int remoteDispatchNetworkSetAutostart (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_network_set_autostart_args *args, void *ret);
+static int remoteDispatchNetworkUndefine (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_network_undefine_args *args, void *ret);
+static int remoteDispatchNodeDeviceDumpXml (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_node_device_dump_xml_args *args, remote_node_device_dump_xml_ret *ret);
+static int remoteDispatchNodeDeviceGetParent (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_node_device_get_parent_args *args, remote_node_device_get_parent_ret *ret);
+static int remoteDispatchNodeDeviceListCaps (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_node_device_list_caps_args *args, remote_node_device_list_caps_ret *ret);
+static int remoteDispatchNodeDeviceLookupByName (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_node_device_lookup_by_name_args *args, remote_node_device_lookup_by_name_ret *ret);
+static int remoteDispatchNodeDeviceNumOfCaps (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_node_device_num_of_caps_args *args, remote_node_device_num_of_caps_ret *ret);
+static int remoteDispatchNodeGetCellsFreeMemory (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_node_get_cells_free_memory_args *args, remote_node_get_cells_free_memory_ret *ret);
+static int remoteDispatchNodeGetFreeMemory (struct qemud_server *server, struct qemud_client *client, remote_error *err, void *args, remote_node_get_free_memory_ret *ret);
+static int remoteDispatchNodeGetInfo (struct qemud_server *server, struct qemud_client *client, remote_error *err, void *args, remote_node_get_info_ret *ret);
+static int remoteDispatchNodeListDevices (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_node_list_devices_args *args, remote_node_list_devices_ret *ret);
+static int remoteDispatchNodeNumOfDevices (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_node_num_of_devices_args *args, remote_node_num_of_devices_ret *ret);
+static int remoteDispatchNumOfDefinedDomains (struct qemud_server *server, struct qemud_client *client, remote_error *err, void *args, remote_num_of_defined_domains_ret *ret);
+static int remoteDispatchNumOfDefinedNetworks (struct qemud_server *server, struct qemud_client *client, remote_error *err, void *args, remote_num_of_defined_networks_ret *ret);
+static int remoteDispatchNumOfDefinedStoragePools (struct qemud_server *server, struct qemud_client *client, remote_error *err, void *args, remote_num_of_defined_storage_pools_ret *ret);
+static int remoteDispatchNumOfDomains (struct qemud_server *server, struct qemud_client *client, remote_error *err, void *args, remote_num_of_domains_ret *ret);
+static int remoteDispatchNumOfNetworks (struct qemud_server *server, struct qemud_client *client, remote_error *err, void *args, remote_num_of_networks_ret *ret);
+static int remoteDispatchNumOfStoragePools (struct qemud_server *server, struct qemud_client *client, remote_error *err, void *args, remote_num_of_storage_pools_ret *ret);
+static int remoteDispatchOpen (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_open_args *args, void *ret);
+static int remoteDispatchStoragePoolBuild (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_storage_pool_build_args *args, void *ret);
+static int remoteDispatchStoragePoolCreate (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_storage_pool_create_args *args, void *ret);
+static int remoteDispatchStoragePoolCreateXml (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_storage_pool_create_xml_args *args, remote_storage_pool_create_xml_ret *ret);
+static int remoteDispatchStoragePoolDefineXml (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_storage_pool_define_xml_args *args, remote_storage_pool_define_xml_ret *ret);
+static int remoteDispatchStoragePoolDelete (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_storage_pool_delete_args *args, void *ret);
+static int remoteDispatchStoragePoolDestroy (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_storage_pool_destroy_args *args, void *ret);
+static int remoteDispatchStoragePoolDumpXml (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_storage_pool_dump_xml_args *args, remote_storage_pool_dump_xml_ret *ret);
+static int remoteDispatchStoragePoolGetAutostart (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_storage_pool_get_autostart_args *args, remote_storage_pool_get_autostart_ret *ret);
+static int remoteDispatchStoragePoolGetInfo (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_storage_pool_get_info_args *args, remote_storage_pool_get_info_ret *ret);
+static int remoteDispatchStoragePoolListVolumes (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_storage_pool_list_volumes_args *args, remote_storage_pool_list_volumes_ret *ret);
+static int remoteDispatchStoragePoolLookupByName (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_storage_pool_lookup_by_name_args *args, remote_storage_pool_lookup_by_name_ret *ret);
+static int remoteDispatchStoragePoolLookupByUuid (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_storage_pool_lookup_by_uuid_args *args, remote_storage_pool_lookup_by_uuid_ret *ret);
+static int remoteDispatchStoragePoolLookupByVolume (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_storage_pool_lookup_by_volume_args *args, remote_storage_pool_lookup_by_volume_ret *ret);
+static int remoteDispatchStoragePoolNumOfVolumes (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_storage_pool_num_of_volumes_args *args, remote_storage_pool_num_of_volumes_ret *ret);
+static int remoteDispatchStoragePoolRefresh (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_storage_pool_refresh_args *args, void *ret);
+static int remoteDispatchStoragePoolSetAutostart (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_storage_pool_set_autostart_args *args, void *ret);
+static int remoteDispatchStoragePoolUndefine (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_storage_pool_undefine_args *args, void *ret);
+static int remoteDispatchStorageVolCreateXml (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_storage_vol_create_xml_args *args, remote_storage_vol_create_xml_ret *ret);
+static int remoteDispatchStorageVolDelete (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_storage_vol_delete_args *args, void *ret);
+static int remoteDispatchStorageVolDumpXml (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_storage_vol_dump_xml_args *args, remote_storage_vol_dump_xml_ret *ret);
+static int remoteDispatchStorageVolGetInfo (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_storage_vol_get_info_args *args, remote_storage_vol_get_info_ret *ret);
+static int remoteDispatchStorageVolGetPath (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_storage_vol_get_path_args *args, remote_storage_vol_get_path_ret *ret);
+static int remoteDispatchStorageVolLookupByKey (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_storage_vol_lookup_by_key_args *args, remote_storage_vol_lookup_by_key_ret *ret);
+static int remoteDispatchStorageVolLookupByName (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_storage_vol_lookup_by_name_args *args, remote_storage_vol_lookup_by_name_ret *ret);
+static int remoteDispatchStorageVolLookupByPath (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_storage_vol_lookup_by_path_args *args, remote_storage_vol_lookup_by_path_ret *ret);
+static int remoteDispatchSupportsFeature (struct qemud_server *server, struct qemud_client *client, remote_error *err, remote_supports_feature_args *args, remote_supports_feature_ret *ret);
index fa356bfd558e214ffd0f5fd3649ce76b6dc517e3..fb5e384ca1e2ca47fa83d031f06ed04ae1fd5648 100755 (executable)
@@ -100,7 +100,7 @@ if ($opt_d) {
 elsif ($opt_p) {
     my @keys = sort (keys %calls);
     foreach (@keys) {
-       print "static int remoteDispatch$calls{$_}->{ProcName} (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, $calls{$_}->{args} *args, $calls{$_}->{ret} *ret);\n";
+       print "static int remoteDispatch$calls{$_}->{ProcName} (struct qemud_server *server, struct qemud_client *client, remote_error *err, $calls{$_}->{args} *args, $calls{$_}->{ret} *ret);\n";
     }
 }