xref: /aosp_15_r20/external/aws-crt-java/src/native/java_class_ids.c (revision 3c7ae9de214676c52d19f01067dc1a404272dc11)
1 /**
2  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3  * SPDX-License-Identifier: Apache-2.0.
4  */
5 
6 #include "java_class_ids.h"
7 
8 #include <aws/common/assert.h>
9 #include <aws/common/thread.h>
10 
11 struct java_http_request_body_stream_properties http_request_body_stream_properties;
12 
s_cache_http_request_body_stream(JNIEnv * env)13 static void s_cache_http_request_body_stream(JNIEnv *env) {
14     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/http/HttpRequestBodyStream");
15     AWS_FATAL_ASSERT(cls);
16 
17     http_request_body_stream_properties.send_outgoing_body =
18         (*env)->GetMethodID(env, cls, "sendRequestBody", "(Ljava/nio/ByteBuffer;)Z");
19     AWS_FATAL_ASSERT(http_request_body_stream_properties.send_outgoing_body);
20 
21     http_request_body_stream_properties.reset_position = (*env)->GetMethodID(env, cls, "resetPosition", "()Z");
22     AWS_FATAL_ASSERT(http_request_body_stream_properties.reset_position);
23 
24     http_request_body_stream_properties.get_length = (*env)->GetMethodID(env, cls, "getLength", "()J");
25     AWS_FATAL_ASSERT(http_request_body_stream_properties.get_length);
26 }
27 
28 struct java_aws_signing_config_properties aws_signing_config_properties;
29 
s_cache_aws_signing_config(JNIEnv * env)30 static void s_cache_aws_signing_config(JNIEnv *env) {
31     jclass aws_signing_config_class =
32         (*env)->FindClass(env, "software/amazon/awssdk/crt/auth/signing/AwsSigningConfig");
33     AWS_FATAL_ASSERT(aws_signing_config_class);
34     aws_signing_config_properties.aws_signing_config_class = (*env)->NewGlobalRef(env, aws_signing_config_class);
35 
36     aws_signing_config_properties.algorithm_field_id =
37         (*env)->GetFieldID(env, aws_signing_config_class, "algorithm", "I");
38     AWS_FATAL_ASSERT(aws_signing_config_properties.algorithm_field_id);
39 
40     aws_signing_config_properties.signature_type_field_id =
41         (*env)->GetFieldID(env, aws_signing_config_class, "signatureType", "I");
42     AWS_FATAL_ASSERT(aws_signing_config_properties.signature_type_field_id);
43 
44     aws_signing_config_properties.region_field_id =
45         (*env)->GetFieldID(env, aws_signing_config_class, "region", "Ljava/lang/String;");
46     AWS_FATAL_ASSERT(aws_signing_config_properties.region_field_id);
47 
48     aws_signing_config_properties.service_field_id =
49         (*env)->GetFieldID(env, aws_signing_config_class, "service", "Ljava/lang/String;");
50     AWS_FATAL_ASSERT(aws_signing_config_properties.service_field_id);
51 
52     aws_signing_config_properties.time_field_id = (*env)->GetFieldID(env, aws_signing_config_class, "time", "J");
53     AWS_FATAL_ASSERT(aws_signing_config_properties.time_field_id);
54 
55     aws_signing_config_properties.credentials_provider_field_id = (*env)->GetFieldID(
56         env,
57         aws_signing_config_class,
58         "credentialsProvider",
59         "Lsoftware/amazon/awssdk/crt/auth/credentials/CredentialsProvider;");
60     AWS_FATAL_ASSERT(aws_signing_config_properties.credentials_provider_field_id);
61 
62     aws_signing_config_properties.credentials_field_id = (*env)->GetFieldID(
63         env, aws_signing_config_class, "credentials", "Lsoftware/amazon/awssdk/crt/auth/credentials/Credentials;");
64     AWS_FATAL_ASSERT(aws_signing_config_properties.credentials_field_id);
65 
66     aws_signing_config_properties.should_sign_header_field_id =
67         (*env)->GetFieldID(env, aws_signing_config_class, "shouldSignHeader", "Ljava/util/function/Predicate;");
68     AWS_FATAL_ASSERT(aws_signing_config_properties.should_sign_header_field_id);
69 
70     aws_signing_config_properties.use_double_uri_encode_field_id =
71         (*env)->GetFieldID(env, aws_signing_config_class, "useDoubleUriEncode", "Z");
72     AWS_FATAL_ASSERT(aws_signing_config_properties.use_double_uri_encode_field_id);
73 
74     aws_signing_config_properties.should_normalize_uri_path_field_id =
75         (*env)->GetFieldID(env, aws_signing_config_class, "shouldNormalizeUriPath", "Z");
76     AWS_FATAL_ASSERT(aws_signing_config_properties.should_normalize_uri_path_field_id);
77 
78     aws_signing_config_properties.omit_session_token_field_id =
79         (*env)->GetFieldID(env, aws_signing_config_class, "omitSessionToken", "Z");
80     AWS_FATAL_ASSERT(aws_signing_config_properties.omit_session_token_field_id);
81 
82     aws_signing_config_properties.signed_body_value_field_id =
83         (*env)->GetFieldID(env, aws_signing_config_class, "signedBodyValue", "Ljava/lang/String;");
84     AWS_FATAL_ASSERT(aws_signing_config_properties.signed_body_value_field_id);
85 
86     aws_signing_config_properties.signed_body_header_field_id =
87         (*env)->GetFieldID(env, aws_signing_config_class, "signedBodyHeader", "I");
88     AWS_FATAL_ASSERT(aws_signing_config_properties.signed_body_header_field_id);
89 
90     aws_signing_config_properties.expiration_in_seconds_field_id =
91         (*env)->GetFieldID(env, aws_signing_config_class, "expirationInSeconds", "J");
92     AWS_FATAL_ASSERT(aws_signing_config_properties.expiration_in_seconds_field_id);
93 }
94 
95 struct java_predicate_properties predicate_properties;
96 
s_cache_predicate(JNIEnv * env)97 static void s_cache_predicate(JNIEnv *env) {
98     jclass predicate_class = (*env)->FindClass(env, "java/util/function/Predicate");
99     AWS_FATAL_ASSERT(predicate_class);
100     predicate_properties.predicate_class = (*env)->NewGlobalRef(env, predicate_class);
101 
102     predicate_properties.test_method_id = (*env)->GetMethodID(env, predicate_class, "test", "(Ljava/lang/Object;)Z");
103     AWS_FATAL_ASSERT(predicate_properties.test_method_id);
104 }
105 
106 struct java_boxed_long_properties boxed_long_properties;
107 
s_cache_boxed_long(JNIEnv * env)108 static void s_cache_boxed_long(JNIEnv *env) {
109     jclass boxed_long_class = (*env)->FindClass(env, "java/lang/Long");
110     AWS_FATAL_ASSERT(boxed_long_class);
111     boxed_long_properties.long_class = (*env)->NewGlobalRef(env, boxed_long_class);
112 
113     boxed_long_properties.constructor = (*env)->GetMethodID(env, boxed_long_class, "<init>", "(J)V");
114     AWS_FATAL_ASSERT(boxed_long_properties.constructor);
115 
116     boxed_long_properties.long_value_method_id = (*env)->GetMethodID(env, boxed_long_class, "longValue", "()J");
117     AWS_FATAL_ASSERT(boxed_long_properties.long_value_method_id);
118 }
119 
120 struct java_http_request_properties http_request_properties;
121 
s_cache_http_request(JNIEnv * env)122 static void s_cache_http_request(JNIEnv *env) {
123     jclass http_request_class = (*env)->FindClass(env, "software/amazon/awssdk/crt/http/HttpRequest");
124     AWS_FATAL_ASSERT(http_request_class);
125     http_request_properties.http_request_class = (*env)->NewGlobalRef(env, http_request_class);
126 
127     http_request_properties.constructor_method_id = (*env)->GetMethodID(
128         env,
129         http_request_class,
130         "<init>",
131         "(Ljava/nio/ByteBuffer;Lsoftware/amazon/awssdk/crt/http/HttpRequestBodyStream;)V");
132     AWS_FATAL_ASSERT(http_request_properties.constructor_method_id);
133 
134     http_request_properties.body_stream_field_id = (*env)->GetFieldID(
135         env, http_request_class, "bodyStream", "Lsoftware/amazon/awssdk/crt/http/HttpRequestBodyStream;");
136     AWS_FATAL_ASSERT(http_request_properties.body_stream_field_id);
137 }
138 
139 struct java_crt_resource_properties crt_resource_properties;
140 
s_cache_crt_resource(JNIEnv * env)141 static void s_cache_crt_resource(JNIEnv *env) {
142     jclass crt_resource_class = (*env)->FindClass(env, "software/amazon/awssdk/crt/CrtResource");
143     AWS_FATAL_ASSERT(crt_resource_class);
144 
145     crt_resource_properties.get_native_handle_method_id =
146         (*env)->GetMethodID(env, crt_resource_class, "getNativeHandle", "()J");
147     AWS_FATAL_ASSERT(crt_resource_properties.get_native_handle_method_id);
148 
149     crt_resource_properties.release_references =
150         (*env)->GetMethodID(env, crt_resource_class, "releaseReferences", "()V");
151     AWS_FATAL_ASSERT(crt_resource_properties.release_references);
152 
153     crt_resource_properties.add_ref = (*env)->GetMethodID(env, crt_resource_class, "addRef", "()V");
154     AWS_FATAL_ASSERT(crt_resource_properties.add_ref);
155 
156     crt_resource_properties.close = (*env)->GetMethodID(env, crt_resource_class, "close", "()V");
157     AWS_FATAL_ASSERT(crt_resource_properties.close);
158 }
159 
160 struct java_mqtt_connection_properties mqtt_connection_properties;
161 
s_cache_mqtt_connection(JNIEnv * env)162 static void s_cache_mqtt_connection(JNIEnv *env) {
163     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt/MqttClientConnection");
164     AWS_FATAL_ASSERT(cls);
165 
166     mqtt_connection_properties.on_connection_complete = (*env)->GetMethodID(env, cls, "onConnectionComplete", "(IZ)V");
167     AWS_FATAL_ASSERT(mqtt_connection_properties.on_connection_complete);
168 
169     mqtt_connection_properties.on_connection_interrupted =
170         (*env)->GetMethodID(env, cls, "onConnectionInterrupted", "(ILsoftware/amazon/awssdk/crt/AsyncCallback;)V");
171     AWS_FATAL_ASSERT(mqtt_connection_properties.on_connection_interrupted);
172 
173     mqtt_connection_properties.on_connection_resumed = (*env)->GetMethodID(env, cls, "onConnectionResumed", "(Z)V");
174     AWS_FATAL_ASSERT(mqtt_connection_properties.on_connection_resumed);
175 
176     mqtt_connection_properties.on_connection_closed = (*env)->GetMethodID(env, cls, "onConnectionClosed", "()V");
177     AWS_FATAL_ASSERT(mqtt_connection_properties.on_connection_closed);
178 
179     mqtt_connection_properties.on_websocket_handshake =
180         (*env)->GetMethodID(env, cls, "onWebsocketHandshake", "(Lsoftware/amazon/awssdk/crt/http/HttpRequest;J)V");
181     AWS_FATAL_ASSERT(mqtt_connection_properties.on_websocket_handshake);
182 
183     mqtt_connection_properties.on_connection_success = (*env)->GetMethodID(env, cls, "onConnectionSuccess", "(Z)V");
184     AWS_FATAL_ASSERT(mqtt_connection_properties.on_connection_success);
185 
186     mqtt_connection_properties.on_connection_failure = (*env)->GetMethodID(env, cls, "onConnectionFailure", "(I)V");
187     AWS_FATAL_ASSERT(mqtt_connection_properties.on_connection_failure);
188 }
189 
190 struct java_message_handler_properties message_handler_properties;
191 
s_cache_message_handler(JNIEnv * env)192 static void s_cache_message_handler(JNIEnv *env) {
193     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt/MqttClientConnection$MessageHandler");
194     AWS_FATAL_ASSERT(cls);
195 
196     message_handler_properties.deliver = (*env)->GetMethodID(env, cls, "deliver", "(Ljava/lang/String;[BZIZ)V");
197     AWS_FATAL_ASSERT(message_handler_properties.deliver);
198 }
199 
200 struct java_mqtt_exception_properties mqtt_exception_properties;
201 
s_cache_mqtt_exception(JNIEnv * env)202 static void s_cache_mqtt_exception(JNIEnv *env) {
203     mqtt_exception_properties.jni_mqtt_exception =
204         (*env)->NewGlobalRef(env, (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt/MqttException"));
205     AWS_FATAL_ASSERT(mqtt_exception_properties.jni_mqtt_exception);
206 
207     mqtt_exception_properties.jni_constructor =
208         (*env)->GetMethodID(env, mqtt_exception_properties.jni_mqtt_exception, "<init>", "(I)V");
209     AWS_FATAL_ASSERT(mqtt_exception_properties.jni_constructor);
210 }
211 
212 struct java_mqtt_connection_operation_statistics_properties mqtt_connection_operation_statistics_properties;
213 
s_cache_mqtt_client_connection_operation_statistics(JNIEnv * env)214 static void s_cache_mqtt_client_connection_operation_statistics(JNIEnv *env) {
215     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt/MqttClientConnectionOperationStatistics");
216     AWS_FATAL_ASSERT(cls);
217     mqtt_connection_operation_statistics_properties.statistics_class = (*env)->NewGlobalRef(env, cls);
218     AWS_FATAL_ASSERT(mqtt_connection_operation_statistics_properties.statistics_class);
219     // Functions
220     mqtt_connection_operation_statistics_properties.statistics_constructor_id =
221         (*env)->GetMethodID(env, mqtt_connection_operation_statistics_properties.statistics_class, "<init>", "()V");
222     AWS_FATAL_ASSERT(mqtt_connection_operation_statistics_properties.statistics_constructor_id);
223     // Field IDs
224     mqtt_connection_operation_statistics_properties.incomplete_operation_count_field_id = (*env)->GetFieldID(
225         env, mqtt_connection_operation_statistics_properties.statistics_class, "incompleteOperationCount", "J");
226     AWS_FATAL_ASSERT(mqtt_connection_operation_statistics_properties.incomplete_operation_count_field_id);
227     mqtt_connection_operation_statistics_properties.incomplete_operation_size_field_id = (*env)->GetFieldID(
228         env, mqtt_connection_operation_statistics_properties.statistics_class, "incompleteOperationSize", "J");
229     AWS_FATAL_ASSERT(mqtt_connection_operation_statistics_properties.incomplete_operation_size_field_id);
230     mqtt_connection_operation_statistics_properties.unacked_operation_count_field_id = (*env)->GetFieldID(
231         env, mqtt_connection_operation_statistics_properties.statistics_class, "unackedOperationCount", "J");
232     AWS_FATAL_ASSERT(mqtt_connection_operation_statistics_properties.unacked_operation_count_field_id);
233     mqtt_connection_operation_statistics_properties.unacked_operation_size_field_id = (*env)->GetFieldID(
234         env, mqtt_connection_operation_statistics_properties.statistics_class, "unackedOperationSize", "J");
235     AWS_FATAL_ASSERT(mqtt_connection_operation_statistics_properties.unacked_operation_size_field_id);
236 }
237 
238 struct java_byte_buffer_properties byte_buffer_properties;
239 
s_cache_byte_buffer(JNIEnv * env)240 static void s_cache_byte_buffer(JNIEnv *env) {
241     jclass cls = (*env)->FindClass(env, "java/nio/ByteBuffer");
242     AWS_FATAL_ASSERT(cls);
243 
244     // FindClass() returns local JNI references that become eligible for GC once this native method returns to Java.
245     // Call NewGlobalRef() so that this class reference doesn't get Garbage collected.
246     byte_buffer_properties.cls = (*env)->NewGlobalRef(env, cls);
247 
248     byte_buffer_properties.get_capacity = (*env)->GetMethodID(env, cls, "capacity", "()I");
249     AWS_FATAL_ASSERT(byte_buffer_properties.get_capacity);
250 
251     byte_buffer_properties.get_limit = (*env)->GetMethodID(env, cls, "limit", "()I");
252     AWS_FATAL_ASSERT(byte_buffer_properties.get_limit);
253 
254     byte_buffer_properties.set_limit = (*env)->GetMethodID(env, cls, "limit", "(I)Ljava/nio/Buffer;");
255     AWS_FATAL_ASSERT(byte_buffer_properties.set_limit);
256 
257     byte_buffer_properties.get_position = (*env)->GetMethodID(env, cls, "position", "()I");
258     AWS_FATAL_ASSERT(byte_buffer_properties.get_position);
259 
260     byte_buffer_properties.set_position = (*env)->GetMethodID(env, cls, "position", "(I)Ljava/nio/Buffer;");
261     AWS_FATAL_ASSERT(byte_buffer_properties.set_position);
262 
263     byte_buffer_properties.get_remaining = (*env)->GetMethodID(env, cls, "remaining", "()I");
264     AWS_FATAL_ASSERT(byte_buffer_properties.get_remaining);
265 
266     byte_buffer_properties.wrap = (*env)->GetStaticMethodID(env, cls, "wrap", "([B)Ljava/nio/ByteBuffer;");
267     AWS_FATAL_ASSERT(byte_buffer_properties.wrap);
268 }
269 
270 struct java_credentials_provider_properties credentials_provider_properties;
271 
s_cache_credentials_provider(JNIEnv * env)272 static void s_cache_credentials_provider(JNIEnv *env) {
273     jclass provider_class = (*env)->FindClass(env, "software/amazon/awssdk/crt/auth/credentials/CredentialsProvider");
274     AWS_FATAL_ASSERT(provider_class);
275 
276     credentials_provider_properties.on_shutdown_complete_method_id =
277         (*env)->GetMethodID(env, provider_class, "onShutdownComplete", "()V");
278     AWS_FATAL_ASSERT(credentials_provider_properties.on_shutdown_complete_method_id);
279 
280     credentials_provider_properties.on_get_credentials_complete_method_id = (*env)->GetMethodID(
281         env,
282         provider_class,
283         "onGetCredentialsComplete",
284         "(Ljava/util/concurrent/CompletableFuture;Lsoftware/amazon/awssdk/crt/auth/credentials/Credentials;)V");
285     AWS_FATAL_ASSERT(credentials_provider_properties.on_get_credentials_complete_method_id);
286 }
287 
288 struct java_credentials_properties credentials_properties;
289 
s_cache_credentials(JNIEnv * env)290 static void s_cache_credentials(JNIEnv *env) {
291     credentials_properties.credentials_class =
292         (*env)->FindClass(env, "software/amazon/awssdk/crt/auth/credentials/Credentials");
293     AWS_FATAL_ASSERT(credentials_properties.credentials_class);
294     credentials_properties.credentials_class = (*env)->NewGlobalRef(env, credentials_properties.credentials_class);
295 
296     credentials_properties.constructor_method_id =
297         (*env)->GetMethodID(env, credentials_properties.credentials_class, "<init>", "()V");
298     AWS_FATAL_ASSERT(credentials_properties.constructor_method_id);
299 
300     credentials_properties.access_key_id_field_id =
301         (*env)->GetFieldID(env, credentials_properties.credentials_class, "accessKeyId", "[B");
302     AWS_FATAL_ASSERT(credentials_properties.access_key_id_field_id);
303 
304     credentials_properties.secret_access_key_field_id =
305         (*env)->GetFieldID(env, credentials_properties.credentials_class, "secretAccessKey", "[B");
306     AWS_FATAL_ASSERT(credentials_properties.secret_access_key_field_id);
307 
308     credentials_properties.session_token_field_id =
309         (*env)->GetFieldID(env, credentials_properties.credentials_class, "sessionToken", "[B");
310     AWS_FATAL_ASSERT(credentials_properties.session_token_field_id);
311 
312     credentials_properties.expiration_field_id =
313         (*env)->GetFieldID(env, credentials_properties.credentials_class, "expirationTimePointSecs", "J");
314     AWS_FATAL_ASSERT(credentials_properties.expiration_field_id);
315 }
316 
317 struct java_credentials_handler_properties credentials_handler_properties;
318 
s_cache_credentials_handler(JNIEnv * env)319 static void s_cache_credentials_handler(JNIEnv *env) {
320     jclass handler_cls =
321         (*env)->FindClass(env, "software/amazon/awssdk/crt/auth/credentials/DelegateCredentialsHandler");
322     AWS_FATAL_ASSERT(handler_cls);
323 
324     credentials_handler_properties.on_handler_get_credentials_method_id = (*env)->GetMethodID(
325         env, handler_cls, "getCredentials", "()Lsoftware/amazon/awssdk/crt/auth/credentials/Credentials;");
326     AWS_FATAL_ASSERT(credentials_handler_properties.on_handler_get_credentials_method_id);
327 }
328 
329 struct java_async_callback_properties async_callback_properties;
330 
s_cache_async_callback(JNIEnv * env)331 static void s_cache_async_callback(JNIEnv *env) {
332     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/AsyncCallback");
333     AWS_FATAL_ASSERT(cls);
334 
335     async_callback_properties.on_success_with_object =
336         (*env)->GetMethodID(env, cls, "onSuccess", "(Ljava/lang/Object;)V");
337     AWS_FATAL_ASSERT(async_callback_properties.on_success_with_object);
338 
339     async_callback_properties.on_success = (*env)->GetMethodID(env, cls, "onSuccess", "()V");
340     AWS_FATAL_ASSERT(async_callback_properties.on_success);
341 
342     async_callback_properties.on_failure = (*env)->GetMethodID(env, cls, "onFailure", "(Ljava/lang/Throwable;)V");
343     AWS_FATAL_ASSERT(async_callback_properties.on_failure);
344 }
345 
346 struct java_event_loop_group_properties event_loop_group_properties;
347 
s_cache_event_loop_group(JNIEnv * env)348 static void s_cache_event_loop_group(JNIEnv *env) {
349     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/io/EventLoopGroup");
350     AWS_FATAL_ASSERT(cls);
351 
352     event_loop_group_properties.onCleanupComplete = (*env)->GetMethodID(env, cls, "onCleanupComplete", "()V");
353     AWS_FATAL_ASSERT(event_loop_group_properties.onCleanupComplete);
354 }
355 
356 struct java_client_bootstrap_properties client_bootstrap_properties;
357 
s_cache_client_bootstrap(JNIEnv * env)358 static void s_cache_client_bootstrap(JNIEnv *env) {
359     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/io/ClientBootstrap");
360     AWS_FATAL_ASSERT(cls);
361 
362     client_bootstrap_properties.onShutdownComplete = (*env)->GetMethodID(env, cls, "onShutdownComplete", "()V");
363     AWS_FATAL_ASSERT(client_bootstrap_properties.onShutdownComplete);
364 }
365 
366 struct java_tls_context_pkcs11_options_properties tls_context_pkcs11_options_properties;
367 
s_cache_tls_context_pkcs11_options(JNIEnv * env)368 static void s_cache_tls_context_pkcs11_options(JNIEnv *env) {
369     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/io/TlsContextPkcs11Options");
370     AWS_FATAL_ASSERT(cls);
371 
372     tls_context_pkcs11_options_properties.pkcs11Lib =
373         (*env)->GetFieldID(env, cls, "pkcs11Lib", "Lsoftware/amazon/awssdk/crt/io/Pkcs11Lib;");
374     AWS_FATAL_ASSERT(tls_context_pkcs11_options_properties.pkcs11Lib);
375 
376     tls_context_pkcs11_options_properties.userPin = (*env)->GetFieldID(env, cls, "userPin", "Ljava/lang/String;");
377     AWS_FATAL_ASSERT(tls_context_pkcs11_options_properties.userPin);
378 
379     tls_context_pkcs11_options_properties.slotId = (*env)->GetFieldID(env, cls, "slotId", "Ljava/lang/Long;");
380     AWS_FATAL_ASSERT(tls_context_pkcs11_options_properties.slotId);
381 
382     tls_context_pkcs11_options_properties.tokenLabel = (*env)->GetFieldID(env, cls, "tokenLabel", "Ljava/lang/String;");
383     AWS_FATAL_ASSERT(tls_context_pkcs11_options_properties.tokenLabel);
384 
385     tls_context_pkcs11_options_properties.privateKeyObjectLabel =
386         (*env)->GetFieldID(env, cls, "privateKeyObjectLabel", "Ljava/lang/String;");
387     AWS_FATAL_ASSERT(tls_context_pkcs11_options_properties.privateKeyObjectLabel);
388 
389     tls_context_pkcs11_options_properties.certificateFilePath =
390         (*env)->GetFieldID(env, cls, "certificateFilePath", "Ljava/lang/String;");
391     AWS_FATAL_ASSERT(tls_context_pkcs11_options_properties.certificateFilePath);
392 
393     tls_context_pkcs11_options_properties.certificateFileContents =
394         (*env)->GetFieldID(env, cls, "certificateFileContents", "Ljava/lang/String;");
395     AWS_FATAL_ASSERT(tls_context_pkcs11_options_properties.certificateFileContents);
396 }
397 
398 struct java_tls_key_operation_properties tls_key_operation_properties;
399 
s_cache_tls_key_operation(JNIEnv * env)400 static void s_cache_tls_key_operation(JNIEnv *env) {
401     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/io/TlsKeyOperation");
402     AWS_FATAL_ASSERT(cls);
403     tls_key_operation_properties.cls = (*env)->NewGlobalRef(env, cls);
404 
405     tls_key_operation_properties.constructor = (*env)->GetMethodID(env, cls, "<init>", "(J[BIII)V");
406     AWS_FATAL_ASSERT(tls_key_operation_properties.constructor);
407 
408     tls_key_operation_properties.invoke_operation_id = (*env)->GetStaticMethodID(
409         env,
410         cls,
411         "invokePerformOperation",
412         "(Lsoftware/amazon/awssdk/crt/io/TlsKeyOperationHandler;Lsoftware/amazon/awssdk/crt/io/TlsKeyOperation;)V");
413     AWS_FATAL_ASSERT(tls_key_operation_properties.invoke_operation_id);
414 }
415 
416 struct java_tls_context_custom_key_operation_options_properties tls_context_custom_key_operation_options_properties;
417 
s_cache_tls_context_custom_key_operation_options(JNIEnv * env)418 static void s_cache_tls_context_custom_key_operation_options(JNIEnv *env) {
419     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/io/TlsContextCustomKeyOperationOptions");
420     AWS_FATAL_ASSERT(cls);
421 
422     tls_context_custom_key_operation_options_properties.operation_handler_field_id =
423         (*env)->GetFieldID(env, cls, "operationHandler", "Lsoftware/amazon/awssdk/crt/io/TlsKeyOperationHandler;");
424     AWS_FATAL_ASSERT(tls_context_custom_key_operation_options_properties.operation_handler_field_id);
425 
426     tls_context_custom_key_operation_options_properties.certificate_file_path_field_id =
427         (*env)->GetFieldID(env, cls, "certificateFilePath", "Ljava/lang/String;");
428     AWS_FATAL_ASSERT(tls_context_custom_key_operation_options_properties.certificate_file_path_field_id);
429 
430     tls_context_custom_key_operation_options_properties.certificate_file_contents_field_id =
431         (*env)->GetFieldID(env, cls, "certificateFileContents", "Ljava/lang/String;");
432     AWS_FATAL_ASSERT(tls_context_custom_key_operation_options_properties.certificate_file_contents_field_id);
433 }
434 
435 struct java_tls_key_operation_handler_properties tls_key_operation_handler_properties;
436 
s_cache_tls_key_operation_handler(JNIEnv * env)437 static void s_cache_tls_key_operation_handler(JNIEnv *env) {
438     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/io/TlsKeyOperationHandler");
439     AWS_FATAL_ASSERT(cls);
440 
441     tls_key_operation_handler_properties.perform_operation_id =
442         (*env)->GetMethodID(env, cls, "performOperation", "(Lsoftware/amazon/awssdk/crt/io/TlsKeyOperation;)V");
443     AWS_FATAL_ASSERT(tls_key_operation_handler_properties.perform_operation_id);
444 }
445 
446 struct java_http_client_connection_manager_properties http_client_connection_manager_properties;
447 
s_cache_http_client_connection_manager(JNIEnv * env)448 static void s_cache_http_client_connection_manager(JNIEnv *env) {
449     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/http/HttpClientConnectionManager");
450     AWS_FATAL_ASSERT(cls);
451 
452     http_client_connection_manager_properties.onShutdownComplete =
453         (*env)->GetMethodID(env, cls, "onShutdownComplete", "()V");
454     AWS_FATAL_ASSERT(http_client_connection_manager_properties.onShutdownComplete);
455 }
456 
457 struct java_http2_stream_manager_properties http2_stream_manager_properties;
458 
s_cache_http2_stream_manager(JNIEnv * env)459 static void s_cache_http2_stream_manager(JNIEnv *env) {
460     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/http/Http2StreamManager");
461     AWS_FATAL_ASSERT(cls);
462 
463     http2_stream_manager_properties.onShutdownComplete = (*env)->GetMethodID(env, cls, "onShutdownComplete", "()V");
464     AWS_FATAL_ASSERT(http2_stream_manager_properties.onShutdownComplete);
465 }
466 
467 struct java_http_client_connection_properties http_client_connection_properties;
468 
s_cache_http_client_connection(JNIEnv * env)469 static void s_cache_http_client_connection(JNIEnv *env) {
470     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/http/HttpClientConnection");
471     AWS_FATAL_ASSERT(cls);
472     http_client_connection_properties.http_client_connection_class = (*env)->NewGlobalRef(env, cls);
473 
474     http_client_connection_properties.on_connection_acquired_method_id =
475         (*env)->GetStaticMethodID(env, cls, "onConnectionAcquired", "(Ljava/util/concurrent/CompletableFuture;JI)V");
476     AWS_FATAL_ASSERT(http_client_connection_properties.on_connection_acquired_method_id);
477 }
478 
479 struct java_http_stream_properties http_stream_properties;
480 
s_cache_http_stream(JNIEnv * env)481 static void s_cache_http_stream(JNIEnv *env) {
482     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/http/HttpStream");
483     AWS_FATAL_ASSERT(cls);
484     http_stream_properties.stream_class = (*env)->NewGlobalRef(env, cls);
485 
486     http_stream_properties.constructor = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
487     AWS_FATAL_ASSERT(http_stream_properties.constructor);
488 
489     http_stream_properties.close = (*env)->GetMethodID(env, cls, "close", "()V");
490     AWS_FATAL_ASSERT(http_stream_properties.close);
491 }
492 
493 struct java_http2_stream_properties http2_stream_properties;
494 
s_cache_http2_stream(JNIEnv * env)495 static void s_cache_http2_stream(JNIEnv *env) {
496     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/http/Http2Stream");
497     AWS_FATAL_ASSERT(cls);
498     http2_stream_properties.stream_class = (*env)->NewGlobalRef(env, cls);
499 
500     http2_stream_properties.constructor = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
501     AWS_FATAL_ASSERT(http2_stream_properties.constructor);
502 }
503 
504 struct java_http_stream_response_handler_native_adapter_properties http_stream_response_handler_properties;
505 
s_cache_http_stream_response_handler_native_adapter(JNIEnv * env)506 static void s_cache_http_stream_response_handler_native_adapter(JNIEnv *env) {
507     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/http/HttpStreamResponseHandlerNativeAdapter");
508     AWS_FATAL_ASSERT(cls);
509 
510     http_stream_response_handler_properties.onResponseHeaders = (*env)->GetMethodID(
511         env, cls, "onResponseHeaders", "(Lsoftware/amazon/awssdk/crt/http/HttpStreamBase;IILjava/nio/ByteBuffer;)V");
512     AWS_FATAL_ASSERT(http_stream_response_handler_properties.onResponseHeaders);
513 
514     http_stream_response_handler_properties.onResponseHeadersDone =
515         (*env)->GetMethodID(env, cls, "onResponseHeadersDone", "(Lsoftware/amazon/awssdk/crt/http/HttpStreamBase;I)V");
516     AWS_FATAL_ASSERT(http_stream_response_handler_properties.onResponseHeadersDone);
517 
518     http_stream_response_handler_properties.onResponseBody = (*env)->GetMethodID(
519         env, cls, "onResponseBody", "(Lsoftware/amazon/awssdk/crt/http/HttpStreamBase;Ljava/nio/ByteBuffer;)I");
520     AWS_FATAL_ASSERT(http_stream_response_handler_properties.onResponseBody);
521 
522     http_stream_response_handler_properties.onResponseComplete =
523         (*env)->GetMethodID(env, cls, "onResponseComplete", "(Lsoftware/amazon/awssdk/crt/http/HttpStreamBase;I)V");
524     AWS_FATAL_ASSERT(http_stream_response_handler_properties.onResponseComplete);
525 
526     http_stream_response_handler_properties.onMetrics = (*env)->GetMethodID(
527         env,
528         cls,
529         "onMetrics",
530         "(Lsoftware/amazon/awssdk/crt/http/HttpStreamBase;Lsoftware/amazon/awssdk/crt/http/HttpStreamMetrics;)V");
531     AWS_FATAL_ASSERT(http_stream_response_handler_properties.onMetrics);
532 }
533 
534 struct java_http_stream_write_chunk_completion_properties http_stream_write_chunk_completion_properties;
535 
s_cache_http_stream_write_chunk_completion_properties(JNIEnv * env)536 static void s_cache_http_stream_write_chunk_completion_properties(JNIEnv *env) {
537     jclass cls =
538         (*env)->FindClass(env, "software/amazon/awssdk/crt/http/HttpStream$HttpStreamWriteChunkCompletionCallback");
539     AWS_FATAL_ASSERT(cls);
540 
541     http_stream_write_chunk_completion_properties.callback = (*env)->GetMethodID(env, cls, "onChunkCompleted", "(I)V");
542     AWS_FATAL_ASSERT(http_stream_write_chunk_completion_properties.callback);
543 }
544 
545 struct java_http_stream_metrics_properties http_stream_metrics_properties;
546 
s_cache_http_stream_metrics_properties(JNIEnv * env)547 static void s_cache_http_stream_metrics_properties(JNIEnv *env) {
548     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/http/HttpStreamMetrics");
549     AWS_FATAL_ASSERT(cls);
550     http_stream_metrics_properties.http_stream_metrics_class = (*env)->NewGlobalRef(env, cls);
551 
552     http_stream_metrics_properties.constructor_id = (*env)->GetMethodID(env, cls, "<init>", "(JJJJJJI)V");
553     AWS_FATAL_ASSERT(http_stream_metrics_properties.constructor_id);
554 }
555 
556 struct java_event_stream_server_listener_properties event_stream_server_listener_properties;
557 
s_cache_event_stream_server_listener_properties(JNIEnv * env)558 static void s_cache_event_stream_server_listener_properties(JNIEnv *env) {
559     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/eventstream/ServerListener");
560     AWS_FATAL_ASSERT(cls);
561 
562     event_stream_server_listener_properties.onShutdownComplete =
563         (*env)->GetMethodID(env, cls, "onShutdownComplete", "()V");
564     AWS_FATAL_ASSERT(event_stream_server_listener_properties.onShutdownComplete);
565 }
566 
567 struct java_event_stream_server_listener_handler_properties event_stream_server_listener_handler_properties;
568 
s_cache_event_stream_server_listener_handler_properties(JNIEnv * env)569 static void s_cache_event_stream_server_listener_handler_properties(JNIEnv *env) {
570     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/eventstream/ServerListenerHandler");
571     AWS_FATAL_ASSERT(cls);
572 
573     event_stream_server_listener_handler_properties.connCls =
574         (*env)->NewGlobalRef(env, (*env)->FindClass(env, "software/amazon/awssdk/crt/eventstream/ServerConnection"));
575     AWS_FATAL_ASSERT(event_stream_server_listener_handler_properties.connCls);
576 
577     event_stream_server_listener_handler_properties.newConnConstructor =
578         (*env)->GetMethodID(env, event_stream_server_listener_handler_properties.connCls, "<init>", "(J)V");
579     AWS_FATAL_ASSERT(event_stream_server_listener_handler_properties.newConnConstructor);
580 
581     event_stream_server_listener_handler_properties.onNewConnection = (*env)->GetMethodID(
582         env,
583         cls,
584         "onNewConnection",
585         "(Lsoftware/amazon/awssdk/crt/eventstream/ServerConnection;I)Lsoftware/amazon/awssdk/crt/eventstream/"
586         "ServerConnectionHandler;");
587     AWS_FATAL_ASSERT(event_stream_server_listener_handler_properties.onNewConnection);
588     event_stream_server_listener_handler_properties.onConnectionShutdown = (*env)->GetMethodID(
589         env, cls, "onConnectionShutdownShim", "(Lsoftware/amazon/awssdk/crt/eventstream/ServerConnection;I)V");
590     AWS_FATAL_ASSERT(event_stream_server_listener_handler_properties.onConnectionShutdown);
591 }
592 
593 struct java_event_stream_server_connection_handler_properties event_stream_server_connection_handler_properties;
594 
s_cache_event_stream_server_connection_handler_properties(JNIEnv * env)595 static void s_cache_event_stream_server_connection_handler_properties(JNIEnv *env) {
596     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/eventstream/ServerConnectionHandler");
597     AWS_FATAL_ASSERT(cls);
598 
599     event_stream_server_connection_handler_properties.continuationCls = (*env)->NewGlobalRef(
600         env, (*env)->FindClass(env, "software/amazon/awssdk/crt/eventstream/ServerConnectionContinuation"));
601     AWS_FATAL_ASSERT(event_stream_server_connection_handler_properties.continuationCls);
602 
603     event_stream_server_connection_handler_properties.newContinuationConstructor =
604         (*env)->GetMethodID(env, event_stream_server_connection_handler_properties.continuationCls, "<init>", "(J)V");
605     AWS_FATAL_ASSERT(event_stream_server_connection_handler_properties.newContinuationConstructor);
606 
607     event_stream_server_connection_handler_properties.onProtocolMessage =
608         (*env)->GetMethodID(env, cls, "onProtocolMessage", "([B[BII)V");
609     AWS_FATAL_ASSERT(event_stream_server_connection_handler_properties.onProtocolMessage);
610 
611     event_stream_server_connection_handler_properties.onIncomingStream = (*env)->GetMethodID(
612         env,
613         cls,
614         "onIncomingStream",
615         "(Lsoftware/amazon/awssdk/crt/eventstream/ServerConnectionContinuation;[B)Lsoftware/amazon/awssdk/crt/"
616         "eventstream/ServerConnectionContinuationHandler;");
617     AWS_FATAL_ASSERT(event_stream_server_connection_handler_properties.onIncomingStream);
618 }
619 
620 struct java_event_stream_server_continuation_handler_properties event_stream_server_continuation_handler_properties;
621 
s_cache_event_stream_server_continuation_handler_properties(JNIEnv * env)622 static void s_cache_event_stream_server_continuation_handler_properties(JNIEnv *env) {
623     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/eventstream/ServerConnectionContinuationHandler");
624     AWS_FATAL_ASSERT(cls);
625 
626     event_stream_server_continuation_handler_properties.onContinuationMessage =
627         (*env)->GetMethodID(env, cls, "onContinuationMessageShim", "([B[BII)V");
628     AWS_FATAL_ASSERT(event_stream_server_continuation_handler_properties.onContinuationMessage);
629     event_stream_server_continuation_handler_properties.onContinuationClosed =
630         (*env)->GetMethodID(env, cls, "onContinuationClosedShim", "()V");
631     AWS_FATAL_ASSERT(event_stream_server_continuation_handler_properties.onContinuationClosed);
632 }
633 
634 struct java_event_stream_client_connection_handler_properties event_stream_client_connection_handler_properties;
635 
s_cache_event_stream_client_connection_handler_properties(JNIEnv * env)636 static void s_cache_event_stream_client_connection_handler_properties(JNIEnv *env) {
637     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/eventstream/ClientConnectionHandler");
638     AWS_FATAL_ASSERT(cls);
639 
640     event_stream_client_connection_handler_properties.onSetup =
641         (*env)->GetMethodID(env, cls, "onConnectionSetupShim", "(JI)V");
642     AWS_FATAL_ASSERT(event_stream_client_connection_handler_properties.onSetup);
643     event_stream_client_connection_handler_properties.onProtocolMessage =
644         (*env)->GetMethodID(env, cls, "onProtocolMessage", "([B[BII)V");
645     AWS_FATAL_ASSERT(event_stream_client_connection_handler_properties.onProtocolMessage);
646     event_stream_client_connection_handler_properties.onClosed =
647         (*env)->GetMethodID(env, cls, "onConnectionClosedShim", "(I)V");
648     AWS_FATAL_ASSERT(event_stream_client_connection_handler_properties.onClosed);
649 }
650 
651 struct java_event_stream_client_continuation_handler_properties event_stream_client_continuation_handler_properties;
652 
s_cache_event_stream_client_continuation_handler_properties(JNIEnv * env)653 static void s_cache_event_stream_client_continuation_handler_properties(JNIEnv *env) {
654     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/eventstream/ClientConnectionContinuationHandler");
655     AWS_FATAL_ASSERT(cls);
656 
657     event_stream_client_continuation_handler_properties.onContinuationMessage =
658         (*env)->GetMethodID(env, cls, "onContinuationMessageShim", "([B[BII)V");
659     AWS_FATAL_ASSERT(event_stream_client_continuation_handler_properties.onContinuationMessage);
660     event_stream_client_continuation_handler_properties.onContinuationClosed =
661         (*env)->GetMethodID(env, cls, "onContinuationClosedShim", "()V");
662     AWS_FATAL_ASSERT(event_stream_client_continuation_handler_properties.onContinuationClosed);
663 }
664 
665 struct java_event_stream_message_flush_properties event_stream_server_message_flush_properties;
666 
s_cache_event_stream_message_flush_properties(JNIEnv * env)667 static void s_cache_event_stream_message_flush_properties(JNIEnv *env) {
668     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/eventstream/MessageFlushCallback");
669     AWS_FATAL_ASSERT(cls);
670 
671     event_stream_server_message_flush_properties.callback = (*env)->GetMethodID(env, cls, "onCallbackInvoked", "(I)V");
672     AWS_FATAL_ASSERT(event_stream_server_message_flush_properties.callback);
673 }
674 
675 struct java_cpu_info_properties cpu_info_properties;
676 
s_cache_cpu_info_properties(JNIEnv * env)677 static void s_cache_cpu_info_properties(JNIEnv *env) {
678     cpu_info_properties.cpu_info_class =
679         (*env)->NewGlobalRef(env, (*env)->FindClass(env, "software/amazon/awssdk/crt/SystemInfo$CpuInfo"));
680     AWS_FATAL_ASSERT(cpu_info_properties.cpu_info_class);
681 
682     cpu_info_properties.cpu_info_constructor =
683         (*env)->GetMethodID(env, cpu_info_properties.cpu_info_class, "<init>", "(IZ)V");
684 }
685 
686 struct java_s3_client_properties s3_client_properties;
687 
s_cache_s3_client_properties(JNIEnv * env)688 static void s_cache_s3_client_properties(JNIEnv *env) {
689     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/s3/S3Client");
690     AWS_FATAL_ASSERT(cls);
691 
692     s3_client_properties.onShutdownComplete = (*env)->GetMethodID(env, cls, "onShutdownComplete", "()V");
693     AWS_FATAL_ASSERT(s3_client_properties.onShutdownComplete);
694 }
695 
696 struct java_s3_meta_request_properties s3_meta_request_properties;
697 
s_cache_s3_meta_request_properties(JNIEnv * env)698 static void s_cache_s3_meta_request_properties(JNIEnv *env) {
699     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/s3/S3MetaRequest");
700     AWS_FATAL_ASSERT(cls);
701 
702     s3_meta_request_properties.onShutdownComplete = (*env)->GetMethodID(env, cls, "onShutdownComplete", "()V");
703     AWS_FATAL_ASSERT(s3_meta_request_properties.onShutdownComplete);
704 }
705 
706 struct java_s3_meta_request_response_handler_native_adapter_properties
707     s3_meta_request_response_handler_native_adapter_properties;
708 
s_cache_s3_meta_request_response_handler_native_adapter_properties(JNIEnv * env)709 static void s_cache_s3_meta_request_response_handler_native_adapter_properties(JNIEnv *env) {
710     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/s3/S3MetaRequestResponseHandlerNativeAdapter");
711     AWS_FATAL_ASSERT(cls);
712 
713     s3_meta_request_response_handler_native_adapter_properties.onResponseBody =
714         (*env)->GetMethodID(env, cls, "onResponseBody", "([BJJ)I");
715     AWS_FATAL_ASSERT(s3_meta_request_response_handler_native_adapter_properties.onResponseBody);
716 
717     s3_meta_request_response_handler_native_adapter_properties.onFinished =
718         (*env)->GetMethodID(env, cls, "onFinished", "(II[BIZLjava/lang/Throwable;Ljava/nio/ByteBuffer;)V");
719     AWS_FATAL_ASSERT(s3_meta_request_response_handler_native_adapter_properties.onFinished);
720 
721     s3_meta_request_response_handler_native_adapter_properties.onResponseHeaders =
722         (*env)->GetMethodID(env, cls, "onResponseHeaders", "(ILjava/nio/ByteBuffer;)V");
723     AWS_FATAL_ASSERT(s3_meta_request_response_handler_native_adapter_properties.onResponseHeaders);
724 
725     s3_meta_request_response_handler_native_adapter_properties.onProgress =
726         (*env)->GetMethodID(env, cls, "onProgress", "(Lsoftware/amazon/awssdk/crt/s3/S3MetaRequestProgress;)V");
727     AWS_FATAL_ASSERT(s3_meta_request_response_handler_native_adapter_properties.onResponseHeaders);
728 }
729 
730 struct java_completable_future_properties completable_future_properties;
731 
s_cache_completable_future(JNIEnv * env)732 static void s_cache_completable_future(JNIEnv *env) {
733     jclass cls = (*env)->FindClass(env, "java/util/concurrent/CompletableFuture");
734     AWS_FATAL_ASSERT(cls);
735 
736     completable_future_properties.complete_method_id =
737         (*env)->GetMethodID(env, cls, "complete", "(Ljava/lang/Object;)Z");
738     AWS_FATAL_ASSERT(completable_future_properties.complete_method_id != NULL);
739 
740     completable_future_properties.complete_exceptionally_method_id =
741         (*env)->GetMethodID(env, cls, "completeExceptionally", "(Ljava/lang/Throwable;)Z");
742     AWS_FATAL_ASSERT(completable_future_properties.complete_exceptionally_method_id != NULL);
743 }
744 
745 struct java_crt_runtime_exception_properties crt_runtime_exception_properties;
746 
s_cache_crt_runtime_exception(JNIEnv * env)747 static void s_cache_crt_runtime_exception(JNIEnv *env) {
748     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/CrtRuntimeException");
749     AWS_FATAL_ASSERT(cls);
750     crt_runtime_exception_properties.crt_runtime_exception_class = (*env)->NewGlobalRef(env, cls);
751 
752     crt_runtime_exception_properties.constructor_method_id = (*env)->GetMethodID(env, cls, "<init>", "(I)V");
753     AWS_FATAL_ASSERT(crt_runtime_exception_properties.constructor_method_id);
754 
755     crt_runtime_exception_properties.error_code_field_id = (*env)->GetFieldID(env, cls, "errorCode", "I");
756     AWS_FATAL_ASSERT(crt_runtime_exception_properties.error_code_field_id);
757 }
758 
759 struct java_ecc_key_pair_properties ecc_key_pair_properties;
760 
s_cache_ecc_key_pair(JNIEnv * env)761 static void s_cache_ecc_key_pair(JNIEnv *env) {
762     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/cal/EccKeyPair");
763     AWS_FATAL_ASSERT(cls);
764     ecc_key_pair_properties.ecc_key_pair_class = (*env)->NewGlobalRef(env, cls);
765 
766     ecc_key_pair_properties.constructor = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
767     AWS_FATAL_ASSERT(ecc_key_pair_properties.constructor);
768 }
769 
770 struct java_crt_properties crt_properties;
771 
s_cache_crt(JNIEnv * env)772 static void s_cache_crt(JNIEnv *env) {
773     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/CRT");
774     AWS_FATAL_ASSERT(cls);
775     crt_properties.crt_class = (*env)->NewGlobalRef(env, cls);
776 
777     crt_properties.test_jni_exception_method_id = (*env)->GetStaticMethodID(env, cls, "testJniException", "(Z)V");
778     AWS_FATAL_ASSERT(crt_properties.test_jni_exception_method_id);
779 }
780 
781 struct java_aws_signing_result_properties aws_signing_result_properties;
782 
s_cache_aws_signing_result(JNIEnv * env)783 static void s_cache_aws_signing_result(JNIEnv *env) {
784     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/auth/signing/AwsSigningResult");
785     AWS_FATAL_ASSERT(cls);
786     aws_signing_result_properties.aws_signing_result_class = (*env)->NewGlobalRef(env, cls);
787 
788     aws_signing_result_properties.constructor = (*env)->GetMethodID(env, cls, "<init>", "()V");
789     AWS_FATAL_ASSERT(aws_signing_result_properties.constructor);
790 
791     aws_signing_result_properties.signed_request_field_id =
792         (*env)->GetFieldID(env, cls, "signedRequest", "Lsoftware/amazon/awssdk/crt/http/HttpRequest;");
793     AWS_FATAL_ASSERT(aws_signing_result_properties.signed_request_field_id);
794 
795     aws_signing_result_properties.signature_field_id = (*env)->GetFieldID(env, cls, "signature", "[B");
796     AWS_FATAL_ASSERT(aws_signing_result_properties.signature_field_id);
797 }
798 
799 struct java_http_header_properties http_header_properties;
800 
s_cache_http_header(JNIEnv * env)801 static void s_cache_http_header(JNIEnv *env) {
802     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/http/HttpHeader");
803     AWS_FATAL_ASSERT(cls);
804     http_header_properties.http_header_class = (*env)->NewGlobalRef(env, cls);
805 
806     http_header_properties.constructor_method_id = (*env)->GetMethodID(env, cls, "<init>", "([B[B)V");
807     AWS_FATAL_ASSERT(http_header_properties.constructor_method_id);
808 }
809 
810 struct java_http_manager_metrics_properties http_manager_metrics_properties;
s_cache_http_manager_metrics(JNIEnv * env)811 static void s_cache_http_manager_metrics(JNIEnv *env) {
812     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/http/HttpManagerMetrics");
813     AWS_FATAL_ASSERT(cls);
814     http_manager_metrics_properties.http_manager_metrics_class = (*env)->NewGlobalRef(env, cls);
815 
816     http_manager_metrics_properties.constructor_method_id = (*env)->GetMethodID(env, cls, "<init>", "(JJJ)V");
817     AWS_FATAL_ASSERT(http_manager_metrics_properties.constructor_method_id);
818 }
819 
820 struct java_aws_exponential_backoff_retry_options_properties exponential_backoff_retry_options_properties;
821 
s_cache_exponential_backoff_retry_options(JNIEnv * env)822 static void s_cache_exponential_backoff_retry_options(JNIEnv *env) {
823     (void)env;
824 
825     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/io/ExponentialBackoffRetryOptions");
826     AWS_FATAL_ASSERT(cls);
827     exponential_backoff_retry_options_properties.exponential_backoff_retry_options_class =
828         (*env)->NewGlobalRef(env, cls);
829 
830     exponential_backoff_retry_options_properties.exponential_backoff_retry_options_constructor_method_id =
831         (*env)->GetMethodID(
832             env, exponential_backoff_retry_options_properties.exponential_backoff_retry_options_class, "<init>", "()V");
833     AWS_FATAL_ASSERT(
834         exponential_backoff_retry_options_properties.exponential_backoff_retry_options_constructor_method_id);
835 
836     exponential_backoff_retry_options_properties.el_group_field_id =
837         (*env)->GetFieldID(env, cls, "eventLoopGroup", "Lsoftware/amazon/awssdk/crt/io/EventLoopGroup;");
838     AWS_FATAL_ASSERT(exponential_backoff_retry_options_properties.el_group_field_id);
839 
840     exponential_backoff_retry_options_properties.max_retries_field_id = (*env)->GetFieldID(env, cls, "maxRetries", "J");
841     AWS_FATAL_ASSERT(exponential_backoff_retry_options_properties.max_retries_field_id);
842 
843     exponential_backoff_retry_options_properties.backoff_scale_factor_ms_field_id =
844         (*env)->GetFieldID(env, cls, "backoffScaleFactorMS", "J");
845     AWS_FATAL_ASSERT(exponential_backoff_retry_options_properties.backoff_scale_factor_ms_field_id);
846 
847     exponential_backoff_retry_options_properties.jitter_mode_field_id = (*env)->GetFieldID(
848         env, cls, "jitterMode", "Lsoftware/amazon/awssdk/crt/io/ExponentialBackoffRetryOptions$JitterMode;");
849     AWS_FATAL_ASSERT(exponential_backoff_retry_options_properties.jitter_mode_field_id);
850 
851     jclass jitter_mode_cls =
852         (*env)->FindClass(env, "software/amazon/awssdk/crt/io/ExponentialBackoffRetryOptions$JitterMode");
853     AWS_FATAL_ASSERT(jitter_mode_cls);
854     exponential_backoff_retry_options_properties.jitter_mode_class = (*env)->NewGlobalRef(env, jitter_mode_cls);
855 
856     exponential_backoff_retry_options_properties.jitter_mode_value_field_id =
857         (*env)->GetFieldID(env, jitter_mode_cls, "value", "I");
858 
859     AWS_FATAL_ASSERT(exponential_backoff_retry_options_properties.jitter_mode_value_field_id);
860 }
861 
862 struct java_aws_standard_retry_options_properties standard_retry_options_properties;
863 
s_cache_standard_retry_options(JNIEnv * env)864 static void s_cache_standard_retry_options(JNIEnv *env) {
865     (void)env;
866 
867     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/io/StandardRetryOptions");
868     AWS_FATAL_ASSERT(cls);
869     standard_retry_options_properties.standard_retry_options_class = (*env)->NewGlobalRef(env, cls);
870 
871     standard_retry_options_properties.standard_retry_options_constructor_method_id =
872         (*env)->GetMethodID(env, standard_retry_options_properties.standard_retry_options_class, "<init>", "()V");
873 
874     standard_retry_options_properties.backoff_retry_options_field_id = (*env)->GetFieldID(
875         env, cls, "backoffRetryOptions", "Lsoftware/amazon/awssdk/crt/io/ExponentialBackoffRetryOptions;");
876     AWS_FATAL_ASSERT(standard_retry_options_properties.backoff_retry_options_field_id);
877 
878     standard_retry_options_properties.initial_bucket_capacity_field_id =
879         (*env)->GetFieldID(env, cls, "initialBucketCapacity", "J");
880     AWS_FATAL_ASSERT(standard_retry_options_properties.initial_bucket_capacity_field_id);
881 }
882 
883 struct java_aws_directory_traversal_handler_properties directory_traversal_handler_properties;
884 
s_cache_directory_traversal_handler(JNIEnv * env)885 static void s_cache_directory_traversal_handler(JNIEnv *env) {
886     (void)env;
887 
888     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/io/DirectoryTraversalHandler");
889     AWS_FATAL_ASSERT(cls);
890     directory_traversal_handler_properties.directory_traversal_handler_class = (*env)->NewGlobalRef(env, cls);
891 
892     directory_traversal_handler_properties.on_directory_entry_method_id = (*env)->GetMethodID(
893         env,
894         directory_traversal_handler_properties.directory_traversal_handler_class,
895         "onDirectoryEntry",
896         "(Lsoftware/amazon/awssdk/crt/io/DirectoryEntry;)Z");
897 }
898 
899 struct java_aws_directory_entry_properties directory_entry_properties;
900 
s_cache_directory_entry(JNIEnv * env)901 static void s_cache_directory_entry(JNIEnv *env) {
902     (void)env;
903 
904     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/io/DirectoryEntry");
905     AWS_FATAL_ASSERT(cls);
906     directory_entry_properties.directory_entry_class = (*env)->NewGlobalRef(env, cls);
907 
908     directory_entry_properties.directory_entry_constructor_method_id =
909         (*env)->GetMethodID(env, directory_entry_properties.directory_entry_class, "<init>", "()V");
910 
911     directory_entry_properties.path_field_id = (*env)->GetFieldID(env, cls, "path", "Ljava/lang/String;");
912 
913     directory_entry_properties.relative_path_field_id =
914         (*env)->GetFieldID(env, cls, "relativePath", "Ljava/lang/String;");
915 
916     directory_entry_properties.is_directory_field_id = (*env)->GetFieldID(env, cls, "isDirectory", "Z");
917 
918     directory_entry_properties.is_symlink_field_id = (*env)->GetFieldID(env, cls, "isSymLink", "Z");
919 
920     directory_entry_properties.is_file_field_id = (*env)->GetFieldID(env, cls, "isFile", "Z");
921 
922     directory_entry_properties.file_size_field_id = (*env)->GetFieldID(env, cls, "fileSize", "J");
923 }
924 
925 struct java_aws_s3_meta_request_progress s3_meta_request_progress_properties;
926 
s_cache_s3_meta_request_progress(JNIEnv * env)927 static void s_cache_s3_meta_request_progress(JNIEnv *env) {
928     (void)env;
929 
930     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/s3/S3MetaRequestProgress");
931     AWS_FATAL_ASSERT(cls);
932     s3_meta_request_progress_properties.s3_meta_request_progress_class = (*env)->NewGlobalRef(env, cls);
933 
934     s3_meta_request_progress_properties.s3_meta_request_progress_constructor_method_id =
935         (*env)->GetMethodID(env, s3_meta_request_progress_properties.s3_meta_request_progress_class, "<init>", "()V");
936 
937     s3_meta_request_progress_properties.bytes_transferred_field_id =
938         (*env)->GetFieldID(env, cls, "bytesTransferred", "J");
939     s3_meta_request_progress_properties.content_length_field_id = (*env)->GetFieldID(env, cls, "contentLength", "J");
940 }
941 struct java_aws_s3_tcp_keep_alive_options_properties s3_tcp_keep_alive_options_properties;
942 
s_cache_s3_tcp_keep_alive_options(JNIEnv * env)943 static void s_cache_s3_tcp_keep_alive_options(JNIEnv *env) {
944     (void)env;
945 
946     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/s3/S3TcpKeepAliveOptions");
947     AWS_FATAL_ASSERT(cls);
948     s3_tcp_keep_alive_options_properties.s3_tcp_keep_alive_options_class = (*env)->NewGlobalRef(env, cls);
949 
950     s3_tcp_keep_alive_options_properties.s3_tcp_keep_alive_options_constructor_method_id =
951         (*env)->GetMethodID(env, s3_tcp_keep_alive_options_properties.s3_tcp_keep_alive_options_class, "<init>", "()V");
952 
953     s3_tcp_keep_alive_options_properties.keep_alive_interval_sec_field_id =
954         (*env)->GetFieldID(env, cls, "keepAliveIntervalSec", "S");
955 
956     s3_tcp_keep_alive_options_properties.keep_alive_timeout_sec_field_id =
957         (*env)->GetFieldID(env, cls, "keepAliveTimeoutSec", "S");
958 
959     s3_tcp_keep_alive_options_properties.keep_alive_max_failed_probes_field_id =
960         (*env)->GetFieldID(env, cls, "keepAliveMaxFailedProbes", "S");
961 }
962 
963 struct java_aws_s3_meta_request_resume_token s3_meta_request_resume_token_properties;
964 
s_cache_s3_meta_request_resume_token(JNIEnv * env)965 static void s_cache_s3_meta_request_resume_token(JNIEnv *env) {
966     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/s3/ResumeToken");
967     AWS_FATAL_ASSERT(cls);
968     s3_meta_request_resume_token_properties.s3_meta_request_resume_token_class = (*env)->NewGlobalRef(env, cls);
969 
970     s3_meta_request_resume_token_properties.s3_meta_request_resume_token_constructor_method_id =
971         (*env)->GetMethodID(env, s3_meta_request_progress_properties.s3_meta_request_progress_class, "<init>", "()V");
972 
973     s3_meta_request_resume_token_properties.native_type_field_id = (*env)->GetFieldID(env, cls, "nativeType", "I");
974     AWS_FATAL_ASSERT(s3_meta_request_resume_token_properties.native_type_field_id);
975     s3_meta_request_resume_token_properties.part_size_field_id = (*env)->GetFieldID(env, cls, "partSize", "J");
976     s3_meta_request_resume_token_properties.total_num_parts_field_id =
977         (*env)->GetFieldID(env, cls, "totalNumParts", "J");
978     s3_meta_request_resume_token_properties.num_parts_completed_field_id =
979         (*env)->GetFieldID(env, cls, "numPartsCompleted", "J");
980     s3_meta_request_resume_token_properties.upload_id_field_id =
981         (*env)->GetFieldID(env, cls, "uploadId", "Ljava/lang/String;");
982 }
983 
984 struct java_aws_mqtt5_connack_packet_properties mqtt5_connack_packet_properties;
985 
s_cache_mqtt5_connack_packet(JNIEnv * env)986 static void s_cache_mqtt5_connack_packet(JNIEnv *env) {
987     (void)env;
988 
989     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/packets/ConnAckPacket");
990     AWS_FATAL_ASSERT(cls);
991     mqtt5_connack_packet_properties.connack_packet_class = (*env)->NewGlobalRef(env, cls);
992     AWS_FATAL_ASSERT(mqtt5_connack_packet_properties.connack_packet_class);
993 
994     // Functions
995     mqtt5_connack_packet_properties.connack_constructor_id =
996         (*env)->GetMethodID(env, mqtt5_connack_packet_properties.connack_packet_class, "<init>", "()V");
997     AWS_FATAL_ASSERT(mqtt5_connack_packet_properties.connack_constructor_id);
998     mqtt5_connack_packet_properties.connack_native_add_maximum_qos_id =
999         (*env)->GetMethodID(env, mqtt5_connack_packet_properties.connack_packet_class, "nativeAddMaximumQOS", "(I)V");
1000     AWS_FATAL_ASSERT(mqtt5_connack_packet_properties.connack_native_add_maximum_qos_id);
1001     mqtt5_connack_packet_properties.connack_native_add_reason_code_id =
1002         (*env)->GetMethodID(env, mqtt5_connack_packet_properties.connack_packet_class, "nativeAddReasonCode", "(I)V");
1003     AWS_FATAL_ASSERT(mqtt5_connack_packet_properties.connack_native_add_reason_code_id);
1004     // Field IDs
1005     mqtt5_connack_packet_properties.connack_session_present_field_id =
1006         (*env)->GetFieldID(env, mqtt5_connack_packet_properties.connack_packet_class, "sessionPresent", "Z");
1007     AWS_FATAL_ASSERT(mqtt5_connack_packet_properties.connack_session_present_field_id);
1008     mqtt5_connack_packet_properties.connack_reason_code_field_id = (*env)->GetFieldID(
1009         env,
1010         mqtt5_connack_packet_properties.connack_packet_class,
1011         "reasonCode",
1012         "Lsoftware/amazon/awssdk/crt/mqtt5/packets/ConnAckPacket$ConnectReasonCode;");
1013     AWS_FATAL_ASSERT(mqtt5_connack_packet_properties.connack_reason_code_field_id);
1014     mqtt5_connack_packet_properties.connack_session_expiry_interval_field_id = (*env)->GetFieldID(
1015         env, mqtt5_connack_packet_properties.connack_packet_class, "sessionExpiryIntervalSeconds", "Ljava/lang/Long;");
1016     AWS_FATAL_ASSERT(mqtt5_connack_packet_properties.connack_session_expiry_interval_field_id);
1017     mqtt5_connack_packet_properties.connack_receive_maximum_field_id = (*env)->GetFieldID(
1018         env, mqtt5_connack_packet_properties.connack_packet_class, "receiveMaximum", "Ljava/lang/Integer;");
1019     AWS_FATAL_ASSERT(mqtt5_connack_packet_properties.connack_receive_maximum_field_id);
1020     mqtt5_connack_packet_properties.connack_maximum_qos_field_id = (*env)->GetFieldID(
1021         env,
1022         mqtt5_connack_packet_properties.connack_packet_class,
1023         "maximumQOS",
1024         "Lsoftware/amazon/awssdk/crt/mqtt5/QOS;");
1025     AWS_FATAL_ASSERT(mqtt5_connack_packet_properties.connack_maximum_qos_field_id);
1026     mqtt5_connack_packet_properties.connack_retain_available_field_id = (*env)->GetFieldID(
1027         env, mqtt5_connack_packet_properties.connack_packet_class, "retainAvailable", "Ljava/lang/Boolean;");
1028     AWS_FATAL_ASSERT(mqtt5_connack_packet_properties.connack_retain_available_field_id);
1029     mqtt5_connack_packet_properties.connack_maximum_packet_size_field_id = (*env)->GetFieldID(
1030         env, mqtt5_connack_packet_properties.connack_packet_class, "maximumPacketSize", "Ljava/lang/Long;");
1031     AWS_FATAL_ASSERT(mqtt5_connack_packet_properties.connack_maximum_packet_size_field_id);
1032     mqtt5_connack_packet_properties.connack_assigned_client_identifier_field_id = (*env)->GetFieldID(
1033         env, mqtt5_connack_packet_properties.connack_packet_class, "assignedClientIdentifier", "Ljava/lang/String;");
1034     AWS_FATAL_ASSERT(mqtt5_connack_packet_properties.connack_assigned_client_identifier_field_id);
1035     mqtt5_connack_packet_properties.connack_topic_alias_maximum_field_id = (*env)->GetFieldID(
1036         env, mqtt5_connack_packet_properties.connack_packet_class, "topicAliasMaximum", "Ljava/lang/Integer;");
1037     AWS_FATAL_ASSERT(mqtt5_connack_packet_properties.connack_topic_alias_maximum_field_id);
1038     mqtt5_connack_packet_properties.connack_reason_string_field_id = (*env)->GetFieldID(
1039         env, mqtt5_connack_packet_properties.connack_packet_class, "reasonString", "Ljava/lang/String;");
1040     AWS_FATAL_ASSERT(mqtt5_connack_packet_properties.connack_reason_string_field_id);
1041     mqtt5_connack_packet_properties.connack_wildcard_subscriptions_available_field_id = (*env)->GetFieldID(
1042         env,
1043         mqtt5_connack_packet_properties.connack_packet_class,
1044         "wildcardSubscriptionsAvailable",
1045         "Ljava/lang/Boolean;");
1046     AWS_FATAL_ASSERT(mqtt5_connack_packet_properties.connack_wildcard_subscriptions_available_field_id);
1047     mqtt5_connack_packet_properties.connack_subscription_identifiers_available_field_id = (*env)->GetFieldID(
1048         env,
1049         mqtt5_connack_packet_properties.connack_packet_class,
1050         "subscriptionIdentifiersAvailable",
1051         "Ljava/lang/Boolean;");
1052     AWS_FATAL_ASSERT(mqtt5_connack_packet_properties.connack_subscription_identifiers_available_field_id);
1053     mqtt5_connack_packet_properties.connack_shared_subscriptions_available_field_id = (*env)->GetFieldID(
1054         env,
1055         mqtt5_connack_packet_properties.connack_packet_class,
1056         "sharedSubscriptionsAvailable",
1057         "Ljava/lang/Boolean;");
1058     AWS_FATAL_ASSERT(mqtt5_connack_packet_properties.connack_shared_subscriptions_available_field_id);
1059     mqtt5_connack_packet_properties.connack_server_keep_alive_field_id = (*env)->GetFieldID(
1060         env, mqtt5_connack_packet_properties.connack_packet_class, "serverKeepAlive", "Ljava/lang/Integer;");
1061     AWS_FATAL_ASSERT(mqtt5_connack_packet_properties.connack_server_keep_alive_field_id);
1062     mqtt5_connack_packet_properties.connack_response_information_field_id = (*env)->GetFieldID(
1063         env, mqtt5_connack_packet_properties.connack_packet_class, "responseInformation", "Ljava/lang/String;");
1064     AWS_FATAL_ASSERT(mqtt5_connack_packet_properties.connack_response_information_field_id);
1065     mqtt5_connack_packet_properties.connack_server_reference_field_id = (*env)->GetFieldID(
1066         env, mqtt5_connack_packet_properties.connack_packet_class, "serverReference", "Ljava/lang/String;");
1067     AWS_FATAL_ASSERT(mqtt5_connack_packet_properties.connack_server_reference_field_id);
1068     mqtt5_connack_packet_properties.connack_user_properties_field_id = (*env)->GetFieldID(
1069         env, mqtt5_connack_packet_properties.connack_packet_class, "userProperties", "Ljava/util/List;");
1070     AWS_FATAL_ASSERT(mqtt5_connack_packet_properties.connack_user_properties_field_id);
1071 }
1072 
1073 struct java_aws_mqtt5_connect_reason_code_properties mqtt5_connect_reason_code_properties;
1074 
s_cache_mqtt5_connect_reason_code(JNIEnv * env)1075 static void s_cache_mqtt5_connect_reason_code(JNIEnv *env) {
1076     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/packets/ConnAckPacket$ConnectReasonCode");
1077     AWS_FATAL_ASSERT(cls);
1078     mqtt5_connect_reason_code_properties.reason_code_class = (*env)->NewGlobalRef(env, cls);
1079     AWS_FATAL_ASSERT(mqtt5_connect_reason_code_properties.reason_code_class);
1080     // Functions
1081     mqtt5_connect_reason_code_properties.code_get_value_id =
1082         (*env)->GetMethodID(env, mqtt5_connect_reason_code_properties.reason_code_class, "getValue", "()I");
1083     AWS_FATAL_ASSERT(mqtt5_connect_reason_code_properties.code_get_value_id);
1084     // Static functions
1085     mqtt5_connect_reason_code_properties.code_s_get_enum_value_from_integer_id = (*env)->GetStaticMethodID(
1086         env,
1087         mqtt5_connect_reason_code_properties.reason_code_class,
1088         "getEnumValueFromInteger",
1089         "(I)Lsoftware/amazon/awssdk/crt/mqtt5/packets/ConnAckPacket$ConnectReasonCode;");
1090     AWS_FATAL_ASSERT(mqtt5_connect_reason_code_properties.code_s_get_enum_value_from_integer_id);
1091 }
1092 
1093 struct java_aws_mqtt5_connect_packet_properties mqtt5_connect_packet_properties;
1094 
s_cache_mqtt5_connect_packet(JNIEnv * env)1095 static void s_cache_mqtt5_connect_packet(JNIEnv *env) {
1096     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/packets/ConnectPacket");
1097     AWS_FATAL_ASSERT(cls);
1098     mqtt5_connect_packet_properties.connect_packet_class = (*env)->NewGlobalRef(env, cls);
1099     AWS_FATAL_ASSERT(mqtt5_connect_packet_properties.connect_packet_class);
1100     // Field IDs
1101     mqtt5_connect_packet_properties.connect_keep_alive_interval_seconds_field_id = (*env)->GetFieldID(
1102         env, mqtt5_connect_packet_properties.connect_packet_class, "keepAliveIntervalSeconds", "Ljava/lang/Long;");
1103     AWS_FATAL_ASSERT(mqtt5_connect_packet_properties.connect_keep_alive_interval_seconds_field_id);
1104     mqtt5_connect_packet_properties.connect_client_id_field_id =
1105         (*env)->GetFieldID(env, mqtt5_connect_packet_properties.connect_packet_class, "clientId", "Ljava/lang/String;");
1106     AWS_FATAL_ASSERT(mqtt5_connect_packet_properties.connect_client_id_field_id);
1107     mqtt5_connect_packet_properties.connect_username_field_id =
1108         (*env)->GetFieldID(env, mqtt5_connect_packet_properties.connect_packet_class, "username", "Ljava/lang/String;");
1109     AWS_FATAL_ASSERT(mqtt5_connect_packet_properties.connect_username_field_id);
1110     mqtt5_connect_packet_properties.connect_password_field_id =
1111         (*env)->GetFieldID(env, mqtt5_connect_packet_properties.connect_packet_class, "password", "[B");
1112     AWS_FATAL_ASSERT(mqtt5_connect_packet_properties.connect_password_field_id);
1113     mqtt5_connect_packet_properties.connect_session_expiry_interval_seconds_field_id = (*env)->GetFieldID(
1114         env, mqtt5_connect_packet_properties.connect_packet_class, "sessionExpiryIntervalSeconds", "Ljava/lang/Long;");
1115     AWS_FATAL_ASSERT(mqtt5_connect_packet_properties.connect_session_expiry_interval_seconds_field_id);
1116     mqtt5_connect_packet_properties.connect_request_response_information_field_id = (*env)->GetFieldID(
1117         env, mqtt5_connect_packet_properties.connect_packet_class, "requestResponseInformation", "Ljava/lang/Boolean;");
1118     AWS_FATAL_ASSERT(mqtt5_connect_packet_properties.connect_request_response_information_field_id);
1119     mqtt5_connect_packet_properties.connect_request_problem_information_field_id = (*env)->GetFieldID(
1120         env, mqtt5_connect_packet_properties.connect_packet_class, "requestProblemInformation", "Ljava/lang/Boolean;");
1121     AWS_FATAL_ASSERT(mqtt5_connect_packet_properties.connect_request_problem_information_field_id);
1122     mqtt5_connect_packet_properties.connect_receive_maximum_field_id = (*env)->GetFieldID(
1123         env, mqtt5_connect_packet_properties.connect_packet_class, "receiveMaximum", "Ljava/lang/Long;");
1124     AWS_FATAL_ASSERT(mqtt5_connect_packet_properties.connect_receive_maximum_field_id);
1125     mqtt5_connect_packet_properties.connect_maximum_packet_size_bytes_field_id = (*env)->GetFieldID(
1126         env, mqtt5_connect_packet_properties.connect_packet_class, "maximumPacketSizeBytes", "Ljava/lang/Long;");
1127     AWS_FATAL_ASSERT(mqtt5_connect_packet_properties.connect_maximum_packet_size_bytes_field_id);
1128     mqtt5_connect_packet_properties.connect_will_delay_interval_seconds_field_id = (*env)->GetFieldID(
1129         env, mqtt5_connect_packet_properties.connect_packet_class, "willDelayIntervalSeconds", "Ljava/lang/Long;");
1130     AWS_FATAL_ASSERT(mqtt5_connect_packet_properties.connect_will_delay_interval_seconds_field_id);
1131     mqtt5_connect_packet_properties.connect_user_properties_field_id = (*env)->GetFieldID(
1132         env, mqtt5_connect_packet_properties.connect_packet_class, "userProperties", "Ljava/util/List;");
1133     AWS_FATAL_ASSERT(mqtt5_connect_packet_properties.connect_user_properties_field_id);
1134     mqtt5_connect_packet_properties.connect_will_field_id = (*env)->GetFieldID(
1135         env,
1136         mqtt5_connect_packet_properties.connect_packet_class,
1137         "will",
1138         "Lsoftware/amazon/awssdk/crt/mqtt5/packets/PublishPacket;");
1139     AWS_FATAL_ASSERT(mqtt5_connect_packet_properties.connect_will_field_id);
1140 }
1141 
1142 struct java_aws_mqtt5_disconnect_packet_properties mqtt5_disconnect_packet_properties;
1143 
s_cache_mqtt5_disconnect_packet(JNIEnv * env)1144 static void s_cache_mqtt5_disconnect_packet(JNIEnv *env) {
1145     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/packets/DisconnectPacket");
1146     AWS_FATAL_ASSERT(cls);
1147     mqtt5_disconnect_packet_properties.disconnect_packet_class = (*env)->NewGlobalRef(env, cls);
1148     AWS_FATAL_ASSERT(mqtt5_disconnect_packet_properties.disconnect_packet_class);
1149     // Functions
1150     mqtt5_disconnect_packet_properties.disconnect_constructor_id =
1151         (*env)->GetMethodID(env, mqtt5_disconnect_packet_properties.disconnect_packet_class, "<init>", "()V");
1152     AWS_FATAL_ASSERT(mqtt5_disconnect_packet_properties.disconnect_constructor_id);
1153     mqtt5_disconnect_packet_properties.disconnect_native_add_disconnect_reason_code_id = (*env)->GetMethodID(
1154         env, mqtt5_disconnect_packet_properties.disconnect_packet_class, "nativeAddDisconnectReasonCode", "(I)V");
1155     AWS_FATAL_ASSERT(mqtt5_disconnect_packet_properties.disconnect_native_add_disconnect_reason_code_id);
1156     mqtt5_disconnect_packet_properties.disconnect_get_reason_code_id = (*env)->GetMethodID(
1157         env,
1158         mqtt5_disconnect_packet_properties.disconnect_packet_class,
1159         "getReasonCode",
1160         "()Lsoftware/amazon/awssdk/crt/mqtt5/packets/DisconnectPacket$DisconnectReasonCode;");
1161     AWS_FATAL_ASSERT(mqtt5_disconnect_packet_properties.disconnect_get_reason_code_id);
1162     // Field IDs
1163     mqtt5_disconnect_packet_properties.disconnect_reason_code_field_id = (*env)->GetFieldID(
1164         env,
1165         mqtt5_disconnect_packet_properties.disconnect_packet_class,
1166         "reasonCode",
1167         "Lsoftware/amazon/awssdk/crt/mqtt5/packets/DisconnectPacket$DisconnectReasonCode;");
1168     AWS_FATAL_ASSERT(mqtt5_disconnect_packet_properties.disconnect_reason_code_field_id);
1169     mqtt5_disconnect_packet_properties.disconnect_session_expiry_interval_seconds_field_id = (*env)->GetFieldID(
1170         env,
1171         mqtt5_disconnect_packet_properties.disconnect_packet_class,
1172         "sessionExpiryIntervalSeconds",
1173         "Ljava/lang/Long;");
1174     AWS_FATAL_ASSERT(mqtt5_disconnect_packet_properties.disconnect_session_expiry_interval_seconds_field_id);
1175     mqtt5_disconnect_packet_properties.disconnect_reason_string_field_id = (*env)->GetFieldID(
1176         env, mqtt5_disconnect_packet_properties.disconnect_packet_class, "reasonString", "Ljava/lang/String;");
1177     AWS_FATAL_ASSERT(mqtt5_disconnect_packet_properties.disconnect_reason_string_field_id);
1178     mqtt5_disconnect_packet_properties.disconnect_session_server_reference_field_id = (*env)->GetFieldID(
1179         env, mqtt5_disconnect_packet_properties.disconnect_packet_class, "serverReference", "Ljava/lang/String;");
1180     AWS_FATAL_ASSERT(mqtt5_disconnect_packet_properties.disconnect_session_server_reference_field_id);
1181     mqtt5_disconnect_packet_properties.disconnect_user_properties_field_id = (*env)->GetFieldID(
1182         env, mqtt5_disconnect_packet_properties.disconnect_packet_class, "userProperties", "Ljava/util/List;");
1183     AWS_FATAL_ASSERT(mqtt5_disconnect_packet_properties.disconnect_user_properties_field_id);
1184 }
1185 
1186 struct java_aws_mqtt5_disconnect_reason_code_properties mqtt5_disconnect_reason_code_properties;
1187 
s_cache_mqtt5_disconnect_reason_code(JNIEnv * env)1188 static void s_cache_mqtt5_disconnect_reason_code(JNIEnv *env) {
1189     jclass cls =
1190         (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/packets/DisconnectPacket$DisconnectReasonCode");
1191     AWS_FATAL_ASSERT(cls);
1192     mqtt5_disconnect_reason_code_properties.reason_code_class = (*env)->NewGlobalRef(env, cls);
1193     AWS_FATAL_ASSERT(mqtt5_disconnect_reason_code_properties.reason_code_class);
1194     // Functions
1195     mqtt5_disconnect_reason_code_properties.code_get_value_id =
1196         (*env)->GetMethodID(env, mqtt5_disconnect_reason_code_properties.reason_code_class, "getValue", "()I");
1197     AWS_FATAL_ASSERT(mqtt5_disconnect_reason_code_properties.code_get_value_id);
1198     // Static functions
1199     mqtt5_disconnect_reason_code_properties.code_s_get_enum_value_from_integer_id = (*env)->GetStaticMethodID(
1200         env,
1201         mqtt5_disconnect_reason_code_properties.reason_code_class,
1202         "getEnumValueFromInteger",
1203         "(I)Lsoftware/amazon/awssdk/crt/mqtt5/packets/DisconnectPacket$DisconnectReasonCode;");
1204     AWS_FATAL_ASSERT(mqtt5_disconnect_reason_code_properties.code_s_get_enum_value_from_integer_id);
1205 }
1206 
1207 struct java_aws_mqtt5_puback_packet_properties mqtt5_puback_packet_properties;
1208 
s_cache_mqtt5_puback_packet(JNIEnv * env)1209 static void s_cache_mqtt5_puback_packet(JNIEnv *env) {
1210     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/packets/PubAckPacket");
1211     AWS_FATAL_ASSERT(cls);
1212     mqtt5_puback_packet_properties.puback_packet_class = (*env)->NewGlobalRef(env, cls);
1213     AWS_FATAL_ASSERT(mqtt5_puback_packet_properties.puback_packet_class);
1214     // Functions
1215     mqtt5_puback_packet_properties.puback_constructor_id =
1216         (*env)->GetMethodID(env, mqtt5_puback_packet_properties.puback_packet_class, "<init>", "()V");
1217     AWS_FATAL_ASSERT(mqtt5_puback_packet_properties.puback_constructor_id);
1218     mqtt5_puback_packet_properties.puback_native_add_reason_code_id =
1219         (*env)->GetMethodID(env, mqtt5_puback_packet_properties.puback_packet_class, "nativeAddReasonCode", "(I)V");
1220     AWS_FATAL_ASSERT(mqtt5_puback_packet_properties.puback_native_add_reason_code_id);
1221     // Field IDs
1222     mqtt5_puback_packet_properties.puback_reason_code_field_id = (*env)->GetFieldID(
1223         env,
1224         mqtt5_puback_packet_properties.puback_packet_class,
1225         "reasonCode",
1226         "Lsoftware/amazon/awssdk/crt/mqtt5/packets/PubAckPacket$PubAckReasonCode;");
1227     AWS_FATAL_ASSERT(mqtt5_puback_packet_properties.puback_reason_code_field_id);
1228     mqtt5_puback_packet_properties.puback_reason_string_field_id = (*env)->GetFieldID(
1229         env, mqtt5_puback_packet_properties.puback_packet_class, "reasonString", "Ljava/lang/String;");
1230     AWS_FATAL_ASSERT(mqtt5_puback_packet_properties.puback_reason_string_field_id);
1231     mqtt5_puback_packet_properties.puback_user_properties_field_id = (*env)->GetFieldID(
1232         env, mqtt5_puback_packet_properties.puback_packet_class, "userProperties", "Ljava/util/List;");
1233     AWS_FATAL_ASSERT(mqtt5_puback_packet_properties.puback_user_properties_field_id);
1234 }
1235 
1236 struct java_aws_mqtt5_puback_reason_code_properties mqtt5_puback_reason_code_properties;
1237 
s_cache_mqtt5_puback_reason_code(JNIEnv * env)1238 static void s_cache_mqtt5_puback_reason_code(JNIEnv *env) {
1239     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/packets/PubAckPacket$PubAckReasonCode");
1240     AWS_FATAL_ASSERT(cls);
1241     mqtt5_puback_reason_code_properties.reason_code_class = (*env)->NewGlobalRef(env, cls);
1242     AWS_FATAL_ASSERT(mqtt5_puback_reason_code_properties.reason_code_class);
1243     // Functions
1244     mqtt5_puback_reason_code_properties.code_get_value_id =
1245         (*env)->GetMethodID(env, mqtt5_puback_reason_code_properties.reason_code_class, "getValue", "()I");
1246     AWS_FATAL_ASSERT(mqtt5_puback_reason_code_properties.code_get_value_id);
1247     // Static functions
1248     mqtt5_puback_reason_code_properties.code_s_get_enum_value_from_integer_id = (*env)->GetStaticMethodID(
1249         env,
1250         mqtt5_puback_reason_code_properties.reason_code_class,
1251         "getEnumValueFromInteger",
1252         "(I)Lsoftware/amazon/awssdk/crt/mqtt5/packets/PubAckPacket$PubAckReasonCode;");
1253     AWS_FATAL_ASSERT(mqtt5_puback_reason_code_properties.code_s_get_enum_value_from_integer_id);
1254 }
1255 
1256 struct java_aws_mqtt5_publish_packet_properties mqtt5_publish_packet_properties;
1257 
s_cache_mqtt5_publish_packet(JNIEnv * env)1258 static void s_cache_mqtt5_publish_packet(JNIEnv *env) {
1259     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/packets/PublishPacket");
1260     AWS_FATAL_ASSERT(cls);
1261     mqtt5_publish_packet_properties.publish_packet_class = (*env)->NewGlobalRef(env, cls);
1262     AWS_FATAL_ASSERT(mqtt5_publish_packet_properties.publish_packet_class);
1263     // Functions
1264     mqtt5_publish_packet_properties.publish_constructor_id =
1265         (*env)->GetMethodID(env, mqtt5_publish_packet_properties.publish_packet_class, "<init>", "()V");
1266     AWS_FATAL_ASSERT(mqtt5_publish_packet_properties.publish_constructor_id);
1267 
1268     mqtt5_publish_packet_properties.publish_native_set_qos_id =
1269         (*env)->GetMethodID(env, mqtt5_publish_packet_properties.publish_packet_class, "nativeSetQOS", "(I)V");
1270     AWS_FATAL_ASSERT(mqtt5_publish_packet_properties.publish_native_set_qos_id);
1271     mqtt5_publish_packet_properties.publish_native_set_payload_format_indicator_id = (*env)->GetMethodID(
1272         env, mqtt5_publish_packet_properties.publish_packet_class, "nativeSetPayloadFormatIndicator", "(I)V");
1273     AWS_FATAL_ASSERT(mqtt5_publish_packet_properties.publish_native_set_payload_format_indicator_id);
1274     mqtt5_publish_packet_properties.publish_get_qos_id = (*env)->GetMethodID(
1275         env,
1276         mqtt5_publish_packet_properties.publish_packet_class,
1277         "getQOS",
1278         "()Lsoftware/amazon/awssdk/crt/mqtt5/QOS;");
1279     AWS_FATAL_ASSERT(mqtt5_publish_packet_properties.publish_get_qos_id);
1280 
1281     mqtt5_publish_packet_properties.publish_get_payload_format_id = (*env)->GetMethodID(
1282         env,
1283         mqtt5_publish_packet_properties.publish_packet_class,
1284         "getPayloadFormat",
1285         "()Lsoftware/amazon/awssdk/crt/mqtt5/packets/PublishPacket$PayloadFormatIndicator;");
1286     AWS_FATAL_ASSERT(mqtt5_publish_packet_properties.publish_get_payload_format_id);
1287 
1288     // FieldIDs
1289     mqtt5_publish_packet_properties.publish_payload_field_id =
1290         (*env)->GetFieldID(env, mqtt5_publish_packet_properties.publish_packet_class, "payload", "[B");
1291     AWS_FATAL_ASSERT(mqtt5_publish_packet_properties.publish_payload_field_id);
1292     mqtt5_publish_packet_properties.publish_qos_field_id = (*env)->GetFieldID(
1293         env,
1294         mqtt5_publish_packet_properties.publish_packet_class,
1295         "packetQOS",
1296         "Lsoftware/amazon/awssdk/crt/mqtt5/QOS;");
1297     AWS_FATAL_ASSERT(mqtt5_publish_packet_properties.publish_qos_field_id);
1298     mqtt5_publish_packet_properties.publish_retain_field_id =
1299         (*env)->GetFieldID(env, mqtt5_publish_packet_properties.publish_packet_class, "retain", "Ljava/lang/Boolean;");
1300     AWS_FATAL_ASSERT(mqtt5_publish_packet_properties.publish_retain_field_id);
1301     mqtt5_publish_packet_properties.publish_topic_field_id =
1302         (*env)->GetFieldID(env, mqtt5_publish_packet_properties.publish_packet_class, "topic", "Ljava/lang/String;");
1303     AWS_FATAL_ASSERT(mqtt5_publish_packet_properties.publish_topic_field_id);
1304     mqtt5_publish_packet_properties.publish_payload_format_field_id = (*env)->GetFieldID(
1305         env,
1306         mqtt5_publish_packet_properties.publish_packet_class,
1307         "payloadFormat",
1308         "Lsoftware/amazon/awssdk/crt/mqtt5/packets/PublishPacket$PayloadFormatIndicator;");
1309     AWS_FATAL_ASSERT(mqtt5_publish_packet_properties.publish_payload_format_field_id);
1310     mqtt5_publish_packet_properties.publish_message_expiry_interval_seconds_field_id = (*env)->GetFieldID(
1311         env, mqtt5_publish_packet_properties.publish_packet_class, "messageExpiryIntervalSeconds", "Ljava/lang/Long;");
1312     AWS_FATAL_ASSERT(mqtt5_publish_packet_properties.publish_message_expiry_interval_seconds_field_id);
1313     mqtt5_publish_packet_properties.publish_topic_alias_field_id =
1314         (*env)->GetFieldID(env, mqtt5_publish_packet_properties.publish_packet_class, "topicAlias", "Ljava/lang/Long;");
1315     AWS_FATAL_ASSERT(mqtt5_publish_packet_properties.publish_topic_alias_field_id);
1316     mqtt5_publish_packet_properties.publish_response_topic_field_id = (*env)->GetFieldID(
1317         env, mqtt5_publish_packet_properties.publish_packet_class, "responseTopic", "Ljava/lang/String;");
1318     AWS_FATAL_ASSERT(mqtt5_publish_packet_properties.publish_response_topic_field_id);
1319     mqtt5_publish_packet_properties.publish_correlation_data_field_id =
1320         (*env)->GetFieldID(env, mqtt5_publish_packet_properties.publish_packet_class, "correlationData", "[B");
1321     AWS_FATAL_ASSERT(mqtt5_publish_packet_properties.publish_correlation_data_field_id);
1322     mqtt5_publish_packet_properties.publish_content_type_field_id = (*env)->GetFieldID(
1323         env, mqtt5_publish_packet_properties.publish_packet_class, "contentType", "Ljava/lang/String;");
1324     AWS_FATAL_ASSERT(mqtt5_publish_packet_properties.publish_content_type_field_id);
1325     mqtt5_publish_packet_properties.publish_subscription_identifiers_field_id = (*env)->GetFieldID(
1326         env, mqtt5_publish_packet_properties.publish_packet_class, "subscriptionIdentifiers", "Ljava/util/List;");
1327     AWS_FATAL_ASSERT(mqtt5_publish_packet_properties.publish_subscription_identifiers_field_id);
1328     mqtt5_publish_packet_properties.publish_user_properties_field_id = (*env)->GetFieldID(
1329         env, mqtt5_publish_packet_properties.publish_packet_class, "userProperties", "Ljava/util/List;");
1330     AWS_FATAL_ASSERT(mqtt5_publish_packet_properties.publish_user_properties_field_id);
1331 }
1332 
1333 struct java_aws_mqtt5_payload_format_indicator_properties mqtt5_payload_format_indicator_properties;
1334 
s_cache_mqtt5_payload_format_indicator(JNIEnv * env)1335 static void s_cache_mqtt5_payload_format_indicator(JNIEnv *env) {
1336     jclass cls =
1337         (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/packets/PublishPacket$PayloadFormatIndicator");
1338     AWS_FATAL_ASSERT(cls);
1339     mqtt5_payload_format_indicator_properties.payload_format_class = (*env)->NewGlobalRef(env, cls);
1340     AWS_FATAL_ASSERT(mqtt5_payload_format_indicator_properties.payload_format_class);
1341     // Functions
1342     mqtt5_payload_format_indicator_properties.format_get_value_id =
1343         (*env)->GetMethodID(env, mqtt5_payload_format_indicator_properties.payload_format_class, "getValue", "()I");
1344     AWS_FATAL_ASSERT(mqtt5_payload_format_indicator_properties.format_get_value_id);
1345     // Static functions
1346     mqtt5_payload_format_indicator_properties.format_s_get_enum_value_from_integer_id = (*env)->GetStaticMethodID(
1347         env,
1348         mqtt5_payload_format_indicator_properties.payload_format_class,
1349         "getEnumValueFromInteger",
1350         "(I)Lsoftware/amazon/awssdk/crt/mqtt5/packets/PublishPacket$PayloadFormatIndicator;");
1351     AWS_FATAL_ASSERT(mqtt5_payload_format_indicator_properties.format_s_get_enum_value_from_integer_id);
1352 }
1353 
1354 struct java_aws_mqtt5_negotiated_settings_properties mqtt5_negotiated_settings_properties;
1355 
s_cache_mqtt5_negotiated_settings(JNIEnv * env)1356 static void s_cache_mqtt5_negotiated_settings(JNIEnv *env) {
1357     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/NegotiatedSettings");
1358     AWS_FATAL_ASSERT(cls);
1359     mqtt5_negotiated_settings_properties.negotiated_settings_class = (*env)->NewGlobalRef(env, cls);
1360     AWS_FATAL_ASSERT(mqtt5_negotiated_settings_properties.negotiated_settings_class);
1361     // Functions
1362     mqtt5_negotiated_settings_properties.negotiated_settings_constructor_id =
1363         (*env)->GetMethodID(env, mqtt5_negotiated_settings_properties.negotiated_settings_class, "<init>", "()V");
1364     AWS_FATAL_ASSERT(mqtt5_negotiated_settings_properties.negotiated_settings_constructor_id);
1365     mqtt5_negotiated_settings_properties.negotiated_settings_native_set_qos_id = (*env)->GetMethodID(
1366         env, mqtt5_negotiated_settings_properties.negotiated_settings_class, "nativeSetQOS", "(I)V");
1367     AWS_FATAL_ASSERT(mqtt5_negotiated_settings_properties.negotiated_settings_native_set_qos_id);
1368     // Field IDs
1369     mqtt5_negotiated_settings_properties.negotiated_settings_maximum_qos_field_id = (*env)->GetFieldID(
1370         env,
1371         mqtt5_negotiated_settings_properties.negotiated_settings_class,
1372         "maximumQOS",
1373         "Lsoftware/amazon/awssdk/crt/mqtt5/QOS;");
1374     AWS_FATAL_ASSERT(mqtt5_negotiated_settings_properties.negotiated_settings_maximum_qos_field_id);
1375     mqtt5_negotiated_settings_properties.negotiated_settings_session_expiry_interval_field_id = (*env)->GetFieldID(
1376         env, mqtt5_negotiated_settings_properties.negotiated_settings_class, "sessionExpiryInterval", "J");
1377     AWS_FATAL_ASSERT(mqtt5_negotiated_settings_properties.negotiated_settings_session_expiry_interval_field_id);
1378     mqtt5_negotiated_settings_properties.negotiated_settings_receive_maximum_from_server_field_id = (*env)->GetFieldID(
1379         env, mqtt5_negotiated_settings_properties.negotiated_settings_class, "receiveMaximumFromServer", "I");
1380     AWS_FATAL_ASSERT(mqtt5_negotiated_settings_properties.negotiated_settings_receive_maximum_from_server_field_id);
1381     mqtt5_negotiated_settings_properties.negotiated_settings_maximum_packet_size_to_server_field_id =
1382         (*env)->GetFieldID(
1383             env, mqtt5_negotiated_settings_properties.negotiated_settings_class, "maximumPacketSizeToServer", "J");
1384     AWS_FATAL_ASSERT(mqtt5_negotiated_settings_properties.negotiated_settings_maximum_packet_size_to_server_field_id);
1385     mqtt5_negotiated_settings_properties.negotiated_settings_topic_alias_maximum_to_server_field_id =
1386         (*env)->GetFieldID(
1387             env, mqtt5_negotiated_settings_properties.negotiated_settings_class, "topicAliasMaximumToServer", "I");
1388     AWS_FATAL_ASSERT(mqtt5_negotiated_settings_properties.negotiated_settings_topic_alias_maximum_to_server_field_id);
1389     mqtt5_negotiated_settings_properties.negotiated_settings_topic_alias_maximum_to_client_field_id =
1390         (*env)->GetFieldID(
1391             env, mqtt5_negotiated_settings_properties.negotiated_settings_class, "topicAliasMaximumToClient", "I");
1392     AWS_FATAL_ASSERT(mqtt5_negotiated_settings_properties.negotiated_settings_topic_alias_maximum_to_client_field_id);
1393     mqtt5_negotiated_settings_properties.negotiated_settings_server_keep_alive_field_id =
1394         (*env)->GetFieldID(env, mqtt5_negotiated_settings_properties.negotiated_settings_class, "serverKeepAlive", "I");
1395     AWS_FATAL_ASSERT(mqtt5_negotiated_settings_properties.negotiated_settings_server_keep_alive_field_id);
1396     mqtt5_negotiated_settings_properties.negotiated_settings_retain_available_field_id =
1397         (*env)->GetFieldID(env, mqtt5_negotiated_settings_properties.negotiated_settings_class, "retainAvailable", "Z");
1398     AWS_FATAL_ASSERT(mqtt5_negotiated_settings_properties.negotiated_settings_retain_available_field_id);
1399     mqtt5_negotiated_settings_properties.negotiated_settings_wildcard_subscriptions_available_field_id =
1400         (*env)->GetFieldID(
1401             env, mqtt5_negotiated_settings_properties.negotiated_settings_class, "wildcardSubscriptionsAvailable", "Z");
1402     AWS_FATAL_ASSERT(
1403         mqtt5_negotiated_settings_properties.negotiated_settings_wildcard_subscriptions_available_field_id);
1404     mqtt5_negotiated_settings_properties.negotiated_settings_subscription_identifiers_available_field_id =
1405         (*env)->GetFieldID(
1406             env,
1407             mqtt5_negotiated_settings_properties.negotiated_settings_class,
1408             "subscriptionIdentifiersAvailable",
1409             "Z");
1410     AWS_FATAL_ASSERT(
1411         mqtt5_negotiated_settings_properties.negotiated_settings_subscription_identifiers_available_field_id);
1412     mqtt5_negotiated_settings_properties.negotiated_settings_shared_subscriptions_available_field_id =
1413         (*env)->GetFieldID(
1414             env, mqtt5_negotiated_settings_properties.negotiated_settings_class, "sharedSubscriptionsAvailable", "Z");
1415     AWS_FATAL_ASSERT(mqtt5_negotiated_settings_properties.negotiated_settings_shared_subscriptions_available_field_id);
1416     mqtt5_negotiated_settings_properties.negotiated_settings_rejoined_session_field_id =
1417         (*env)->GetFieldID(env, mqtt5_negotiated_settings_properties.negotiated_settings_class, "rejoinedSession", "Z");
1418     AWS_FATAL_ASSERT(mqtt5_negotiated_settings_properties.negotiated_settings_rejoined_session_field_id);
1419     mqtt5_negotiated_settings_properties.negotiated_settings_assigned_client_id_field_id = (*env)->GetFieldID(
1420         env, mqtt5_negotiated_settings_properties.negotiated_settings_class, "assignedClientID", "Ljava/lang/String;");
1421     AWS_FATAL_ASSERT(mqtt5_negotiated_settings_properties.negotiated_settings_assigned_client_id_field_id);
1422 }
1423 
1424 struct java_aws_http_proxy_options_properties http_proxy_options_properties;
1425 
s_cache_http_proxy_options(JNIEnv * env)1426 static void s_cache_http_proxy_options(JNIEnv *env) {
1427     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/http/HttpProxyOptions");
1428     AWS_FATAL_ASSERT(cls);
1429     http_proxy_options_properties.http_proxy_options_class = (*env)->NewGlobalRef(env, cls);
1430     AWS_FATAL_ASSERT(http_proxy_options_properties.http_proxy_options_class);
1431     // Functions
1432     http_proxy_options_properties.proxy_get_connection_type_id = (*env)->GetMethodID(
1433         env,
1434         http_proxy_options_properties.http_proxy_options_class,
1435         "getConnectionType",
1436         "()Lsoftware/amazon/awssdk/crt/http/HttpProxyOptions$HttpProxyConnectionType;");
1437     AWS_FATAL_ASSERT(http_proxy_options_properties.proxy_get_connection_type_id);
1438     http_proxy_options_properties.proxy_get_proxy_host_id = (*env)->GetMethodID(
1439         env, http_proxy_options_properties.http_proxy_options_class, "getHost", "()Ljava/lang/String;");
1440     AWS_FATAL_ASSERT(http_proxy_options_properties.proxy_get_proxy_host_id);
1441     http_proxy_options_properties.proxy_get_proxy_port_id =
1442         (*env)->GetMethodID(env, http_proxy_options_properties.http_proxy_options_class, "getPort", "()I");
1443     AWS_FATAL_ASSERT(http_proxy_options_properties.proxy_get_proxy_port_id);
1444     http_proxy_options_properties.proxy_get_proxy_tls_context_id = (*env)->GetMethodID(
1445         env,
1446         http_proxy_options_properties.http_proxy_options_class,
1447         "getTlsContext",
1448         "()Lsoftware/amazon/awssdk/crt/io/TlsContext;");
1449     AWS_FATAL_ASSERT(http_proxy_options_properties.proxy_get_proxy_tls_context_id);
1450     http_proxy_options_properties.proxy_get_proxy_authorization_type_id = (*env)->GetMethodID(
1451         env,
1452         http_proxy_options_properties.http_proxy_options_class,
1453         "getAuthorizationType",
1454         "()Lsoftware/amazon/awssdk/crt/http/HttpProxyOptions$HttpProxyAuthorizationType;");
1455     AWS_FATAL_ASSERT(http_proxy_options_properties.proxy_get_proxy_authorization_type_id);
1456     http_proxy_options_properties.proxy_get_authorization_username_id = (*env)->GetMethodID(
1457         env,
1458         http_proxy_options_properties.http_proxy_options_class,
1459         "getAuthorizationUsername",
1460         "()Ljava/lang/String;");
1461     AWS_FATAL_ASSERT(http_proxy_options_properties.proxy_get_authorization_username_id);
1462     http_proxy_options_properties.proxy_get_authorization_password_id = (*env)->GetMethodID(
1463         env,
1464         http_proxy_options_properties.http_proxy_options_class,
1465         "getAuthorizationPassword",
1466         "()Ljava/lang/String;");
1467     AWS_FATAL_ASSERT(http_proxy_options_properties.proxy_get_authorization_password_id);
1468 }
1469 
1470 struct java_aws_http_proxy_connection_type_properties http_proxy_connection_type_properties;
1471 
s_cache_http_proxy_connection_type(JNIEnv * env)1472 static void s_cache_http_proxy_connection_type(JNIEnv *env) {
1473     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/http/HttpProxyOptions$HttpProxyConnectionType");
1474     AWS_FATAL_ASSERT(cls);
1475     http_proxy_connection_type_properties.http_proxy_connection_type_class = (*env)->NewGlobalRef(env, cls);
1476     AWS_FATAL_ASSERT(http_proxy_connection_type_properties.http_proxy_connection_type_class);
1477     // Functions
1478     http_proxy_connection_type_properties.proxy_get_value_id = (*env)->GetMethodID(
1479         env, http_proxy_connection_type_properties.http_proxy_connection_type_class, "getValue", "()I");
1480     AWS_FATAL_ASSERT(http_proxy_connection_type_properties.proxy_get_value_id);
1481 }
1482 
1483 struct java_aws_mqtt5_client_options_properties mqtt5_client_options_properties;
1484 
s_cache_mqtt5_client_options(JNIEnv * env)1485 static void s_cache_mqtt5_client_options(JNIEnv *env) {
1486     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/Mqtt5ClientOptions");
1487     AWS_FATAL_ASSERT(cls);
1488     mqtt5_client_options_properties.client_options_class = (*env)->NewGlobalRef(env, cls);
1489     AWS_FATAL_ASSERT(mqtt5_client_options_properties.client_options_class);
1490     // Functions
1491     mqtt5_client_options_properties.options_get_bootstrap_id = (*env)->GetMethodID(
1492         env,
1493         mqtt5_client_options_properties.client_options_class,
1494         "getBootstrap",
1495         "()Lsoftware/amazon/awssdk/crt/io/ClientBootstrap;");
1496     AWS_FATAL_ASSERT(mqtt5_client_options_properties.options_get_bootstrap_id);
1497     mqtt5_client_options_properties.options_get_socket_options_id = (*env)->GetMethodID(
1498         env,
1499         mqtt5_client_options_properties.client_options_class,
1500         "getSocketOptions",
1501         "()Lsoftware/amazon/awssdk/crt/io/SocketOptions;");
1502     AWS_FATAL_ASSERT(mqtt5_client_options_properties.options_get_socket_options_id);
1503     mqtt5_client_options_properties.options_get_tls_options_id = (*env)->GetMethodID(
1504         env,
1505         mqtt5_client_options_properties.client_options_class,
1506         "getTlsContext",
1507         "()Lsoftware/amazon/awssdk/crt/io/TlsContext;");
1508     AWS_FATAL_ASSERT(mqtt5_client_options_properties.options_get_tls_options_id);
1509     mqtt5_client_options_properties.options_get_session_behavior_id = (*env)->GetMethodID(
1510         env,
1511         mqtt5_client_options_properties.client_options_class,
1512         "getSessionBehavior",
1513         "()Lsoftware/amazon/awssdk/crt/mqtt5/Mqtt5ClientOptions$ClientSessionBehavior;");
1514     AWS_FATAL_ASSERT(mqtt5_client_options_properties.options_get_session_behavior_id);
1515     mqtt5_client_options_properties.options_get_extended_validation_and_flow_control_options_id = (*env)->GetMethodID(
1516         env,
1517         mqtt5_client_options_properties.client_options_class,
1518         "getExtendedValidationAndFlowControlOptions",
1519         "()Lsoftware/amazon/awssdk/crt/mqtt5/Mqtt5ClientOptions$ExtendedValidationAndFlowControlOptions;");
1520     AWS_FATAL_ASSERT(mqtt5_client_options_properties.options_get_extended_validation_and_flow_control_options_id);
1521     mqtt5_client_options_properties.options_get_offline_queue_behavior_id = (*env)->GetMethodID(
1522         env,
1523         mqtt5_client_options_properties.client_options_class,
1524         "getOfflineQueueBehavior",
1525         "()Lsoftware/amazon/awssdk/crt/mqtt5/Mqtt5ClientOptions$ClientOfflineQueueBehavior;");
1526     AWS_FATAL_ASSERT(mqtt5_client_options_properties.options_get_offline_queue_behavior_id);
1527     mqtt5_client_options_properties.options_get_retry_jitter_mode_id = (*env)->GetMethodID(
1528         env,
1529         mqtt5_client_options_properties.client_options_class,
1530         "getRetryJitterMode",
1531         "()Lsoftware/amazon/awssdk/crt/io/ExponentialBackoffRetryOptions$JitterMode;");
1532     AWS_FATAL_ASSERT(mqtt5_client_options_properties.options_get_retry_jitter_mode_id);
1533     // Field IDs
1534     mqtt5_client_options_properties.options_host_name_field_id =
1535         (*env)->GetFieldID(env, mqtt5_client_options_properties.client_options_class, "hostName", "Ljava/lang/String;");
1536     AWS_FATAL_ASSERT(mqtt5_client_options_properties.options_host_name_field_id);
1537     mqtt5_client_options_properties.options_port_field_id =
1538         (*env)->GetFieldID(env, mqtt5_client_options_properties.client_options_class, "port", "Ljava/lang/Long;");
1539     AWS_FATAL_ASSERT(mqtt5_client_options_properties.options_port_field_id);
1540     mqtt5_client_options_properties.http_proxy_options_field_id = (*env)->GetFieldID(
1541         env,
1542         mqtt5_client_options_properties.client_options_class,
1543         "httpProxyOptions",
1544         "Lsoftware/amazon/awssdk/crt/http/HttpProxyOptions;");
1545     AWS_FATAL_ASSERT(mqtt5_client_options_properties.http_proxy_options_field_id);
1546     mqtt5_client_options_properties.session_behavior_field_id = (*env)->GetFieldID(
1547         env,
1548         mqtt5_client_options_properties.client_options_class,
1549         "sessionBehavior",
1550         "Lsoftware/amazon/awssdk/crt/mqtt5/Mqtt5ClientOptions$ClientSessionBehavior;");
1551     AWS_FATAL_ASSERT(mqtt5_client_options_properties.session_behavior_field_id);
1552     mqtt5_client_options_properties.extended_validation_and_flow_control_options_field_id = (*env)->GetFieldID(
1553         env,
1554         mqtt5_client_options_properties.client_options_class,
1555         "extendedValidationAndFlowControlOptions",
1556         "Lsoftware/amazon/awssdk/crt/mqtt5/Mqtt5ClientOptions$ExtendedValidationAndFlowControlOptions;");
1557     AWS_FATAL_ASSERT(mqtt5_client_options_properties.extended_validation_and_flow_control_options_field_id);
1558     mqtt5_client_options_properties.offline_queue_behavior_field_id = (*env)->GetFieldID(
1559         env,
1560         mqtt5_client_options_properties.client_options_class,
1561         "offlineQueueBehavior",
1562         "Lsoftware/amazon/awssdk/crt/mqtt5/Mqtt5ClientOptions$ClientOfflineQueueBehavior;");
1563     AWS_FATAL_ASSERT(mqtt5_client_options_properties.offline_queue_behavior_field_id);
1564     mqtt5_client_options_properties.retry_jitter_mode_field_id = (*env)->GetFieldID(
1565         env,
1566         mqtt5_client_options_properties.client_options_class,
1567         "retryJitterMode",
1568         "Lsoftware/amazon/awssdk/crt/io/ExponentialBackoffRetryOptions$JitterMode;");
1569     AWS_FATAL_ASSERT(mqtt5_client_options_properties.retry_jitter_mode_field_id);
1570     mqtt5_client_options_properties.min_reconnect_delay_ms_field_id = (*env)->GetFieldID(
1571         env, mqtt5_client_options_properties.client_options_class, "minReconnectDelayMs", "Ljava/lang/Long;");
1572     AWS_FATAL_ASSERT(mqtt5_client_options_properties.min_reconnect_delay_ms_field_id);
1573     mqtt5_client_options_properties.max_reconnect_delay_ms_field_id = (*env)->GetFieldID(
1574         env, mqtt5_client_options_properties.client_options_class, "maxReconnectDelayMs", "Ljava/lang/Long;");
1575     AWS_FATAL_ASSERT(mqtt5_client_options_properties.max_reconnect_delay_ms_field_id);
1576     mqtt5_client_options_properties.min_connected_time_to_reset_reconnect_delay_ms_field_id = (*env)->GetFieldID(
1577         env,
1578         mqtt5_client_options_properties.client_options_class,
1579         "minConnectedTimeToResetReconnectDelayMs",
1580         "Ljava/lang/Long;");
1581     AWS_FATAL_ASSERT(mqtt5_client_options_properties.min_connected_time_to_reset_reconnect_delay_ms_field_id);
1582     mqtt5_client_options_properties.ping_timeout_ms_field_id = (*env)->GetFieldID(
1583         env, mqtt5_client_options_properties.client_options_class, "pingTimeoutMs", "Ljava/lang/Long;");
1584     AWS_FATAL_ASSERT(mqtt5_client_options_properties.ping_timeout_ms_field_id);
1585     mqtt5_client_options_properties.connack_timeout_ms_field_id = (*env)->GetFieldID(
1586         env, mqtt5_client_options_properties.client_options_class, "connackTimeoutMs", "Ljava/lang/Long;");
1587     AWS_FATAL_ASSERT(mqtt5_client_options_properties.connack_timeout_ms_field_id);
1588     mqtt5_client_options_properties.ack_timeout_seconds_field_id = (*env)->GetFieldID(
1589         env, mqtt5_client_options_properties.client_options_class, "ackTimeoutSeconds", "Ljava/lang/Long;");
1590     AWS_FATAL_ASSERT(mqtt5_client_options_properties.ack_timeout_seconds_field_id);
1591     mqtt5_client_options_properties.publish_events_field_id = (*env)->GetFieldID(
1592         env,
1593         mqtt5_client_options_properties.client_options_class,
1594         "publishEvents",
1595         "Lsoftware/amazon/awssdk/crt/mqtt5/Mqtt5ClientOptions$PublishEvents;");
1596     AWS_FATAL_ASSERT(mqtt5_client_options_properties.publish_events_field_id);
1597     mqtt5_client_options_properties.lifecycle_events_field_id = (*env)->GetFieldID(
1598         env,
1599         mqtt5_client_options_properties.client_options_class,
1600         "lifecycleEvents",
1601         "Lsoftware/amazon/awssdk/crt/mqtt5/Mqtt5ClientOptions$LifecycleEvents;");
1602     AWS_FATAL_ASSERT(mqtt5_client_options_properties.lifecycle_events_field_id);
1603     mqtt5_client_options_properties.topic_aliasing_options_field_id = (*env)->GetFieldID(
1604         env,
1605         mqtt5_client_options_properties.client_options_class,
1606         "topicAliasingOptions",
1607         "Lsoftware/amazon/awssdk/crt/mqtt5/TopicAliasingOptions;");
1608     AWS_FATAL_ASSERT(mqtt5_client_options_properties.topic_aliasing_options_field_id);
1609 }
1610 
1611 struct java_aws_mqtt5_topic_aliasing_options_properties mqtt5_topic_aliasing_options_properties;
s_cache_topic_aliasing_options(JNIEnv * env)1612 static void s_cache_topic_aliasing_options(JNIEnv *env) {
1613     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/TopicAliasingOptions");
1614     AWS_FATAL_ASSERT(cls);
1615     mqtt5_topic_aliasing_options_properties.mqtt5_topic_aliasing_options_class = (*env)->NewGlobalRef(env, cls);
1616     AWS_FATAL_ASSERT(mqtt5_topic_aliasing_options_properties.mqtt5_topic_aliasing_options_class);
1617 
1618     mqtt5_topic_aliasing_options_properties.outbound_behavior_field_id = (*env)->GetFieldID(
1619         env,
1620         mqtt5_topic_aliasing_options_properties.mqtt5_topic_aliasing_options_class,
1621         "outboundBehavior",
1622         "Lsoftware/amazon/awssdk/crt/mqtt5/TopicAliasingOptions$OutboundTopicAliasBehaviorType;");
1623     AWS_FATAL_ASSERT(mqtt5_topic_aliasing_options_properties.outbound_behavior_field_id);
1624 
1625     mqtt5_topic_aliasing_options_properties.outbound_cache_max_size_field_id = (*env)->GetFieldID(
1626         env,
1627         mqtt5_topic_aliasing_options_properties.mqtt5_topic_aliasing_options_class,
1628         "outboundCacheMaxSize",
1629         "Ljava/lang/Integer;");
1630     AWS_FATAL_ASSERT(mqtt5_topic_aliasing_options_properties.outbound_cache_max_size_field_id);
1631 
1632     mqtt5_topic_aliasing_options_properties.inbound_behavior_field_id = (*env)->GetFieldID(
1633         env,
1634         mqtt5_topic_aliasing_options_properties.mqtt5_topic_aliasing_options_class,
1635         "inboundBehavior",
1636         "Lsoftware/amazon/awssdk/crt/mqtt5/TopicAliasingOptions$InboundTopicAliasBehaviorType;");
1637     AWS_FATAL_ASSERT(mqtt5_topic_aliasing_options_properties.inbound_behavior_field_id);
1638 
1639     mqtt5_topic_aliasing_options_properties.inbound_cache_max_size_field_id = (*env)->GetFieldID(
1640         env,
1641         mqtt5_topic_aliasing_options_properties.mqtt5_topic_aliasing_options_class,
1642         "inboundCacheMaxSize",
1643         "Ljava/lang/Integer;");
1644     AWS_FATAL_ASSERT(mqtt5_topic_aliasing_options_properties.inbound_cache_max_size_field_id);
1645 }
1646 
1647 struct java_aws_mqtt5_client_properties mqtt5_client_properties;
1648 
s_cache_mqtt5_client_properties(JNIEnv * env)1649 static void s_cache_mqtt5_client_properties(JNIEnv *env) {
1650     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/Mqtt5Client");
1651     AWS_FATAL_ASSERT(cls);
1652     mqtt5_client_properties.client_class = (*env)->NewGlobalRef(env, cls);
1653     AWS_FATAL_ASSERT(mqtt5_client_properties.client_class);
1654     // Functions
1655     mqtt5_client_properties.client_on_websocket_handshake_id = (*env)->GetMethodID(
1656         env,
1657         mqtt5_client_properties.client_class,
1658         "onWebsocketHandshake",
1659         "(Lsoftware/amazon/awssdk/crt/http/HttpRequest;J)V");
1660     AWS_FATAL_ASSERT(mqtt5_client_properties.client_on_websocket_handshake_id);
1661 
1662     mqtt5_client_properties.client_set_is_connected =
1663         (*env)->GetMethodID(env, mqtt5_client_properties.client_class, "setIsConnected", "(Z)V");
1664     AWS_FATAL_ASSERT(mqtt5_client_properties.client_set_is_connected);
1665     // Field IDs
1666     mqtt5_client_properties.websocket_handshake_field_id = (*env)->GetFieldID(
1667         env, mqtt5_client_properties.client_class, "websocketHandshakeTransform", "Ljava/util/function/Consumer;");
1668     AWS_FATAL_ASSERT(mqtt5_client_properties.websocket_handshake_field_id);
1669 }
1670 
1671 struct java_aws_mqtt5_client_operation_statistics_properties mqtt5_client_operation_statistics_properties;
1672 
s_cache_mqtt5_client_operation_statistics_properties(JNIEnv * env)1673 static void s_cache_mqtt5_client_operation_statistics_properties(JNIEnv *env) {
1674     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/Mqtt5ClientOperationStatistics");
1675     AWS_FATAL_ASSERT(cls);
1676     mqtt5_client_operation_statistics_properties.statistics_class = (*env)->NewGlobalRef(env, cls);
1677     AWS_FATAL_ASSERT(mqtt5_client_operation_statistics_properties.statistics_class);
1678     // Functions
1679     mqtt5_client_operation_statistics_properties.statistics_constructor_id =
1680         (*env)->GetMethodID(env, mqtt5_client_operation_statistics_properties.statistics_class, "<init>", "()V");
1681     AWS_FATAL_ASSERT(mqtt5_client_operation_statistics_properties.statistics_constructor_id);
1682     // Field IDs
1683     mqtt5_client_operation_statistics_properties.incomplete_operation_count_field_id = (*env)->GetFieldID(
1684         env, mqtt5_client_operation_statistics_properties.statistics_class, "incompleteOperationCount", "J");
1685     AWS_FATAL_ASSERT(mqtt5_client_operation_statistics_properties.incomplete_operation_count_field_id);
1686     mqtt5_client_operation_statistics_properties.incomplete_operation_size_field_id = (*env)->GetFieldID(
1687         env, mqtt5_client_operation_statistics_properties.statistics_class, "incompleteOperationSize", "J");
1688     AWS_FATAL_ASSERT(mqtt5_client_operation_statistics_properties.incomplete_operation_size_field_id);
1689     mqtt5_client_operation_statistics_properties.unacked_operation_count_field_id = (*env)->GetFieldID(
1690         env, mqtt5_client_operation_statistics_properties.statistics_class, "unackedOperationCount", "J");
1691     AWS_FATAL_ASSERT(mqtt5_client_operation_statistics_properties.unacked_operation_count_field_id);
1692     mqtt5_client_operation_statistics_properties.unacked_operation_size_field_id = (*env)->GetFieldID(
1693         env, mqtt5_client_operation_statistics_properties.statistics_class, "unackedOperationSize", "J");
1694     AWS_FATAL_ASSERT(mqtt5_client_operation_statistics_properties.unacked_operation_size_field_id);
1695 }
1696 
1697 struct java_aws_mqtt5_client_session_behavior_type_properties mqtt5_client_session_behavior_properties;
1698 
s_cache_mqtt5_client_session_behavior(JNIEnv * env)1699 static void s_cache_mqtt5_client_session_behavior(JNIEnv *env) {
1700     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/Mqtt5ClientOptions$ClientSessionBehavior");
1701     AWS_FATAL_ASSERT(cls);
1702     mqtt5_client_session_behavior_properties.mqtt5_client_session_behavior_class = (*env)->NewGlobalRef(env, cls);
1703     AWS_FATAL_ASSERT(mqtt5_client_session_behavior_properties.mqtt5_client_session_behavior_class);
1704     // Functions
1705     mqtt5_client_session_behavior_properties.client_get_value_id = (*env)->GetMethodID(
1706         env, mqtt5_client_session_behavior_properties.mqtt5_client_session_behavior_class, "getValue", "()I");
1707     AWS_FATAL_ASSERT(mqtt5_client_session_behavior_properties.client_get_value_id);
1708 }
1709 
1710 struct java_aws_mqtt5_client_extended_validation_and_flow_control_options
1711     mqtt5_client_extended_validation_and_flow_control_options;
1712 
s_cache_mqtt5_client_extended_validation_and_flow_control_options(JNIEnv * env)1713 static void s_cache_mqtt5_client_extended_validation_and_flow_control_options(JNIEnv *env) {
1714     jclass cls = (*env)->FindClass(
1715         env, "software/amazon/awssdk/crt/mqtt5/Mqtt5ClientOptions$ExtendedValidationAndFlowControlOptions");
1716     AWS_FATAL_ASSERT(cls);
1717     mqtt5_client_extended_validation_and_flow_control_options
1718         .mqtt5_client_extended_validation_and_flow_control_options_class = (*env)->NewGlobalRef(env, cls);
1719     AWS_FATAL_ASSERT(mqtt5_client_extended_validation_and_flow_control_options
1720                          .mqtt5_client_extended_validation_and_flow_control_options_class);
1721     // Functions
1722     mqtt5_client_extended_validation_and_flow_control_options.client_get_value_id = (*env)->GetMethodID(
1723         env,
1724         mqtt5_client_extended_validation_and_flow_control_options
1725             .mqtt5_client_extended_validation_and_flow_control_options_class,
1726         "getValue",
1727         "()I");
1728     AWS_FATAL_ASSERT(mqtt5_client_extended_validation_and_flow_control_options.client_get_value_id);
1729 }
1730 
1731 struct java_aws_mqtt5_client_offline_queue_behavior_type_properties mqtt5_client_offline_queue_behavior_type_properties;
1732 
s_cache_mqtt5_client_offline_queue_behavior_type(JNIEnv * env)1733 static void s_cache_mqtt5_client_offline_queue_behavior_type(JNIEnv *env) {
1734     jclass cls =
1735         (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/Mqtt5ClientOptions$ClientOfflineQueueBehavior");
1736     AWS_FATAL_ASSERT(cls);
1737     mqtt5_client_offline_queue_behavior_type_properties.mqtt5_client_offline_queue_behavior_type_class =
1738         (*env)->NewGlobalRef(env, cls);
1739     AWS_FATAL_ASSERT(
1740         mqtt5_client_offline_queue_behavior_type_properties.mqtt5_client_offline_queue_behavior_type_class);
1741     // Functions
1742     mqtt5_client_offline_queue_behavior_type_properties.client_get_value_id = (*env)->GetMethodID(
1743         env,
1744         mqtt5_client_offline_queue_behavior_type_properties.mqtt5_client_offline_queue_behavior_type_class,
1745         "getValue",
1746         "()I");
1747     AWS_FATAL_ASSERT(mqtt5_client_offline_queue_behavior_type_properties.client_get_value_id);
1748 }
1749 
1750 struct java_aws_mqtt5_client_jitter_mode_properties mqtt5_client_jitter_mode_properties;
1751 
s_cache_mqtt5_client_jitter_mode(JNIEnv * env)1752 static void s_cache_mqtt5_client_jitter_mode(JNIEnv *env) {
1753     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/io/ExponentialBackoffRetryOptions$JitterMode");
1754     AWS_FATAL_ASSERT(cls);
1755     mqtt5_client_jitter_mode_properties.mqtt5_client_jitter_mode_class = (*env)->NewGlobalRef(env, cls);
1756     AWS_FATAL_ASSERT(mqtt5_client_jitter_mode_properties.mqtt5_client_jitter_mode_class);
1757     // Functions
1758     mqtt5_client_jitter_mode_properties.client_get_value_id =
1759         (*env)->GetMethodID(env, mqtt5_client_jitter_mode_properties.mqtt5_client_jitter_mode_class, "getValue", "()I");
1760     AWS_FATAL_ASSERT(mqtt5_client_jitter_mode_properties.client_get_value_id);
1761 }
1762 
1763 struct java_aws_mqtt5_outbound_topic_alias_behavior_type_properties mqtt5_outbound_topic_alias_behavior_type_properties;
1764 
s_cache_mqtt5_outbound_topic_alias_behavior_type(JNIEnv * env)1765 static void s_cache_mqtt5_outbound_topic_alias_behavior_type(JNIEnv *env) {
1766     jclass cls =
1767         (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/TopicAliasingOptions$OutboundTopicAliasBehaviorType");
1768     AWS_FATAL_ASSERT(cls);
1769     mqtt5_outbound_topic_alias_behavior_type_properties.mqtt5_outbound_topic_alias_behavior_type_class =
1770         (*env)->NewGlobalRef(env, cls);
1771     AWS_FATAL_ASSERT(
1772         mqtt5_outbound_topic_alias_behavior_type_properties.mqtt5_outbound_topic_alias_behavior_type_class);
1773     // Functions
1774     mqtt5_outbound_topic_alias_behavior_type_properties.get_value_method_id = (*env)->GetMethodID(
1775         env,
1776         mqtt5_outbound_topic_alias_behavior_type_properties.mqtt5_outbound_topic_alias_behavior_type_class,
1777         "getValue",
1778         "()I");
1779     AWS_FATAL_ASSERT(mqtt5_outbound_topic_alias_behavior_type_properties.get_value_method_id);
1780 }
1781 
1782 struct java_aws_mqtt5_inbound_topic_alias_behavior_type_properties mqtt5_inbound_topic_alias_behavior_type_properties;
1783 
s_cache_mqtt5_inbound_topic_alias_behavior_type(JNIEnv * env)1784 static void s_cache_mqtt5_inbound_topic_alias_behavior_type(JNIEnv *env) {
1785     jclass cls =
1786         (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/TopicAliasingOptions$InboundTopicAliasBehaviorType");
1787     AWS_FATAL_ASSERT(cls);
1788     mqtt5_inbound_topic_alias_behavior_type_properties.mqtt5_inbound_topic_alias_behavior_type_class =
1789         (*env)->NewGlobalRef(env, cls);
1790     AWS_FATAL_ASSERT(mqtt5_inbound_topic_alias_behavior_type_properties.mqtt5_inbound_topic_alias_behavior_type_class);
1791     // Functions
1792     mqtt5_inbound_topic_alias_behavior_type_properties.get_value_method_id = (*env)->GetMethodID(
1793         env,
1794         mqtt5_inbound_topic_alias_behavior_type_properties.mqtt5_inbound_topic_alias_behavior_type_class,
1795         "getValue",
1796         "()I");
1797     AWS_FATAL_ASSERT(mqtt5_inbound_topic_alias_behavior_type_properties.get_value_method_id);
1798 }
1799 
1800 struct java_aws_mqtt5_subscribe_packet_properties mqtt5_subscribe_packet_properties;
1801 
s_cache_mqtt5_subscribe_packet(JNIEnv * env)1802 static void s_cache_mqtt5_subscribe_packet(JNIEnv *env) {
1803     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/packets/SubscribePacket");
1804     AWS_FATAL_ASSERT(cls);
1805     mqtt5_subscribe_packet_properties.subscribe_packet_class = (*env)->NewGlobalRef(env, cls);
1806     AWS_FATAL_ASSERT(mqtt5_subscribe_packet_properties.subscribe_packet_class);
1807     // Functions
1808     mqtt5_subscribe_packet_properties.subscribe_subscriptions_field_id = (*env)->GetFieldID(
1809         env, mqtt5_subscribe_packet_properties.subscribe_packet_class, "subscriptions", "Ljava/util/List;");
1810     AWS_FATAL_ASSERT(mqtt5_subscribe_packet_properties.subscribe_subscriptions_field_id);
1811     mqtt5_subscribe_packet_properties.subscribe_subscription_identifier_field_id = (*env)->GetFieldID(
1812         env, mqtt5_subscribe_packet_properties.subscribe_packet_class, "subscriptionIdentifier", "Ljava/lang/Long;");
1813     AWS_FATAL_ASSERT(mqtt5_subscribe_packet_properties.subscribe_subscription_identifier_field_id);
1814     mqtt5_subscribe_packet_properties.subscribe_user_properties_field_id = (*env)->GetFieldID(
1815         env, mqtt5_subscribe_packet_properties.subscribe_packet_class, "userProperties", "Ljava/util/List;");
1816     AWS_FATAL_ASSERT(mqtt5_subscribe_packet_properties.subscribe_user_properties_field_id);
1817 }
1818 
1819 struct java_aws_mqtt5_subscription_properties mqtt5_subscription_properties;
1820 
s_cache_mqtt5_subscribe_subscription(JNIEnv * env)1821 static void s_cache_mqtt5_subscribe_subscription(JNIEnv *env) {
1822     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/packets/SubscribePacket$Subscription");
1823     AWS_FATAL_ASSERT(cls);
1824     mqtt5_subscription_properties.subscribe_subscription_class = (*env)->NewGlobalRef(env, cls);
1825     AWS_FATAL_ASSERT(mqtt5_subscription_properties.subscribe_subscription_class);
1826 
1827     // Field IDs
1828     mqtt5_subscription_properties.subscribe_no_local_field_id = (*env)->GetFieldID(
1829         env, mqtt5_subscription_properties.subscribe_subscription_class, "noLocal", "Ljava/lang/Boolean;");
1830     AWS_FATAL_ASSERT(mqtt5_subscription_properties.subscribe_no_local_field_id);
1831     mqtt5_subscription_properties.subscribe_retain_as_published_field_id = (*env)->GetFieldID(
1832         env, mqtt5_subscription_properties.subscribe_subscription_class, "retainAsPublished", "Ljava/lang/Boolean;");
1833     AWS_FATAL_ASSERT(mqtt5_subscription_properties.subscribe_retain_as_published_field_id);
1834     // Functions
1835     mqtt5_subscription_properties.subscribe_get_topic_filter_id = (*env)->GetMethodID(
1836         env, mqtt5_subscription_properties.subscribe_subscription_class, "getTopicFilter", "()Ljava/lang/String;");
1837     AWS_FATAL_ASSERT(mqtt5_subscription_properties.subscribe_get_topic_filter_id);
1838     mqtt5_subscription_properties.subscribe_get_qos_id = (*env)->GetMethodID(
1839         env,
1840         mqtt5_subscription_properties.subscribe_subscription_class,
1841         "getQOS",
1842         "()Lsoftware/amazon/awssdk/crt/mqtt5/QOS;");
1843     AWS_FATAL_ASSERT(mqtt5_subscription_properties.subscribe_get_qos_id);
1844     mqtt5_subscription_properties.subscribe_get_no_local_id = (*env)->GetMethodID(
1845         env, mqtt5_subscription_properties.subscribe_subscription_class, "getNoLocal", "()Ljava/lang/Boolean;");
1846     AWS_FATAL_ASSERT(mqtt5_subscription_properties.subscribe_get_no_local_id);
1847     mqtt5_subscription_properties.subscribe_get_retain_as_published_id = (*env)->GetMethodID(
1848         env,
1849         mqtt5_subscription_properties.subscribe_subscription_class,
1850         "getRetainAsPublished",
1851         "()Ljava/lang/Boolean;");
1852     AWS_FATAL_ASSERT(mqtt5_subscription_properties.subscribe_get_retain_as_published_id);
1853     mqtt5_subscription_properties.subscribe_get_retain_handling_type_id = (*env)->GetMethodID(
1854         env,
1855         mqtt5_subscription_properties.subscribe_subscription_class,
1856         "getRetainHandlingType",
1857         "()Lsoftware/amazon/awssdk/crt/mqtt5/packets/SubscribePacket$RetainHandlingType;");
1858     AWS_FATAL_ASSERT(mqtt5_subscription_properties.subscribe_get_retain_handling_type_id);
1859 }
1860 
1861 struct java_aws_mqtt5_packet_qos_properties mqtt5_packet_qos_properties;
1862 
s_cache_mqtt5_packet_qos(JNIEnv * env)1863 static void s_cache_mqtt5_packet_qos(JNIEnv *env) {
1864     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/QOS");
1865     AWS_FATAL_ASSERT(cls);
1866     mqtt5_packet_qos_properties.packet_qos_class = (*env)->NewGlobalRef(env, cls);
1867     AWS_FATAL_ASSERT(mqtt5_packet_qos_properties.packet_qos_class);
1868     // Functions
1869     mqtt5_packet_qos_properties.qos_get_value_id =
1870         (*env)->GetMethodID(env, mqtt5_packet_qos_properties.packet_qos_class, "getValue", "()I");
1871     AWS_FATAL_ASSERT(mqtt5_packet_qos_properties.qos_get_value_id);
1872     // Static functions
1873     mqtt5_packet_qos_properties.qos_s_get_enum_value_from_integer_id = (*env)->GetStaticMethodID(
1874         env,
1875         mqtt5_packet_qos_properties.packet_qos_class,
1876         "getEnumValueFromInteger",
1877         "(I)Lsoftware/amazon/awssdk/crt/mqtt5/QOS;");
1878     AWS_FATAL_ASSERT(mqtt5_packet_qos_properties.qos_s_get_enum_value_from_integer_id);
1879 }
1880 
1881 struct java_aws_mqtt5_retain_handling_type_properties mqtt5_retain_handling_type_properties;
1882 
s_cache_mqtt5_retain_handling_type(JNIEnv * env)1883 static void s_cache_mqtt5_retain_handling_type(JNIEnv *env) {
1884     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/packets/SubscribePacket$RetainHandlingType");
1885     AWS_FATAL_ASSERT(cls);
1886     mqtt5_retain_handling_type_properties.retain_handling_type_class = (*env)->NewGlobalRef(env, cls);
1887     AWS_FATAL_ASSERT(mqtt5_retain_handling_type_properties.retain_handling_type_class);
1888     // Functions
1889     mqtt5_retain_handling_type_properties.retain_get_value_id =
1890         (*env)->GetMethodID(env, mqtt5_retain_handling_type_properties.retain_handling_type_class, "getValue", "()I");
1891     AWS_FATAL_ASSERT(mqtt5_retain_handling_type_properties.retain_get_value_id);
1892 }
1893 
1894 struct java_aws_mqtt5_suback_reason_code_properties mqtt5_suback_reason_code_properties;
1895 
s_cache_mqtt5_suback_reason_code(JNIEnv * env)1896 static void s_cache_mqtt5_suback_reason_code(JNIEnv *env) {
1897     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/packets/SubAckPacket$SubAckReasonCode");
1898     AWS_FATAL_ASSERT(cls);
1899     mqtt5_suback_reason_code_properties.reason_code_class = (*env)->NewGlobalRef(env, cls);
1900     AWS_FATAL_ASSERT(mqtt5_suback_reason_code_properties.reason_code_class);
1901     // Functions
1902     mqtt5_suback_reason_code_properties.reason_get_value_id =
1903         (*env)->GetMethodID(env, mqtt5_suback_reason_code_properties.reason_code_class, "getValue", "()I");
1904     AWS_FATAL_ASSERT(mqtt5_suback_reason_code_properties.reason_get_value_id);
1905     // Static functions
1906     mqtt5_suback_reason_code_properties.reason_s_get_enum_value_from_integer_id = (*env)->GetStaticMethodID(
1907         env,
1908         mqtt5_suback_reason_code_properties.reason_code_class,
1909         "getEnumValueFromInteger",
1910         "(I)Lsoftware/amazon/awssdk/crt/mqtt5/packets/SubAckPacket$SubAckReasonCode;");
1911     AWS_FATAL_ASSERT(mqtt5_suback_reason_code_properties.reason_s_get_enum_value_from_integer_id);
1912 }
1913 
1914 struct java_aws_mqtt5_packet_suback_properties mqtt5_suback_packet_properties;
1915 
s_cache_mqtt5_suback_packet(JNIEnv * env)1916 static void s_cache_mqtt5_suback_packet(JNIEnv *env) {
1917     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/packets/SubAckPacket");
1918     AWS_FATAL_ASSERT(cls);
1919     mqtt5_suback_packet_properties.suback_packet_class = (*env)->NewGlobalRef(env, cls);
1920     AWS_FATAL_ASSERT(mqtt5_suback_packet_properties.suback_packet_class);
1921     // Functions
1922     mqtt5_suback_packet_properties.suback_constructor_id =
1923         (*env)->GetMethodID(env, mqtt5_suback_packet_properties.suback_packet_class, "<init>", "()V");
1924     AWS_FATAL_ASSERT(mqtt5_suback_packet_properties.suback_constructor_id);
1925 
1926     mqtt5_suback_packet_properties.suback_native_add_suback_code_id =
1927         (*env)->GetMethodID(env, mqtt5_suback_packet_properties.suback_packet_class, "nativeAddSubackCode", "(I)V");
1928     AWS_FATAL_ASSERT(mqtt5_suback_packet_properties.suback_native_add_suback_code_id);
1929     // Field IDs
1930     mqtt5_suback_packet_properties.suback_reason_string_field_id = (*env)->GetFieldID(
1931         env, mqtt5_suback_packet_properties.suback_packet_class, "reasonString", "Ljava/lang/String;");
1932     AWS_FATAL_ASSERT(mqtt5_suback_packet_properties.suback_reason_string_field_id);
1933     mqtt5_suback_packet_properties.suback_reason_codes_field_id =
1934         (*env)->GetFieldID(env, mqtt5_suback_packet_properties.suback_packet_class, "reasonCodes", "Ljava/util/List;");
1935     AWS_FATAL_ASSERT(mqtt5_suback_packet_properties.suback_reason_codes_field_id);
1936     mqtt5_suback_packet_properties.suback_user_properties_field_id = (*env)->GetFieldID(
1937         env, mqtt5_suback_packet_properties.suback_packet_class, "userProperties", "Ljava/util/List;");
1938     AWS_FATAL_ASSERT(mqtt5_suback_packet_properties.suback_user_properties_field_id);
1939 }
1940 
1941 struct java_aws_mqtt5_packet_unsubscribe_properties mqtt5_unsubscribe_packet_properties;
1942 
s_cache_mqtt5_unsubscribe_packet(JNIEnv * env)1943 static void s_cache_mqtt5_unsubscribe_packet(JNIEnv *env) {
1944     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/packets/UnsubscribePacket");
1945     AWS_FATAL_ASSERT(cls);
1946     mqtt5_unsubscribe_packet_properties.unsubscribe_packet_class = (*env)->NewGlobalRef(env, cls);
1947     AWS_FATAL_ASSERT(mqtt5_unsubscribe_packet_properties.unsubscribe_packet_class);
1948     // Field IDs
1949     mqtt5_unsubscribe_packet_properties.unsubscribe_subscriptions_field_id = (*env)->GetFieldID(
1950         env, mqtt5_unsubscribe_packet_properties.unsubscribe_packet_class, "subscriptions", "Ljava/util/List;");
1951     AWS_FATAL_ASSERT(mqtt5_unsubscribe_packet_properties.unsubscribe_subscriptions_field_id);
1952     mqtt5_unsubscribe_packet_properties.unsubscribe_user_properties_field_id = (*env)->GetFieldID(
1953         env, mqtt5_unsubscribe_packet_properties.unsubscribe_packet_class, "userProperties", "Ljava/util/List;");
1954     AWS_FATAL_ASSERT(mqtt5_unsubscribe_packet_properties.unsubscribe_user_properties_field_id);
1955 }
1956 
1957 struct java_aws_mqtt5_packet_unsuback_properties mqtt5_unsuback_packet_properties;
1958 
s_cache_mqtt5_unsuback_packet(JNIEnv * env)1959 static void s_cache_mqtt5_unsuback_packet(JNIEnv *env) {
1960     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/packets/UnsubAckPacket");
1961     AWS_FATAL_ASSERT(cls);
1962     mqtt5_unsuback_packet_properties.unsuback_packet_class = (*env)->NewGlobalRef(env, cls);
1963     AWS_FATAL_ASSERT(mqtt5_unsuback_packet_properties.unsuback_packet_class);
1964     // Functions
1965     mqtt5_unsuback_packet_properties.unsuback_constructor_id =
1966         (*env)->GetMethodID(env, mqtt5_unsuback_packet_properties.unsuback_packet_class, "<init>", "()V");
1967     AWS_FATAL_ASSERT(mqtt5_unsuback_packet_properties.unsuback_constructor_id);
1968 
1969     mqtt5_unsuback_packet_properties.unsuback_native_add_unsuback_code_id = (*env)->GetMethodID(
1970         env, mqtt5_unsuback_packet_properties.unsuback_packet_class, "nativeAddUnsubackCode", "(I)V");
1971     AWS_FATAL_ASSERT(mqtt5_unsuback_packet_properties.unsuback_native_add_unsuback_code_id);
1972     // Field IDs
1973     mqtt5_unsuback_packet_properties.unsuback_reason_string_field_id = (*env)->GetFieldID(
1974         env, mqtt5_unsuback_packet_properties.unsuback_packet_class, "reasonString", "Ljava/lang/String;");
1975     AWS_FATAL_ASSERT(mqtt5_unsuback_packet_properties.unsuback_reason_string_field_id);
1976     mqtt5_unsuback_packet_properties.unsuback_reason_codes_field_id = (*env)->GetFieldID(
1977         env, mqtt5_unsuback_packet_properties.unsuback_packet_class, "reasonCodes", "Ljava/util/List;");
1978     AWS_FATAL_ASSERT(mqtt5_unsuback_packet_properties.unsuback_reason_codes_field_id);
1979     mqtt5_unsuback_packet_properties.unsuback_user_properties_field_id = (*env)->GetFieldID(
1980         env, mqtt5_unsuback_packet_properties.unsuback_packet_class, "userProperties", "Ljava/util/List;");
1981     AWS_FATAL_ASSERT(mqtt5_unsuback_packet_properties.unsuback_user_properties_field_id);
1982 }
1983 
1984 struct java_aws_mqtt5_unsuback_reason_code_properties mqtt5_unsuback_reason_code_properties;
1985 
s_cache_mqtt5_unsuback_reason_code(JNIEnv * env)1986 static void s_cache_mqtt5_unsuback_reason_code(JNIEnv *env) {
1987     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/packets/UnsubAckPacket$UnsubAckReasonCode");
1988     AWS_FATAL_ASSERT(cls);
1989     mqtt5_unsuback_reason_code_properties.reason_code_class = (*env)->NewGlobalRef(env, cls);
1990     AWS_FATAL_ASSERT(mqtt5_unsuback_reason_code_properties.reason_code_class);
1991     // Functions
1992     mqtt5_unsuback_reason_code_properties.reason_get_value_id =
1993         (*env)->GetMethodID(env, mqtt5_unsuback_reason_code_properties.reason_code_class, "getValue", "()I");
1994     AWS_FATAL_ASSERT(mqtt5_unsuback_reason_code_properties.reason_get_value_id);
1995     // Static functions
1996     mqtt5_unsuback_reason_code_properties.reason_s_get_enum_value_from_integer_id = (*env)->GetStaticMethodID(
1997         env,
1998         mqtt5_unsuback_reason_code_properties.reason_code_class,
1999         "getEnumValueFromInteger",
2000         "(I)Lsoftware/amazon/awssdk/crt/mqtt5/packets/UnsubAckPacket$UnsubAckReasonCode;");
2001     AWS_FATAL_ASSERT(mqtt5_unsuback_reason_code_properties.reason_s_get_enum_value_from_integer_id);
2002 }
2003 
2004 struct java_aws_mqtt5_user_property_properties mqtt5_user_property_properties;
2005 
s_cache_mqtt5_user_property(JNIEnv * env)2006 static void s_cache_mqtt5_user_property(JNIEnv *env) {
2007     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/packets/UserProperty");
2008     AWS_FATAL_ASSERT(cls);
2009     mqtt5_user_property_properties.user_property_class = (*env)->NewGlobalRef(env, cls);
2010     AWS_FATAL_ASSERT(mqtt5_user_property_properties.user_property_class);
2011     // Functions
2012     mqtt5_user_property_properties.property_constructor_id = (*env)->GetMethodID(
2013         env, mqtt5_user_property_properties.user_property_class, "<init>", "(Ljava/lang/String;Ljava/lang/String;)V");
2014     AWS_FATAL_ASSERT(mqtt5_user_property_properties.property_constructor_id);
2015     // Field IDs
2016     mqtt5_user_property_properties.property_key_id =
2017         (*env)->GetFieldID(env, mqtt5_user_property_properties.user_property_class, "key", "Ljava/lang/String;");
2018     AWS_FATAL_ASSERT(mqtt5_user_property_properties.property_key_id);
2019     mqtt5_user_property_properties.property_value_id =
2020         (*env)->GetFieldID(env, mqtt5_user_property_properties.user_property_class, "value", "Ljava/lang/String;");
2021     AWS_FATAL_ASSERT(mqtt5_user_property_properties.property_value_id);
2022 }
2023 
2024 struct java_aws_mqtt5_publish_events mqtt5_publish_events_properties;
2025 
s_cache_mqtt5_publish_events_properties(JNIEnv * env)2026 static void s_cache_mqtt5_publish_events_properties(JNIEnv *env) {
2027     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/Mqtt5ClientOptions$PublishEvents");
2028     AWS_FATAL_ASSERT(cls);
2029     mqtt5_publish_events_properties.publish_events_class = (*env)->NewGlobalRef(env, cls);
2030     AWS_FATAL_ASSERT(mqtt5_publish_events_properties.publish_events_class);
2031     // Functions
2032     mqtt5_publish_events_properties.publish_events_publish_received_id = (*env)->GetMethodID(
2033         env,
2034         mqtt5_publish_events_properties.publish_events_class,
2035         "onMessageReceived",
2036         "(Lsoftware/amazon/awssdk/crt/mqtt5/Mqtt5Client;Lsoftware/amazon/awssdk/crt/mqtt5/PublishReturn;)V");
2037     AWS_FATAL_ASSERT(mqtt5_publish_events_properties.publish_events_publish_received_id);
2038 }
2039 
2040 struct java_aws_mqtt5_lifecycle_events mqtt5_lifecycle_events_properties;
2041 
s_cache_mqtt5_lifecycle_events_properties(JNIEnv * env)2042 static void s_cache_mqtt5_lifecycle_events_properties(JNIEnv *env) {
2043     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/Mqtt5ClientOptions$LifecycleEvents");
2044     AWS_FATAL_ASSERT(cls);
2045     mqtt5_lifecycle_events_properties.lifecycle_events_class = (*env)->NewGlobalRef(env, cls);
2046     AWS_FATAL_ASSERT(mqtt5_lifecycle_events_properties.lifecycle_events_class);
2047     // Functions
2048     mqtt5_lifecycle_events_properties.lifecycle_attempting_connect_id = (*env)->GetMethodID(
2049         env,
2050         mqtt5_lifecycle_events_properties.lifecycle_events_class,
2051         "onAttemptingConnect",
2052         "(Lsoftware/amazon/awssdk/crt/mqtt5/Mqtt5Client;Lsoftware/amazon/awssdk/crt/mqtt5/"
2053         "OnAttemptingConnectReturn;)V");
2054     AWS_FATAL_ASSERT(mqtt5_lifecycle_events_properties.lifecycle_attempting_connect_id);
2055     mqtt5_lifecycle_events_properties.lifecycle_connection_success_id = (*env)->GetMethodID(
2056         env,
2057         mqtt5_lifecycle_events_properties.lifecycle_events_class,
2058         "onConnectionSuccess",
2059         "(Lsoftware/amazon/awssdk/crt/mqtt5/Mqtt5Client;Lsoftware/amazon/awssdk/crt/mqtt5/"
2060         "OnConnectionSuccessReturn;)V");
2061     AWS_FATAL_ASSERT(mqtt5_lifecycle_events_properties.lifecycle_connection_success_id);
2062     mqtt5_lifecycle_events_properties.lifecycle_connection_failure_id = (*env)->GetMethodID(
2063         env,
2064         mqtt5_lifecycle_events_properties.lifecycle_events_class,
2065         "onConnectionFailure",
2066         "(Lsoftware/amazon/awssdk/crt/mqtt5/Mqtt5Client;Lsoftware/amazon/awssdk/crt/mqtt5/"
2067         "OnConnectionFailureReturn;)V");
2068     AWS_FATAL_ASSERT(mqtt5_lifecycle_events_properties.lifecycle_connection_failure_id);
2069     mqtt5_lifecycle_events_properties.lifecycle_disconnection_id = (*env)->GetMethodID(
2070         env,
2071         mqtt5_lifecycle_events_properties.lifecycle_events_class,
2072         "onDisconnection",
2073         "(Lsoftware/amazon/awssdk/crt/mqtt5/Mqtt5Client;Lsoftware/amazon/awssdk/crt/mqtt5/OnDisconnectionReturn;)V");
2074     AWS_FATAL_ASSERT(mqtt5_lifecycle_events_properties.lifecycle_disconnection_id);
2075     mqtt5_lifecycle_events_properties.lifecycle_stopped_id = (*env)->GetMethodID(
2076         env,
2077         mqtt5_lifecycle_events_properties.lifecycle_events_class,
2078         "onStopped",
2079         "(Lsoftware/amazon/awssdk/crt/mqtt5/Mqtt5Client;Lsoftware/amazon/awssdk/crt/mqtt5/OnStoppedReturn;)V");
2080     AWS_FATAL_ASSERT(mqtt5_lifecycle_events_properties.lifecycle_stopped_id);
2081 }
2082 
2083 struct java_aws_mqtt5_publish_result_properties mqtt5_publish_result_properties;
2084 
s_cache_mqtt5_puback_result(JNIEnv * env)2085 static void s_cache_mqtt5_puback_result(JNIEnv *env) {
2086     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/PublishResult");
2087     AWS_FATAL_ASSERT(cls);
2088     mqtt5_publish_result_properties.result_class = (*env)->NewGlobalRef(env, cls);
2089     AWS_FATAL_ASSERT(mqtt5_publish_result_properties.result_class);
2090     // Functions
2091     mqtt5_publish_result_properties.result_constructor_id =
2092         (*env)->GetMethodID(env, mqtt5_publish_result_properties.result_class, "<init>", "()V");
2093     AWS_FATAL_ASSERT(mqtt5_publish_result_properties.result_constructor_id);
2094     mqtt5_publish_result_properties.result_puback_constructor_id = (*env)->GetMethodID(
2095         env,
2096         mqtt5_publish_result_properties.result_class,
2097         "<init>",
2098         "(Lsoftware/amazon/awssdk/crt/mqtt5/packets/PubAckPacket;)V");
2099     AWS_FATAL_ASSERT(mqtt5_publish_result_properties.result_puback_constructor_id);
2100 }
2101 
2102 struct java_aws_mqtt5_publish_return_properties mqtt5_publish_return_properties;
2103 
s_cache_mqtt5_publish_return(JNIEnv * env)2104 static void s_cache_mqtt5_publish_return(JNIEnv *env) {
2105     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/PublishReturn");
2106     AWS_FATAL_ASSERT(cls);
2107     mqtt5_publish_return_properties.return_class = (*env)->NewGlobalRef(env, cls);
2108     AWS_FATAL_ASSERT(mqtt5_publish_return_properties.return_class);
2109     // Functions
2110     mqtt5_publish_return_properties.return_constructor_id = (*env)->GetMethodID(
2111         env,
2112         mqtt5_publish_return_properties.return_class,
2113         "<init>",
2114         "(Lsoftware/amazon/awssdk/crt/mqtt5/packets/PublishPacket;)V");
2115     AWS_FATAL_ASSERT(mqtt5_publish_return_properties.return_constructor_id);
2116 }
2117 
2118 struct java_aws_mqtt5_on_stopped_return_properties mqtt5_on_stopped_return_properties;
2119 
s_cache_mqtt5_on_stopped_return(JNIEnv * env)2120 static void s_cache_mqtt5_on_stopped_return(JNIEnv *env) {
2121     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/OnStoppedReturn");
2122     AWS_FATAL_ASSERT(cls);
2123     mqtt5_on_stopped_return_properties.return_class = (*env)->NewGlobalRef(env, cls);
2124     AWS_FATAL_ASSERT(mqtt5_on_stopped_return_properties.return_class);
2125     // Functions
2126     mqtt5_on_stopped_return_properties.return_constructor_id =
2127         (*env)->GetMethodID(env, mqtt5_on_stopped_return_properties.return_class, "<init>", "()V");
2128     AWS_FATAL_ASSERT(mqtt5_on_stopped_return_properties.return_constructor_id);
2129 }
2130 
2131 struct java_aws_mqtt5_on_attempting_connect_return_properties mqtt5_on_attempting_connect_return_properties;
2132 
s_cache_mqtt5_on_attempting_connect_return(JNIEnv * env)2133 static void s_cache_mqtt5_on_attempting_connect_return(JNIEnv *env) {
2134     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/OnAttemptingConnectReturn");
2135     AWS_FATAL_ASSERT(cls);
2136     mqtt5_on_attempting_connect_return_properties.return_class = (*env)->NewGlobalRef(env, cls);
2137     AWS_FATAL_ASSERT(mqtt5_on_attempting_connect_return_properties.return_class);
2138     // Functions
2139     mqtt5_on_attempting_connect_return_properties.return_constructor_id =
2140         (*env)->GetMethodID(env, mqtt5_on_attempting_connect_return_properties.return_class, "<init>", "()V");
2141     AWS_FATAL_ASSERT(mqtt5_on_attempting_connect_return_properties.return_constructor_id);
2142 }
2143 
2144 struct java_aws_mqtt5_on_connection_success_return_properties mqtt5_on_connection_success_return_properties;
2145 
s_cache_mqtt5_on_connection_success_return(JNIEnv * env)2146 static void s_cache_mqtt5_on_connection_success_return(JNIEnv *env) {
2147     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/OnConnectionSuccessReturn");
2148     AWS_FATAL_ASSERT(cls);
2149     mqtt5_on_connection_success_return_properties.return_class = (*env)->NewGlobalRef(env, cls);
2150     AWS_FATAL_ASSERT(mqtt5_on_connection_success_return_properties.return_class);
2151     // Functions
2152     mqtt5_on_connection_success_return_properties.return_constructor_id = (*env)->GetMethodID(
2153         env,
2154         mqtt5_on_connection_success_return_properties.return_class,
2155         "<init>",
2156         "(Lsoftware/amazon/awssdk/crt/mqtt5/packets/ConnAckPacket;Lsoftware/amazon/awssdk/crt/mqtt5/"
2157         "NegotiatedSettings;)V");
2158     AWS_FATAL_ASSERT(mqtt5_on_connection_success_return_properties.return_constructor_id);
2159 }
2160 
2161 struct java_aws_mqtt5_on_connection_failure_return_properties mqtt5_on_connection_failure_return_properties;
2162 
s_cache_mqtt5_on_connection_failure_return(JNIEnv * env)2163 static void s_cache_mqtt5_on_connection_failure_return(JNIEnv *env) {
2164     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/OnConnectionFailureReturn");
2165     AWS_FATAL_ASSERT(cls);
2166     mqtt5_on_connection_failure_return_properties.return_class = (*env)->NewGlobalRef(env, cls);
2167     AWS_FATAL_ASSERT(mqtt5_on_connection_failure_return_properties.return_class);
2168     // Functions
2169     mqtt5_on_connection_failure_return_properties.return_constructor_id = (*env)->GetMethodID(
2170         env,
2171         mqtt5_on_connection_failure_return_properties.return_class,
2172         "<init>",
2173         "(ILsoftware/amazon/awssdk/crt/mqtt5/packets/ConnAckPacket;)V");
2174     AWS_FATAL_ASSERT(mqtt5_on_connection_failure_return_properties.return_constructor_id);
2175 }
2176 
2177 struct java_aws_mqtt5_on_disconnection_return_properties mqtt5_on_disconnection_return_properties;
2178 
s_cache_mqtt5_on_disconnection_return(JNIEnv * env)2179 static void s_cache_mqtt5_on_disconnection_return(JNIEnv *env) {
2180     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/mqtt5/OnDisconnectionReturn");
2181     AWS_FATAL_ASSERT(cls);
2182     mqtt5_on_disconnection_return_properties.return_class = (*env)->NewGlobalRef(env, cls);
2183     AWS_FATAL_ASSERT(mqtt5_on_disconnection_return_properties.return_class);
2184     // Functions
2185     mqtt5_on_disconnection_return_properties.return_constructor_id = (*env)->GetMethodID(
2186         env,
2187         mqtt5_on_disconnection_return_properties.return_class,
2188         "<init>",
2189         "(ILsoftware/amazon/awssdk/crt/mqtt5/packets/DisconnectPacket;)V");
2190     AWS_FATAL_ASSERT(mqtt5_on_disconnection_return_properties.return_constructor_id);
2191 }
2192 
2193 struct java_boxed_integer_properties boxed_integer_properties;
2194 
s_cache_boxed_integer(JNIEnv * env)2195 static void s_cache_boxed_integer(JNIEnv *env) {
2196     jclass cls = (*env)->FindClass(env, "java/lang/Integer");
2197     AWS_FATAL_ASSERT(cls);
2198     boxed_integer_properties.integer_class = (*env)->NewGlobalRef(env, cls);
2199     AWS_FATAL_ASSERT(boxed_integer_properties.integer_class);
2200     // functions
2201     boxed_integer_properties.integer_constructor_id =
2202         (*env)->GetMethodID(env, boxed_integer_properties.integer_class, "<init>", "(I)V");
2203     AWS_FATAL_ASSERT(boxed_integer_properties.integer_constructor_id);
2204     boxed_integer_properties.integer_get_value_id =
2205         (*env)->GetMethodID(env, boxed_integer_properties.integer_class, "intValue", "()I");
2206     AWS_FATAL_ASSERT(boxed_integer_properties.integer_get_value_id);
2207 }
2208 
2209 struct java_boxed_boolean_properties boxed_boolean_properties;
2210 
s_cache_boxed_boolean(JNIEnv * env)2211 static void s_cache_boxed_boolean(JNIEnv *env) {
2212     jclass cls = (*env)->FindClass(env, "java/lang/Boolean");
2213     AWS_FATAL_ASSERT(cls);
2214     boxed_boolean_properties.boolean_class = (*env)->NewGlobalRef(env, cls);
2215     AWS_FATAL_ASSERT(boxed_boolean_properties.boolean_class);
2216     // functions
2217     boxed_boolean_properties.boolean_constructor_id =
2218         (*env)->GetMethodID(env, boxed_boolean_properties.boolean_class, "<init>", "(Z)V");
2219     AWS_FATAL_ASSERT(boxed_boolean_properties.boolean_constructor_id);
2220     boxed_boolean_properties.boolean_get_value_id =
2221         (*env)->GetMethodID(env, boxed_boolean_properties.boolean_class, "booleanValue", "()Z");
2222     AWS_FATAL_ASSERT(boxed_boolean_properties.boolean_get_value_id);
2223 }
2224 
2225 struct java_boxed_list_properties boxed_list_properties;
2226 
s_cache_boxed_list(JNIEnv * env)2227 static void s_cache_boxed_list(JNIEnv *env) {
2228     jclass cls = (*env)->FindClass(env, "java/util/List");
2229     AWS_FATAL_ASSERT(cls);
2230     boxed_list_properties.list_class = (*env)->NewGlobalRef(env, cls);
2231     AWS_FATAL_ASSERT(boxed_list_properties.list_class);
2232     // functions
2233     boxed_list_properties.list_size_id = (*env)->GetMethodID(env, boxed_list_properties.list_class, "size", "()I");
2234     AWS_FATAL_ASSERT(boxed_list_properties.list_size_id);
2235     boxed_list_properties.list_get_id =
2236         (*env)->GetMethodID(env, boxed_list_properties.list_class, "get", "(I)Ljava/lang/Object;");
2237     AWS_FATAL_ASSERT(boxed_list_properties.list_get_id);
2238     boxed_list_properties.list_add_id =
2239         (*env)->GetMethodID(env, boxed_list_properties.list_class, "add", "(Ljava/lang/Object;)Z");
2240     AWS_FATAL_ASSERT(boxed_list_properties.list_add_id);
2241 }
2242 
2243 struct java_boxed_array_list_properties boxed_array_list_properties;
2244 
s_cache_boxed_array_list(JNIEnv * env)2245 static void s_cache_boxed_array_list(JNIEnv *env) {
2246     jclass cls = (*env)->FindClass(env, "java/util/ArrayList");
2247     AWS_FATAL_ASSERT(cls);
2248     boxed_array_list_properties.list_class = (*env)->NewGlobalRef(env, cls);
2249     AWS_FATAL_ASSERT(boxed_array_list_properties.list_class);
2250     // functions
2251     boxed_array_list_properties.list_constructor_id =
2252         (*env)->GetMethodID(env, boxed_array_list_properties.list_class, "<init>", "()V");
2253     AWS_FATAL_ASSERT(boxed_array_list_properties.list_constructor_id);
2254 }
2255 
2256 struct java_s3express_credentials_provider_factory_properties s3express_credentials_provider_factory_properties;
2257 
s_cache_s3express_credentials_provider_factory_properties(JNIEnv * env)2258 static void s_cache_s3express_credentials_provider_factory_properties(JNIEnv *env) {
2259     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/s3/S3ExpressCredentialsProviderFactory");
2260     AWS_FATAL_ASSERT(cls);
2261 
2262     s3express_credentials_provider_factory_properties.createS3ExpressCredentialsProvider = (*env)->GetMethodID(
2263         env,
2264         cls,
2265         "createS3ExpressCredentialsProvider",
2266         "(Lsoftware/amazon/awssdk/crt/s3/S3Client;)Lsoftware/amazon/awssdk/crt/s3/S3ExpressCredentialsProvider;");
2267     AWS_FATAL_ASSERT(s3express_credentials_provider_factory_properties.createS3ExpressCredentialsProvider);
2268 }
2269 
2270 struct java_s3express_credentials_properties_properties s3express_credentials_properties_properties;
2271 
s_cache_s3express_credentials_properties_properties(JNIEnv * env)2272 static void s_cache_s3express_credentials_properties_properties(JNIEnv *env) {
2273     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/s3/S3ExpressCredentialsProperties");
2274     AWS_FATAL_ASSERT(cls);
2275     s3express_credentials_properties_properties.s3express_credentials_properties_class = (*env)->NewGlobalRef(env, cls);
2276 
2277     s3express_credentials_properties_properties.constructor_method_id = (*env)->GetMethodID(
2278         env, s3express_credentials_properties_properties.s3express_credentials_properties_class, "<init>", "()V");
2279 
2280     s3express_credentials_properties_properties.host_field_id =
2281         (*env)->GetFieldID(env, cls, "hostValue", "Ljava/lang/String;");
2282     AWS_FATAL_ASSERT(s3express_credentials_properties_properties.host_field_id);
2283 
2284     s3express_credentials_properties_properties.region_field_id =
2285         (*env)->GetFieldID(env, cls, "region", "Ljava/lang/String;");
2286     AWS_FATAL_ASSERT(s3express_credentials_properties_properties.region_field_id);
2287 }
2288 
2289 struct java_s3express_credentials_provider_properties s3express_credentials_provider_properties;
2290 
s_cache_s3express_credentials_provider_properties(JNIEnv * env)2291 static void s_cache_s3express_credentials_provider_properties(JNIEnv *env) {
2292     jclass cls = (*env)->FindClass(env, "software/amazon/awssdk/crt/s3/S3ExpressCredentialsProvider");
2293     AWS_FATAL_ASSERT(cls);
2294 
2295     s3express_credentials_provider_properties.getS3ExpressCredentials = (*env)->GetMethodID(
2296         env,
2297         cls,
2298         "getS3ExpressCredentials",
2299         "(Lsoftware/amazon/awssdk/crt/s3/S3ExpressCredentialsProperties;Lsoftware/amazon/awssdk/crt/auth/credentials/"
2300         "Credentials;J)V");
2301     AWS_FATAL_ASSERT(s3express_credentials_provider_properties.getS3ExpressCredentials);
2302 
2303     s3express_credentials_provider_properties.destroyProvider = (*env)->GetMethodID(env, cls, "destroyProvider", "()V");
2304     AWS_FATAL_ASSERT(s3express_credentials_provider_properties.destroyProvider);
2305 }
2306 
s_cache_java_class_ids(void * user_data)2307 static void s_cache_java_class_ids(void *user_data) {
2308     JNIEnv *env = user_data;
2309     s_cache_http_request_body_stream(env);
2310     s_cache_aws_signing_config(env);
2311     s_cache_predicate(env);
2312     s_cache_boxed_long(env);
2313     s_cache_http_request(env);
2314     s_cache_crt_resource(env);
2315     s_cache_mqtt_connection(env);
2316     s_cache_message_handler(env);
2317     s_cache_mqtt_exception(env);
2318     s_cache_mqtt_client_connection_operation_statistics(env);
2319     s_cache_byte_buffer(env);
2320     s_cache_credentials_provider(env);
2321     s_cache_credentials(env);
2322     s_cache_credentials_handler(env);
2323     s_cache_async_callback(env);
2324     s_cache_event_loop_group(env);
2325     s_cache_client_bootstrap(env);
2326     s_cache_tls_context_pkcs11_options(env);
2327     s_cache_tls_key_operation(env);
2328     s_cache_tls_context_custom_key_operation_options(env);
2329     s_cache_tls_key_operation_handler(env);
2330     s_cache_http_client_connection_manager(env);
2331     s_cache_http2_stream_manager(env);
2332     s_cache_http_client_connection(env);
2333     s_cache_http_stream(env);
2334     s_cache_http2_stream(env);
2335     s_cache_http_stream_response_handler_native_adapter(env);
2336     s_cache_http_stream_write_chunk_completion_properties(env);
2337     s_cache_http_stream_metrics_properties(env);
2338     s_cache_event_stream_server_listener_properties(env);
2339     s_cache_event_stream_server_listener_handler_properties(env);
2340     s_cache_event_stream_server_connection_handler_properties(env);
2341     s_cache_event_stream_server_continuation_handler_properties(env);
2342     s_cache_event_stream_client_connection_handler_properties(env);
2343     s_cache_event_stream_client_continuation_handler_properties(env);
2344     s_cache_event_stream_message_flush_properties(env);
2345     s_cache_cpu_info_properties(env);
2346     s_cache_s3_client_properties(env);
2347     s_cache_s3_meta_request_properties(env);
2348     s_cache_s3_meta_request_response_handler_native_adapter_properties(env);
2349     s_cache_completable_future(env);
2350     s_cache_crt_runtime_exception(env);
2351     s_cache_ecc_key_pair(env);
2352     s_cache_crt(env);
2353     s_cache_aws_signing_result(env);
2354     s_cache_http_header(env);
2355     s_cache_http_manager_metrics(env);
2356     s_cache_exponential_backoff_retry_options(env);
2357     s_cache_standard_retry_options(env);
2358     s_cache_directory_traversal_handler(env);
2359     s_cache_directory_entry(env);
2360     s_cache_s3_tcp_keep_alive_options(env);
2361     s_cache_s3_meta_request_progress(env);
2362     s_cache_s3_meta_request_resume_token(env);
2363     s_cache_mqtt5_connack_packet(env);
2364     s_cache_mqtt5_connect_packet(env);
2365     s_cache_mqtt5_connect_reason_code(env);
2366     s_cache_mqtt5_disconnect_packet(env);
2367     s_cache_mqtt5_disconnect_reason_code(env);
2368     s_cache_mqtt5_puback_packet(env);
2369     s_cache_mqtt5_puback_reason_code(env);
2370     s_cache_mqtt5_publish_packet(env);
2371     s_cache_mqtt5_payload_format_indicator(env);
2372     s_cache_mqtt5_negotiated_settings(env);
2373     s_cache_http_proxy_options(env);
2374     s_cache_http_proxy_connection_type(env);
2375     s_cache_mqtt5_client_options(env);
2376     s_cache_mqtt5_client_properties(env);
2377     s_cache_mqtt5_client_operation_statistics_properties(env);
2378     s_cache_mqtt5_client_session_behavior(env);
2379     s_cache_mqtt5_client_extended_validation_and_flow_control_options(env);
2380     s_cache_mqtt5_client_offline_queue_behavior_type(env);
2381     s_cache_mqtt5_client_jitter_mode(env);
2382     s_cache_mqtt5_subscribe_packet(env);
2383     s_cache_mqtt5_subscribe_subscription(env);
2384     s_cache_mqtt5_packet_qos(env);
2385     s_cache_mqtt5_retain_handling_type(env);
2386     s_cache_mqtt5_suback_reason_code(env);
2387     s_cache_mqtt5_suback_packet(env);
2388     s_cache_mqtt5_unsubscribe_packet(env);
2389     s_cache_mqtt5_unsuback_packet(env);
2390     s_cache_mqtt5_unsuback_reason_code(env);
2391     s_cache_mqtt5_user_property(env);
2392     s_cache_mqtt5_publish_events_properties(env);
2393     s_cache_mqtt5_lifecycle_events_properties(env);
2394     s_cache_mqtt5_puback_result(env);
2395     s_cache_mqtt5_publish_return(env);
2396     s_cache_mqtt5_on_stopped_return(env);
2397     s_cache_mqtt5_on_attempting_connect_return(env);
2398     s_cache_mqtt5_on_connection_success_return(env);
2399     s_cache_mqtt5_on_connection_failure_return(env);
2400     s_cache_mqtt5_on_disconnection_return(env);
2401     s_cache_boxed_integer(env);
2402     s_cache_boxed_boolean(env);
2403     s_cache_boxed_list(env);
2404     s_cache_boxed_array_list(env);
2405     s_cache_s3express_credentials_provider_factory_properties(env);
2406     s_cache_s3express_credentials_properties_properties(env);
2407     s_cache_s3express_credentials_provider_properties(env);
2408     s_cache_mqtt5_outbound_topic_alias_behavior_type(env);
2409     s_cache_mqtt5_inbound_topic_alias_behavior_type(env);
2410     s_cache_topic_aliasing_options(env);
2411 }
2412 
2413 static aws_thread_once s_cache_once_init = AWS_THREAD_ONCE_STATIC_INIT;
2414 
aws_cache_jni_ids(JNIEnv * env)2415 void aws_cache_jni_ids(JNIEnv *env) {
2416     aws_thread_call_once(&s_cache_once_init, s_cache_java_class_ids, (void *)env);
2417 }
2418