ctdb-protocol: Add length routines for protocol elements
authorAmitay Isaacs <amitay@gmail.com>
Thu, 21 Apr 2016 14:45:01 +0000 (00:45 +1000)
committerMartin Schwenke <martins@samba.org>
Tue, 3 May 2016 02:43:20 +0000 (04:43 +0200)
This follows the convention used for marshalling routines for ctdb data types.

Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Martin Schwenke <martin@meltin.net>
ctdb/protocol/protocol_api.h
ctdb/protocol/protocol_call.c
ctdb/protocol/protocol_control.c
ctdb/protocol/protocol_message.c

index d358d40ca4d5a7db44a50923cbb85220482736b2..28f1313f742b1f497ab332d1f56b8aa60ba7b516 100644 (file)
@@ -85,6 +85,9 @@ int ctdb_req_header_verify(struct ctdb_req_header *h, uint32_t operation);
 
 /* From protocol/protocol_call.c */
 
+size_t ctdb_req_call_len(struct ctdb_req_header *h,
+                        struct ctdb_req_call *c);
+
 int ctdb_req_call_push(struct ctdb_req_header *h,
                       struct ctdb_req_call *c,
                       TALLOC_CTX *mem_ctx,
@@ -95,6 +98,9 @@ int ctdb_req_call_pull(uint8_t *pkt, size_t pkt_len,
                       TALLOC_CTX *mem_ctx,
                       struct ctdb_req_call *c);
 
+size_t ctdb_reply_call_len(struct ctdb_req_header *h,
+                          struct ctdb_reply_call *c);
+
 int ctdb_reply_call_push(struct ctdb_req_header *h,
                         struct ctdb_reply_call *c,
                         TALLOC_CTX *mem_ctx,
@@ -105,6 +111,9 @@ int ctdb_reply_call_pull(uint8_t *pkt, size_t pkt_len,
                         TALLOC_CTX *mem_ctx,
                         struct ctdb_reply_call *c);
 
+size_t ctdb_reply_error_len(struct ctdb_req_header *h,
+                           struct ctdb_reply_error *c);
+
 int ctdb_reply_error_push(struct ctdb_req_header *h,
                          struct ctdb_reply_error *c,
                          TALLOC_CTX *mem_ctx,
@@ -115,6 +124,9 @@ int ctdb_reply_error_pull(uint8_t *pkt, size_t pkt_len,
                          TALLOC_CTX *mem_ctx,
                          struct ctdb_reply_error *c);
 
+size_t ctdb_req_dmaster_len(struct ctdb_req_header *h,
+                           struct ctdb_req_dmaster *c);
+
 int ctdb_req_dmaster_push(struct ctdb_req_header *h,
                          struct ctdb_req_dmaster *c,
                          TALLOC_CTX *mem_ctx,
@@ -125,6 +137,9 @@ int ctdb_req_dmaster_pull(uint8_t *pkt, size_t pkt_len,
                          TALLOC_CTX *mem_ctx,
                          struct ctdb_req_dmaster *c);
 
+size_t ctdb_reply_dmaster_len(struct ctdb_req_header *h,
+                             struct ctdb_reply_dmaster *c);
+
 int ctdb_reply_dmaster_push(struct ctdb_req_header *h,
                            struct ctdb_reply_dmaster *c,
                            TALLOC_CTX *mem_ctx,
@@ -137,6 +152,9 @@ int ctdb_reply_dmaster_pull(uint8_t *pkt, size_t pkt_len,
 
 /* From protocol/protocol_control.c */
 
+size_t ctdb_req_control_len(struct ctdb_req_header *h,
+                           struct ctdb_req_control *c);
+
 int ctdb_req_control_push(struct ctdb_req_header *h,
                          struct ctdb_req_control *c,
                          TALLOC_CTX *mem_ctx,
@@ -147,6 +165,9 @@ int ctdb_req_control_pull(uint8_t *pkt, size_t pkt_len,
                          TALLOC_CTX *mem_ctx,
                          struct ctdb_req_control *c);
 
+size_t ctdb_reply_control_len(struct ctdb_req_header *h,
+                             struct ctdb_reply_control *c);
+
 int ctdb_reply_control_push(struct ctdb_req_header *h,
                            struct ctdb_reply_control *c,
                            TALLOC_CTX *mem_ctx,
@@ -635,6 +656,9 @@ void ctdb_packet_print(uint8_t *buf, size_t buflen, FILE *fp);
 
 /* From protocol/protocol_message.c */
 
+size_t ctdb_req_message_len(struct ctdb_req_header *h,
+                           struct ctdb_req_message *c);
+
 int ctdb_req_message_push(struct ctdb_req_header *h,
                          struct ctdb_req_message *c,
                          TALLOC_CTX *mem_ctx,
@@ -645,6 +669,9 @@ int ctdb_req_message_pull(uint8_t *pkt, size_t pkt_len,
                          TALLOC_CTX *mem_ctx,
                          struct ctdb_req_message *c);
 
+size_t ctdb_req_message_data_len(struct ctdb_req_header *h,
+                                struct ctdb_req_message_data *c);
+
 int ctdb_req_message_data_push(struct ctdb_req_header *h,
                               struct ctdb_req_message_data *message,
                               TALLOC_CTX *mem_ctx,
index bf303a28fea9fb08c0697ec3133ce583f07171ac..0f19e1a230c4a66584c1574ff46c29de24a92938 100644 (file)
@@ -71,6 +71,12 @@ struct ctdb_reply_dmaster_wire {
        uint8_t  data[1];
 };
 
+size_t ctdb_req_call_len(struct ctdb_req_header *h, struct ctdb_req_call *c)
+{
+       return offsetof(struct ctdb_req_call_wire, data) +
+               ctdb_tdb_data_len(c->key) + ctdb_tdb_data_len(c->calldata);
+}
+
 int ctdb_req_call_push(struct ctdb_req_header *h, struct ctdb_req_call *c,
                       TALLOC_CTX *mem_ctx, uint8_t **pkt, size_t *pkt_len)
 {
@@ -157,6 +163,13 @@ int ctdb_req_call_pull(uint8_t *pkt, size_t pkt_len,
        return 0;
 }
 
+size_t ctdb_reply_call_len(struct ctdb_req_header *h,
+                          struct ctdb_reply_call *c)
+{
+       return offsetof(struct ctdb_reply_call_wire, data) +
+               ctdb_tdb_data_len(c->data);
+}
+
 int ctdb_reply_call_push(struct ctdb_req_header *h, struct ctdb_reply_call *c,
                         TALLOC_CTX *mem_ctx, uint8_t **pkt, size_t *pkt_len)
 {
@@ -224,6 +237,13 @@ int ctdb_reply_call_pull(uint8_t *pkt, size_t pkt_len,
        return 0;
 }
 
+size_t ctdb_reply_error_len(struct ctdb_req_header *h,
+                           struct ctdb_reply_error *c)
+{
+       return offsetof(struct ctdb_reply_error_wire, msg) +
+               ctdb_tdb_data_len(c->msg);
+}
+
 int ctdb_reply_error_push(struct ctdb_req_header *h, struct ctdb_reply_error *c,
                          TALLOC_CTX *mem_ctx, uint8_t **pkt, size_t *pkt_len)
 {
@@ -291,6 +311,13 @@ int ctdb_reply_error_pull(uint8_t *pkt, size_t pkt_len,
        return 0;
 }
 
+size_t ctdb_req_dmaster_len(struct ctdb_req_header *h,
+                           struct ctdb_req_dmaster *c)
+{
+       return offsetof(struct ctdb_req_dmaster_wire, data) +
+               ctdb_tdb_data_len(c->key) + ctdb_tdb_data_len(c->data);
+}
+
 int ctdb_req_dmaster_push(struct ctdb_req_header *h, struct ctdb_req_dmaster *c,
                          TALLOC_CTX *mem_ctx, uint8_t **pkt, size_t *pkt_len)
 {
@@ -371,6 +398,13 @@ int ctdb_req_dmaster_pull(uint8_t *pkt, size_t pkt_len,
        return 0;
 }
 
+size_t ctdb_reply_dmaster_len(struct ctdb_req_header *h,
+                             struct ctdb_reply_dmaster *c)
+{
+       return offsetof(struct ctdb_reply_dmaster_wire, data) +
+               ctdb_tdb_data_len(c->key) + ctdb_tdb_data_len(c->data);
+}
+
 int ctdb_reply_dmaster_push(struct ctdb_req_header *h,
                            struct ctdb_reply_dmaster *c,
                            TALLOC_CTX *mem_ctx, uint8_t **pkt, size_t *pkt_len)
index 0e250c2862d6be61d8515ecc3084d2eab77462e6..3c4fb6fec65c18c6a150d17fdcad6460eff3212d 100644 (file)
@@ -1890,6 +1890,13 @@ static int ctdb_reply_control_data_pull(uint8_t *buf, size_t buflen,
        return ret;
 }
 
+size_t ctdb_req_control_len(struct ctdb_req_header *h,
+                           struct ctdb_req_control *c)
+{
+       return offsetof(struct ctdb_req_control_wire, data) +
+               ctdb_req_control_data_len(&c->rdata);
+}
+
 int ctdb_req_control_push(struct ctdb_req_header *h,
                          struct ctdb_req_control *request,
                          TALLOC_CTX *mem_ctx,
@@ -1968,6 +1975,15 @@ int ctdb_req_control_pull(uint8_t *pkt, size_t pkt_len,
        return 0;
 }
 
+size_t ctdb_reply_control_len(struct ctdb_req_header *h,
+                             struct ctdb_reply_control *c)
+{
+       return offsetof(struct ctdb_reply_control_wire, data) +
+               (c->status == 0 ?
+                       ctdb_reply_control_data_len(&c->rdata) :
+                       ctdb_string_len(c->errmsg));
+}
+
 int ctdb_reply_control_push(struct ctdb_req_header *h,
                            struct ctdb_reply_control *reply,
                            TALLOC_CTX *mem_ctx,
index 543300dec1c9d787bbbc5fce770edd6469265db9..25ece67774fd1008e2f0a873b7ee8b07d8270c78 100644 (file)
@@ -280,6 +280,13 @@ static int ctdb_message_data_pull(uint8_t *buf, size_t buflen,
        return ret;
 }
 
+size_t ctdb_req_message_len(struct ctdb_req_header *h,
+                           struct ctdb_req_message *c)
+{
+       return offsetof(struct ctdb_req_message_wire, data) +
+               ctdb_message_data_len(&c->data, c->srvid);
+}
+
 int ctdb_req_message_push(struct ctdb_req_header *h,
                          struct ctdb_req_message *message,
                          TALLOC_CTX *mem_ctx,
@@ -344,6 +351,13 @@ int ctdb_req_message_pull(uint8_t *pkt, size_t pkt_len,
        return ret;
 }
 
+size_t ctdb_req_message_data_len(struct ctdb_req_header *h,
+                                struct ctdb_req_message_data *c)
+{
+       return offsetof(struct ctdb_req_message_wire, data) +
+               ctdb_tdb_data_len(c->data);
+}
+
 int ctdb_req_message_data_push(struct ctdb_req_header *h,
                               struct ctdb_req_message_data *message,
                               TALLOC_CTX *mem_ctx,