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