in src/native/s3_client.c [337:414]
JNIEXPORT jlong JNICALL Java_software_amazon_awssdk_crt_s3_S3Client_s3ClientMakeMetaRequest(
JNIEnv *env,
jclass jni_class,
jlong jni_s3_client,
jobject java_s3_meta_request_jobject,
jbyteArray jni_region,
jint meta_request_type,
jbyteArray jni_marshalled_message_data,
jobject jni_http_request_body_stream,
jlong jni_credentials_provider,
jobject java_response_handler_jobject) {
(void)jni_class;
struct aws_allocator *allocator = aws_jni_get_allocator();
struct aws_s3_client *client = (struct aws_s3_client *)jni_s3_client;
struct aws_credentials_provider *credentials_provider = (struct aws_credentials_provider *)jni_credentials_provider;
struct aws_signing_config_aws *signing_config = NULL;
bool success = false;
struct aws_byte_cursor region = aws_jni_byte_cursor_from_jbyteArray_acquire(env, jni_region);
if (credentials_provider) {
signing_config = aws_mem_calloc(allocator, 1, sizeof(struct aws_signing_config_aws));
aws_s3_init_default_signing_config(signing_config, region, credentials_provider);
}
struct s3_client_make_meta_request_callback_data *callback_data =
aws_mem_calloc(allocator, 1, sizeof(struct s3_client_make_meta_request_callback_data));
AWS_FATAL_ASSERT(callback_data);
jint jvmresult = (*env)->GetJavaVM(env, &callback_data->jvm);
(void)jvmresult;
AWS_FATAL_ASSERT(jvmresult == 0);
callback_data->java_s3_meta_request = (*env)->NewGlobalRef(env, java_s3_meta_request_jobject);
AWS_FATAL_ASSERT(callback_data->java_s3_meta_request != NULL);
callback_data->java_s3_meta_request_response_handler_native_adapter =
(*env)->NewGlobalRef(env, java_response_handler_jobject);
AWS_FATAL_ASSERT(callback_data->java_s3_meta_request_response_handler_native_adapter != NULL);
struct aws_http_message *request_message = aws_http_message_new_request(allocator);
AWS_FATAL_ASSERT(request_message);
AWS_FATAL_ASSERT(
AWS_OP_SUCCESS == aws_apply_java_http_request_changes_to_native_request(
env, jni_marshalled_message_data, jni_http_request_body_stream, request_message));
callback_data->input_stream = aws_http_message_get_body_stream(request_message);
struct aws_s3_meta_request_options meta_request_options = {
.type = meta_request_type,
.message = request_message,
.user_data = callback_data,
.signing_config = signing_config,
.headers_callback = s_on_s3_meta_request_headers_callback,
.body_callback = s_on_s3_meta_request_body_callback,
.finish_callback = s_on_s3_meta_request_finish_callback,
.shutdown_callback = s_on_s3_meta_request_shutdown_complete_callback};
struct aws_s3_meta_request *meta_request = aws_s3_client_make_meta_request(client, &meta_request_options);
if (!meta_request) {
aws_jni_throw_runtime_exception(
env, "S3Client.aws_s3_client_make_meta_request: creating aws_s3_meta_request failed");
goto done;
}
success = true;
done:
aws_jni_byte_cursor_from_jbyteArray_release(env, jni_region, region);
if (signing_config) {
aws_mem_release(allocator, signing_config);
}
aws_http_message_release(request_message);
if (success) {
return (jlong)meta_request;
}
s_s3_meta_request_callback_cleanup(env, callback_data);
return (jlong)0;
}