1*3c7ae9deSAndroid Build Coastguard Worker /** 2*3c7ae9deSAndroid Build Coastguard Worker * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 3*3c7ae9deSAndroid Build Coastguard Worker * SPDX-License-Identifier: Apache-2.0. 4*3c7ae9deSAndroid Build Coastguard Worker */ 5*3c7ae9deSAndroid Build Coastguard Worker 6*3c7ae9deSAndroid Build Coastguard Worker #include <jni.h> 7*3c7ae9deSAndroid Build Coastguard Worker 8*3c7ae9deSAndroid Build Coastguard Worker #include <aws/common/string.h> 9*3c7ae9deSAndroid Build Coastguard Worker #include <aws/io/tls_channel_handler.h> 10*3c7ae9deSAndroid Build Coastguard Worker 11*3c7ae9deSAndroid Build Coastguard Worker #include "crt.h" 12*3c7ae9deSAndroid Build Coastguard Worker #include "java_class_ids.h" 13*3c7ae9deSAndroid Build Coastguard Worker 14*3c7ae9deSAndroid Build Coastguard Worker /* on 32-bit platforms, casting pointers to longs throws a warning we don't need */ 15*3c7ae9deSAndroid Build Coastguard Worker #if UINTPTR_MAX == 0xffffffff 16*3c7ae9deSAndroid Build Coastguard Worker # if defined(_MSC_VER) 17*3c7ae9deSAndroid Build Coastguard Worker # pragma warning(push) 18*3c7ae9deSAndroid Build Coastguard Worker # pragma warning(disable : 4305) /* 'type cast': truncation from 'jlong' to 'jni_tls_ctx_options *' */ 19*3c7ae9deSAndroid Build Coastguard Worker # else 20*3c7ae9deSAndroid Build Coastguard Worker # pragma GCC diagnostic push 21*3c7ae9deSAndroid Build Coastguard Worker # pragma GCC diagnostic ignored "-Wpointer-to-int-cast" 22*3c7ae9deSAndroid Build Coastguard Worker # pragma GCC diagnostic ignored "-Wint-to-pointer-cast" 23*3c7ae9deSAndroid Build Coastguard Worker # endif 24*3c7ae9deSAndroid Build Coastguard Worker #endif 25*3c7ae9deSAndroid Build Coastguard Worker 26*3c7ae9deSAndroid Build Coastguard Worker JNIEXPORT 27*3c7ae9deSAndroid Build Coastguard Worker jlong JNICALL Java_software_amazon_awssdk_crt_io_TlsContext_tlsContextNew(JNIEnv * env,jclass jni_class,jlong jni_options)28*3c7ae9deSAndroid Build Coastguard Worker Java_software_amazon_awssdk_crt_io_TlsContext_tlsContextNew(JNIEnv *env, jclass jni_class, jlong jni_options) { 29*3c7ae9deSAndroid Build Coastguard Worker (void)jni_class; 30*3c7ae9deSAndroid Build Coastguard Worker aws_cache_jni_ids(env); 31*3c7ae9deSAndroid Build Coastguard Worker 32*3c7ae9deSAndroid Build Coastguard Worker struct aws_tls_ctx_options *options = (struct aws_tls_ctx_options *)jni_options; 33*3c7ae9deSAndroid Build Coastguard Worker if (!options) { 34*3c7ae9deSAndroid Build Coastguard Worker aws_jni_throw_runtime_exception(env, "TlsContext.tls_ctx_new: Invalid TlsOptions"); 35*3c7ae9deSAndroid Build Coastguard Worker return (jlong)NULL; 36*3c7ae9deSAndroid Build Coastguard Worker } 37*3c7ae9deSAndroid Build Coastguard Worker 38*3c7ae9deSAndroid Build Coastguard Worker struct aws_allocator *allocator = aws_jni_get_allocator(); 39*3c7ae9deSAndroid Build Coastguard Worker struct aws_tls_ctx *tls_ctx = aws_tls_client_ctx_new(allocator, options); 40*3c7ae9deSAndroid Build Coastguard Worker if (!tls_ctx) { 41*3c7ae9deSAndroid Build Coastguard Worker aws_jni_throw_runtime_exception(env, "TlsContext.tls_ctx_new: Failed to create new aws_tls_ctx"); 42*3c7ae9deSAndroid Build Coastguard Worker return (jlong)NULL; 43*3c7ae9deSAndroid Build Coastguard Worker } 44*3c7ae9deSAndroid Build Coastguard Worker return (jlong)tls_ctx; 45*3c7ae9deSAndroid Build Coastguard Worker } 46*3c7ae9deSAndroid Build Coastguard Worker 47*3c7ae9deSAndroid Build Coastguard Worker JNIEXPORT 48*3c7ae9deSAndroid Build Coastguard Worker void JNICALL Java_software_amazon_awssdk_crt_io_TlsContext_tlsContextDestroy(JNIEnv * env,jclass jni_class,jlong jni_ctx)49*3c7ae9deSAndroid Build Coastguard Worker Java_software_amazon_awssdk_crt_io_TlsContext_tlsContextDestroy(JNIEnv *env, jclass jni_class, jlong jni_ctx) { 50*3c7ae9deSAndroid Build Coastguard Worker (void)jni_class; 51*3c7ae9deSAndroid Build Coastguard Worker aws_cache_jni_ids(env); 52*3c7ae9deSAndroid Build Coastguard Worker 53*3c7ae9deSAndroid Build Coastguard Worker struct aws_tls_ctx *tls_ctx = (struct aws_tls_ctx *)jni_ctx; 54*3c7ae9deSAndroid Build Coastguard Worker if (!tls_ctx) { 55*3c7ae9deSAndroid Build Coastguard Worker return; 56*3c7ae9deSAndroid Build Coastguard Worker } 57*3c7ae9deSAndroid Build Coastguard Worker 58*3c7ae9deSAndroid Build Coastguard Worker aws_tls_ctx_release(tls_ctx); 59*3c7ae9deSAndroid Build Coastguard Worker } 60*3c7ae9deSAndroid Build Coastguard Worker 61*3c7ae9deSAndroid Build Coastguard Worker #if UINTPTR_MAX == 0xffffffff 62*3c7ae9deSAndroid Build Coastguard Worker # if defined(_MSC_VER) 63*3c7ae9deSAndroid Build Coastguard Worker # pragma warning(pop) 64*3c7ae9deSAndroid Build Coastguard Worker # else 65*3c7ae9deSAndroid Build Coastguard Worker # pragma GCC diagnostic pop 66*3c7ae9deSAndroid Build Coastguard Worker # endif 67*3c7ae9deSAndroid Build Coastguard Worker #endif 68