From e10209e8fcb642b03416220eff8821091ee16d9a Mon Sep 17 00:00:00 2001 From: Hussein Kasem Date: Tue, 21 Apr 2020 17:55:04 +0200 Subject: [PATCH 1/4] 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 2/4] 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 3/4] 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 6d5af4bae8f3242f3a46fb8572c83937543b8011 Mon Sep 17 00:00:00 2001 From: heck Date: Tue, 5 May 2020 17:19:20 +0200 Subject: [PATCH 4/4] 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);