@@ -29,24 +29,17 @@ Java_network_loki_messenger_libsession_1util_ConfigBase_push(JNIEnv *env, jobjec
29
29
return jni_utils::run_catching_cxx_exception_or_throws<jobject>(env, [=] {
30
30
std::lock_guard lock{util::util_mutex_};
31
31
auto config = ptrToConfigBase (env, thiz);
32
- auto push_tuple = config->push ();
33
- auto to_push_str = std::get<1 >(push_tuple);
34
- auto to_delete = std::get<2 >(push_tuple);
32
+ auto [seq_no, to_push, to_delete] = config->push ();
33
+
34
+ jobject messages = jni_utils::jlist_from_collection (env, to_push, [](JNIEnv *env, const std::vector<unsigned char > &data) {
35
+ return jni_utils::session_bytes_from_range (env, data);
36
+ });
37
+
38
+ jobject obsoleteHashes = jni_utils::jstring_list_from_collection (env, to_delete);
35
39
36
- jbyteArray returnByteArray = util::bytes_from_vector (env, to_push_str);
37
- jlong seqNo = std::get<0 >(push_tuple);
38
40
jclass returnObjectClass = env->FindClass (" network/loki/messenger/libsession_util/util/ConfigPush" );
39
- jclass stackClass = env->FindClass (" java/util/Stack" );
40
- jmethodID methodId = env->GetMethodID (returnObjectClass, " <init>" , " ([BJLjava/util/List;)V" );
41
- jmethodID stack_init = env->GetMethodID (stackClass, " <init>" , " ()V" );
42
- jobject our_stack = env->NewObject (stackClass, stack_init);
43
- jmethodID push_stack = env->GetMethodID (stackClass, " push" , " (Ljava/lang/Object;)Ljava/lang/Object;" );
44
- for (auto entry : to_delete) {
45
- auto entry_jstring = env->NewStringUTF (entry.data ());
46
- env->CallObjectMethod (our_stack, push_stack, entry_jstring);
47
- }
48
- jobject returnObject = env->NewObject (returnObjectClass, methodId, returnByteArray, seqNo, our_stack);
49
- return returnObject;
41
+ jmethodID methodId = env->GetMethodID (returnObjectClass, " <init>" , " (Ljava/util/List;JLjava/util/List;)V" );
42
+ return env->NewObject (returnObjectClass, methodId, messages, static_cast <jlong>(seq_no), obsoleteHashes);
50
43
});
51
44
}
52
45
@@ -75,12 +68,21 @@ Java_network_loki_messenger_libsession_1util_ConfigBase_encryptionDomain(JNIEnv
75
68
JNIEXPORT void JNICALL
76
69
Java_network_loki_messenger_libsession_1util_ConfigBase_confirmPushed (JNIEnv *env, jobject thiz,
77
70
jlong seq_no,
78
- jstring new_hash_jstring ) {
71
+ jobjectArray hash_list ) {
79
72
std::lock_guard lock{util::util_mutex_};
80
73
auto conf = ptrToConfigBase (env, thiz);
81
- auto new_hash = env->GetStringUTFChars (new_hash_jstring, nullptr );
82
- conf->confirm_pushed (seq_no, new_hash);
83
- env->ReleaseStringUTFChars (new_hash_jstring, new_hash);
74
+ auto hash_list_size = env->GetArrayLength (hash_list);
75
+ std::unordered_set<std::string> hashes (hash_list_size);
76
+
77
+ for (int i = 0 ; i < hash_list_size; i++) {
78
+ auto hash_jstring = (jstring) env->GetObjectArrayElement (hash_list, i);
79
+ auto hash = env->GetStringUTFChars (hash_jstring, nullptr );
80
+ hashes.insert (hash);
81
+ env->ReleaseStringUTFChars (hash_jstring, hash);
82
+ env->DeleteLocalRef (hash_jstring);
83
+ }
84
+
85
+ conf->confirm_pushed (seq_no, hashes);
84
86
}
85
87
86
88
#pragma clang diagnostic push
@@ -98,9 +100,7 @@ Java_network_loki_messenger_libsession_1util_ConfigBase_merge___3Lkotlin_Pair_2(
98
100
auto pair = extractHashAndData (env, jElement);
99
101
configs.push_back (pair);
100
102
}
101
- auto returned = conf->merge (configs);
102
- auto string_stack = util::build_string_stack (env, returned);
103
- return string_stack;
103
+ return jni_utils::jstring_list_from_collection (env, conf->merge (configs));
104
104
});
105
105
}
106
106
@@ -137,16 +137,8 @@ Java_network_loki_messenger_libsession_1util_ConfigBase_00024Companion_kindFor(J
137
137
138
138
extern " C"
139
139
JNIEXPORT jobject JNICALL
140
- Java_network_loki_messenger_libsession_1util_ConfigBase_currentHashes (JNIEnv *env, jobject thiz) {
140
+ Java_network_loki_messenger_libsession_1util_ConfigBase_activeHashes (JNIEnv *env, jobject thiz) {
141
141
std::lock_guard lock{util::util_mutex_};
142
142
auto conf = ptrToConfigBase (env, thiz);
143
- jclass stack = env->FindClass (" java/util/Stack" );
144
- jmethodID init = env->GetMethodID (stack, " <init>" , " ()V" );
145
- jobject our_stack = env->NewObject (stack, init);
146
- jmethodID push = env->GetMethodID (stack, " push" , " (Ljava/lang/Object;)Ljava/lang/Object;" );
147
- auto vec = conf->current_hashes ();
148
- for (std::string element: vec) {
149
- env->CallObjectMethod (our_stack, push, env->NewStringUTF (element.data ()));
150
- }
151
- return our_stack;
143
+ return jni_utils::jstring_list_from_collection (env, conf->active_hashes ());
152
144
}
0 commit comments