Skip to content

Commit

Permalink
mobile: Change the return type to void from void* in the callbacks (e…
Browse files Browse the repository at this point in the history
…nvoyproxy#32522)

Signed-off-by: Fredy Wijaya <fredyw@google.com>
  • Loading branch information
fredyw authored Feb 22, 2024
1 parent ffbf188 commit 213cc97
Show file tree
Hide file tree
Showing 6 changed files with 90 additions and 149 deletions.
24 changes: 8 additions & 16 deletions mobile/library/cc/stream_callbacks.cc
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ namespace Platform {

namespace {

void* c_on_headers(envoy_headers headers, bool end_stream, envoy_stream_intel intel,
void* context) {
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()) {
auto raw_headers = envoyHeadersAsRawHeaderMap(headers);
Expand All @@ -27,21 +26,19 @@ void* c_on_headers(envoy_headers headers, bool end_stream, envoy_stream_intel in
} else {
release_envoy_headers(headers);
}
return context;
}

void* c_on_data(envoy_data data, bool end_stream, envoy_stream_intel, void* context) {
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();
on_data(data, end_stream);
} else {
release_envoy_data(data);
}
return context;
}

void* c_on_trailers(envoy_headers metadata, envoy_stream_intel intel, void* context) {
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()) {
auto raw_headers = envoyHeadersAsRawHeaderMap(metadata);
Expand All @@ -54,11 +51,10 @@ void* c_on_trailers(envoy_headers metadata, envoy_stream_intel intel, void* cont
} else {
release_envoy_headers(metadata);
}
return context;
}

void* c_on_error(envoy_error raw_error, envoy_stream_intel intel,
envoy_final_stream_intel final_intel, void* context) {
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()) {
Expand All @@ -71,39 +67,35 @@ void* c_on_error(envoy_error raw_error, envoy_stream_intel intel,
}
release_envoy_error(raw_error);
delete stream_callbacks_ptr;
return nullptr;
}

void* c_on_complete(envoy_stream_intel intel, envoy_final_stream_intel final_intel, void* context) {
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();
on_complete(intel, final_intel);
}
delete stream_callbacks_ptr;
return nullptr;
}

void* c_on_cancel(envoy_stream_intel intel, envoy_final_stream_intel final_intel, void* context) {
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();
on_cancel(intel, final_intel);
}
delete stream_callbacks_ptr;
return nullptr;
}

void* c_on_send_window_available(envoy_stream_intel intel, void* context) {
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();
on_send_window_available(intel);
}
return nullptr;
}

} // namespace
Expand Down
37 changes: 15 additions & 22 deletions mobile/library/common/types/c_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -322,10 +322,9 @@ extern "C" { // function pointers
* @param stream_intel, contains internal stream metrics, context, and other details.
* @param context, contains the necessary state to carry out platform-specific dispatch and
* execution.
* @return void*, return context (may be unused).
*/
typedef void* (*envoy_on_headers_f)(envoy_headers headers, bool end_stream,
envoy_stream_intel stream_intel, void* context);
typedef void (*envoy_on_headers_f)(envoy_headers headers, bool end_stream,
envoy_stream_intel stream_intel, void* context);

/**
* Callback signature for data on an HTTP stream.
Expand All @@ -337,10 +336,9 @@ typedef void* (*envoy_on_headers_f)(envoy_headers headers, bool end_stream,
* @param stream_intel, contains internal stream metrics, context, and other details.
* @param context, contains the necessary state to carry out platform-specific dispatch and
* execution.
* @return void*, return context (may be unused).
*/
typedef void* (*envoy_on_data_f)(envoy_data data, bool end_stream, envoy_stream_intel stream_intel,
void* context);
typedef void (*envoy_on_data_f)(envoy_data data, bool end_stream, envoy_stream_intel stream_intel,
void* context);

/**
* Callback signature for metadata on an HTTP stream.
Expand All @@ -353,8 +351,8 @@ typedef void* (*envoy_on_data_f)(envoy_data data, bool end_stream, envoy_stream_
* execution.
* @return void*, return context (may be unused).
*/
typedef void* (*envoy_on_metadata_f)(envoy_headers metadata, envoy_stream_intel stream_intel,
void* context);
typedef void (*envoy_on_metadata_f)(envoy_headers metadata, envoy_stream_intel stream_intel,
void* context);

/**
* Callback signature for trailers on an HTTP stream.
Expand All @@ -365,10 +363,9 @@ typedef void* (*envoy_on_metadata_f)(envoy_headers metadata, envoy_stream_intel
* @param stream_intel, contains internal stream metrics, context, and other details.
* @param context, contains the necessary state to carry out platform-specific dispatch and
* execution.
* @return void*, return context (may be unused).
*/
typedef void* (*envoy_on_trailers_f)(envoy_headers trailers, envoy_stream_intel stream_intel,
void* context);
typedef void (*envoy_on_trailers_f)(envoy_headers trailers, envoy_stream_intel stream_intel,
void* context);

/**
* Callback signature for errors with an HTTP stream.
Expand All @@ -380,10 +377,9 @@ typedef void* (*envoy_on_trailers_f)(envoy_headers trailers, envoy_stream_intel
* @param final_stream_intel, contains final internal stream metrics, context, and other details.
* @param context, contains the necessary state to carry out platform-specific dispatch and
* execution.
* @return void*, return context (may be unused).
*/
typedef void* (*envoy_on_error_f)(envoy_error error, envoy_stream_intel stream_intel,
envoy_final_stream_intel final_stream_intel, void* context);
typedef void (*envoy_on_error_f)(envoy_error error, envoy_stream_intel stream_intel,
envoy_final_stream_intel final_stream_intel, void* context);

/**
* Callback signature for when an HTTP stream bi-directionally completes without error.
Expand All @@ -394,10 +390,9 @@ typedef void* (*envoy_on_error_f)(envoy_error error, envoy_stream_intel stream_i
* @param final_stream_intel, contains final internal stream metrics, context, and other details.
* @param context, contains the necessary state to carry out platform-specific dispatch and
* execution.
* @return void*, return context (may be unused).
*/
typedef void* (*envoy_on_complete_f)(envoy_stream_intel stream_intel,
envoy_final_stream_intel final_stream_intel, void* context);
typedef void (*envoy_on_complete_f)(envoy_stream_intel stream_intel,
envoy_final_stream_intel final_stream_intel, void* context);

/**
* Callback signature for when an HTTP stream is cancelled.
Expand All @@ -408,10 +403,9 @@ typedef void* (*envoy_on_complete_f)(envoy_stream_intel stream_intel,
* @param final_stream_intel, contains final internal stream metrics, context, and other details.
* @param context, contains the necessary state to carry out platform-specific dispatch and
* execution.
* @return void*, return context (may be unused).
*/
typedef void* (*envoy_on_cancel_f)(envoy_stream_intel stream_intel,
envoy_final_stream_intel final_stream_intel, void* context);
typedef void (*envoy_on_cancel_f)(envoy_stream_intel stream_intel,
envoy_final_stream_intel final_stream_intel, void* context);

/**
* Called when the envoy engine is exiting.
Expand Down Expand Up @@ -456,9 +450,8 @@ typedef void (*envoy_logger_release_f)(const void* context);
* @param stream_intel, contains internal stream metrics, context, and other details.
* @param context, contains the necessary state to carry out platform-specific dispatch and
* execution.
* @return void*, return context (may be unused).
*/
typedef void* (*envoy_on_send_window_available_f)(envoy_stream_intel stream_intel, void* context);
typedef void (*envoy_on_send_window_available_f)(envoy_stream_intel stream_intel, void* context);

/**
* Called when envoy's event tracker tracks an event.
Expand Down
91 changes: 36 additions & 55 deletions mobile/library/jni/jni_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -277,11 +277,10 @@ jvm_on_headers(const char* method, const Envoy::Types::ManagedEnvoyHeaders& head
return noopResult;
}

static void* jvm_on_response_headers(envoy_headers headers, bool end_stream,
envoy_stream_intel stream_intel, void* context) {
static void jvm_on_response_headers(envoy_headers headers, bool end_stream,
envoy_stream_intel stream_intel, void* context) {
const auto managed_headers = Envoy::Types::ManagedEnvoyHeaders(headers);
return jvm_on_headers("onResponseHeaders", managed_headers, end_stream, stream_intel, context)
.release();
jvm_on_headers("onResponseHeaders", managed_headers, end_stream, stream_intel, context);
}

static envoy_filter_headers_status
Expand Down Expand Up @@ -360,9 +359,9 @@ static Envoy::JNI::LocalRefUniquePtr<jobjectArray> jvm_on_data(const char* metho
return result;
}

static void* jvm_on_response_data(envoy_data data, bool end_stream, envoy_stream_intel stream_intel,
void* context) {
return jvm_on_data("onResponseData", data, end_stream, stream_intel, context).release();
static void jvm_on_response_data(envoy_data data, bool end_stream, envoy_stream_intel stream_intel,
void* context) {
jvm_on_data("onResponseData", data, end_stream, stream_intel, context);
}

static envoy_filter_data_status jvm_http_filter_on_request_data(envoy_data data, bool end_stream,
Expand Down Expand Up @@ -433,11 +432,10 @@ static envoy_filter_data_status jvm_http_filter_on_response_data(envoy_data data
/*pending_headers*/ pending_headers};
}

static void* jvm_on_metadata(envoy_headers metadata, envoy_stream_intel /*stream_intel*/,
void* /*context*/) {
static void jvm_on_metadata(envoy_headers metadata, envoy_stream_intel /*stream_intel*/,
void* /*context*/) {
jni_log("[Envoy]", "jvm_on_metadata");
jni_log("[Envoy]", std::to_string(metadata.length).c_str());
return nullptr;
}

static Envoy::JNI::LocalRefUniquePtr<jobjectArray> jvm_on_trailers(const char* method,
Expand Down Expand Up @@ -465,9 +463,9 @@ static Envoy::JNI::LocalRefUniquePtr<jobjectArray> jvm_on_trailers(const char* m
return result;
}

static void* jvm_on_response_trailers(envoy_headers trailers, envoy_stream_intel stream_intel,
void* context) {
return jvm_on_trailers("onResponseTrailers", trailers, stream_intel, context).release();
static void jvm_on_response_trailers(envoy_headers trailers, envoy_stream_intel stream_intel,
void* context) {
jvm_on_trailers("onResponseTrailers", trailers, stream_intel, context);
}

static envoy_filter_trailers_status
Expand Down Expand Up @@ -666,8 +664,8 @@ jvm_http_filter_on_resume_response(envoy_headers* headers, envoy_data* data,
stream_intel, context);
}

static void* call_jvm_on_complete(envoy_stream_intel stream_intel,
envoy_final_stream_intel final_stream_intel, void* context) {
static void call_jvm_on_complete(envoy_stream_intel stream_intel,
envoy_final_stream_intel final_stream_intel, void* context) {
jni_log("[Envoy]", "jvm_on_complete");

Envoy::JNI::JniHelper jni_helper(Envoy::JNI::getEnv());
Expand All @@ -682,16 +680,12 @@ static void* call_jvm_on_complete(envoy_stream_intel stream_intel,
Envoy::JNI::envoyStreamIntelToJavaLongArray(jni_helper, stream_intel);
Envoy::JNI::LocalRefUniquePtr<jlongArray> j_final_stream_intel =
Envoy::JNI::envoyFinalStreamIntelToJavaLongArray(jni_helper, final_stream_intel);
jobject result = jni_helper
.callObjectMethod(j_context, jmid_onComplete, j_stream_intel.get(),
j_final_stream_intel.get())
.release();

return result;
Envoy::JNI::LocalRefUniquePtr<jobject> unused = jni_helper.callObjectMethod(
j_context, jmid_onComplete, j_stream_intel.get(), j_final_stream_intel.get());
}

static void* call_jvm_on_error(envoy_error error, envoy_stream_intel stream_intel,
envoy_final_stream_intel final_stream_intel, void* context) {
static void call_jvm_on_error(envoy_error error, envoy_stream_intel stream_intel,
envoy_final_stream_intel final_stream_intel, void* context) {
jni_log("[Envoy]", "jvm_on_error");
Envoy::JNI::JniHelper jni_helper(Envoy::JNI::getEnv());
jobject j_context = static_cast<jobject>(context);
Expand All @@ -708,25 +702,21 @@ static void* call_jvm_on_error(envoy_error error, envoy_stream_intel stream_inte
Envoy::JNI::LocalRefUniquePtr<jlongArray> j_final_stream_intel =
Envoy::JNI::envoyFinalStreamIntelToJavaLongArray(jni_helper, final_stream_intel);

jobject result =
jni_helper
.callObjectMethod(j_context, jmid_onError, error.error_code, j_error_message.get(),
error.attempt_count, j_stream_intel.get(), j_final_stream_intel.get())
.release();
Envoy::JNI::LocalRefUniquePtr<jobject> unused = jni_helper.callObjectMethod(
j_context, jmid_onError, error.error_code, j_error_message.get(), error.attempt_count,
j_stream_intel.get(), j_final_stream_intel.get());

release_envoy_error(error);
return result;
}

static void* jvm_on_error(envoy_error error, envoy_stream_intel stream_intel,
envoy_final_stream_intel final_stream_intel, void* context) {
void* result = call_jvm_on_error(error, stream_intel, final_stream_intel, context);
static void jvm_on_error(envoy_error error, envoy_stream_intel stream_intel,
envoy_final_stream_intel final_stream_intel, void* context) {
call_jvm_on_error(error, stream_intel, final_stream_intel, context);
Envoy::JNI::jniDeleteGlobalRef(context);
return result;
}

static void* call_jvm_on_cancel(envoy_stream_intel stream_intel,
envoy_final_stream_intel final_stream_intel, void* context) {
static void call_jvm_on_cancel(envoy_stream_intel stream_intel,
envoy_final_stream_intel final_stream_intel, void* context) {
jni_log("[Envoy]", "jvm_on_cancel");

Envoy::JNI::JniHelper jni_helper(Envoy::JNI::getEnv());
Expand All @@ -742,26 +732,20 @@ static void* call_jvm_on_cancel(envoy_stream_intel stream_intel,
Envoy::JNI::LocalRefUniquePtr<jlongArray> j_final_stream_intel =
Envoy::JNI::envoyFinalStreamIntelToJavaLongArray(jni_helper, final_stream_intel);

jobject result = jni_helper
.callObjectMethod(j_context, jmid_onCancel, j_stream_intel.get(),
j_final_stream_intel.get())
.release();

return result;
Envoy::JNI::LocalRefUniquePtr<jobject> unused = jni_helper.callObjectMethod(
j_context, jmid_onCancel, j_stream_intel.get(), j_final_stream_intel.get());
}

static void* jvm_on_complete(envoy_stream_intel stream_intel,
envoy_final_stream_intel final_stream_intel, void* context) {
void* result = call_jvm_on_complete(stream_intel, final_stream_intel, context);
static void jvm_on_complete(envoy_stream_intel stream_intel,
envoy_final_stream_intel final_stream_intel, void* context) {
call_jvm_on_complete(stream_intel, final_stream_intel, context);
Envoy::JNI::jniDeleteGlobalRef(context);
return result;
}

static void* jvm_on_cancel(envoy_stream_intel stream_intel,
envoy_final_stream_intel final_stream_intel, void* context) {
void* result = call_jvm_on_cancel(stream_intel, final_stream_intel, context);
static void jvm_on_cancel(envoy_stream_intel stream_intel,
envoy_final_stream_intel final_stream_intel, void* context) {
call_jvm_on_cancel(stream_intel, final_stream_intel, context);
Envoy::JNI::jniDeleteGlobalRef(context);
return result;
}

static void jvm_http_filter_on_error(envoy_error error, envoy_stream_intel stream_intel,
Expand All @@ -776,7 +760,7 @@ static void jvm_http_filter_on_cancel(envoy_stream_intel stream_intel,
call_jvm_on_cancel(stream_intel, final_stream_intel, const_cast<void*>(context));
}

static void* jvm_on_send_window_available(envoy_stream_intel stream_intel, void* context) {
static void jvm_on_send_window_available(envoy_stream_intel stream_intel, void* context) {
jni_log("[Envoy]", "jvm_on_send_window_available");

Envoy::JNI::JniHelper jni_helper(Envoy::JNI::getEnv());
Expand All @@ -790,11 +774,8 @@ static void* jvm_on_send_window_available(envoy_stream_intel stream_intel, void*
Envoy::JNI::LocalRefUniquePtr<jlongArray> j_stream_intel =
Envoy::JNI::envoyStreamIntelToJavaLongArray(jni_helper, stream_intel);

jobject result =
jni_helper.callObjectMethod(j_context, jmid_onSendWindowAvailable, j_stream_intel.get())
.release();

return result;
Envoy::JNI::LocalRefUniquePtr<jobject> unused =
jni_helper.callObjectMethod(j_context, jmid_onSendWindowAvailable, j_stream_intel.get());
}

// JvmKeyValueStoreContext
Expand Down
Loading

0 comments on commit 213cc97

Please sign in to comment.