From e10209e8fcb642b03416220eff8821091ee16d9a Mon Sep 17 00:00:00 2001 From: Hussein Kasem Date: Tue, 21 Apr 2020 17:55:04 +0200 Subject: [PATCH 01/17] JNI-94 Add get_machine_directory and get_user_directory wrapper and test --- src/basic_api.cc | 17 +++++++++ src/gen_java_Engine.ysl2 | 10 +++--- src/pEp.yml2 | 2 ++ .../foundation/pEp/jniadapter/test/Makefile | 3 ++ .../pEp/jniadapter/test/jni94/Makefile | 32 +++++++++++++++++ .../pEp/jniadapter/test/jni94/TestMain.java | 35 +++++++++++++++++++ 6 files changed, 94 insertions(+), 5 deletions(-) create mode 100644 test/java/foundation/pEp/jniadapter/test/jni94/Makefile create mode 100644 test/java/foundation/pEp/jniadapter/test/jni94/TestMain.java diff --git a/src/basic_api.cc b/src/basic_api.cc index 86be576..160761f 100644 --- a/src/basic_api.cc +++ b/src/basic_api.cc @@ -331,5 +331,22 @@ JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_Engine_getCrashdumpL return from_string(env, _logdata); } +JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_Engine__1getUserDirectory( + JNIEnv *env, + jobject obj + ) +{ + return from_string(env, ::per_user_directory()); +} + +JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_Engine__1getMachineDirectory( + JNIEnv *env, + jobject obj + ) +{ + return from_string(env, ::per_machine_directory()); +} + + } // extern "C" diff --git a/src/gen_java_Engine.ysl2 b/src/gen_java_Engine.ysl2 index 51ed0ed..c1faee1 100644 --- a/src/gen_java_Engine.ysl2 +++ b/src/gen_java_Engine.ysl2 @@ -37,20 +37,20 @@ tstylesheet { || otherwise { || - private native «$itype» «@name»(`apply "parm/*", mode=basic_iparm`); + private native «$itype» _«@name»(`apply "parm/*", mode=basic_iparm`); public «$jtype» «@name»(`apply "parm/*", mode=basic_parm`) { || apply "parm/*", mode=basic_parm_set; choose { when "@type = 'void'" - |> «@name»(`apply "parm/*", mode=basic_parm_name`); + |> _«@name»(`apply "parm/*", mode=basic_parm_name`); when "@type = 'identity'" - |> return new Identity(«@name»(`apply "parm/*", mode=basic_parm_name`)); + |> return new Identity(_«@name»(`apply "parm/*", mode=basic_parm_name`)); when "@type = 'bool'" - |> return new Boolean(«@name»(`apply "parm/*", mode=basic_parm_name`)); + |> return new Boolean(_«@name»(`apply "parm/*", mode=basic_parm_name`)); otherwise - |> return AbstractEngine.toUTF16(«@name»(`apply "parm/*", mode=basic_parm_name`)); + |> return AbstractEngine.toUTF16(_«@name»(`apply "parm/*", mode=basic_parm_name`)); } || } diff --git a/src/pEp.yml2 b/src/pEp.yml2 index d1caa14..68e4b83 100644 --- a/src/pEp.yml2 +++ b/src/pEp.yml2 @@ -265,6 +265,8 @@ namespace pEp { basic void config_passive_mode(bool enable); basic void config_unencrypted_subject(bool enable); basic string getCrashdumpLog(int maxlines); + basic string getUserDirectory(); + basic string getMachineDirectory(); }; struct message { diff --git a/test/java/foundation/pEp/jniadapter/test/Makefile b/test/java/foundation/pEp/jniadapter/test/Makefile index e9735d9..7066698 100644 --- a/test/java/foundation/pEp/jniadapter/test/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/Makefile @@ -8,6 +8,7 @@ run: compile $(MAKE) -C jni88 run $(MAKE) -C jni91 run $(MAKE) -C jni92 run + $(MAKE) -C jni94 run compile: $(MAKE) -C basic compile @@ -15,6 +16,7 @@ compile: $(MAKE) -C jni88 compile $(MAKE) -C jni91 compile $(MAKE) -C jni92 compile + $(MAKE) -C jni94 compile clean: $(MAKE) -C basic clean @@ -22,6 +24,7 @@ clean: $(MAKE) -C jni88 clean $(MAKE) -C jni91 clean $(MAKE) -C jni92 clean + $(MAKE) -C jni94 clean clean-pep-home: $(MAKE) -C basic clean-pep-home diff --git a/test/java/foundation/pEp/jniadapter/test/jni94/Makefile b/test/java/foundation/pEp/jniadapter/test/jni94/Makefile new file mode 100644 index 0000000..e628c5f --- /dev/null +++ b/test/java/foundation/pEp/jniadapter/test/jni94/Makefile @@ -0,0 +1,32 @@ +include ../../../../../../../Makefile.conf +include ../Makefile.conf + +TEST_UNIT_NAME=jni94 + +JAVA_CLASSES = \ + TestMain.class \ + ../utils/TestUtils.class + +.PHONY: compile run test clean + +all: compile + $(MAKE) run + +run: compile + cd $(JAVA_CWD);HOME=$(JAVA_PEP_HOME_DIR) $(JAVA) $(JAVA_PKG_BASENAME).$(TEST_UNIT_NAME).TestMain + +compile: $(JAVA_CLASSES) + +%.class: %.java + cd $(JAVA_CWD);javac -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< + +clean: + rm -f $(JAVA_CLASSES) + rm -f *.class + rm -f *.log + rm -Rf .gnupg + rm -Rf .lldb + +clean-pep-home: + rm -rf $(PEP_HOME_DIR)/* + rm -rf $(PEP_HOME_DIR)/.pEp diff --git a/test/java/foundation/pEp/jniadapter/test/jni94/TestMain.java b/test/java/foundation/pEp/jniadapter/test/jni94/TestMain.java new file mode 100644 index 0000000..a29e7a9 --- /dev/null +++ b/test/java/foundation/pEp/jniadapter/test/jni94/TestMain.java @@ -0,0 +1,35 @@ +package foundation.pEp.jniadapter.test.jni94; +import foundation.pEp.jniadapter.*; +import foundation.pEp.jniadapter.test.utils.TestUtils; + +import java.lang.Thread; + + +/* +This test tries to use the feature described in in JNI-94 +https://pep.foundation/jira/browse/JNI-94 + +`engine.getMachineDirectory()` and `engine.getUserDirectory()` +*/ + + +class TestMain { + public static void main(String[] args) { + Engine engine; + try { + TestUtils.logH2("Creating new Engine"); + engine = new Engine(); + Sync.DefaultCallback callbacks = new Sync.DefaultCallback(); + engine.setMessageToSendCallback(callbacks); + TestUtils.logH2("Machine directory: "); + TestUtils.log(engine.getMachineDirectory()); + + TestUtils.logH2("User directory:" ); + TestUtils.log(engine.getUserDirectory()); + } + catch (pEpException ex) { + System.out.println("Cannot load"); + return; + } + } +} From a309452628b425f371ea8435377de29a7ca5e29d Mon Sep 17 00:00:00 2001 From: heck Date: Thu, 23 Apr 2020 14:58:02 +0200 Subject: [PATCH 02/17] depend on pEp/pEpLog.hh to be compatible with libpEpAdapter branches default and postrelease --- src/foundation_pEp_jniadapter_AbstractEngine.cc | 2 +- src/foundation_pEp_jniadapter__Blob.cc | 2 +- src/gen_cpp_Engine.ysl2 | 2 +- src/gen_cpp_Message.ysl2 | 2 +- src/identity_api.cc | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/foundation_pEp_jniadapter_AbstractEngine.cc b/src/foundation_pEp_jniadapter_AbstractEngine.cc index 51754d3..73aa615 100644 --- a/src/foundation_pEp_jniadapter_AbstractEngine.cc +++ b/src/foundation_pEp_jniadapter_AbstractEngine.cc @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include "throw_pEp_exception.hh" #include "jniutils.hh" diff --git a/src/foundation_pEp_jniadapter__Blob.cc b/src/foundation_pEp_jniadapter__Blob.cc index 9669c0a..730a957 100644 --- a/src/foundation_pEp_jniadapter__Blob.cc +++ b/src/foundation_pEp_jniadapter__Blob.cc @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/gen_cpp_Engine.ysl2 b/src/gen_cpp_Engine.ysl2 index 4881b7b..76bb6d2 100644 --- a/src/gen_cpp_Engine.ysl2 +++ b/src/gen_cpp_Engine.ysl2 @@ -15,7 +15,7 @@ tstylesheet { #include #include #include - #include + #include #include "foundation_pEp_jniadapter_«@name».h" #include "throw_pEp_exception.hh" #include "jniutils.hh" diff --git a/src/gen_cpp_Message.ysl2 b/src/gen_cpp_Message.ysl2 index d73497a..5296207 100644 --- a/src/gen_cpp_Message.ysl2 +++ b/src/gen_cpp_Message.ysl2 @@ -19,7 +19,7 @@ tstylesheet { #include #include #include - #include + #include #include "jniutils.hh" #include "throw_pEp_exception.hh" diff --git a/src/identity_api.cc b/src/identity_api.cc index e11d4ab..e2450f3 100644 --- a/src/identity_api.cc +++ b/src/identity_api.cc @@ -1,5 +1,5 @@ #include -#include +#include #include "jniutils.hh" From cfd5248b7455ed3377780abd8d8f91197a5dd488 Mon Sep 17 00:00:00 2001 From: heck Date: Thu, 23 Apr 2020 14:59:59 +0200 Subject: [PATCH 03/17] add logging --- src/basic_api.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/basic_api.cc b/src/basic_api.cc index 160761f..e8822bf 100644 --- a/src/basic_api.cc +++ b/src/basic_api.cc @@ -336,6 +336,7 @@ JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_Engine__1getUserDire jobject obj ) { + pEpLog("called"); return from_string(env, ::per_user_directory()); } @@ -344,6 +345,7 @@ JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_Engine__1getMachineD jobject obj ) { + pEpLog("called"); return from_string(env, ::per_machine_directory()); } From f67d98cb1035c4220b6fae8f7e5d1d429a2f152e Mon Sep 17 00:00:00 2001 From: Volker Birk Date: Thu, 30 Apr 2020 12:56:48 +0200 Subject: [PATCH 04/17] missing header file violating C++ standard --- src/jniutils.hh | 1 + 1 file changed, 1 insertion(+) diff --git a/src/jniutils.hh b/src/jniutils.hh index a9cf9a0..e8ee16b 100644 --- a/src/jniutils.hh +++ b/src/jniutils.hh @@ -1,6 +1,7 @@ #pragma once #include #include +#include #include #include #include From 0e14d3a76f435d55bcd501fecccfef5599ce2562 Mon Sep 17 00:00:00 2001 From: Volker Birk Date: Thu, 30 Apr 2020 13:03:00 +0200 Subject: [PATCH 05/17] another include missing --- src/gen_cpp_Message.ysl2 | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gen_cpp_Message.ysl2 b/src/gen_cpp_Message.ysl2 index ecefa1e..2e587de 100644 --- a/src/gen_cpp_Message.ysl2 +++ b/src/gen_cpp_Message.ysl2 @@ -12,6 +12,7 @@ tstylesheet { document("foundation_pEp_jniadapter_{$jname}.cc", "text") { || + #include #include #include #include "jniutils.hh" From f6766d5279115c3709a9baa17dee5e442fee7b79 Mon Sep 17 00:00:00 2001 From: Volker Birk Date: Thu, 30 Apr 2020 13:43:37 +0200 Subject: [PATCH 06/17] missing headers again, correcting error coloring, too --- Makefile.conf | 19 ++++++------------- src/foundation_pEp_jniadapter__Blob.cc | 2 ++ src/jniutils.cc | 1 + 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/Makefile.conf b/Makefile.conf index 2624aea..fa3f751 100644 --- a/Makefile.conf +++ b/Makefile.conf @@ -16,23 +16,16 @@ BUILD_FOR:=$(shell uname) ######### C and C++ ######### -CXXFLAGS+=-g -O0 +CXXFLAGS+=-g -O0 -std=c++11 LDFLAGS+=-shared $(ENGINE_LIB) $(AD_LIB) LDLIBS=-lstdc++ -lpEpEngine -lpEpAdapter - -######### C++ ######### -ifeq ($(BUILD_FOR),Linux) - CXX=g++ -std=c++11 -else ifeq ($(BUILD_FOR),Darwin) - CXX=clang -std=c++11 -endif - -ifeq ($(BUILD_FOR),Linux) - CXXFLAGS+=-fdiagnostics-color=always -fpermissive -fPIC -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux $(AD_INC) $(ENGINE_INC) -else ifeq ($(BUILD_FOR),Darwin) - CXXFLAGS+=-fcolor-diagnostics -fpermissive -fPIC -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/darwin $(AD_INC) $(ENGINE_INC) +CXXFLAGS+=-fpermissive -fPIC -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/$(shell uname) $(AD_INC) $(ENGINE_INC) +ifneq (,$(findstring g++,$(CXX))) + CXXFLAGS+=-fdiagnostics-color=always +else ifneq (,$(findstring clang,$(CXX))) + CXXFLAGS+=-fcolor-diagnostics endif # DEV ENV PATHS & CFG diff --git a/src/foundation_pEp_jniadapter__Blob.cc b/src/foundation_pEp_jniadapter__Blob.cc index e677997..8dfbf43 100644 --- a/src/foundation_pEp_jniadapter__Blob.cc +++ b/src/foundation_pEp_jniadapter__Blob.cc @@ -1,3 +1,5 @@ +#include +#include #include #include #include diff --git a/src/jniutils.cc b/src/jniutils.cc index b3eb89a..da8c6d4 100644 --- a/src/jniutils.cc +++ b/src/jniutils.cc @@ -1,3 +1,4 @@ +#include #include "jniutils.hh" #include #ifndef __LP64__ From 7238fc660ae66cd08ed89d4b520d8836aae2b70d Mon Sep 17 00:00:00 2001 From: Hussein Kasem Date: Fri, 1 May 2020 10:41:20 +0200 Subject: [PATCH 07/17] Add build instructionds for Android --- android/README.md | 72 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 android/README.md diff --git a/android/README.md b/android/README.md new file mode 100644 index 0000000..7def56c --- /dev/null +++ b/android/README.md @@ -0,0 +1,72 @@ +# Build pEpJNIAdapter for Android + +** Asuming machine is already set up to build pEp Engine and Sequoia! ** +## Install dependencies + +```bash +sudo port -N install gsed wget autoconf automake libtool md5sha1sum openjdk8 + +## optionaly (not needed if using Android Studio) +sudo port -N install gradle + +``` + +## Install NDK +It can be done with the SDK and the sdkmanager cli tool, or using Android Studio. + +Android studio -> Configure -> SDK Manager -> SDK Tools (tab) -> Select NDK and install + +Tip: To install other versions click on "Show packages details" and select the desired NDK version (Currently using: 21.0.6113669) + +## Required env\_vars (for MacOS): + +``` bash +export JAVA_HOME=$(/usr/libexec/java_home -v 1.8) +export ANDROID_NDK=$ANDROID_SDK/ndk/21.0.6113669 +export HOST_TAG=darwin-x86_64 +export ANDROID_MIN_SDK_32=18 +export ANDROID_MIN_SDK_64=21 +export NDK_TOOLCHAIN=$ANDROID_NDK/toolchains/llvm/prebuilt/$HOST_TAG + +export PATH=$PATH:ANDROID_NDK/bin +``` + +## Add Rust android targets + +```bash +rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android +``` + +Tell rust the location of the new target linker and AR + +```bash +echo " +[target.aarch64-linux-android] +ar = \"$NDK_TOOLCHAIN/bin/aarch64-linux-android-ar\" +linker = \"$NDK_TOOLCHAIN/bin/aarch64-linux-android$ANDROID_MIN_SDK_64-clang\" + +[target.armv7-linux-androideabi] +ar = \"$NDK_TOOLCHAIN/bin/arm-linux-androideabi-ar\" +linker = \"$NDK_TOOLCHAIN/bin/armv7a-linux-androideabi$ANDROID_MIN_SDK_32-clang\" + +[target.x86_64-linux-android] +ar = \"$NDK_TOOLCHAIN/bin/x86_64-linux-android-ar\" +linker = \"$NDK_TOOLCHAIN/bin/x86_64-linux-android$ANDROID_MIN_SDK_64-clang\" + +[target.i686-linux-android] +ar = \"$NDK_TOOLCHAIN/bin/i686-linux-android-ar\" +linker = \"$NDK_TOOLCHAIN/bin/i686-linux-android$ANDROID_MIN_SDK_32-clang\" +" >> $HOME/.cargo/config + +``` + +## Build it + +Open the android project with Android Studio, this will generate the file local.properties with the sdk location. + +To build can be done form the Gradle menu (on the right in android studio) and select the build task, or just calling gradle build form terminal. + +``` Bash +gradle build #Run inside JNIAdapter/android +``` + From 6d5af4bae8f3242f3a46fb8572c83937543b8011 Mon Sep 17 00:00:00 2001 From: heck Date: Tue, 5 May 2020 17:19:20 +0200 Subject: [PATCH 08/17] Fixed broken methods due to needed template changes. Verified by comparing results of test/regression against sync branch d6c12d6ca3d0 --- src/basic_api.cc | 28 ++++++++++++++-------------- src/pEp.yml2 | 3 +++ 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/basic_api.cc b/src/basic_api.cc index 2c06bb0..5d3d96a 100644 --- a/src/basic_api.cc +++ b/src/basic_api.cc @@ -13,7 +13,7 @@ extern "C" { using namespace pEp::JNIAdapter; using pEp::Adapter::session; -JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_Engine_trustwords( +JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_Engine__1trustwords( JNIEnv *env, jobject obj, jobject ident @@ -58,7 +58,7 @@ JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_Engine_trustwords( return from_string(env, words); } -JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Engine_myself( +JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Engine__1myself( JNIEnv *env, jobject obj, jobject ident @@ -84,7 +84,7 @@ JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Engine_myself( return from_identity(env, _ident); } -JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Engine_updateIdentity( +JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Engine__1updateIdentity( JNIEnv *env, jobject obj, jobject ident @@ -105,7 +105,7 @@ JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Engine_updateIdentity( return from_identity(env, _ident); } -JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Engine_setOwnKey( +JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Engine__1setOwnKey( JNIEnv *env, jobject obj, jobject ident, @@ -134,7 +134,7 @@ JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Engine_setOwnKey( return from_identity(env, _ident); } -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine_keyMistrusted( +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1keyMistrusted( JNIEnv *env, jobject obj, jobject ident @@ -165,7 +165,7 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine_keyMistrusted( ::key_mistrusted(session(), _ident); } -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine_keyResetTrust( +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1keyResetTrust( JNIEnv *env, jobject obj, jobject ident @@ -196,7 +196,7 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine_keyResetTrust( ::key_reset_trust(session(), _ident); } -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine_trustPersonalKey( +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1trustPersonalKey( JNIEnv *env, jobject obj, jobject ident @@ -227,7 +227,7 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine_trustPersonalKey( ::trust_personal_key(session(), _ident); } -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine_trustOwnKey( +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1trustOwnKey( JNIEnv *env, jobject obj, jobject ident @@ -282,7 +282,7 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine_importKey( env->ReleaseByteArrayElements(key, (jbyte *) _key, JNI_ABORT); } -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine_config_1passive_1mode( +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1config_1passive_1mode( JNIEnv *env, jobject obj, jboolean enable @@ -300,7 +300,7 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine_config_1passive_1mo } -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine_config_1unencrypted_1subject( +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1config_1unencrypted_1subject( JNIEnv *env, jobject obj, jboolean enable @@ -317,7 +317,7 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine_config_1unencrypted ::config_unencrypted_subject(session(), (bool)enable); } -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine_blacklist_1add( +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1blacklist_1add( JNIEnv *env, jobject obj, jbyteArray fpr @@ -346,7 +346,7 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine_blacklist_1add( } -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine_blacklist_1delete( +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1blacklist_1delete( JNIEnv *env, jobject obj, jbyteArray fpr @@ -375,7 +375,7 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine_blacklist_1delete( } -JNIEXPORT jboolean JNICALL Java_foundation_pEp_jniadapter_Engine_blacklist_1is_1listed( +JNIEXPORT jboolean JNICALL Java_foundation_pEp_jniadapter_Engine__1blacklist_1is_1listed( JNIEnv *env, jobject obj, jbyteArray fpr @@ -406,7 +406,7 @@ JNIEXPORT jboolean JNICALL Java_foundation_pEp_jniadapter_Engine_blacklist_1is_1 return (jboolean)_listed; } -JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_Engine_getCrashdumpLog( +JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_Engine__1getCrashdumpLog( JNIEnv *env, jobject obj, jint dummy, diff --git a/src/pEp.yml2 b/src/pEp.yml2 index 68e4b83..0a96c3f 100644 --- a/src/pEp.yml2 +++ b/src/pEp.yml2 @@ -250,6 +250,9 @@ namespace pEp { in CipherSuite suite ); + // "basic" methods are generated on the java side, but + // on the C++ side, manually implemented in basic_api.cc + basic string trustwords(identity ident); basic identity myself(identity ident); basic identity updateIdentity(identity ident); From c28abb29746fa933290eba57832fd53ced2b87ed Mon Sep 17 00:00:00 2001 From: heck Date: Tue, 5 May 2020 19:21:41 +0200 Subject: [PATCH 09/17] Bugfix: JNI-97 "r702 fails to build due to wrong include-path" --- Makefile.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.conf b/Makefile.conf index fa3f751..77601f1 100644 --- a/Makefile.conf +++ b/Makefile.conf @@ -21,7 +21,7 @@ LDFLAGS+=-shared $(ENGINE_LIB) $(AD_LIB) LDLIBS=-lstdc++ -lpEpEngine -lpEpAdapter -CXXFLAGS+=-fpermissive -fPIC -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/$(shell uname) $(AD_INC) $(ENGINE_INC) +CXXFLAGS+=-fpermissive -fPIC -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/$(shell uname | tr A-Z a-z) $(AD_INC) $(ENGINE_INC) ifneq (,$(findstring g++,$(CXX))) CXXFLAGS+=-fdiagnostics-color=always else ifneq (,$(findstring clang,$(CXX))) From cf5471a6178bbf327e25db8c3348abecd64ad2bc Mon Sep 17 00:00:00 2001 From: heck Date: Tue, 5 May 2020 22:32:17 +0200 Subject: [PATCH 10/17] New example local.conf file Replaced ENGINE_LIB,ENGINE_INC,AD_LIB,AD_INC. local.conf migration might be necessary, but see local.conf.example JAVA_HOME now guessed on linux make clean now cleans .so and .dylib always (now you can share the workspace between linux and mac) --- Makefile.conf | 42 ++++++------------- src/Makefile | 8 ++-- .../foundation/pEp/jniadapter/test/Makefile | 3 ++ .../pEp/jniadapter/test/Makefile.conf | 5 +-- 4 files changed, 23 insertions(+), 35 deletions(-) diff --git a/Makefile.conf b/Makefile.conf index 77601f1..459204b 100644 --- a/Makefile.conf +++ b/Makefile.conf @@ -3,17 +3,13 @@ # This file may be used under the terms of the GNU General Public License version 3 # see LICENSE.txt -######### Header ######### HERE:=$(dir $(lastword $(MAKEFILE_LIST))) +PLATFORM:=$(shell uname | tr A-Z a-z) - -######### General ######### -BUILD_FOR:=$(shell uname) - - -######### Java ######### -#JAVA_HOME= - +# Guessing JAVA_HOME +ifeq ($(PLATFORM),linux) + JAVA_HOME=$(subst /bin,,$(dir $(realpath /usr/bin/javac))) +endif ######### C and C++ ######### CXXFLAGS+=-g -O0 -std=c++11 @@ -21,45 +17,33 @@ LDFLAGS+=-shared $(ENGINE_LIB) $(AD_LIB) LDLIBS=-lstdc++ -lpEpEngine -lpEpAdapter -CXXFLAGS+=-fpermissive -fPIC -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/$(shell uname | tr A-Z a-z) $(AD_INC) $(ENGINE_INC) +CXXFLAGS+=-fpermissive -fPIC -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/$(PLATFORM) $(AD_INC) $(ENGINE_INC) ifneq (,$(findstring g++,$(CXX))) CXXFLAGS+=-fdiagnostics-color=always else ifneq (,$(findstring clang,$(CXX))) CXXFLAGS+=-fcolor-diagnostics endif + # DEV ENV PATHS & CFG # The dev environment paths and configs are set to a default value which can be overridden by ./local.conf and overridden again by /local.conf -######### YML2 ######### +######### Default paths for dependencies ######### YML2_PATH=$(HOME)/yml2 YML2_PROC=$(YML2_PATH)/yml2proc $(YML2_OPTS) YML2_OPTS=--encoding=utf8 - -######### Engine ######### ENGINE_LIB_PATH=$(HOME)/lib ENGINE_INC_PATH=$(HOME)/include - -######### libAdapter ######### AD_LIB_PATH=$(HOME)/lib AD_INC_PATH=$(HOME)/include -######### Overrides ######### +######### Overrides from the config file(s) ######### -include $(HERE)/local.conf -include $(HERE)/src/local.conf -# Add Prefixes to paths, if not already explicitly set in local.conf(s) -ifndef ENGINE_LIB - ENGINE_LIB=-L$(ENGINE_LIB_PATH) -endif -ifndef ENGINE_INC - ENGINE_INC=-I$(ENGINE_INC_PATH) -endif -ifndef AD_LIB - AD_LIB=-L$(AD_LIB_PATH) -endif -ifndef AD_INC - AD_INC=-I$(AD_INC_PATH) -endif +ENGINE_LIB=-L$(ENGINE_LIB_PATH) +ENGINE_INC=-I$(ENGINE_INC_PATH) +AD_LIB=-L$(AD_LIB_PATH) +AD_INC=-I$(AD_INC_PATH) ifdef BUILD_CONFIG include $(BUILD_CONFIG) diff --git a/src/Makefile b/src/Makefile index d9c6645..e4ba5f5 100644 --- a/src/Makefile +++ b/src/Makefile @@ -20,12 +20,12 @@ endif LIBRARY=libpEpJNI.a JAR=pEp.jar -ifeq ($(BUILD_FOR),Linux) +ifeq ($(PLATFORM),linux) SHARED=libpEpJNI.so -else ifeq ($(BUILD_FOR),Darwin) +else ifeq ($(PLATFORM),darwin) SHARED=libpEpJNI.dylib else - $(error I dont know how to build for $(BUILD_FOR).) + $(error I dont know how to build for $(PLATFORM).) endif JAVA_SOURCES=foundation/pEp/jniadapter/AbstractEngine.java \ @@ -108,6 +108,8 @@ basic_api.o: basic_api.cc jniutils.hh throw_pEp_exception.hh .PHONY: clean clean: rm -f $(JAR) $(LIBRARY) $(SHARED) + rm -f *.so + rm -f *.dylib rm -f *.o rm -f *.class rm -f *.xml *.xsl diff --git a/test/java/foundation/pEp/jniadapter/test/Makefile b/test/java/foundation/pEp/jniadapter/test/Makefile index 7066698..c5ac816 100644 --- a/test/java/foundation/pEp/jniadapter/test/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/Makefile @@ -4,6 +4,7 @@ all: compile run: compile $(MAKE) -C basic run + $(MAKE) -C regression run #BROKEN $(MAKE) -C jni85 run $(MAKE) -C jni88 run $(MAKE) -C jni91 run @@ -12,6 +13,7 @@ run: compile compile: $(MAKE) -C basic compile + $(MAKE) -C regression compile #BROKEN $(MAKE) -C jni85 compile $(MAKE) -C jni88 compile $(MAKE) -C jni91 compile @@ -20,6 +22,7 @@ compile: clean: $(MAKE) -C basic clean + $(MAKE) -C regression clean $(MAKE) -C jni85 clean $(MAKE) -C jni88 clean $(MAKE) -C jni91 clean diff --git a/test/java/foundation/pEp/jniadapter/test/Makefile.conf b/test/java/foundation/pEp/jniadapter/test/Makefile.conf index bf281f3..0504c6a 100644 --- a/test/java/foundation/pEp/jniadapter/test/Makefile.conf +++ b/test/java/foundation/pEp/jniadapter/test/Makefile.conf @@ -10,13 +10,12 @@ CLASSPATH=.:$(REPOROOT)/src JAVA=java -Xcheck:jni -cp $(CLASSPATH) -Djava.library.path=$(CLASSPATH) -$(info If on Mac, make sure to disable SIP, or copy the libpEpEngine.dylib into here) ifdef ENGINE_LIB_PATH - ifeq ($(BUILD_FOR),Linux) + ifeq ($(PLATFORM),linux) ifndef LD_LIBRARY_PATH export LD_LIBRARY_PATH=$(ENGINE_LIB_PATH) endif - else ifeq ($(BUILD_FOR),Darwin) + else ifeq ($(PLATFORM),darwin) ifndef DYLD_LIBRARY_PATH export DYLD_LIBRARY_PATH=$(ENGINE_LIB_PATH) endif From e6b818bc39cd0ce4bcf63d60f2db7d30e74bb504 Mon Sep 17 00:00:00 2001 From: heck Date: Tue, 5 May 2020 22:58:26 +0200 Subject: [PATCH 11/17] Add local.conf.example --- local.conf.example | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 local.conf.example diff --git a/local.conf.example b/local.conf.example new file mode 100644 index 0000000..be8405d --- /dev/null +++ b/local.conf.example @@ -0,0 +1,22 @@ +# This is an Example build config file (local.conf) +# you might not need this file, but if the defaults dont work for you +# You can override them here. +# Tweak the values to your needs and rename it to local.conf + +######### C++ Compiler ######### +# Should work with clang and g++ +# CXX=g++ + +######### JAVA ######### +# JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home + +######### YML2 ######### +# YML2_PATH=$(HOME)/code/yml2 + +######### Engine ######### +# ENGINE_LIB_PATH=$(HOME)/local/lib +# ENGINE_INC_PATH=$(HOME)/local/include + +######### libAdapter ######### +# AD_LIB_PATH=$(HOME)/local/lib +# AD_INC_PATH=$(HOME)/local/include From b62446db0e9bff816b456b3ae2e6a2e42b51882d Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 6 May 2020 18:10:06 +0200 Subject: [PATCH 12/17] Add DEBUG or RELEASE build option --- Makefile.conf | 12 +++++++++++- local.conf.example | 2 ++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Makefile.conf b/Makefile.conf index 459204b..36bd911 100644 --- a/Makefile.conf +++ b/Makefile.conf @@ -12,7 +12,7 @@ ifeq ($(PLATFORM),linux) endif ######### C and C++ ######### -CXXFLAGS+=-g -O0 -std=c++11 +CXXFLAGS+=-O0 -std=c++11 LDFLAGS+=-shared $(ENGINE_LIB) $(AD_LIB) LDLIBS=-lstdc++ -lpEpEngine -lpEpAdapter @@ -35,6 +35,7 @@ ENGINE_LIB_PATH=$(HOME)/lib ENGINE_INC_PATH=$(HOME)/include AD_LIB_PATH=$(HOME)/lib AD_INC_PATH=$(HOME)/include +DEBUG=1 ######### Overrides from the config file(s) ######### -include $(HERE)/local.conf @@ -49,5 +50,14 @@ ifdef BUILD_CONFIG include $(BUILD_CONFIG) endif +# Debug or Release build +ifeq ($(DEBUG),1) + $(info Debug build (set DEBUG=0 for release build)) + CXXFLAGS+=-g +else + $(info Release Build (set DEBUG=1 for debug build)) + CXXFLAGS+=-DNDEBUG=1 +endif + # YML_PATH is needed in the environment of every call to a program of the YML2 distribution export YML_PATH=$(YML2_PATH) diff --git a/local.conf.example b/local.conf.example index be8405d..8de0aa8 100644 --- a/local.conf.example +++ b/local.conf.example @@ -6,6 +6,8 @@ ######### C++ Compiler ######### # Should work with clang and g++ # CXX=g++ +# DEBUG=1 # DEBUG Build (Default) +# DEBUG=0 # RELEASE Build ######### JAVA ######### # JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home From 4947771c31bcb464c5cbcd9bb69278497b6f25e0 Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 6 May 2020 20:01:39 +0200 Subject: [PATCH 13/17] Enhance TestUtils. Much of this should be moved to the API itself. --- .../pEp/jniadapter/test/utils/TestUtils.java | 103 +++++++++++++++--- 1 file changed, 88 insertions(+), 15 deletions(-) diff --git a/test/java/foundation/pEp/jniadapter/test/utils/TestUtils.java b/test/java/foundation/pEp/jniadapter/test/utils/TestUtils.java index 3833b18..57e8374 100644 --- a/test/java/foundation/pEp/jniadapter/test/utils/TestUtils.java +++ b/test/java/foundation/pEp/jniadapter/test/utils/TestUtils.java @@ -1,7 +1,12 @@ package foundation.pEp.jniadapter.test.utils; import foundation.pEp.jniadapter.*; +import java.util.ArrayList; +import java.util.Vector; + public class TestUtils { + + public static void sleep(int mSec) { try { Thread.sleep(mSec); @@ -10,18 +15,88 @@ public class TestUtils { } } - public static String identityToString(Identity i) { - String ret = "address: " + i.address + "\n"; - ret += "fpr: " + i.fpr + "\n"; - ret += "username: " + i.username + "\n"; - ret += "user_id: " + i.user_id + "\n"; - ret += "flags: " + i.flags + "\n"; - ret += "lang: " + i.lang + "\n"; - ret += "me: " + i.me + "\n"; - ret += "comm_type: " + i.comm_type; + public static String identityToString(Identity i, Boolean full) { + String ret = ""; + if(full) { + ret += "address: " + i.address + "\n"; + ret += "fpr: " + i.fpr + "\n"; + ret += "username: " + i.username + "\n"; + ret += "user_id: " + i.user_id + "\n"; + ret += "flags: " + i.flags + "\n"; + ret += "lang: " + i.lang + "\n"; + ret += "me: " + i.me + "\n"; + ret += "comm_type: " + i.comm_type + "\n"; + } else { + ret += i.address + "/" + i.fpr; + } + ret = ret.trim(); + return ret; + } + + public static String msgToString(Message msg) { + String ret = ""; + ret += "Id: " + msg.getId() + "\n"; + ret += "getDir: " + msg.getDir().toString() + "\n"; + ret += "getShortmsg: " + msg.getShortmsg() + "\n"; + ret += "getLongmsg: " + msg.getLongmsg() + "\n"; + ret += "getLongmsgFormatted: " + msg.getLongmsgFormatted() + "\n"; + ret += "getAttachments: \n" + blobListToString(msg.getAttachments()) + "\n"; + ret += "getFrom: " + identityToString(msg.getFrom(), false) + "\n"; + ret += "getTo: " + identityListToString(msg.getTo(), false) + "\n"; +// FIXME: They all throw NullPointerException +// ret += "getRecvBy: " + identityToString(msg.getRecvBy(), false) + "\n"; +// ret += "getCc: " + identityListToString(msg.getCc(), false)+ "\n"; +// ret += "getBcc: " + identityListToString(msg.getBcc(), false) + "\n"; +// ret += "getReplyTo: " + identityListToString(msg.getReplyTo(), false) + "\n"; +// ret += "getInReplyTo: " + stringVectorToString(msg.getInReplyTo()) + "\n"; +// ret += "getReferences: " + stringVectorToString(msg.getReferences()) + "\n"; +// ret += "getKeywords: " + stringVectorToString(msg.getKeywords()) + "\n"; + ret += "getComments: " + msg.getComments() + "\n"; + ret += "getOptFields: " + stringPairListToString(msg.getOptFields()) + "\n"; + ret += "getEncFormat: " + msg.getEncFormat().toString() + "\n"; + ret = ret.trim(); + return ret; + } + + public static String stringVectorToString(Vector vS) { + String ret = ""; + for (String s : vS){ + ret += s + "\n"; + } + ret = ret.trim(); return ret; } + public static String identityListToString(Vector vI, Boolean full) { + String ret = ""; + for(Identity i : vI) { + ret += identityToString(i, full) + "\n"; + } + ret = ret.trim(); + return ret; + } + + public static String stringPairListToString(ArrayList> opts) { + String ret = ""; + for(Pair el : opts) { + ret += el.first + "=" + el.second + "\n"; + }; + ret = ret.trim(); + return ret; + } + + public static String blobListToString(Vector attachments) { + String ret = ""; + ret += "Attachments count: " + attachments.size() + "\n"; + for( Blob a: attachments) { + ret += "-----BEGIN Attachment index: " + attachments.indexOf(a) + "-----\n"; + ret += a.toString(); + ret += "-----END Attachment index: " + attachments.indexOf(a) + "-----\n"; + } + ret = ret.trim(); + return ret; + } + // ------------------------ Logging ------------------------ private static boolean logEnabled = true; @@ -43,23 +118,21 @@ public class TestUtils { } public static void logH1(String msg) { - String decorationStr = getDecoratorString(msg, "="); - log(decorationStr + " " + msg.toUpperCase() + " " + decorationStr); + log( getDecoratedString(msg, "=")); } public static void logH2(String msg) { - String decorationStr = getDecoratorString(msg, "-"); - log(decorationStr + " " + msg + " " + decorationStr); + log( getDecoratedString(msg, "-")); } - private static String getDecoratorString(String msg, String s) { + private static String getDecoratedString(String msg, String s) { int lineWidth = 80; String decorationChar = s; String decorationStr = ""; for (int i = 0; i < Math.ceil((lineWidth - msg.length() + 2) / 2); i++) { decorationStr += decorationChar; } - return decorationStr; + return decorationStr + " " + msg + " " + decorationStr; } public static void logSectEnd(String msg) { From d51a8066c0645b9162a0c354f73f4bb31f44c3df Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 6 May 2020 22:54:30 +0200 Subject: [PATCH 14/17] Add keydata for Alice and Bob --- test/resources/test_keys/alice-pub.asc | 30 +++++++ test/resources/test_keys/alice-sec.asc | 57 ++++++++++++++ test/resources/test_keys/bob-pub.asc | 51 ++++++++++++ test/resources/test_keys/bob-sec.asc | 105 +++++++++++++++++++++++++ 4 files changed, 243 insertions(+) create mode 100644 test/resources/test_keys/alice-pub.asc create mode 100644 test/resources/test_keys/alice-sec.asc create mode 100644 test/resources/test_keys/bob-pub.asc create mode 100644 test/resources/test_keys/bob-sec.asc diff --git a/test/resources/test_keys/alice-pub.asc b/test/resources/test_keys/alice-pub.asc new file mode 100644 index 0000000..ce85ca1 --- /dev/null +++ b/test/resources/test_keys/alice-pub.asc @@ -0,0 +1,30 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQENBF6lj68BCAC7dqBN0DIA+gRLHeLV5v96hs+YEOEw4oqjDGTuAbnyJ0omOmKu +8I3cT6hhGoAx61O5bVogiZ5i5MUa0sJcyJa3ACH5XucHmKCrXS1m6NXtWPDrAKvy +TaMmItcF5pSR8YvRimdZ+YxcekjDMhH1Afa8SODwpMGOM9OHfNiLtJ2DAbzFXZ7E +TbNZ1CPc9jTEb7MFVnQx9Q2zsxYIAg/C3TAbMrBm+n4UX1SRhoaNcxepEvGIp0DH +u+FbG3r520HmIcSJPt0LUf0MfF3AI+t2jVCeI1ht/cyAjKdm+MqHo7vH9yCftYgT +RlF5/+oyEv1twYfFW3zb5EOeuOsJHkdgOZlFABEBAAG0GWFsaWNlIDxhbGljZUBw +ZXB0ZXN0Lm9yZz6JAVQEEwEIAD4WIQRyQ/QYAVtywQnCbE0X6rVcaHJFmgUCXqWP +rwIbAwUJA8JnAAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRAX6rVcaHJFmgrk +B/wKW2frr+XvXr23fVg85S8S+dGEVRYbLgCehPS02y09dt4knJ7x9aHe1kGRDRYg +79hYGWcOeMMRn5MnQhUFSZIeWsXtnXzhFLRLALl3A/k+gt8cn7f2Riq2uWNFuUli +2pn+KjQduh8w+xA42OEW33UfucDWiSdoIx4cfd/SNwsUu1sS3fug62JPTzOeYeEq +QnKMMw+Cyjtq37oGaMDddWSTGurXDP7E36pkK7S1rmiiZNZZ+GyMtBIF5D0jYdMw +cwthE1N+v+Qh/1rJu2piDp12+vImDNdKP0jPHh8RDhZJlKqT5Ni+SbBYd1izs29O +KlqWzxsvmJkOwrfpEJk5XxATuQENBF6lj68BCADG2CblwipT9LtahZMrrO7d/+Vg +wh+u2ldFPRA7K37BDJkWqq2+czh/wgYEOpXhkgWLqj042+PqQwSb+quwjVv7cETI +TMW7/IViHr7rOh4JHsC92UJ74DCXYODdAwP6SYbdplgROmrT6LqRbrAwHRIz71ub +upM9dW1FpMV7MKceIfu4CNRcAiHNb/gz5ws5d+g+PicV4480jQQat1L/r+bDDX7P +sIiABdaZZgLhqEhyaEaEmARdm1Ken3Ce2faYwI6WkEGQsVmlklUq6coPRTYC2P6Y +uDNMLfMVAtLi+Qx0Ax1bNxtkJe71p1ysO6h3W+3unZ88zUNsZXB1qBhcnJNZABEB +AAGJATwEGAEIACYWIQRyQ/QYAVtywQnCbE0X6rVcaHJFmgUCXqWPrwIbDAUJA8Jn +AAAKCRAX6rVcaHJFmlPsB/wLHi7dzZ601cYIj3XZjCqEptFOZ9BSLXMLzzcfca2A +9ezoIGV0+LzwfAsTYRqi/AbQnhpoBhaE/tfnJKDFT+2+DBbCdDw7UuZXW4furW17 +inyXdt9ZAU0L1/5221FNmuNGI20RepX9HsDADeRzulU1DQ7PM0OBNqNxLJE+/59/ +QfEIgKrSPOQXlNtieXFPqwQGXR6Xa4no+7ma7hKPj2K8HwqAOp4S51Lwr+UnSC2J +sphDAZ6JhrnCCq12Q6blAONT9tM4uzxJE927VmFuqDIMik9tW310CNiUZWds+gN7 +Qp3iKQbnleDJMUWTuF8nOphG2ifQh2LG/MoR3LI5Y8Ml +=tIZY +-----END PGP PUBLIC KEY BLOCK----- diff --git a/test/resources/test_keys/alice-sec.asc b/test/resources/test_keys/alice-sec.asc new file mode 100644 index 0000000..11f6334 --- /dev/null +++ b/test/resources/test_keys/alice-sec.asc @@ -0,0 +1,57 @@ +-----BEGIN PGP PRIVATE KEY BLOCK----- + +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 +=V2ss +-----END PGP PRIVATE KEY BLOCK----- diff --git a/test/resources/test_keys/bob-pub.asc b/test/resources/test_keys/bob-pub.asc new file mode 100644 index 0000000..aa55bc7 --- /dev/null +++ b/test/resources/test_keys/bob-pub.asc @@ -0,0 +1,51 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +=C4RU +-----END PGP PUBLIC KEY BLOCK----- diff --git a/test/resources/test_keys/bob-sec.asc b/test/resources/test_keys/bob-sec.asc new file mode 100644 index 0000000..64ef2f0 --- /dev/null +++ b/test/resources/test_keys/bob-sec.asc @@ -0,0 +1,105 @@ +-----BEGIN PGP PRIVATE KEY BLOCK----- + +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 +=loxY +-----END PGP PRIVATE KEY BLOCK----- From 680703e20e0048a461bd84cf49d93a1aeae52aa8 Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 6 May 2020 23:41:19 +0200 Subject: [PATCH 15/17] NullPointer Resistant msgToString() created JNI-99 - "Class Message: getter should never throw NullPointerExceptions" --- .../pEp/jniadapter/test/utils/TestUtils.java | 147 +++++++++++++++--- 1 file changed, 127 insertions(+), 20 deletions(-) diff --git a/test/java/foundation/pEp/jniadapter/test/utils/TestUtils.java b/test/java/foundation/pEp/jniadapter/test/utils/TestUtils.java index 57e8374..223c351 100644 --- a/test/java/foundation/pEp/jniadapter/test/utils/TestUtils.java +++ b/test/java/foundation/pEp/jniadapter/test/utils/TestUtils.java @@ -27,7 +27,7 @@ public class TestUtils { ret += "me: " + i.me + "\n"; ret += "comm_type: " + i.comm_type + "\n"; } else { - ret += i.address + "/" + i.fpr; + ret += i.address + "/" + i.user_id + "/" + i.fpr; } ret = ret.trim(); return ret; @@ -35,25 +35,132 @@ public class TestUtils { public static String msgToString(Message msg) { String ret = ""; - ret += "Id: " + msg.getId() + "\n"; - ret += "getDir: " + msg.getDir().toString() + "\n"; - ret += "getShortmsg: " + msg.getShortmsg() + "\n"; - ret += "getLongmsg: " + msg.getLongmsg() + "\n"; - ret += "getLongmsgFormatted: " + msg.getLongmsgFormatted() + "\n"; - ret += "getAttachments: \n" + blobListToString(msg.getAttachments()) + "\n"; - ret += "getFrom: " + identityToString(msg.getFrom(), false) + "\n"; - ret += "getTo: " + identityListToString(msg.getTo(), false) + "\n"; -// FIXME: They all throw NullPointerException -// ret += "getRecvBy: " + identityToString(msg.getRecvBy(), false) + "\n"; -// ret += "getCc: " + identityListToString(msg.getCc(), false)+ "\n"; -// ret += "getBcc: " + identityListToString(msg.getBcc(), false) + "\n"; -// ret += "getReplyTo: " + identityListToString(msg.getReplyTo(), false) + "\n"; -// ret += "getInReplyTo: " + stringVectorToString(msg.getInReplyTo()) + "\n"; -// ret += "getReferences: " + stringVectorToString(msg.getReferences()) + "\n"; -// ret += "getKeywords: " + stringVectorToString(msg.getKeywords()) + "\n"; - ret += "getComments: " + msg.getComments() + "\n"; - ret += "getOptFields: " + stringPairListToString(msg.getOptFields()) + "\n"; - ret += "getEncFormat: " + msg.getEncFormat().toString() + "\n"; + ret += "getAttachments: "; + try { + ret += blobListToString(msg.getAttachments()) + "\n"; + } catch(Throwable e) { + ret += e.toString() + "\n"; + } + + ret += "Id: "; + try { + ret += msg.getId() + "\n"; + } catch(Throwable e) { + ret += e.toString() + "\n"; + } + + ret += "getDir: "; + try { + ret += msg.getDir().toString() + "\n"; + } catch(Throwable e) { + ret += e.toString() + "\n"; + } + + ret += "getShortmsg: "; + try { + ret += msg.getShortmsg() + "\n"; + } catch(Throwable e) { + ret += e.toString() + "\n"; + } + + ret += "getLongmsg: "; + try { + ret += msg.getLongmsg() + "\n"; + } catch(Throwable e) { + ret += e.toString() + "\n"; + } + + ret += "getLongmsgFormatted: "; + try { + ret += msg.getLongmsgFormatted() + "\n"; + } catch(Throwable e) { + ret += e.toString() + "\n"; + } + + ret += "getFrom: "; + try { + ret += identityToString(msg.getFrom(), false) + "\n"; + } catch(Throwable e) { + ret += e.toString() + "\n"; + } + + ret += "getTo: "; + try { + ret += identityListToString(msg.getTo(), false) + "\n"; + } catch(Throwable e) { + ret += e.toString() + "\n"; + } + + ret += "getRecvBy: "; + try { + ret += identityToString(msg.getRecvBy(), false) + "\n"; + } catch(Throwable e) { + ret += e.toString() + "\n"; + } + + ret += "getCc: "; + try { + ret += identityListToString(msg.getCc(), false)+ "\n"; + } catch(Throwable e) { + ret += e.toString() + "\n"; + } + + ret += "getBcc: "; + try { + ret += identityListToString(msg.getBcc(), false) + "\n"; + } catch(Throwable e) { + ret += e.toString() + "\n"; + } + + ret += "getReplyTo: "; + try { + ret += identityListToString(msg.getReplyTo(), false) + "\n"; + } catch(Throwable e) { + ret += e.toString() + "\n"; + } + + ret += "getInReplyTo: "; + try { + ret += stringVectorToString(msg.getInReplyTo()) + "\n"; + } catch(Throwable e) { + ret += e.toString() + "\n"; + } + + ret += "getReferences: "; + try { + ret += stringVectorToString(msg.getReferences()) + "\n"; + } catch(Throwable e) { + ret += e.toString() + "\n"; + } + + ret += "getKeywords: "; + try { + ret += stringVectorToString(msg.getKeywords()) + "\n"; + } catch(Throwable e) { + ret += e.toString() + "\n"; + } + + ret += "getComments: "; + try { + ret += msg.getComments() + "\n"; + } catch(Throwable e) { + ret += e.toString() + "\n"; + } + + ret += "getOptFields: "; + try { + ret += stringPairListToString(msg.getOptFields()) + "\n"; + } catch(Throwable e) { + ret += e.toString() + "\n"; + } + + ret += "getEncFormat: "; + try { + ret += msg.getEncFormat().toString() + "\n"; + } catch(Throwable e) { + ret += e.toString() + "\n"; + } + ret = ret.trim(); return ret; } From 6492cd7b5ef6fa5c33872caf65823a401b276001 Mon Sep 17 00:00:00 2001 From: heck Date: Thu, 7 May 2020 00:27:29 +0200 Subject: [PATCH 16/17] minor fix in jni-92 due to TestUtils change --- test/java/foundation/pEp/jniadapter/test/jni92/TestMain.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/java/foundation/pEp/jniadapter/test/jni92/TestMain.java b/test/java/foundation/pEp/jniadapter/test/jni92/TestMain.java index a646590..8caee4f 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni92/TestMain.java +++ b/test/java/foundation/pEp/jniadapter/test/jni92/TestMain.java @@ -62,7 +62,7 @@ class TestMain { TestUtils.log("own idents: " + v.size()); v.forEach( i -> { - TestUtils.log(TestUtils.identityToString(i)); + TestUtils.log(TestUtils.identityToString(i, true)); }); e.getVersion(); e.OpenPGP_list_keyinfo(""); From 78a7ad7826458820f7e0b5a8ced69bc049dc8972 Mon Sep 17 00:00:00 2001 From: heck Date: Thu, 7 May 2020 01:17:33 +0200 Subject: [PATCH 17/17] Generally clean PER_USER_DIRECTORY (.pEp) before every testrun. --- test/java/foundation/pEp/jniadapter/test/basic/Makefile | 2 +- test/java/foundation/pEp/jniadapter/test/jni85/Makefile | 2 +- test/java/foundation/pEp/jniadapter/test/jni88/Makefile | 2 +- test/java/foundation/pEp/jniadapter/test/jni91/Makefile | 2 +- test/java/foundation/pEp/jniadapter/test/jni92/Makefile | 2 +- test/java/foundation/pEp/jniadapter/test/jni94/Makefile | 2 +- test/java/foundation/pEp/jniadapter/test/regression/Makefile | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/test/java/foundation/pEp/jniadapter/test/basic/Makefile b/test/java/foundation/pEp/jniadapter/test/basic/Makefile index 440b729..4d557f0 100644 --- a/test/java/foundation/pEp/jniadapter/test/basic/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/basic/Makefile @@ -13,7 +13,7 @@ JAVA_CLASSES = \ all: compile $(MAKE) run -run: compile +run: compile clean-pep-home cd $(JAVA_CWD);HOME=$(JAVA_PEP_HOME_DIR) $(JAVA) $(JAVA_PKG_BASENAME).$(TEST_UNIT_NAME).TestMain compile: $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/jniadapter/test/jni85/Makefile b/test/java/foundation/pEp/jniadapter/test/jni85/Makefile index f8e455b..8b96ae7 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni85/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/jni85/Makefile @@ -13,7 +13,7 @@ JAVA_CLASSES = \ all: compile $(MAKE) run -run: compile +run: compile clean-pep-home cd $(JAVA_CWD);HOME=$(JAVA_PEP_HOME_DIR) $(JAVA) $(JAVA_PKG_BASENAME).$(TEST_UNIT_NAME).TestMain compile: $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/jniadapter/test/jni88/Makefile b/test/java/foundation/pEp/jniadapter/test/jni88/Makefile index 1bd434a..407b9f5 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni88/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/jni88/Makefile @@ -12,7 +12,7 @@ JAVA_CLASSES = \ all: compile $(MAKE) run -run: compile +run: compile clean-pep-home cd $(JAVA_CWD);HOME=$(JAVA_PEP_HOME_DIR) $(JAVA) $(JAVA_PKG_BASENAME).$(TEST_UNIT_NAME).TestMain compile: $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/jniadapter/test/jni91/Makefile b/test/java/foundation/pEp/jniadapter/test/jni91/Makefile index 78ee0da..0035de8 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni91/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/jni91/Makefile @@ -12,7 +12,7 @@ JAVA_CLASSES = \ all: compile $(MAKE) run -run: compile +run: compile clean-pep-home cd $(JAVA_CWD);HOME=$(JAVA_PEP_HOME_DIR) $(JAVA) $(JAVA_PKG_BASENAME).$(TEST_UNIT_NAME).TestMain compile: $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/jniadapter/test/jni92/Makefile b/test/java/foundation/pEp/jniadapter/test/jni92/Makefile index 452e73e..fac4197 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni92/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/jni92/Makefile @@ -13,7 +13,7 @@ JAVA_CLASSES = \ all: compile $(MAKE) run -run: compile +run: compile clean-pep-home cd $(JAVA_CWD);HOME=$(JAVA_PEP_HOME_DIR) $(JAVA) $(JAVA_PKG_BASENAME).$(TEST_UNIT_NAME).TestMain compile: $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/jniadapter/test/jni94/Makefile b/test/java/foundation/pEp/jniadapter/test/jni94/Makefile index e628c5f..d4cc4b4 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni94/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/jni94/Makefile @@ -12,7 +12,7 @@ JAVA_CLASSES = \ all: compile $(MAKE) run -run: compile +run: compile clean-pep-home cd $(JAVA_CWD);HOME=$(JAVA_PEP_HOME_DIR) $(JAVA) $(JAVA_PKG_BASENAME).$(TEST_UNIT_NAME).TestMain compile: $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/jniadapter/test/regression/Makefile b/test/java/foundation/pEp/jniadapter/test/regression/Makefile index 526525d..e02cf3a 100644 --- a/test/java/foundation/pEp/jniadapter/test/regression/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/regression/Makefile @@ -12,7 +12,7 @@ JAVA_CLASSES = \ all: compile $(MAKE) run -run: compile +run: compile clean-pep-home cd $(JAVA_CWD);pwd;HOME=$(JAVA_PEP_HOME_DIR) $(JAVA) $(JAVA_PKG_BASENAME).$(TEST_UNIT_NAME).TestMain compile: $(JAVA_CLASSES)