This is an automated email from the ASF dual-hosted git repository. pnoltes pushed a commit to branch feature/wire_protocol_with_fixed_sized_types in repository https://gitbox.apache.org/repos/asf/celix.git
commit 3807e417db648885df38c9a96d6a2e30893e797f Author: Pepijn Noltes <[email protected]> AuthorDate: Tue May 12 18:57:48 2020 +0200 Update the wire protocol to use fixed size types instead of compiler/platform dependent ones (so uint32_t instead of unsigned int) --- .../src/pubsub_tcp_topic_receiver.c | 2 +- .../src/pubsub_wire_protocol_common.c | 12 +++++------ .../pubsub/pubsub_spi/include/pubsub_protocol.h | 23 ++++++++++++---------- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/bundles/pubsub/pubsub_admin_tcp/src/pubsub_tcp_topic_receiver.c b/bundles/pubsub/pubsub_admin_tcp/src/pubsub_tcp_topic_receiver.c index 8cbf8fc..1a34d92 100644 --- a/bundles/pubsub/pubsub_admin_tcp/src/pubsub_tcp_topic_receiver.c +++ b/bundles/pubsub/pubsub_admin_tcp/src/pubsub_tcp_topic_receiver.c @@ -563,7 +563,7 @@ processMsgForSubscriberEntry(pubsub_tcp_topic_receiver_t *receiver, psa_tcp_subs } } } else { - L_WARN("[PSA_ZMQ_TR] Cannot find serializer for type id 0x%X", message->header.msgId); + L_WARN("[PSA_TCP_TR] Cannot find serializer for type id 0x%X. Received payload size is %u.", message->header.msgId, message->payload.length); } } diff --git a/bundles/pubsub/pubsub_protocol_wire_v1/src/pubsub_wire_protocol_common.c b/bundles/pubsub/pubsub_protocol_wire_v1/src/pubsub_wire_protocol_common.c index 5c83dd2..2f07375 100644 --- a/bundles/pubsub/pubsub_protocol_wire_v1/src/pubsub_wire_protocol_common.c +++ b/bundles/pubsub/pubsub_protocol_wire_v1/src/pubsub_wire_protocol_common.c @@ -30,13 +30,13 @@ int readShort(const unsigned char *data, int offset, uint16_t *val) { memcpy(val, data + offset, sizeof(uint16_t)); *val = ntohs(*val); - return offset + sizeof(uint16_t); + return offset + (int)sizeof(uint16_t); } int readInt(const unsigned char *data, int offset, uint32_t *val) { memcpy(val, data + offset, sizeof(uint32_t)); *val = ntohl(*val); - return offset + sizeof(uint32_t); + return offset + (int)sizeof(uint32_t); } int readLong(const unsigned char *data, int offset, uint64_t *val) { @@ -46,19 +46,19 @@ int readLong(const unsigned char *data, int offset, uint64_t *val) { #else *val = be64toh(*val); #endif - return offset + sizeof(uint64_t); + return offset + (int)sizeof(uint64_t); } int writeShort(unsigned char *data, int offset, uint16_t val) { uint16_t nVal = htons(val); memcpy(data + offset, &nVal, sizeof(uint16_t)); - return offset + sizeof(uint16_t); + return offset + (int)sizeof(uint16_t); } int writeInt(unsigned char *data, int offset, uint32_t val) { uint32_t nVal = htonl(val); memcpy(data + offset, &nVal, sizeof(uint32_t)); - return offset + sizeof(uint32_t); + return offset + (int)sizeof(uint32_t); } int writeLong(unsigned char *data, int offset, uint64_t val) { @@ -68,5 +68,5 @@ int writeLong(unsigned char *data, int offset, uint64_t val) { uint64_t nVal = htobe64(val); #endif memcpy(data + offset, &nVal, sizeof(uint64_t)); - return offset + sizeof(uint64_t); + return offset + (int)sizeof(uint64_t); } diff --git a/bundles/pubsub/pubsub_spi/include/pubsub_protocol.h b/bundles/pubsub/pubsub_spi/include/pubsub_protocol.h index 2ed8f81..ecf336f 100644 --- a/bundles/pubsub/pubsub_spi/include/pubsub_protocol.h +++ b/bundles/pubsub/pubsub_spi/include/pubsub_protocol.h @@ -20,6 +20,7 @@ #ifndef PUBSUB_PROTOCOL_SERVICE_H_ #define PUBSUB_PROTOCOL_SERVICE_H_ +#include <stdint.h> #include "celix_properties.h" #define PUBSUB_PROTOCOL_SERVICE_NAME "pubsub_protocol" @@ -32,27 +33,29 @@ typedef struct pubsub_protocol_header pubsub_protocol_header_t; * The protocol header structure, contains the information about the message payload and metadata */ struct pubsub_protocol_header { - /** message payload identification attributes */ - unsigned int msgId; - unsigned short msgMajorVersion; - unsigned short msgMinorVersion; + /** message payload identification attributes */ + uint32_t msgId; + uint16_t msgMajorVersion; + uint16_t msgMinorVersion; /** Payload and metadata sizes attributes */ - unsigned int payloadSize; - unsigned int metadataSize; + uint32_t payloadSize; + uint32_t metadataSize; /** Optional message segmentation attributes, these attributes are only used/written by the protocol admin. * When message segmentation is supported by the protocol admin */ - unsigned int seqNr; - unsigned int payloadPartSize; - unsigned int payloadOffset; + uint32_t seqNr; + uint32_t payloadPartSize; + uint32_t payloadOffset; + + uint32_t padding; //to arrange alignment on 64 bit }; typedef struct pubsub_protocol_payload pubsub_protocol_payload_t; struct pubsub_protocol_payload { void *payload; - size_t length; + uint32_t length; }; typedef struct pubsub_protocol_metadata pubsub_protocol_metadata_t;
