From d4fedc1a4bba5985538e9064876274b79e6d99db Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 21 Aug 2020 12:52:07 +1000 Subject: [PATCH] brei: abstract the message type away Once we start passing fds within messages, we need something more abstract. Signed-off-by: Peter Hutterer --- src/brei-shared.c | 18 ++++++++++-------- src/brei-shared.h | 9 ++++++--- src/libei.c | 4 ++-- src/libeis-client.c | 4 ++-- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/brei-shared.c b/src/brei-shared.c index 49eab90..67b8671 100644 --- a/src/brei-shared.c +++ b/src/brei-shared.c @@ -76,9 +76,7 @@ brei_next_message(const char *data, size_t *msglen, size_t *consumed) int brei_dispatch(int fd, - int (*callback)(const char *msgdata, - size_t len, - void *user_data), + int (*callback)(struct brei_message *m, void *user_data), void *user_data) { _cleanup_iobuf_ struct iobuf *buf = iobuf_new(64); @@ -107,8 +105,13 @@ brei_dispatch(int fd, assert(len >= msglen); + struct brei_message msg = { + .data = msgdata, + .len = msglen, + }; + /* Actual message parsing is done by the caller */ - consumed = callback(msgdata, msglen, user_data); + consumed = callback(&msg, user_data); assert(consumed != 0); if (consumed < 0) { rc = consumed; @@ -164,15 +167,14 @@ MUNIT_TEST(test_proto_next_message) } static int -brei_dispatch_cb(const char *msgdata, - size_t len, +brei_dispatch_cb(struct brei_message *msg, void *user_data) { char *buf = user_data; - memcpy(buf, msgdata, len); + memcpy(buf, msg->data, msg->len); - return len; + return msg->len; } static inline void diff --git a/src/brei-shared.h b/src/brei-shared.h index 86c896a..8f07109 100644 --- a/src/brei-shared.h +++ b/src/brei-shared.h @@ -25,6 +25,11 @@ #include "config.h" +struct brei_message { + const char *data; + size_t len; +}; + /** * Dispatch messages for the data on fd. * The callback is called for each protocol message, parsing must be done by @@ -37,7 +42,5 @@ */ int brei_dispatch(int fd, - int (*callback)(const char *msgdata, - size_t len, - void *userdata), + int (*callback)(struct brei_message *msg, void *userdata), void *user_data); diff --git a/src/libei.c b/src/libei.c index 48c2a98..c1a80ca 100644 --- a/src/libei.c +++ b/src/libei.c @@ -539,13 +539,13 @@ connection_connected_handle_msg(struct ei *ei, struct message *msg) } static int -connection_message_callback(const char *msgdata, size_t len, void *userdata) +connection_message_callback(struct brei_message *bmsg, void *userdata) { struct ei *ei = userdata; size_t consumed; _cleanup_message_ struct message *msg = - ei_proto_parse_message(msgdata, len, &consumed); + ei_proto_parse_message(bmsg->data, bmsg->len, &consumed); if (!msg) return -EBADMSG; diff --git a/src/libeis-client.c b/src/libeis-client.c index ce26498..a6650be 100644 --- a/src/libeis-client.c +++ b/src/libeis-client.c @@ -386,13 +386,13 @@ client_connected_handle_msg(struct eis_client *client, } static int -client_message_callback(const char *msgdata, size_t len, void *userdata) +client_message_callback(struct brei_message *bmsg, void *userdata) { struct eis_client *client = userdata; size_t consumed; _cleanup_message_ struct message *msg = - eis_proto_parse_message(msgdata, len, &consumed); + eis_proto_parse_message(bmsg->data, bmsg->len, &consumed); if (!msg) return -EBADMSG;