Skip to content

Commit

Permalink
after merge
Browse files Browse the repository at this point in the history
Signed-off-by: Ali Beyad <abeyad@google.com>
  • Loading branch information
abeyad committed Feb 25, 2024
1 parent 0b42c70 commit 4c8342e
Showing 1 changed file with 34 additions and 25 deletions.
59 changes: 34 additions & 25 deletions mobile/library/cc/stream_callbacks.cc
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,16 @@ namespace Platform {

namespace {

// StreamCallbacksWrapper allows us to create a raw pointer instance that wraps the StreamCallbacks
// shared_ptr, so we can store it in the context as a void*.
struct StreamCallbacksWrapper {
StreamCallbacksSharedPtr stream_callbacks;
};

void c_on_headers(envoy_headers headers, bool end_stream, envoy_stream_intel intel, void* context) {
auto stream_callbacks = *static_cast<StreamCallbacksSharedPtr*>(context);
if (stream_callbacks->on_headers.has_value()) {
StreamCallbacks& stream_callbacks =
*static_cast<StreamCallbacksWrapper*>(context)->stream_callbacks;
if (stream_callbacks.on_headers.has_value()) {
auto raw_headers = envoyHeadersAsRawHeaderMap(headers);
ResponseHeadersBuilder builder;
for (const auto& pair : raw_headers) {
Expand All @@ -29,18 +36,20 @@ void c_on_headers(envoy_headers headers, bool end_stream, envoy_stream_intel int
}

void c_on_data(envoy_data data, bool end_stream, envoy_stream_intel, void* context) {
auto stream_callbacks = *static_cast<StreamCallbacksSharedPtr*>(context);
if (stream_callbacks->on_data.has_value()) {
auto on_data = stream_callbacks->on_data.value();
StreamCallbacks& stream_callbacks =
*static_cast<StreamCallbacksWrapper*>(context)->stream_callbacks;
if (stream_callbacks.on_data.has_value()) {
auto on_data = stream_callbacks.on_data.value();
on_data(data, end_stream);
} else {
release_envoy_data(data);
}
}

void c_on_trailers(envoy_headers metadata, envoy_stream_intel intel, void* context) {
auto stream_callbacks = *static_cast<StreamCallbacksSharedPtr*>(context);
if (stream_callbacks->on_trailers.has_value()) {
StreamCallbacks& stream_callbacks =
*static_cast<StreamCallbacksWrapper*>(context)->stream_callbacks;
if (stream_callbacks.on_trailers.has_value()) {
auto raw_headers = envoyHeadersAsRawHeaderMap(metadata);
ResponseTrailersBuilder builder;
for (const auto& pair : raw_headers) {
Expand All @@ -55,9 +64,9 @@ void c_on_trailers(envoy_headers metadata, envoy_stream_intel intel, void* conte

void c_on_error(envoy_error raw_error, envoy_stream_intel intel,
envoy_final_stream_intel final_intel, void* context) {
auto stream_callbacks_ptr = static_cast<StreamCallbacksSharedPtr*>(context);
auto stream_callbacks = *stream_callbacks_ptr;
if (stream_callbacks->on_error.has_value()) {
StreamCallbacksWrapper* stream_callbacks_wrapper = static_cast<StreamCallbacksWrapper*>(context);
StreamCallbacks& stream_callbacks = *stream_callbacks_wrapper->stream_callbacks;
if (stream_callbacks.on_error.has_value()) {
EnvoyErrorSharedPtr error = std::make_shared<EnvoyError>();
error->error_code = raw_error.error_code;
error->message = Data::Utility::copyToString(raw_error.message);
Expand All @@ -66,34 +75,34 @@ void c_on_error(envoy_error raw_error, envoy_stream_intel intel,
on_error(error, intel, final_intel);
}
release_envoy_error(raw_error);
delete stream_callbacks_ptr;
delete stream_callbacks_wrapper;
}

void c_on_complete(envoy_stream_intel intel, envoy_final_stream_intel final_intel, void* context) {
auto stream_callbacks_ptr = static_cast<StreamCallbacksSharedPtr*>(context);
auto stream_callbacks = *stream_callbacks_ptr;
if (stream_callbacks->on_complete.has_value()) {
auto on_complete = stream_callbacks->on_complete.value();
StreamCallbacksWrapper* stream_callbacks_wrapper = static_cast<StreamCallbacksWrapper*>(context);
StreamCallbacks& stream_callbacks = *stream_callbacks_wrapper->stream_callbacks;
if (stream_callbacks.on_complete.has_value()) {
auto on_complete = stream_callbacks.on_complete.value();
on_complete(intel, final_intel);
}
delete stream_callbacks_ptr;
delete stream_callbacks_wrapper;
}

void c_on_cancel(envoy_stream_intel intel, envoy_final_stream_intel final_intel, void* context) {
auto stream_callbacks_ptr = static_cast<StreamCallbacksSharedPtr*>(context);
auto stream_callbacks = *stream_callbacks_ptr;
if (stream_callbacks->on_cancel.has_value()) {
auto on_cancel = stream_callbacks->on_cancel.value();
StreamCallbacksWrapper* stream_callbacks_wrapper = static_cast<StreamCallbacksWrapper*>(context);
StreamCallbacks& stream_callbacks = *stream_callbacks_wrapper->stream_callbacks;
if (stream_callbacks.on_cancel.has_value()) {
auto on_cancel = stream_callbacks.on_cancel.value();
on_cancel(intel, final_intel);
}
delete stream_callbacks_ptr;
delete stream_callbacks_wrapper;
}

void c_on_send_window_available(envoy_stream_intel intel, void* context) {
auto stream_callbacks_ptr = static_cast<StreamCallbacksSharedPtr*>(context);
auto stream_callbacks = *stream_callbacks_ptr;
if (stream_callbacks->on_send_window_available.has_value()) {
auto on_send_window_available = stream_callbacks->on_send_window_available.value();
StreamCallbacksWrapper* stream_callbacks_wrapper = static_cast<StreamCallbacksWrapper*>(context);
StreamCallbacks& stream_callbacks = *stream_callbacks_wrapper->stream_callbacks;
if (stream_callbacks.on_send_window_available.has_value()) {
auto on_send_window_available = stream_callbacks.on_send_window_available.value();
on_send_window_available(intel);
}
}
Expand Down

0 comments on commit 4c8342e

Please sign in to comment.