blob: dff4e5ca9b94a6095a7f7fcc1a30912f2f4898a6 [file] [log] [blame] [edit]
/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/
#include "crt.h"
#include "java_class_ids.h"
#include <aws/io/uri.h>
#include <jni.h>
static jbyteArray s_encoding_common(
JNIEnv *env,
jbyteArray buffer,
jbyteArray cursor,
int (*encoding_fn)(struct aws_byte_buf *, const struct aws_byte_cursor *)) {
struct aws_byte_cursor c_intermediate_cursor = aws_jni_byte_cursor_from_jbyteArray_acquire(env, buffer);
struct aws_byte_cursor c_byte_cursor = aws_jni_byte_cursor_from_jbyteArray_acquire(env, cursor);
jbyteArray uri_encoding = NULL;
struct aws_byte_buf c_byte_buf;
aws_byte_buf_init_copy_from_cursor(&c_byte_buf, aws_jni_get_allocator(), c_intermediate_cursor);
if (encoding_fn(&c_byte_buf, &c_byte_cursor)) {
aws_jni_throw_runtime_exception(env, "uri.encodingCommon: failed to encode buffer");
goto clean_up;
}
struct aws_byte_cursor uri_encoding_cursor = aws_byte_cursor_from_buf(&c_byte_buf);
uri_encoding = aws_jni_byte_array_from_cursor(env, &uri_encoding_cursor);
clean_up:
aws_jni_byte_cursor_from_jbyteArray_release(env, buffer, c_intermediate_cursor);
aws_jni_byte_cursor_from_jbyteArray_release(env, cursor, c_byte_cursor);
aws_byte_buf_clean_up(&c_byte_buf);
return uri_encoding;
}
JNIEXPORT jbyteArray JNICALL Java_software_amazon_awssdk_crt_io_Uri_appendEncodingUriPath(
JNIEnv *env,
jclass jni_class,
jbyteArray encoded,
jbyteArray path) {
(void)jni_class;
aws_cache_jni_ids(env);
return s_encoding_common(env, encoded, path, aws_byte_buf_append_encoding_uri_path);
}
JNIEXPORT jbyteArray JNICALL Java_software_amazon_awssdk_crt_io_Uri_appendEncodingUriParam(
JNIEnv *env,
jclass jni_class,
jbyteArray encoded,
jbyteArray param) {
(void)jni_class;
aws_cache_jni_ids(env);
return s_encoding_common(env, encoded, param, aws_byte_buf_append_encoding_uri_param);
}
JNIEXPORT jbyteArray JNICALL Java_software_amazon_awssdk_crt_io_Uri_appendDecodingUri(
JNIEnv *env,
jclass jni_class,
jbyteArray base,
jbyteArray encoded) {
(void)jni_class;
aws_cache_jni_ids(env);
return s_encoding_common(env, base, encoded, aws_byte_buf_append_decoding_uri);
}