From 9e783b9252a69f9b91dcca95a236aab664ebc276 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Hannappel?= <juergen.hannappel@desy.de> Date: Tue, 13 Jul 2021 16:11:01 +0200 Subject: [PATCH] use Send__ instead of Send for c api, assert that GenericRequestHeader structs match --- producer/api/c/include/asapo/producer_c.h | 2 +- producer/api/cpp/src/producer_c_glue.cpp | 27 ++++++++++++++++------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/producer/api/c/include/asapo/producer_c.h b/producer/api/c/include/asapo/producer_c.h index a7802428b..e3f64bab8 100644 --- a/producer/api/c/include/asapo/producer_c.h +++ b/producer/api/c/include/asapo/producer_c.h @@ -99,7 +99,7 @@ AsapoStreamInfoHandle asapo_producer_get_last_stream(AsapoProducerHandle produce int asapo_producer_send(AsapoProducerHandle producer, const AsapoMessageHeaderHandle message_header, - AsapoMessageDataHandle data, + void* data, uint64_t ingest_mode, const char* stream, AsapoRequestCallback callback, diff --git a/producer/api/cpp/src/producer_c_glue.cpp b/producer/api/cpp/src/producer_c_glue.cpp index debd7d1ee..24d1f09a8 100644 --- a/producer/api/cpp/src/producer_c_glue.cpp +++ b/producer/api/cpp/src/producer_c_glue.cpp @@ -1,7 +1,7 @@ #define __PRODUCER_C_INTERFACE_IMPLEMENTATION__ #include "asapo/common/internal/asapo_common_c_glue.h" #include "asapo/asapo_producer.h" - +#include <cstddef> //! handle for an asapo producer /// created by asapo_create_producer() @@ -41,7 +41,18 @@ extern "C" { Debug == asapo::LogLevel::Debug&& Warning == asapo::LogLevel::Warning, "incompatible bit reps between c++ and c for asapo::LogLevel"); - + static_assert(sizeof(struct AsapoGenericRequestHeader) == sizeof(asapo::GenericRequestHeader), + "incompatible sizes for asapo::GenericRequestHeader"); + + static_assert(offsetof(AsapoGenericRequestHeader, op_code) == offsetof(asapo::GenericRequestHeader, op_code)&& + offsetof(AsapoGenericRequestHeader, data_id) == offsetof(asapo::GenericRequestHeader, data_id)&& + offsetof(AsapoGenericRequestHeader, data_size) == offsetof(asapo::GenericRequestHeader, data_size)&& + offsetof(AsapoGenericRequestHeader, meta_size) == offsetof(asapo::GenericRequestHeader, meta_size)&& + offsetof(AsapoGenericRequestHeader, custom_data) == offsetof(asapo::GenericRequestHeader, custom_data)&& + offsetof(AsapoGenericRequestHeader, message) == offsetof(asapo::GenericRequestHeader, message)&& + offsetof(AsapoGenericRequestHeader, stream) == offsetof(asapo::GenericRequestHeader, stream)&& + offsetof(AsapoGenericRequestHeader, api_version) == offsetof(asapo::GenericRequestHeader, api_version), + "incompatible field offsets for asapo::GenericRequestHeader"); AsapoProducerHandle asapo_create_producer(const char* endpoint, uint8_t n_processing_threads, @@ -103,17 +114,17 @@ extern "C" { int asapo_producer_send(AsapoProducerHandle producer, const AsapoMessageHeaderHandle message_header, - AsapoMessageDataHandle data, + void* data, uint64_t ingest_mode, const char* stream, AsapoRequestCallback callback, AsapoErrorHandle* error) { BUILD_WRAPPER; - auto err = producer->handle->Send(*message_header->handle, - std::move(data->handle), - ingest_mode, - stream, - wrapper); + auto err = producer->handle->Send__(*message_header->handle, + data, + ingest_mode, + stream, + wrapper); return process_error(error, std::move(err)); } int asapo_producer_send_file(AsapoProducerHandle producer, -- GitLab