Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .drone.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@ steps:
environment:
ANDROID_HOME: /usr/lib/android-sdk
commands:
- apt-get -y update && apt-get -y install ninja-build
- update-java-alternatives -s java-1.17.0-openjdk-amd64
- env VERSION=`git describe --tags --dirty` ./gradlew publish

- name: upload the artifact
Expand Down
4 changes: 2 additions & 2 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[versions]
agp = "8.10.1"
kotlin = "2.1.10"
agp = "8.11.1"
kotlin = "2.2.0"

[libraries]

Expand Down
7 changes: 2 additions & 5 deletions library/src/main/cpp/blinded_key.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,11 @@ Java_network_loki_messenger_libsession_1util_util_BlindKeyAPI_blindVersionSignRe
jstring path,
jbyteArray body) {
return jni_utils::run_catching_cxx_exception_or_throws<jbyteArray>(env, [=] {
auto methodC = util::string_from_jstring(env, method);
auto pathC = util::string_from_jstring(env, path);

auto bytes = session::blind_version_sign_request(
jni_utils::JavaByteArrayRef(env, ed25519_secret_key).get(),
timestamp,
methodC,
pathC,
jni_utils::JavaStringRef(env, method).view(),
jni_utils::JavaStringRef(env, path).view(),
body ? std::make_optional(jni_utils::JavaByteArrayRef(env, body).get()) : std::nullopt
);
return util::bytes_from_vector(env, bytes);
Expand Down
14 changes: 2 additions & 12 deletions library/src/main/cpp/config_base.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,29 +5,25 @@
extern "C" {
JNIEXPORT jboolean JNICALL
Java_network_loki_messenger_libsession_1util_ConfigBase_dirty(JNIEnv *env, jobject thiz) {
std::lock_guard lock{util::util_mutex_};
auto* configBase = ptrToConfigBase(env, thiz);
return configBase->is_dirty();
}

JNIEXPORT jboolean JNICALL
Java_network_loki_messenger_libsession_1util_ConfigBase_needsPush(JNIEnv *env, jobject thiz) {
std::lock_guard lock{util::util_mutex_};
auto config = ptrToConfigBase(env, thiz);
return config->needs_push();
}

JNIEXPORT jboolean JNICALL
Java_network_loki_messenger_libsession_1util_ConfigBase_needsDump(JNIEnv *env, jobject thiz) {
std::lock_guard lock{util::util_mutex_};
auto config = ptrToConfigBase(env, thiz);
return config->needs_dump();
}

JNIEXPORT jobject JNICALL
Java_network_loki_messenger_libsession_1util_ConfigBase_push(JNIEnv *env, jobject thiz) {
return jni_utils::run_catching_cxx_exception_or_throws<jobject>(env, [=] {
std::lock_guard lock{util::util_mutex_};
auto config = ptrToConfigBase(env, thiz);
auto [seq_no, to_push, to_delete] = config->push();

Expand All @@ -51,7 +47,6 @@ Java_network_loki_messenger_libsession_1util_ConfigBase_free(JNIEnv *env, jobjec

JNIEXPORT jbyteArray JNICALL
Java_network_loki_messenger_libsession_1util_ConfigBase_dump(JNIEnv *env, jobject thiz) {
std::lock_guard lock{util::util_mutex_};
auto config = ptrToConfigBase(env, thiz);
auto dumped = config->dump();
jbyteArray bytes = util::bytes_from_vector(env, dumped);
Expand All @@ -69,16 +64,13 @@ JNIEXPORT void JNICALL
Java_network_loki_messenger_libsession_1util_ConfigBase_confirmPushed(JNIEnv *env, jobject thiz,
jlong seq_no,
jobjectArray hash_list) {
std::lock_guard lock{util::util_mutex_};
auto conf = ptrToConfigBase(env, thiz);
auto hash_list_size = env->GetArrayLength(hash_list);
std::unordered_set<std::string> hashes(hash_list_size);

for (int i = 0; i < hash_list_size; i++) {
auto hash_jstring = jni_utils::JavaLocalRef(env, (jstring) env->GetObjectArrayElement(hash_list, i));
auto hash = env->GetStringUTFChars(hash_jstring.get(), nullptr);
hashes.insert(hash);
env->ReleaseStringUTFChars(hash_jstring.get(), hash);
jni_utils::JavaLocalRef hash_jstring(env, (jstring) env->GetObjectArrayElement(hash_list, i));
hashes.insert(jni_utils::JavaStringRef(env, hash_jstring.get()).copy());
}

conf->confirm_pushed(seq_no, hashes);
Expand All @@ -90,7 +82,6 @@ JNIEXPORT jobject JNICALL
Java_network_loki_messenger_libsession_1util_ConfigBase_merge___3Lkotlin_Pair_2(JNIEnv *env, jobject thiz,
jobjectArray to_merge) {
return jni_utils::run_catching_cxx_exception_or_throws<jobject>(env, [=] {
std::lock_guard lock{util::util_mutex_};
auto conf = ptrToConfigBase(env, thiz);
size_t number = env->GetArrayLength(to_merge);
std::vector<std::pair<std::string, std::vector<unsigned char>>> configs = {};
Expand Down Expand Up @@ -137,7 +128,6 @@ Java_network_loki_messenger_libsession_1util_ConfigBase_00024Companion_kindFor(J
extern "C"
JNIEXPORT jobject JNICALL
Java_network_loki_messenger_libsession_1util_ConfigBase_activeHashes(JNIEnv *env, jobject thiz) {
std::lock_guard lock{util::util_mutex_};
auto conf = ptrToConfigBase(env, thiz);
return jni_utils::jstring_list_from_collection(env, conf->active_hashes());
}
15 changes: 8 additions & 7 deletions library/src/main/cpp/config_base.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include "jni_utils.h"
#include <jni.h>
#include <string>
#include <vector>

inline session::config::ConfigBase* ptrToConfigBase(JNIEnv *env, jobject obj) {
auto baseClass = jni_utils::JavaLocalRef(env, env->FindClass("network/loki/messenger/libsession_util/ConfigBase"));
Expand All @@ -17,13 +18,13 @@ inline std::pair<std::string, std::vector<unsigned char>> extractHashAndData(JNI
auto pair = jni_utils::JavaLocalRef(env, env->FindClass("kotlin/Pair"));
jfieldID first = env->GetFieldID(pair.get(), "first", "Ljava/lang/Object;");
jfieldID second = env->GetFieldID(pair.get(), "second", "Ljava/lang/Object;");
auto hash_as_jstring = jni_utils::JavaLocalRef(env, static_cast<jstring>(env->GetObjectField(kotlin_pair, first)));
auto data_as_jbytes = jni_utils::JavaLocalRef(env, static_cast<jbyteArray>(env->GetObjectField(kotlin_pair, second)));
auto hash_as_string = env->GetStringUTFChars(hash_as_jstring.get(), nullptr);
auto data_as_vector = util::vector_from_bytes(env, data_as_jbytes.get());
auto ret_pair = std::pair<std::string, std::vector<unsigned char>>{hash_as_string, data_as_vector};
env->ReleaseStringUTFChars(hash_as_jstring.get(), hash_as_string);
return ret_pair;
auto hash_as_jstring = jni_utils::JavaLocalRef(env, reinterpret_cast<jstring>(env->GetObjectField(kotlin_pair, first)));
auto data_as_jbytes = jni_utils::JavaLocalRef(env, reinterpret_cast<jbyteArray>(env->GetObjectField(kotlin_pair, second)));

return std::make_pair(
std::string(jni_utils::JavaStringRef(env, hash_as_jstring.get()).view()),
jni_utils::JavaByteArrayRef(env, data_as_jbytes.get()).copy()
);
}

inline session::config::ConfigSig* ptrToConfigSig(JNIEnv* env, jobject obj) {
Expand Down
23 changes: 11 additions & 12 deletions library/src/main/cpp/config_common.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,24 +16,23 @@ Java_network_loki_messenger_libsession_1util_ConfigKt_createConfigObject(
jbyteArray ed25519_secret_key,
jbyteArray initial_dump) {
return jni_utils::run_catching_cxx_exception_or_throws<jlong>(env, [=] {
auto config_name = util::string_from_jstring(env, java_config_name);
auto secret_key = util::vector_from_bytes(env, ed25519_secret_key);
jni_utils::JavaStringRef config_name(env, java_config_name);
jni_utils::JavaByteArrayRef secret_key(env, ed25519_secret_key);
auto initial = initial_dump
? std::optional(util::vector_from_bytes(env, initial_dump))
: std::nullopt;


std::lock_guard lock{util::util_mutex_};
if (config_name == "Contacts") {
return reinterpret_cast<jlong>(new session::config::Contacts(secret_key, initial));
} else if (config_name == "UserProfile") {
return reinterpret_cast<jlong>(new session::config::UserProfile(secret_key, initial));
} else if (config_name == "UserGroups") {
return reinterpret_cast<jlong>(new session::config::UserGroups(secret_key, initial));
} else if (config_name == "ConvoInfoVolatile") {
return reinterpret_cast<jlong>(new session::config::ConvoInfoVolatile(secret_key, initial));
if (config_name.view() == "Contacts") {
return reinterpret_cast<jlong>(new session::config::Contacts(secret_key.get(), initial));
} else if (config_name.view() == "UserProfile") {
return reinterpret_cast<jlong>(new session::config::UserProfile(secret_key.get(), initial));
} else if (config_name.view() == "UserGroups") {
return reinterpret_cast<jlong>(new session::config::UserGroups(secret_key.get(), initial));
} else if (config_name.view() == "ConvoInfoVolatile") {
return reinterpret_cast<jlong>(new session::config::ConvoInfoVolatile(secret_key.get(), initial));
} else {
throw std::invalid_argument("Unknown config name: " + config_name);
throw std::invalid_argument("Unknown config name: " + std::string(config_name.view()));
}
});
}
Loading