From bf4ef68728daa82f526ed32c03e9a975e76996f6 Mon Sep 17 00:00:00 2001 From: 0x330a <92654767+0x330a@users.noreply.github.com> Date: Fri, 25 Aug 2023 17:37:16 +1000 Subject: [PATCH] feat: add base wrappers to the remaining group configs --- libsession-util/libsession-util | 2 +- .../libsession_util/InstrumentedTests.kt | 8 ++++ libsession-util/src/main/cpp/CMakeLists.txt | 2 + libsession-util/src/main/cpp/group_info.cpp | 48 +++++-------------- libsession-util/src/main/cpp/group_keys.cpp | 1 + libsession-util/src/main/cpp/group_keys.h | 12 +++++ .../src/main/cpp/group_members.cpp | 1 + libsession-util/src/main/cpp/group_members.h | 13 +++++ libsession-util/src/main/cpp/util.h | 2 + .../loki/messenger/libsession_util/Config.kt | 33 +++++++++++-- 10 files changed, 82 insertions(+), 40 deletions(-) create mode 100644 libsession-util/src/main/cpp/group_keys.cpp create mode 100644 libsession-util/src/main/cpp/group_keys.h create mode 100644 libsession-util/src/main/cpp/group_members.cpp create mode 100644 libsession-util/src/main/cpp/group_members.h diff --git a/libsession-util/libsession-util b/libsession-util/libsession-util index a44567e876..d3b902f657 160000 --- a/libsession-util/libsession-util +++ b/libsession-util/libsession-util @@ -1 +1 @@ -Subproject commit a44567e876f393b0645fa1264b355866ae44d51b +Subproject commit d3b902f657083da3f37315327e2722d4fbda411f diff --git a/libsession-util/src/androidTest/java/network/loki/messenger/libsession_util/InstrumentedTests.kt b/libsession-util/src/androidTest/java/network/loki/messenger/libsession_util/InstrumentedTests.kt index 952c357851..2c2958f616 100644 --- a/libsession-util/src/androidTest/java/network/loki/messenger/libsession_util/InstrumentedTests.kt +++ b/libsession-util/src/androidTest/java/network/loki/messenger/libsession_util/InstrumentedTests.kt @@ -581,4 +581,12 @@ class InstrumentedTests { ) } + @Test + fun testGroupInfo() { + val (public, secret) = keyPair + val conf = GroupInfoConfig.newInstance(public, secret) + conf.setName("New Group") + assertEquals("New Group", conf.getName()) + } + } \ No newline at end of file diff --git a/libsession-util/src/main/cpp/CMakeLists.txt b/libsession-util/src/main/cpp/CMakeLists.txt index 23f6e0c54a..52e36fbfc2 100644 --- a/libsession-util/src/main/cpp/CMakeLists.txt +++ b/libsession-util/src/main/cpp/CMakeLists.txt @@ -31,6 +31,8 @@ set(SOURCES contacts.cpp conversation.cpp util.cpp + group_members.cpp + group_keys.cpp group_info.cpp) add_library( # Sets the name of the library. diff --git a/libsession-util/src/main/cpp/group_info.cpp b/libsession-util/src/main/cpp/group_info.cpp index ab0635fb1c..bb5a3fcf06 100644 --- a/libsession-util/src/main/cpp/group_info.cpp +++ b/libsession-util/src/main/cpp/group_info.cpp @@ -2,48 +2,26 @@ #include "group_info.h" #include "session/config/groups/info.hpp" - -extern "C" -JNIEXPORT jobject JNICALL -Java_network_loki_messenger_libsession_1util_GroupInfoConfig_00024Companion_newInstance___3B( - JNIEnv *env, jobject thiz, jbyteArray pub_key) { - std::lock_guard guard{util::util_mutex_}; - auto pub_key_bytes = util::ustring_from_bytes(env, pub_key); - auto* group_info = new session::config::groups::Info(pub_key_bytes, std::nullopt, std::nullopt); - - jclass groupInfoClass = env->FindClass("network/loki/messenger/libsession_util/GroupInfoConfig"); - jmethodID constructor = env->GetMethodID(groupInfoClass, "", "(J)V"); - jobject newConfig = env->NewObject(groupInfoClass, constructor, reinterpret_cast(group_info)); - - return newConfig; -} - -extern "C" -JNIEXPORT jobject JNICALL -Java_network_loki_messenger_libsession_1util_GroupInfoConfig_00024Companion_newInstance___3B_3B( - JNIEnv *env, jobject thiz, jbyteArray pub_key, jbyteArray secret_key) { - std::lock_guard guard{util::util_mutex_}; - auto pub_key_bytes = util::ustring_from_bytes(env, pub_key); - auto secret_key_bytes = util::ustring_from_bytes(env, secret_key); - auto* group_info = new session::config::groups::Info(pub_key_bytes, secret_key_bytes, std::nullopt); - - jclass groupInfoClass = env->FindClass("network/loki/messenger/libsession_util/GroupInfoConfig"); - jmethodID constructor = env->GetMethodID(groupInfoClass, "", "(J)V"); - jobject newConfig = env->NewObject(groupInfoClass, constructor, reinterpret_cast(group_info)); - - return newConfig; -} - extern "C" JNIEXPORT jobject JNICALL Java_network_loki_messenger_libsession_1util_GroupInfoConfig_00024Companion_newInstance___3B_3B_3B( JNIEnv *env, jobject thiz, jbyteArray pub_key, jbyteArray secret_key, jbyteArray initial_dump) { std::lock_guard guard{util::util_mutex_}; + std::optional secret_key_optional; + std::optional initial_dump_optional; auto pub_key_bytes = util::ustring_from_bytes(env, pub_key); - auto secret_key_bytes = util::ustring_from_bytes(env, secret_key); + if (secret_key != nullptr) { + auto secret_key_bytes = util::ustring_from_bytes(env, secret_key); + secret_key_optional = std::optional{secret_key_bytes}; + } + if (pub_key != nullptr) { + auto initial_dump_bytes = util::ustring_from_bytes(env, initial_dump); + initial_dump_optional = std::optional{initial_dump_bytes}; + } + auto initial_dump_bytes = util::ustring_from_bytes(env, initial_dump); - auto* group_info = new session::config::groups::Info(pub_key_bytes, secret_key_bytes, initial_dump_bytes); + auto* group_info = new session::config::groups::Info(pub_key_bytes, secret_key_optional, initial_dump_optional); jclass groupInfoClass = env->FindClass("network/loki/messenger/libsession_util/GroupInfoConfig"); jmethodID constructor = env->GetMethodID(groupInfoClass, "", "(J)V"); @@ -162,7 +140,7 @@ Java_network_loki_messenger_libsession_1util_GroupInfoConfig_setExpiryTimer(JNIE jlong expire_seconds) { std::lock_guard guard{util::util_mutex_}; auto group_info = ptrToInfo(env, thiz); - group_info->set_expiry_timer(std::chrono::seconds{expire_seconds}) + group_info->set_expiry_timer(std::chrono::seconds{expire_seconds}); } extern "C" diff --git a/libsession-util/src/main/cpp/group_keys.cpp b/libsession-util/src/main/cpp/group_keys.cpp new file mode 100644 index 0000000000..eb970a8ed1 --- /dev/null +++ b/libsession-util/src/main/cpp/group_keys.cpp @@ -0,0 +1 @@ +#include "group_keys.h" diff --git a/libsession-util/src/main/cpp/group_keys.h b/libsession-util/src/main/cpp/group_keys.h new file mode 100644 index 0000000000..9958932c1d --- /dev/null +++ b/libsession-util/src/main/cpp/group_keys.h @@ -0,0 +1,12 @@ +#ifndef SESSION_ANDROID_GROUP_KEYS_H +#define SESSION_ANDROID_GROUP_KEYS_H + +#include "util.h" + +inline session::config::groups::Keys* ptrToKeys(JNIEnv* env, jobject obj) { + jclass configClass = env->FindClass("network/loki/messenger/libsession_util/GroupKeysConfig"); + jfieldID pointerField = env->GetFieldID(configClass, "pointer", "J"); + return (session::config::groups::Keys*) env->GetLongField(obj, pointerField); +} + +#endif //SESSION_ANDROID_GROUP_KEYS_H diff --git a/libsession-util/src/main/cpp/group_members.cpp b/libsession-util/src/main/cpp/group_members.cpp new file mode 100644 index 0000000000..3f54816dbe --- /dev/null +++ b/libsession-util/src/main/cpp/group_members.cpp @@ -0,0 +1 @@ +#include "group_members.h" diff --git a/libsession-util/src/main/cpp/group_members.h b/libsession-util/src/main/cpp/group_members.h new file mode 100644 index 0000000000..e38a940075 --- /dev/null +++ b/libsession-util/src/main/cpp/group_members.h @@ -0,0 +1,13 @@ +#ifndef SESSION_ANDROID_GROUP_MEMBERS_H +#define SESSION_ANDROID_GROUP_MEMBERS_H + +#include "util.h" + +inline session::config::groups::Members* ptrToMembers(JNIEnv* env, jobject obj) { + jclass configClass = env->FindClass("network/loki/messenger/libsession_util/GroupMemberConfig"); + jfieldID pointerField = env->GetFieldID(configClass, "pointer", "J"); + return (session::config::groups::Members*) env->GetLongField(obj, pointerField); +} + + +#endif //SESSION_ANDROID_GROUP_MEMBERS_H diff --git a/libsession-util/src/main/cpp/util.h b/libsession-util/src/main/cpp/util.h index 35b26b1503..2a3e0b081a 100644 --- a/libsession-util/src/main/cpp/util.h +++ b/libsession-util/src/main/cpp/util.h @@ -6,6 +6,8 @@ #include #include "session/types.hpp" #include "session/config/groups/info.hpp" +#include "session/config/groups/keys.hpp" +#include "session/config/groups/members.hpp" #include "session/config/profile_pic.hpp" #include "session/config/user_groups.hpp" #include "session/config/expiring.hpp" diff --git a/libsession-util/src/main/java/network/loki/messenger/libsession_util/Config.kt b/libsession-util/src/main/java/network/loki/messenger/libsession_util/Config.kt index f0227f1f8e..2692699075 100644 --- a/libsession-util/src/main/java/network/loki/messenger/libsession_util/Config.kt +++ b/libsession-util/src/main/java/network/loki/messenger/libsession_util/Config.kt @@ -206,12 +206,10 @@ class GroupInfoConfig(pointer: Long): ConfigBase(pointer) { System.loadLibrary("session_util") } - external fun newInstance(pubKey: ByteArray): GroupInfoConfig - external fun newInstance(pubKey: ByteArray, secretKey: ByteArray?): GroupInfoConfig external fun newInstance( pubKey: ByteArray, secretKey: ByteArray?, - initialDump: ByteArray + initialDump: ByteArray? ): GroupInfoConfig } @@ -230,5 +228,32 @@ class GroupInfoConfig(pointer: Long): ConfigBase(pointer) { external fun setName(newName: String) external fun setProfilePic(newProfilePic: UserPic) external fun storageNamespace(): Long - } + +class GroupMemberConfig(pointer: Long): ConfigBase(pointer) { + companion object { + init { + System.loadLibrary("session_util") + } + external fun newInstance( + pubKey: ByteArray, + secretKey: ByteArray?, + initialDump: ByteArray? + ) + } +} + +class GroupKeysConfig(pointer: Long): ConfigBase(pointer) { + companion object { + init { + System.loadLibrary("session_util") + } + external fun newInstance( + publicKey: ByteArray, + secretKey: ByteArray?, + initialDump: ByteArray?, + info: GroupInfoConfig, + members: GroupMemberConfig + ): GroupKeysConfig + } +} \ No newline at end of file