@@ -39,105 +39,104 @@ void aws_mqtt_iot_metrics_java_jni_destroy(
3939}
4040
4141struct aws_mqtt_iot_metrics_java_jni * aws_mqtt_iot_metrics_java_jni_create_from_java (
42- JNIEnv * env ,
43- struct aws_allocator * allocator ,
44- jobject java_iot_device_sdk_metrics ) {
45-
46- struct aws_mqtt_iot_metrics_java_jni * java_metrics =
47- aws_mem_calloc (allocator , 1 , sizeof (struct aws_mqtt_iot_metrics_java_jni ));
48- if (java_metrics == NULL ) {
49- AWS_LOGF_ERROR (
50- AWS_LS_MQTT_GENERAL , "IoTDeviceSDKMetrics create_from_java: Creating new IoTDeviceSDKMetrics failed" );
51- return NULL ;
52- }
53-
54- if (aws_get_string_from_jobject (
55- env ,
56- java_iot_device_sdk_metrics ,
57- iot_device_sdk_metrics_properties .library_name_field_id ,
58- s_iot_device_sdk_metrics_string ,
59- "library name" ,
60- & java_metrics -> library_name_buf ,
61- & java_metrics -> metrics .library_name ,
62- false,
63- NULL ) == AWS_OP_ERR ) {
64- AWS_LOGF_ERROR (AWS_LS_MQTT_GENERAL , "IoTDeviceSDKMetrics create_from_java: No library name found" );
65- goto on_error ;
66- }
67-
68- /* Parse metadataEntries list */
69- jobject metadata_list = (* env )-> GetObjectField (
70- env , java_iot_device_sdk_metrics , iot_device_sdk_metrics_properties .metadata_entries_field_id );
71-
72- if (metadata_list != NULL && !aws_jni_check_and_clear_exception (env )) {
73- jint count = (* env )-> CallIntMethod (env , metadata_list , boxed_list_properties .list_size_id );
74- if (count > 0 && !aws_jni_check_and_clear_exception (env )) {
75- java_metrics -> metadata_entries =
76- aws_mem_calloc (allocator , (size_t )count , sizeof (struct aws_mqtt_metadata_entry ));
77- if (java_metrics -> metadata_entries == NULL ) {
78- goto on_error ;
79- }
80-
81- /* Pre-allocate storage buffer for all key/value strings */
82- aws_byte_buf_init (& java_metrics -> metadata_storage , allocator , (size_t )count * 64 );
83-
84- for (jint i = 0 ; i < count ; i ++ ) {
85- jobject entry = (* env )-> CallObjectMethod (env , metadata_list , boxed_list_properties .list_get_id , i );
86- if (entry == NULL || aws_jni_check_and_clear_exception (env )) {
87- continue ;
88- }
89-
90- jstring key_jstr = (jstring )(* env )-> GetObjectField (
91- env , entry , iot_metrics_metadata_properties .key_field_id );
92- jstring value_jstr = (jstring )(* env )-> GetObjectField (
93- env , entry , iot_metrics_metadata_properties .value_field_id );
94-
95- if (key_jstr != NULL && value_jstr != NULL ) {
96- const char * key_chars = (* env )-> GetStringUTFChars (env , key_jstr , NULL );
97- size_t key_len = (size_t )(* env )-> GetStringUTFLength (env , key_jstr );
98- const char * value_chars = (* env )-> GetStringUTFChars (env , value_jstr , NULL );
99- size_t value_len = (size_t )(* env )-> GetStringUTFLength (env , value_jstr );
100-
101- /* Append key to storage buffer */
102- size_t key_offset = java_metrics -> metadata_storage .len ;
103- aws_byte_buf_append_dynamic (& java_metrics -> metadata_storage , & (struct aws_byte_cursor ){
104- .ptr = (uint8_t * )key_chars , .len = key_len });
105-
106- /* Append value to storage buffer */
107- size_t value_offset = java_metrics -> metadata_storage .len ;
108- aws_byte_buf_append_dynamic (& java_metrics -> metadata_storage , & (struct aws_byte_cursor ){
109- .ptr = (uint8_t * )value_chars , .len = value_len });
110-
111- java_metrics -> metadata_entries [java_metrics -> metadata_count ].key =
112- aws_byte_cursor_from_array (
113- java_metrics -> metadata_storage .buffer + key_offset , key_len );
114- java_metrics -> metadata_entries [java_metrics -> metadata_count ].value =
115- aws_byte_cursor_from_array (
116- java_metrics -> metadata_storage .buffer + value_offset , value_len );
117- java_metrics -> metadata_count ++ ;
118-
119- (* env )-> ReleaseStringUTFChars (env , key_jstr , key_chars );
120- (* env )-> ReleaseStringUTFChars (env , value_jstr , value_chars );
121- }
122-
123- (* env )-> DeleteLocalRef (env , key_jstr );
124- (* env )-> DeleteLocalRef (env , value_jstr );
125- (* env )-> DeleteLocalRef (env , entry );
126- }
127-
128- /* Set the metrics struct fields */
129- java_metrics -> metrics .metadata_entries = java_metrics -> metadata_entries ;
130- java_metrics -> metrics .metadata_count = java_metrics -> metadata_count ;
131- }
132-
133- (* env )-> DeleteLocalRef (env , metadata_list );
134- }
135-
136- return java_metrics ;
137-
138- on_error :
139- /* clean up */
140- aws_mqtt_iot_metrics_java_jni_destroy (env , allocator , java_metrics );
141- return NULL ;
142- }
42+ JNIEnv * env ,
43+ struct aws_allocator * allocator ,
44+ jobject java_iot_device_sdk_metrics ) {
45+
46+ struct aws_mqtt_iot_metrics_java_jni * java_metrics =
47+ aws_mem_calloc (allocator , 1 , sizeof (struct aws_mqtt_iot_metrics_java_jni ));
48+ if (java_metrics == NULL ) {
49+ AWS_LOGF_ERROR (
50+ AWS_LS_MQTT_GENERAL , "IoTDeviceSDKMetrics create_from_java: Creating new IoTDeviceSDKMetrics failed" );
51+ return NULL ;
52+ }
53+
54+ if (aws_get_string_from_jobject (
55+ env ,
56+ java_iot_device_sdk_metrics ,
57+ iot_device_sdk_metrics_properties .library_name_field_id ,
58+ s_iot_device_sdk_metrics_string ,
59+ "library name" ,
60+ & java_metrics -> library_name_buf ,
61+ & java_metrics -> metrics .library_name ,
62+ false,
63+ NULL ) == AWS_OP_ERR ) {
64+ AWS_LOGF_ERROR (AWS_LS_MQTT_GENERAL , "IoTDeviceSDKMetrics create_from_java: No library name found" );
65+ goto on_error ;
66+ }
14367
68+ /* Parse metadataEntries list */
69+ jobject metadata_list = (* env )-> GetObjectField (
70+ env , java_iot_device_sdk_metrics , iot_device_sdk_metrics_properties .metadata_entries_field_id );
71+
72+ if (metadata_list != NULL && !aws_jni_check_and_clear_exception (env )) {
73+ jint count = (* env )-> CallIntMethod (env , metadata_list , boxed_list_properties .list_size_id );
74+ if (count > 0 && !aws_jni_check_and_clear_exception (env )) {
75+ java_metrics -> metadata_entries =
76+ aws_mem_calloc (allocator , (size_t )count , sizeof (struct aws_mqtt_metadata_entry ));
77+ if (java_metrics -> metadata_entries == NULL ) {
78+ goto on_error ;
79+ }
80+
81+ /* Pre-allocate storage buffer for all key/value strings */
82+ aws_byte_buf_init (& java_metrics -> metadata_storage , allocator , (size_t )count * 64 );
83+
84+ for (jint i = 0 ; i < count ; i ++ ) {
85+ jobject entry = (* env )-> CallObjectMethod (env , metadata_list , boxed_list_properties .list_get_id , i );
86+ if (entry == NULL || aws_jni_check_and_clear_exception (env )) {
87+ continue ;
88+ }
89+
90+ jstring key_jstr =
91+ (jstring )(* env )-> GetObjectField (env , entry , iot_metrics_metadata_properties .key_field_id );
92+ jstring value_jstr =
93+ (jstring )(* env )-> GetObjectField (env , entry , iot_metrics_metadata_properties .value_field_id );
94+
95+ if (key_jstr != NULL && value_jstr != NULL ) {
96+ const char * key_chars = (* env )-> GetStringUTFChars (env , key_jstr , NULL );
97+ size_t key_len = (size_t )(* env )-> GetStringUTFLength (env , key_jstr );
98+ const char * value_chars = (* env )-> GetStringUTFChars (env , value_jstr , NULL );
99+ size_t value_len = (size_t )(* env )-> GetStringUTFLength (env , value_jstr );
100+
101+ /* Append key to storage buffer */
102+ size_t key_offset = java_metrics -> metadata_storage .len ;
103+ aws_byte_buf_append_dynamic (
104+ & java_metrics -> metadata_storage ,
105+ & (struct aws_byte_cursor ){.ptr = (uint8_t * )key_chars , .len = key_len });
106+
107+ /* Append value to storage buffer */
108+ size_t value_offset = java_metrics -> metadata_storage .len ;
109+ aws_byte_buf_append_dynamic (
110+ & java_metrics -> metadata_storage ,
111+ & (struct aws_byte_cursor ){.ptr = (uint8_t * )value_chars , .len = value_len });
112+
113+ java_metrics -> metadata_entries [java_metrics -> metadata_count ].key =
114+ aws_byte_cursor_from_array (java_metrics -> metadata_storage .buffer + key_offset , key_len );
115+ java_metrics -> metadata_entries [java_metrics -> metadata_count ].value =
116+ aws_byte_cursor_from_array (java_metrics -> metadata_storage .buffer + value_offset , value_len );
117+ java_metrics -> metadata_count ++ ;
118+
119+ (* env )-> ReleaseStringUTFChars (env , key_jstr , key_chars );
120+ (* env )-> ReleaseStringUTFChars (env , value_jstr , value_chars );
121+ }
122+
123+ (* env )-> DeleteLocalRef (env , key_jstr );
124+ (* env )-> DeleteLocalRef (env , value_jstr );
125+ (* env )-> DeleteLocalRef (env , entry );
126+ }
127+
128+ /* Set the metrics struct fields */
129+ java_metrics -> metrics .metadata_entries = java_metrics -> metadata_entries ;
130+ java_metrics -> metrics .metadata_count = java_metrics -> metadata_count ;
131+ }
132+
133+ (* env )-> DeleteLocalRef (env , metadata_list );
134+ }
135+
136+ return java_metrics ;
137+
138+ on_error :
139+ /* clean up */
140+ aws_mqtt_iot_metrics_java_jni_destroy (env , allocator , java_metrics );
141+ return NULL ;
142+ }
0 commit comments