Skip to content

Commit ac654a0

Browse files
SessionHero01SessionHero01
authored andcommitted
Refactor a few C layer reflection access
1 parent de0502d commit ac654a0

27 files changed

+893
-659
lines changed

library/src/main/cpp/attachments.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include <jni.h>
22
#include <session/attachments.hpp>
33
#include "jni_utils.h"
4+
#include "util.h"
45

56
using namespace session::attachment;
67
using namespace jni_utils;
@@ -49,7 +50,7 @@ Java_network_loki_messenger_libsession_1util_encrypt_Attachments_encryptBytes(JN
4950
);
5051

5152

52-
return util::bytes_from_span(env, std::span(reinterpret_cast<unsigned char *>(key.data()), key.size()));
53+
return util::bytes_from_span(env, std::span(reinterpret_cast<unsigned char *>(key.data()), key.size())).leak();
5354
});
5455
}
5556

library/src/main/cpp/blinded_key.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Java_network_loki_messenger_libsession_1util_util_BlindKeyAPI_blindVersionKeyPai
1717
jbyteArray ed25519_secret_key) {
1818
return jni_utils::run_catching_cxx_exception_or_throws<jobject>(env, [=] {
1919
const auto [pk, sk] = session::blind_version_key_pair(util::vector_from_bytes(env, ed25519_secret_key));
20-
return jni_utils::new_key_pair(env, util::bytes_from_span(env, pk), util::bytes_from_span(env, sk));
20+
return jni_utils::new_key_pair(env, util::bytes_from_span(env, pk).get(), util::bytes_from_span(env, sk).get());
2121
});
2222
}
2323
extern "C"
@@ -32,7 +32,7 @@ Java_network_loki_messenger_libsession_1util_util_BlindKeyAPI_blindVersionSign(J
3232
session::Platform::android,
3333
timestamp
3434
);
35-
return util::bytes_from_vector(env, bytes);
35+
return util::bytes_from_vector(env, bytes).leak();
3636
});
3737
}
3838

@@ -53,7 +53,7 @@ Java_network_loki_messenger_libsession_1util_util_BlindKeyAPI_blindVersionSignRe
5353
jni_utils::JavaStringRef(env, path).view(),
5454
body ? std::make_optional(jni_utils::JavaByteArrayRef(env, body).get()) : std::nullopt
5555
);
56-
return util::bytes_from_vector(env, bytes);
56+
return util::bytes_from_vector(env, bytes).leak();
5757
});
5858
}
5959

@@ -68,7 +68,7 @@ Java_network_loki_messenger_libsession_1util_util_BlindKeyAPI_blind15KeyPair(JNI
6868
jni_utils::JavaByteArrayRef(env, ed25519_secret_key).get(),
6969
jni_utils::JavaByteArrayRef(env, server_pub_key).get()
7070
);
71-
return jni_utils::new_key_pair(env, util::bytes_from_span(env, pk), util::bytes_from_span(env, sk));
71+
return jni_utils::new_key_pair(env, util::bytes_from_span(env, pk).get(), util::bytes_from_span(env, sk).get());
7272
});
7373
}
7474

@@ -84,7 +84,7 @@ Java_network_loki_messenger_libsession_1util_util_BlindKeyAPI_blind15Sign(JNIEnv
8484
jni_utils::JavaStringRef(env, server_pub_key).view(),
8585
jni_utils::JavaByteArrayRef(env, message).get()
8686
);
87-
return util::bytes_from_vector(env, data);
87+
return util::bytes_from_vector(env, data).leak();
8888
});
8989
}
9090

@@ -128,9 +128,9 @@ Java_network_loki_messenger_libsession_1util_util_BlindKeyAPI_blind25Id(JNIEnv *
128128
jstring session_id,
129129
jstring server_pub_key) {
130130
return jni_utils::run_catching_cxx_exception_or_throws<jstring>(env, [=]() -> jstring {
131-
return util::jstringFromOptional(env, session::blind25_id(
131+
return jni_utils::jstring_from_optional(env, session::blind25_id(
132132
jni_utils::JavaStringRef(env, session_id).view(),
133133
jni_utils::JavaStringRef(env, server_pub_key).view()
134-
));
134+
)).leak();
135135
});
136136
}

library/src/main/cpp/config_base.cpp

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,20 @@
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+
519
extern "C" {
620
JNIEXPORT jboolean JNICALL
721
Java_network_loki_messenger_libsession_1util_ConfigBase_dirty(JNIEnv *env, jobject thiz) {
@@ -49,8 +63,7 @@ JNIEXPORT jbyteArray JNICALL
4963
Java_network_loki_messenger_libsession_1util_ConfigBase_dump(JNIEnv *env, jobject thiz) {
5064
auto config = ptrToConfigBase(env, thiz);
5165
auto dumped = config->dump();
52-
jbyteArray bytes = util::bytes_from_vector(env, dumped);
53-
return bytes;
66+
return util::bytes_from_vector(env, dumped).leak();
5467
}
5568

5669
JNIEXPORT jstring JNICALL

library/src/main/cpp/config_base.h

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,6 @@ inline session::config::ConfigBase* ptrToConfigBase(JNIEnv *env, jobject obj) {
1414
return (session::config::ConfigBase*) env->GetLongField(obj, pointerField);
1515
}
1616

17-
inline std::pair<std::string, std::vector<unsigned char>> extractHashAndData(JNIEnv *env, jobject kotlin_pair) {
18-
auto pair = jni_utils::JavaLocalRef(env, env->FindClass("kotlin/Pair"));
19-
jfieldID first = env->GetFieldID(pair.get(), "first", "Ljava/lang/Object;");
20-
jfieldID second = env->GetFieldID(pair.get(), "second", "Ljava/lang/Object;");
21-
auto hash_as_jstring = jni_utils::JavaLocalRef(env, reinterpret_cast<jstring>(env->GetObjectField(kotlin_pair, first)));
22-
auto data_as_jbytes = jni_utils::JavaLocalRef(env, reinterpret_cast<jbyteArray>(env->GetObjectField(kotlin_pair, second)));
23-
24-
return std::make_pair(
25-
std::string(jni_utils::JavaStringRef(env, hash_as_jstring.get()).view()),
26-
jni_utils::JavaByteArrayRef(env, data_as_jbytes.get()).copy()
27-
);
28-
}
2917

3018
inline session::config::ConfigSig* ptrToConfigSig(JNIEnv* env, jobject obj) {
3119
auto sigClass = jni_utils::JavaLocalRef(env, env->FindClass("network/loki/messenger/libsession_util/ConfigSig"));

0 commit comments

Comments
 (0)