[libvirt] [PATCH 9/9] Rename 'direction' to 'type' in remote_message_header

Daniel P. Berrange berrange at redhat.com
Tue Jul 14 10:21:11 UTC 2009


The 'remote_message_header' struct has a mis-leadingly named
field 'direction'. It is really a reflection of the type of
message, and some types can be sent in either direction. Thus
the field is more accurately named 'type'. No function change.

* qemud/remote_protocol.x: Rename 'direction' to 'type' in
  'remote_message_header. Write better docs describing the
  message header field semantics & usage
* qemud/remote_protocol.c, qemud/remote_protocol.h: Regenerate
* qemud/remote.c, qemud/dispatch.c, src/remote_internal.c
  Update to reflect rename of 'direction' to 'type'

Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
---
 qemud/dispatch.c        |   14 +++++-----
 qemud/remote.c          |    2 +-
 qemud/remote_protocol.c |    4 +-
 qemud/remote_protocol.h |   10 +++---
 qemud/remote_protocol.x |   64 +++++++++++++++++++++++++++++++++++-----------
 src/remote_internal.c   |    6 ++--
 6 files changed, 66 insertions(+), 34 deletions(-)

diff --git a/qemud/dispatch.c b/qemud/dispatch.c
index 1ccca10..886aa5e 100644
--- a/qemud/dispatch.c
+++ b/qemud/dispatch.c
@@ -129,7 +129,7 @@ remoteSerializeError(struct qemud_client *client,
                      int program,
                      int version,
                      int procedure,
-                     int direction,
+                     int type,
                      int serial)
 {
     XDR xdr;
@@ -143,7 +143,7 @@ remoteSerializeError(struct qemud_client *client,
     msg->hdr.prog = program;
     msg->hdr.vers = version;
     msg->hdr.proc = procedure;
-    msg->hdr.direction = direction;
+    msg->hdr.type = type;
     msg->hdr.serial = serial;
     msg->hdr.status = REMOTE_ERROR;
 
@@ -359,13 +359,13 @@ remoteDispatchClientRequest (struct qemud_server *server,
         goto error;
     }
 
-    switch (msg->hdr.direction) {
+    switch (msg->hdr.type) {
     case REMOTE_CALL:
         return remoteDispatchClientCall(server, client, msg);
 
     default:
-        remoteDispatchFormatError (&rerr, _("direction (%d) != REMOTE_CALL"),
-                                   (int) msg->hdr.direction);
+        remoteDispatchFormatError (&rerr, _("type (%d) != REMOTE_CALL"),
+                                   (int) msg->hdr.type);
     }
 
 error:
@@ -467,11 +467,11 @@ remoteDispatchClientCall (struct qemud_server *server,
         goto rpc_error;
 
     /* Return header. We're re-using same message object, so
-     * only need to tweak direction/status fields */
+     * only need to tweak type/status fields */
     /*msg->hdr.prog = msg->hdr.prog;*/
     /*msg->hdr.vers = msg->hdr.vers;*/
     /*msg->hdr.proc = msg->hdr.proc;*/
-    msg->hdr.direction = REMOTE_REPLY;
+    msg->hdr.type = REMOTE_REPLY;
     /*msg->hdr.serial = msg->hdr.serial;*/
     msg->hdr.status = REMOTE_OK;
 
diff --git a/qemud/remote.c b/qemud/remote.c
index 4d6ddef..92ab21f 100644
--- a/qemud/remote.c
+++ b/qemud/remote.c
@@ -4422,7 +4422,7 @@ remoteDispatchDomainEventSend (struct qemud_client *client,
     msg->hdr.prog = REMOTE_PROGRAM;
     msg->hdr.vers = REMOTE_PROTOCOL_VERSION;
     msg->hdr.proc = REMOTE_PROC_DOMAIN_EVENT;
-    msg->hdr.direction = REMOTE_MESSAGE;
+    msg->hdr.type = REMOTE_MESSAGE;
     msg->hdr.serial = 1;
     msg->hdr.status = REMOTE_OK;
 
diff --git a/qemud/remote_protocol.c b/qemud/remote_protocol.c
index f6dac7a..65f9a73 100644
--- a/qemud/remote_protocol.c
+++ b/qemud/remote_protocol.c
@@ -2514,7 +2514,7 @@ xdr_remote_procedure (XDR *xdrs, remote_procedure *objp)
 }
 
 bool_t
-xdr_remote_message_direction (XDR *xdrs, remote_message_direction *objp)
+xdr_remote_message_type (XDR *xdrs, remote_message_type *objp)
 {
 
          if (!xdr_enum (xdrs, (enum_t *) objp))
@@ -2541,7 +2541,7 @@ xdr_remote_message_header (XDR *xdrs, remote_message_header *objp)
                  return FALSE;
          if (!xdr_remote_procedure (xdrs, &objp->proc))
                  return FALSE;
-         if (!xdr_remote_message_direction (xdrs, &objp->direction))
+         if (!xdr_remote_message_type (xdrs, &objp->type))
                  return FALSE;
          if (!xdr_u_int (xdrs, &objp->serial))
                  return FALSE;
diff --git a/qemud/remote_protocol.h b/qemud/remote_protocol.h
index 21eae07..dae304e 100644
--- a/qemud/remote_protocol.h
+++ b/qemud/remote_protocol.h
@@ -1551,12 +1551,12 @@ enum remote_procedure {
 };
 typedef enum remote_procedure remote_procedure;
 
-enum remote_message_direction {
+enum remote_message_type {
         REMOTE_CALL = 0,
         REMOTE_REPLY = 1,
         REMOTE_MESSAGE = 2,
 };
-typedef enum remote_message_direction remote_message_direction;
+typedef enum remote_message_type remote_message_type;
 
 enum remote_message_status {
         REMOTE_OK = 0,
@@ -1569,7 +1569,7 @@ struct remote_message_header {
         u_int prog;
         u_int vers;
         remote_procedure proc;
-        remote_message_direction direction;
+        remote_message_type type;
         u_int serial;
         remote_message_status status;
 };
@@ -1808,7 +1808,7 @@ extern  bool_t xdr_remote_domain_xml_from_native_ret (XDR *, remote_domain_xml_f
 extern  bool_t xdr_remote_domain_xml_to_native_args (XDR *, remote_domain_xml_to_native_args*);
 extern  bool_t xdr_remote_domain_xml_to_native_ret (XDR *, remote_domain_xml_to_native_ret*);
 extern  bool_t xdr_remote_procedure (XDR *, remote_procedure*);
-extern  bool_t xdr_remote_message_direction (XDR *, remote_message_direction*);
+extern  bool_t xdr_remote_message_type (XDR *, remote_message_type*);
 extern  bool_t xdr_remote_message_status (XDR *, remote_message_status*);
 extern  bool_t xdr_remote_message_header (XDR *, remote_message_header*);
 
@@ -2043,7 +2043,7 @@ extern bool_t xdr_remote_domain_xml_from_native_ret ();
 extern bool_t xdr_remote_domain_xml_to_native_args ();
 extern bool_t xdr_remote_domain_xml_to_native_ret ();
 extern bool_t xdr_remote_procedure ();
-extern bool_t xdr_remote_message_direction ();
+extern bool_t xdr_remote_message_type ();
 extern bool_t xdr_remote_message_status ();
 extern bool_t xdr_remote_message_header ();
 
diff --git a/qemud/remote_protocol.x b/qemud/remote_protocol.x
index 1fb826b..9e75c59 100644
--- a/qemud/remote_protocol.x
+++ b/qemud/remote_protocol.x
@@ -1409,23 +1409,55 @@ enum remote_procedure {
     REMOTE_PROC_DOMAIN_XML_TO_NATIVE = 136
 };
 
-/* Custom RPC structure. */
-/* Each message consists of:
- *    int length               Number of bytes in message _including_ length.
- *    remote_message_header    Header.
- * then either: args           Arguments (for REMOTE_CALL).
- *          or: ret            Return (for REMOTE_REPLY, status = REMOTE_OK)
- *          or: remote_error   Error (for REMOTE_REPLY, status = REMOTE_ERROR)
+
+/*
+ * RPC wire format
+ *
+ * Each message consists of:
+ *
+ *    Name    | Type                  | Description
+ * -----------+-----------------------+------------------
+ *    Length  | int                   | Total number of bytes in message _including_ length.
+ *    Header  | remote_message_header | Control information about procedure call
+ *    Payload | -                     | Variable payload data per procedure
+ *
+ * In header, the 'serial' field varies according to:
+ *
+ *  - type == REMOTE_CALL
+ *      * serial is set by client, incrementing by 1 each time
+ *
+ *  - type == REMOTE_REPLY
+ *      * serial matches that from the corresponding REMOTE_CALL
+ *
+ *  - type == REMOTE_MESSAGE
+ *      * serial matches that from the corresponding REMOTE_CALL, or zero
+ *
+ *
+ * Payload varies according to type and status:
+ *
+ *  - type == REMOTE_CALL
+ *          XXX_args  for procedure
+ *
+ *  - type == REMOTE_REPLY
+ *     * status == REMOTE_OK
+ *          XXX_ret         for procedure
+ *     * status == REMOTE_ERROR
+ *          remote_error    Error information
+ *
+ *  - type == REMOTE_MESSAGE
+ *     * status == REMOTE_OK
+ *          XXX_args        for procedure
+ *     * status == REMOTE_ERROR
+ *          remote_error    Error information
  *
- * The first two words (length, program number) are meant to be compatible
- * with the qemud protocol (qemud/protocol.x), although the rest of the
- * messages are completely different.
  */
-
-enum remote_message_direction {
-    REMOTE_CALL = 0,            /* client -> server */
-    REMOTE_REPLY = 1,           /* server -> client */
-    REMOTE_MESSAGE = 2          /* server -> client, asynchronous [NYI] */
+enum remote_message_type {
+    /* client -> server. args from a method call */
+    REMOTE_CALL = 0,
+    /* server -> client. reply/error from a method call */
+    REMOTE_REPLY = 1,
+    /* either direction. async notification */
+    REMOTE_MESSAGE = 2
 };
 
 enum remote_message_status {
@@ -1447,7 +1479,7 @@ struct remote_message_header {
     unsigned prog;              /* REMOTE_PROGRAM */
     unsigned vers;              /* REMOTE_PROTOCOL_VERSION */
     remote_procedure proc;      /* REMOTE_PROC_x */
-    remote_message_direction direction;
+    remote_message_type type;
     unsigned serial;            /* Serial number of message. */
     remote_message_status status;
 };
diff --git a/src/remote_internal.c b/src/remote_internal.c
index e7beb49..91e111e 100644
--- a/src/remote_internal.c
+++ b/src/remote_internal.c
@@ -6263,7 +6263,7 @@ prepareCall(virConnectPtr conn,
     hdr.prog = REMOTE_PROGRAM;
     hdr.vers = REMOTE_PROTOCOL_VERSION;
     hdr.proc = proc_nr;
-    hdr.direction = REMOTE_CALL;
+    hdr.type = REMOTE_CALL;
     hdr.serial = rv->serial;
     hdr.status = REMOTE_OK;
 
@@ -6658,14 +6658,14 @@ processCallRecvMsg(virConnectPtr conn, struct private_data *priv,
     }
 
     /* Async events from server need special handling */
-    if (hdr.direction == REMOTE_MESSAGE) {
+    if (hdr.type == REMOTE_MESSAGE) {
         processCallAsyncEvent(conn, priv, in_open,
                               &hdr, &xdr);
         xdr_destroy(&xdr);
         return 0;
     }
 
-    if (hdr.direction != REMOTE_REPLY) {
+    if (hdr.type != REMOTE_REPLY) {
         virRaiseError (in_open ? NULL : conn,
                        NULL, NULL, VIR_FROM_REMOTE,
                        VIR_ERR_RPC, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
-- 
1.6.2.5


-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list