22#include " util.h"
33#include " jni_utils.h"
44
5+
6+ std::pair<std::string, std::vector<unsigned char >> extractHashAndData (JNIEnv *env, jobject kotlin_pair) {
7+ jni_utils::JavaLocalRef<jclass> pair (env, env->GetObjectClass (kotlin_pair));
8+ jfieldID first = env->GetFieldID (pair.get (), " first" , " Ljava/lang/Object;" );
9+ jfieldID second = env->GetFieldID (pair.get (), " second" , " Ljava/lang/Object;" );
10+ auto hash_as_jstring = jni_utils::JavaLocalRef (env, reinterpret_cast <jstring>(env->GetObjectField (kotlin_pair, first)));
11+ auto data_as_jbytes = jni_utils::JavaLocalRef (env, reinterpret_cast <jbyteArray>(env->GetObjectField (kotlin_pair, second)));
12+
13+ return std::make_pair (
14+ std::string (jni_utils::JavaStringRef (env, hash_as_jstring.get ()).view ()),
15+ jni_utils::JavaByteArrayRef (env, data_as_jbytes.get ()).copy ()
16+ );
17+ }
18+
19+ struct JavaConfigClassInfo : public jni_utils ::JavaClassInfo {
20+ jfieldID pointer_field;
21+
22+ JavaConfigClassInfo (JNIEnv *env, jobject obj)
23+ :JavaClassInfo(env, obj),
24+ pointer_field (env->GetFieldID (java_class, " pointer" , " J" )) {}
25+
26+ static const JavaConfigClassInfo& get (JNIEnv *env, jobject obj) {
27+ static JavaConfigClassInfo class_info (env, obj);
28+ return class_info;
29+ }
30+ };
31+
32+ session::config::ConfigBase* ptrToConfigBase (JNIEnv *env, jobject obj) {
33+ return reinterpret_cast <session::config::ConfigBase*>(
34+ env->GetLongField (obj, JavaConfigClassInfo::get (env, obj).pointer_field ));
35+ }
36+
37+ session::config::ConfigSig* ptrToConfigSig (JNIEnv* env, jobject obj) {
38+ return reinterpret_cast <session::config::ConfigSig*>(
39+ env->GetLongField (obj, JavaConfigClassInfo::get (env, obj).pointer_field ));
40+ }
41+
542extern " C" {
643JNIEXPORT jboolean JNICALL
744Java_network_loki_messenger_libsession_1util_ConfigBase_dirty (JNIEnv *env, jobject thiz) {
@@ -33,9 +70,14 @@ Java_network_loki_messenger_libsession_1util_ConfigBase_push(JNIEnv *env, jobjec
3370
3471 jobject obsoleteHashes = jni_utils::jstring_list_from_collection (env, to_delete);
3572
36- jclass returnObjectClass = env->FindClass (" network/loki/messenger/libsession_util/util/ConfigPush" );
37- jmethodID methodId = env->GetMethodID (returnObjectClass, " <init>" , " (Ljava/util/List;JLjava/util/List;)V" );
38- return env->NewObject (returnObjectClass, methodId, messages, static_cast <jlong>(seq_no), obsoleteHashes);
73+ static jni_utils::BasicJavaClassInfo class_info (
74+ env,
75+ " network/loki/messenger/libsession_util/util/ConfigPush" ,
76+ " (Ljava/util/List;JLjava/util/List;)V"
77+ );
78+
79+ return env->NewObject (class_info.java_class , class_info.constructor ,
80+ messages, static_cast <jlong>(seq_no), obsoleteHashes);
3981 });
4082}
4183
@@ -49,8 +91,7 @@ JNIEXPORT jbyteArray JNICALL
4991Java_network_loki_messenger_libsession_1util_ConfigBase_dump (JNIEnv *env, jobject thiz) {
5092 auto config = ptrToConfigBase (env, thiz);
5193 auto dumped = config->dump ();
52- jbyteArray bytes = util::bytes_from_vector (env, dumped);
53- return bytes;
94+ return util::bytes_from_vector (env, dumped).release ();
5495}
5596
5697JNIEXPORT jstring JNICALL
@@ -96,34 +137,6 @@ Java_network_loki_messenger_libsession_1util_ConfigBase_merge___3Lkotlin_Pair_2(
96137
97138#pragma clang diagnostic pop
98139}
99- extern " C"
100- JNIEXPORT jint JNICALL
101- Java_network_loki_messenger_libsession_1util_ConfigBase_configNamespace (JNIEnv *env, jobject thiz) {
102- auto conf = ptrToConfigBase (env, thiz);
103- return (std::int16_t ) conf->storage_namespace ();
104- }
105- extern " C"
106- JNIEXPORT jclass JNICALL
107- Java_network_loki_messenger_libsession_1util_ConfigBase_00024Companion_kindFor (JNIEnv *env,
108- jobject thiz,
109- jint config_namespace) {
110- auto user_class = env->FindClass (" network/loki/messenger/libsession_util/UserProfile" );
111- auto contact_class = env->FindClass (" network/loki/messenger/libsession_util/Contacts" );
112- auto convo_volatile_class = env->FindClass (" network/loki/messenger/libsession_util/ConversationVolatileConfig" );
113- auto group_list_class = env->FindClass (" network/loki/messenger/libsession_util/UserGroupsConfig" );
114- switch (config_namespace) {
115- case (int )session::config::Namespace::UserProfile:
116- return user_class;
117- case (int )session::config::Namespace::Contacts:
118- return contact_class;
119- case (int )session::config::Namespace::ConvoInfoVolatile:
120- return convo_volatile_class;
121- case (int )session::config::Namespace::UserGroups:
122- return group_list_class;
123- default :
124- return nullptr ;
125- }
126- }
127140
128141extern " C"
129142JNIEXPORT jobject JNICALL
0 commit comments