in src/native/aws_signing.c [279:353]
static int s_build_signing_config(
JNIEnv *env,
struct s_aws_sign_request_callback_data *callback_data,
jobject java_config,
struct aws_signing_config_aws *config) {
config->config_type = AWS_SIGNING_CONFIG_AWS;
config->algorithm = (enum aws_signing_algorithm)(*env)->GetIntField(
env, java_config, aws_signing_config_properties.algorithm_field_id);
config->signature_type = (enum aws_signature_type)(*env)->GetIntField(
env, java_config, aws_signing_config_properties.signature_type_field_id);
jstring region = (jstring)(*env)->GetObjectField(env, java_config, aws_signing_config_properties.region_field_id);
callback_data->region = aws_jni_new_string_from_jstring(env, region);
config->region = aws_byte_cursor_from_string(callback_data->region);
jstring service = (jstring)(*env)->GetObjectField(env, java_config, aws_signing_config_properties.service_field_id);
callback_data->service = aws_jni_new_string_from_jstring(env, service);
config->service = aws_byte_cursor_from_string(callback_data->service);
int64_t epoch_time_millis = (*env)->GetLongField(env, java_config, aws_signing_config_properties.time_field_id);
aws_date_time_init_epoch_millis(&config->date, (uint64_t)epoch_time_millis);
jobject sign_header_predicate =
(*env)->GetObjectField(env, java_config, aws_signing_config_properties.should_sign_header_field_id);
if (sign_header_predicate != NULL) {
callback_data->java_sign_header_predicate = (*env)->NewGlobalRef(env, sign_header_predicate);
AWS_FATAL_ASSERT(callback_data->java_sign_header_predicate != NULL);
config->should_sign_header = s_should_sign_header;
config->should_sign_header_ud = callback_data;
}
config->flags.use_double_uri_encode =
(*env)->GetBooleanField(env, java_config, aws_signing_config_properties.use_double_uri_encode_field_id);
config->flags.should_normalize_uri_path =
(*env)->GetBooleanField(env, java_config, aws_signing_config_properties.should_normalize_uri_path_field_id);
config->flags.omit_session_token =
(*env)->GetBooleanField(env, java_config, aws_signing_config_properties.omit_session_token_field_id);
jstring signed_body_value =
(jstring)(*env)->GetObjectField(env, java_config, aws_signing_config_properties.signed_body_value_field_id);
if (signed_body_value == NULL) {
AWS_ZERO_STRUCT(config->signed_body_value);
} else {
callback_data->signed_body_value = aws_jni_new_string_from_jstring(env, signed_body_value);
config->signed_body_value = aws_byte_cursor_from_string(callback_data->signed_body_value);
}
config->signed_body_header =
(*env)->GetIntField(env, java_config, aws_signing_config_properties.signed_body_header_field_id);
jobject provider =
(*env)->GetObjectField(env, java_config, aws_signing_config_properties.credentials_provider_field_id);
if (provider != NULL) {
config->credentials_provider =
(void *)(*env)->CallLongMethod(env, provider, crt_resource_properties.get_native_handle_method_id);
aws_jni_check_and_clear_exception(env);
}
jobject credentials = (*env)->GetObjectField(env, java_config, aws_signing_config_properties.credentials_field_id);
if (credentials != NULL) {
callback_data->credentials = aws_credentials_new_from_java_credentials(env, credentials);
config->credentials = callback_data->credentials;
}
config->expiration_in_seconds =
(uint64_t)(*env)->GetLongField(env, java_config, aws_signing_config_properties.expiration_in_seconds_field_id);
if (aws_jni_check_and_clear_exception(env)) {
return aws_raise_error(AWS_ERROR_HTTP_CALLBACK_FAILURE);
}
return AWS_OP_SUCCESS;
}