xref: /aosp_15_r20/external/aws-crt-java/src/native/host_resolver.c (revision 3c7ae9de214676c52d19f01067dc1a404272dc11)
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 #include <jni.h>
6*3c7ae9deSAndroid Build Coastguard Worker 
7*3c7ae9deSAndroid Build Coastguard Worker #include <aws/io/host_resolver.h>
8*3c7ae9deSAndroid Build Coastguard Worker 
9*3c7ae9deSAndroid Build Coastguard Worker #include "crt.h"
10*3c7ae9deSAndroid Build Coastguard Worker #include "java_class_ids.h"
11*3c7ae9deSAndroid Build Coastguard Worker 
12*3c7ae9deSAndroid Build Coastguard Worker /* on 32-bit platforms, casting pointers to longs throws a warning we don't need */
13*3c7ae9deSAndroid Build Coastguard Worker #if UINTPTR_MAX == 0xffffffff
14*3c7ae9deSAndroid Build Coastguard Worker #    if defined(_MSC_VER)
15*3c7ae9deSAndroid Build Coastguard Worker #        pragma warning(push)
16*3c7ae9deSAndroid Build Coastguard Worker #        pragma warning(disable : 4305) /* 'type cast': truncation from 'jlong' to 'aws_event_loop_group *' */
17*3c7ae9deSAndroid Build Coastguard Worker #    else
18*3c7ae9deSAndroid Build Coastguard Worker #        pragma GCC diagnostic push
19*3c7ae9deSAndroid Build Coastguard Worker #        pragma GCC diagnostic ignored "-Wpointer-to-int-cast"
20*3c7ae9deSAndroid Build Coastguard Worker #        pragma GCC diagnostic ignored "-Wint-to-pointer-cast"
21*3c7ae9deSAndroid Build Coastguard Worker #    endif
22*3c7ae9deSAndroid Build Coastguard Worker #endif
23*3c7ae9deSAndroid Build Coastguard Worker 
Java_software_amazon_awssdk_crt_io_HostResolver_hostResolverNew(JNIEnv * env,jclass jni_class,jlong jni_elg,jint max_entries)24*3c7ae9deSAndroid Build Coastguard Worker JNIEXPORT jlong JNICALL Java_software_amazon_awssdk_crt_io_HostResolver_hostResolverNew(
25*3c7ae9deSAndroid Build Coastguard Worker     JNIEnv *env,
26*3c7ae9deSAndroid Build Coastguard Worker     jclass jni_class,
27*3c7ae9deSAndroid Build Coastguard Worker     jlong jni_elg,
28*3c7ae9deSAndroid Build Coastguard Worker     jint max_entries) {
29*3c7ae9deSAndroid Build Coastguard Worker 
30*3c7ae9deSAndroid Build Coastguard Worker     (void)jni_class;
31*3c7ae9deSAndroid Build Coastguard Worker     aws_cache_jni_ids(env);
32*3c7ae9deSAndroid Build Coastguard Worker 
33*3c7ae9deSAndroid Build Coastguard Worker     struct aws_allocator *allocator = aws_jni_get_allocator();
34*3c7ae9deSAndroid Build Coastguard Worker     struct aws_event_loop_group *el_group = (struct aws_event_loop_group *)jni_elg;
35*3c7ae9deSAndroid Build Coastguard Worker 
36*3c7ae9deSAndroid Build Coastguard Worker     if (!el_group) {
37*3c7ae9deSAndroid Build Coastguard Worker         aws_jni_throw_runtime_exception(env, "HostResolver.hostResolverNew: Invalid EventLoopGroup");
38*3c7ae9deSAndroid Build Coastguard Worker         return (jlong)NULL;
39*3c7ae9deSAndroid Build Coastguard Worker     }
40*3c7ae9deSAndroid Build Coastguard Worker 
41*3c7ae9deSAndroid Build Coastguard Worker     if (max_entries <= 0) {
42*3c7ae9deSAndroid Build Coastguard Worker         aws_jni_throw_runtime_exception(env, "HostResolver.hostResolverNew: max_entries must be >= 0");
43*3c7ae9deSAndroid Build Coastguard Worker         return (jlong)NULL;
44*3c7ae9deSAndroid Build Coastguard Worker     }
45*3c7ae9deSAndroid Build Coastguard Worker 
46*3c7ae9deSAndroid Build Coastguard Worker     struct aws_host_resolver_default_options resolver_options = {
47*3c7ae9deSAndroid Build Coastguard Worker         .max_entries = max_entries,
48*3c7ae9deSAndroid Build Coastguard Worker         .el_group = el_group,
49*3c7ae9deSAndroid Build Coastguard Worker     };
50*3c7ae9deSAndroid Build Coastguard Worker 
51*3c7ae9deSAndroid Build Coastguard Worker     struct aws_host_resolver *resolver = aws_host_resolver_new_default(allocator, &resolver_options);
52*3c7ae9deSAndroid Build Coastguard Worker     if (resolver == NULL) {
53*3c7ae9deSAndroid Build Coastguard Worker         aws_jni_throw_runtime_exception(env, "aws_host_resolver_new_default failed");
54*3c7ae9deSAndroid Build Coastguard Worker         return (jlong)NULL;
55*3c7ae9deSAndroid Build Coastguard Worker     }
56*3c7ae9deSAndroid Build Coastguard Worker 
57*3c7ae9deSAndroid Build Coastguard Worker     return (jlong)resolver;
58*3c7ae9deSAndroid Build Coastguard Worker }
59*3c7ae9deSAndroid Build Coastguard Worker 
Java_software_amazon_awssdk_crt_io_HostResolver_hostResolverRelease(JNIEnv * env,jclass jni_class,jlong jni_host_resolver)60*3c7ae9deSAndroid Build Coastguard Worker JNIEXPORT void JNICALL Java_software_amazon_awssdk_crt_io_HostResolver_hostResolverRelease(
61*3c7ae9deSAndroid Build Coastguard Worker     JNIEnv *env,
62*3c7ae9deSAndroid Build Coastguard Worker     jclass jni_class,
63*3c7ae9deSAndroid Build Coastguard Worker     jlong jni_host_resolver) {
64*3c7ae9deSAndroid Build Coastguard Worker 
65*3c7ae9deSAndroid Build Coastguard Worker     (void)jni_class;
66*3c7ae9deSAndroid Build Coastguard Worker     aws_cache_jni_ids(env);
67*3c7ae9deSAndroid Build Coastguard Worker 
68*3c7ae9deSAndroid Build Coastguard Worker     struct aws_host_resolver *resolver = (struct aws_host_resolver *)jni_host_resolver;
69*3c7ae9deSAndroid Build Coastguard Worker     if (!resolver) {
70*3c7ae9deSAndroid Build Coastguard Worker         aws_jni_throw_runtime_exception(env, "HostResolver.hostResolverRelease: Invalid aws_host_resolver");
71*3c7ae9deSAndroid Build Coastguard Worker         return;
72*3c7ae9deSAndroid Build Coastguard Worker     }
73*3c7ae9deSAndroid Build Coastguard Worker 
74*3c7ae9deSAndroid Build Coastguard Worker     aws_host_resolver_release(resolver);
75*3c7ae9deSAndroid Build Coastguard Worker 
76*3c7ae9deSAndroid Build Coastguard Worker     return;
77*3c7ae9deSAndroid Build Coastguard Worker }
78*3c7ae9deSAndroid Build Coastguard Worker 
79*3c7ae9deSAndroid Build Coastguard Worker #if UINTPTR_MAX == 0xffffffff
80*3c7ae9deSAndroid Build Coastguard Worker #    if defined(_MSC_VER)
81*3c7ae9deSAndroid Build Coastguard Worker #        pragma warning(pop)
82*3c7ae9deSAndroid Build Coastguard Worker #    else
83*3c7ae9deSAndroid Build Coastguard Worker #        pragma GCC diagnostic pop
84*3c7ae9deSAndroid Build Coastguard Worker #    endif
85*3c7ae9deSAndroid Build Coastguard Worker #endif
86