Browse Source

merge in JNI-106 - Java Interfaces And Project Structure

JNI-119 Release_2.1.0-RC13
heck 5 years ago
parent
commit
bccb7c6c97
  1. 63
      .hgignore
  2. 9
      Makefile
  3. 31
      Makefile.conf
  4. 2
      android/build.gradle
  5. 16
      android/jni/Android.mk
  6. 2
      android/src/foundation/pEp/jniadapter/AndroidHelper.java
  7. 27
      local.conf.example
  8. 278
      src/Makefile
  9. 60
      src/codegen/Makefile
  10. 14
      src/codegen/gen_cpp_Engine.ysl2
  11. 7
      src/codegen/gen_cpp_Message.ysl2
  12. 122
      src/codegen/gen_java_Engine.ysl2
  13. 327
      src/codegen/gen_java_Message.ysl2
  14. 65
      src/codegen/gen_throw_pEp_exception.ysl2
  15. 0
      src/codegen/pEp.yml2
  16. 0
      src/codegen/textutils.ysl2
  17. 0
      src/codegen/types_c.ysl2
  18. 0
      src/codegen/types_java.ysl2
  19. 0
      src/cxx/basic_api.cc
  20. 14
      src/cxx/foundation_pEp_jniadapter_AbstractEngine.cc
  21. 0
      src/cxx/foundation_pEp_jniadapter__Blob.cc
  22. 0
      src/cxx/get_header.cc
  23. 0
      src/cxx/identity_api.cc
  24. 0
      src/cxx/jniutils.cc
  25. 0
      src/cxx/jniutils.hh
  26. 0
      src/cxx/passphrase_callback.hh
  27. 0
      src/cxx/passphrase_callback.hxx
  28. 28
      src/foundation/pEp/jniadapter/Engine.java.target
  29. 218
      src/foundation/pEp/jniadapter/Message.java.target
  30. 11
      src/foundation/pEp/jniadapter/UniquelyIdentifiable.java
  31. 252
      src/gen_java_Message.ysl2
  32. 35
      src/gen_java_exceptions.ysl2
  33. 64
      src/gen_throw_pEp_exception.ysl2
  34. 145
      src/java/foundation/pEp/jniadapter/AbstractEngine.java
  35. 20
      src/java/foundation/pEp/jniadapter/Blob.java
  36. 0
      src/java/foundation/pEp/jniadapter/CommType.java
  37. 26
      src/java/foundation/pEp/jniadapter/Identity.java
  38. 0
      src/java/foundation/pEp/jniadapter/Pair.java
  39. 7
      src/java/foundation/pEp/jniadapter/Sync.java
  40. 12
      src/java/foundation/pEp/jniadapter/UniquelyIdentifiable.java
  41. 115
      src/java/foundation/pEp/jniadapter/Utils.java
  42. 8
      src/java/foundation/pEp/jniadapter/_Blob.java
  43. 10
      src/java/foundation/pEp/jniadapter/_Identity.java
  44. 7
      src/java/foundation/pEp/jniadapter/decrypt_message_Return.java
  45. 30
      src/java/foundation/pEp/jniadapter/interfaces/AbstractEngineInterface.java
  46. 5
      src/java/foundation/pEp/jniadapter/interfaces/BlobInterface.java
  47. 7
      src/java/foundation/pEp/jniadapter/interfaces/IdentityInterface.java
  48. 6
      test/java/foundation/pEp/jniadapter/test/Makefile.conf
  49. 7
      test/java/foundation/pEp/jniadapter/test/basic/TestMain.java
  50. 1
      test/java/foundation/pEp/jniadapter/test/jni111/TestAlice.java
  51. 1
      test/java/foundation/pEp/jniadapter/test/jni114/TestAlice.java
  52. 2
      test/java/foundation/pEp/jniadapter/test/jni88/TestMain.java
  53. 1
      test/java/foundation/pEp/jniadapter/test/jni91/TestMain.java
  54. 5
      test/java/foundation/pEp/jniadapter/test/jni92/TestMain.java
  55. 6
      test/java/foundation/pEp/jniadapter/test/jni98/TestMain.java
  56. 4
      test/java/foundation/pEp/jniadapter/test/templateAliceBob/TestAlice.java
  57. 4
      test/java/foundation/pEp/jniadapter/test/templateAliceBob/TestBob.java

63
.hgignore

@ -3,44 +3,52 @@ syntax: glob
# ignore all of them # ignore all of them
*.class *.class
*.jar
*.swp
*.o
*.a
*.dylib
*.so
*.orig
*~
.DS_Store
*.db
*.log *.log
.DS_Store
# ignore generated files # ignore config files
local.conf
# ignore build and dist dirs
build/*
dist/*
org_pEp_*.h # ignore generated files
org_pEp_*.cc status_list.yml2
pEp_*.h passphrase_status_list.yml2
pEp_*.cc
org/pEp/jniadapter/pEp*.java
foundation_pEp_*.h
foundation_pEp_*.cc
foundation/pEp/jniadapter/pEp*.java
pEp/jniadapter/pEp*.java foundation_pEp_jniadapter__Blob.h
foundation_pEp_jniadapter_AbstractEngine.h
foundation_pEp_jniadapter_Engine.*
foundation_pEp_jniadapter_Message.*
foundation_pEp_jniadapter_Identity.h
throw_pEp_exception.* throw_pEp_exception.*
src/java/foundation/pEp/jniadapter/exceptions/*.java
CipherSuite.java
Color.java Color.java
DecryptFlags.java
Engine.java Engine.java
EngineInterface.java
IdentityFlags.java
Message.java Message.java
DecryptFlags.java MessageInterface.java
Rating.java Rating.java
Status.java Status.java
SyncHandshakeResult.java SyncHandshakeResult.java
IdentityFlags.java
SyncHandshakeSignal.java SyncHandshakeSignal.java
CipherSuite.java PassphraseType.java
# ignore pep-homes
test/resources/per-user-dirs/alice/.pEp
test/resources/per-user-dirs/bob/.pEp
test/resources/per-user-dirs/carol/.pEp
# FsMsgQueue data
test/resources/fsmsgqueue-test/Alice
test/resources/fsmsgqueue-test/Bob
test/resources/fsmsgqueue-test/Carol
passphrase_status_list.yml2
status_list.yml2
ndk*/ ndk*/
# ignore vim workspace # ignore vim workspace
@ -78,15 +86,12 @@ android/gradlew.bat
androidTests/gradle/wrapper/gradle-wrapper.properties androidTests/gradle/wrapper/gradle-wrapper.properties
androidTests/gradlew androidTests/gradlew
androidTests/gradlew.bat androidTests/gradlew.bat
src/org.tar.gz org.tar.gz
src/local.conf
*.iml *.iml
syntax: regexp syntax: regexp
android/external/[^.]* android/external/[^.]*
local.conf
src/local.conf
# Default ignored files # Default ignored files
.idea/ .idea/

9
Makefile

@ -3,7 +3,7 @@
# This file may be used under the terms of the GNU General Public License version 3 # This file may be used under the terms of the GNU General Public License version 3
# see LICENSE.txt # see LICENSE.txt
.PHONY: all src test clean doxy-all doxy-cxx doxy-java doxy-clean .PHONY: all src test clean doxy-all doxy-cxx doxy-java doxy-clean install uninstall
all: src all: src
@ -29,3 +29,10 @@ doxy-java: src
doxy-clean: doxy-clean:
rm -rf doc/doxygen/cxx rm -rf doc/doxygen/cxx
rm -rf doc/doxygen/java rm -rf doc/doxygen/java
install:
$(MAKE) -C src install
uninstall:
$(MAKE) -C src uninstall

31
Makefile.conf

@ -9,14 +9,15 @@ PLATFORM:=$(shell uname | tr A-Z a-z)
# DEV ENV PATHS & CFG # 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 <subdir>/local.conf # The dev environment paths and configs are set to a default value which can be overridden by ./local.conf and overridden again by <subdir>/local.conf
######### Build Config Defaults ######### ######### Build Config Defaults #########
DEBUG=1 DEBUG=0
YML2_PATH=$(HOME)/yml2 PREFIX=$(HOME)
YML2_PATH=$(PREFIX)/src/yml2
YML2_PROC=$(YML2_PATH)/yml2proc $(YML2_OPTS) YML2_PROC=$(YML2_PATH)/yml2proc $(YML2_OPTS)
YML2_OPTS=--encoding=utf8 YML2_OPTS=--encoding=utf8
ENGINE_LIB_PATH=$(HOME)/lib ENGINE_LIB_PATH=$(PREFIX)/lib
ENGINE_INC_PATH=$(HOME)/include ENGINE_INC_PATH=$(PREFIX)/include
AD_LIB_PATH=$(HOME)/lib AD_LIB_PATH=$(PREFIX)/lib
AD_INC_PATH=$(HOME)/include AD_INC_PATH=$(PREFIX)/include
### Guessing JAVA_HOME ### Guessing JAVA_HOME
ifeq ($(PLATFORM),linux) ifeq ($(PLATFORM),linux)
@ -24,6 +25,12 @@ ifeq ($(PLATFORM),linux)
endif endif
# Old versions of a Java distribution have a `javah` binary, new versions do not. This checks whether or not `javah` can be found in the Java distribution found in the directory `$JAVA_HOME`.
DUMMY:=$(shell which $(JAVA_HOME)/bin/javah)
ifeq ($(.SHELLSTATUS),0)
OLD_JAVA=true
endif
######### Overrides from the config file(s) ######### ######### Overrides from the config file(s) #########
ifneq ("$(wildcard $(HERE)local.conf)","") ifneq ("$(wildcard $(HERE)local.conf)","")
$(info including: $(HERE)local.conf) $(info including: $(HERE)local.conf)
@ -32,19 +39,17 @@ else
$(info Optional build config not found: $(HERE)local.conf) $(info Optional build config not found: $(HERE)local.conf)
endif endif
ifneq ("$(wildcard $(HERE)src/local.conf)","")
$(info including: $(HERE)src/local.conf)
-include $(HERE)src/local.conf
else
$(info Optional build config not found: $(HERE)src/local.conf)
endif
### Apply config ### Apply config
ENGINE_LIB=-L$(ENGINE_LIB_PATH) ENGINE_LIB=-L$(ENGINE_LIB_PATH)
ENGINE_INC=-I$(ENGINE_INC_PATH) ENGINE_INC=-I$(ENGINE_INC_PATH)
AD_LIB=-L$(AD_LIB_PATH) AD_LIB=-L$(AD_LIB_PATH)
AD_INC=-I$(AD_INC_PATH) AD_INC=-I$(AD_INC_PATH)
ifndef JAVA_HOME
$(error JAVA_HOME is not set!)
endif
JAVA_BIN_DIR=$(JAVA_HOME)/bin
######### C and C++ ######### ######### C and C++ #########
CXXFLAGS+=-O0 -std=c++11 -fpermissive -fPIC -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/$(PLATFORM) $(AD_INC) $(ENGINE_INC) CXXFLAGS+=-O0 -std=c++11 -fpermissive -fPIC -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/$(PLATFORM) $(AD_INC) $(ENGINE_INC)

2
android/build.gradle

@ -94,7 +94,7 @@ android {
// call source generation makefile target // call source generation makefile target
task genSources(type:Exec, dependsOn: 'genpEpEngineAsn1Sources') { task genSources(type:Exec, dependsOn: 'genpEpEngineAsn1Sources') {
workingDir '../src' workingDir '../src'
commandLine 'make', "-j${threadsToUse}", 'pEp.jar' commandLine 'make', "-j${threadsToUse}", 'lib-java'
} }
task genpEpEngineSyncSources(type:Exec) { task genpEpEngineSyncSources(type:Exec) {

16
android/jni/Android.mk

@ -47,14 +47,14 @@ LOCAL_STATIC_LIBRARIES := pEpEngine libetpan libiconv libuuid pEpAdapter libsequ
LOCAL_CPP_FEATURES += exceptions LOCAL_CPP_FEATURES += exceptions
LOCAL_CPPFLAGS += -std=c++11 -DANDROID_STL=c++_shared -DHAVE_PTHREADS -DDISABLE_SYNC -fuse-ld=lld LOCAL_CPPFLAGS += -std=c++11 -DANDROID_STL=c++_shared -DHAVE_PTHREADS -DDISABLE_SYNC -fuse-ld=lld
LOCAL_SRC_FILES := \ LOCAL_SRC_FILES := \
../../src/foundation_pEp_jniadapter_AbstractEngine.cc \ ../../src/cxx/foundation_pEp_jniadapter_AbstractEngine.cc \
../../src/foundation_pEp_jniadapter_Engine.cc \ ../../src/cxx/foundation_pEp_jniadapter_Engine.cc \
../../src/foundation_pEp_jniadapter_Message.cc \ ../../src/cxx/foundation_pEp_jniadapter_Message.cc \
../../src/foundation_pEp_jniadapter__Blob.cc \ ../../src/cxx/foundation_pEp_jniadapter__Blob.cc \
../../src/throw_pEp_exception.cc \ ../../src/cxx/throw_pEp_exception.cc \
../../src/basic_api.cc \ ../../src/cxx/basic_api.cc \
../../src/identity_api.cc \ ../../src/cxx/identity_api.cc \
../../src/jniutils.cc ../../src/cxx/jniutils.cc
LOCAL_C_INCLUDES += $(GPGBUILD)/$(TARGET_ARCH_ABI)/include LOCAL_C_INCLUDES += $(GPGBUILD)/$(TARGET_ARCH_ABI)/include
LOCAL_C_INCLUDES += $(LIB_PEP_ADAPTER_PATH)/build-android/include $(SRC_PATH)/libpEpAdapter LOCAL_C_INCLUDES += $(LIB_PEP_ADAPTER_PATH)/build-android/include $(SRC_PATH)/libpEpAdapter

2
android/src/foundation/pEp/jniadapter/AndroidHelper.java

@ -10,6 +10,8 @@ import java.io.*;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.Scanner; import java.util.Scanner;
import foundation.pEp.jniadapter.exceptions.pEpException;
public class AndroidHelper { public class AndroidHelper {
static { static {
System.loadLibrary("pEpJNIAndroidHelper"); System.loadLibrary("pEpJNIAndroidHelper");

27
local.conf.example

@ -2,23 +2,28 @@
# you might not need this file, but if the defaults dont work for you # you might not need this file, but if the defaults dont work for you
# You can override them here. # You can override them here.
# Tweak the values to your needs and rename it to local.conf # Tweak the values to your needs and rename it to local.conf
# These example values here reflect the defaults
############ Install ###########
# PREFIX=$(HOME)
######### C++ Compiler ######### ######### C++ Compiler #########
# Should work with clang and g++ # Should work with clang and g++
# CXX=g++ # CXX=g++
# DEBUG=1 # DEBUG Build (Default) # DEBUG=0 # RELEASE Build / set to 1 for DEBUG build
# DEBUG=0 # RELEASE Build
######### JAVA ######### ############ JAVA ##############
# JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home # JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home
######### YML2 ######### ############ YML2 ##############
# YML2_PATH=$(HOME)/code/yml2 # YML2_PATH=$(HOME)/src/yml2
########### Engine #############
# ENGINE_LIB_PATH=$(PREFIX)/lib
# ENGINE_INC_PATH=$(PREFIX)/include
########## libAdapter ##########
# AD_LIB_PATH=$(PREFIX)/lib
# AD_INC_PATH=$(PREFIX)/include
######### 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

278
src/Makefile

@ -5,6 +5,30 @@
include ../Makefile.conf include ../Makefile.conf
# Names of the java and c++ libs to be built
LIB_JAVA_NAME=pEp.jar
LIB_CXX_NAME=libpEpJNI
DIST_DIR=../dist/
LIB_CXX_STATIC_NAME=$(addsuffix .a,$(LIB_CXX_NAME))
ifeq ($(PLATFORM),linux)
LIB_CXX_DYN_NAME=$(addsuffix .so,$(LIB_CXX_NAME))
else ifeq ($(PLATFORM),darwin)
LIB_CXX_DYN_NAME=$(addsuffix .dylib,$(LIB_CXX_NAME))
else
$(error I dont know how to build for $(PLATFORM).)
endif
LIB_JAVA=$(DIST_DIR)/$(LIB_JAVA_NAME)
LIB_CXX_STATIC=$(DIST_DIR)/$(LIB_CXX_STATIC_NAME)
LIB_CXX_DYN=$(DIST_DIR)/$(LIB_CXX_DYN_NAME)
$(info ------------------ DIST FILES ---------------------)
$(info LIB_JAVA: $(LIB_JAVA))
$(info LIB_CXX_STATIC: $(LIB_CXX_STATIC))
$(info LIB_CXX_DYN: $(LIB_CXX_DYN))
$(info ------------------ BUILD INFO ---------------------)
$(info PLATFORM: $(PLATFORM)) $(info PLATFORM: $(PLATFORM))
$(info DEBUG: $(DEBUG)) $(info DEBUG: $(DEBUG))
$(info CXX: $(CXX)) $(info CXX: $(CXX))
@ -17,133 +41,151 @@ $(info YML2_PATH: $(YML2_PATH))
$(info CXXFLAGS: $(CXXFLAGS)) $(info CXXFLAGS: $(CXXFLAGS))
$(info LDFLAGS: $(LDFLAGS)) $(info LDFLAGS: $(LDFLAGS))
$(info LDLIBS: $(LDLIBS)) $(info LDLIBS: $(LDLIBS))
$(info ---------------------------------------------------)
ifndef JAVA_HOME # Dirs
$(error JAVA_HOME is not set!) # relative to "src/"
endif BUILD_ROOT=../build/
CXX_DIR=cxx/
JAVA_DIR=java/
JAVA_PKG_BASENAME=foundation/pEp/jniadapter/
JP=$(JAVA_HOME)/bin JAVA_PKG_ROOT=$(JAVA_DIR)/$(JAVA_PKG_BASENAME)
JAVA_BUILD_ROOT=$(BUILD_ROOT)/$(JAVA_DIR)
OBJ_DIR=$(BUILD_ROOT)/$(CXX_DIR)
# Old versions of a Java distribution have a `javah` binary, new versions do not. This checks whether or not `javah` can be found in the Java distribution found in the directory `$JAVA_HOME`.
NOT_USED:=$(shell which $(JAVA_HOME)/bin/javah)
ifeq ($(.SHELLSTATUS),0)
OLD_JAVA=placeholder
endif
LIBRARY=libpEpJNI.a # for "make clean" only
JAR=pEp.jar GENERATED_JAVA=\
$(JAVA_PKG_ROOT)/Engine.java \
$(JAVA_PKG_ROOT)/Message.java \
$(JAVA_PKG_ROOT)/CipherSuite.java \
$(JAVA_PKG_ROOT)/Color.java \
$(JAVA_PKG_ROOT)/DecryptFlags.java \
$(JAVA_PKG_ROOT)/IdentityFlags.java \
$(JAVA_PKG_ROOT)/Rating.java \
$(JAVA_PKG_ROOT)/SyncHandshakeResult.java \
$(JAVA_PKG_ROOT)/SyncHandshakeSignal.java \
$(JAVA_PKG_ROOT)/PassphraseType.java \
$(JAVA_PKG_ROOT)/interfaces/EngineInterface.java \
$(JAVA_PKG_ROOT)/interfaces/MessageInterface.java \
$(JAVA_PKG_ROOT)/exceptions/*.java
ifeq ($(PLATFORM),linux) # files to compile which will be be generated
SHARED=libpEpJNI.so GENERATED_CC=\
else ifeq ($(PLATFORM),darwin) $(CXX_DIR)/foundation_pEp_jniadapter_Engine.cc \
SHARED=libpEpJNI.dylib $(CXX_DIR)/foundation_pEp_jniadapter_Message.cc \
else $(CXX_DIR)/throw_pEp_exception.cc
$(error I dont know how to build for $(PLATFORM).)
endif # for "make clean" only
GENERATED_HH=\
$(CXX_DIR)/throw_pEp_exception.hh
# Generated JNI headers (javac -h)
JNI_GENERATED_HH=\
$(CXX_DIR)/foundation_pEp_jniadapter_AbstractEngine.h \
$(CXX_DIR)/foundation_pEp_jniadapter__Blob.h \
$(CXX_DIR)/foundation_pEp_jniadapter_Engine.h \
$(CXX_DIR)/foundation_pEp_jniadapter_Identity.h \
$(CXX_DIR)/foundation_pEp_jniadapter_Message.h
# Auto dependencies using gcc/clang
CXXFLAGS+= -MMD -MP
SOURCES=$(wildcard $(CXX_DIR)/*.cc)
SOURCES+=$(GENERATED_CC)
tmp=$(SOURCES:.cc=.o)
OBJECTS=$(addprefix $(BUILD_ROOT), $(tmp))
DEPENDS=$(OBJECTS:.o=.d)
JAVA_SOURCES=foundation/pEp/jniadapter/AbstractEngine.java \ -include $(DEPENDS)
foundation/pEp/jniadapter/Blob.java \ VPATH = $(CXX_DIR)/
foundation/pEp/jniadapter/CommType.java \
foundation/pEp/jniadapter/Identity.java \ .PHONY: all lib-java lib-cxx compile-java compile-cxx gen-jni-headers codegen clean create-dirs remove-dirs install uninstall
foundation/pEp/jniadapter/Pair.java \
foundation/pEp/jniadapter/Sync.java \ $(info SOURCES: $(SOURCES))
foundation/pEp/jniadapter/_Blob.java \ $(info OBJECTS: $(OBJECTS))
foundation/pEp/jniadapter/_Identity.java \ $(info DEPENDS: $(DEPENDS))
foundation/pEp/jniadapter/pEpException.java \
foundation/pEp/jniadapter/Message.java \ all: lib-java lib-cxx
foundation/pEp/jniadapter/Engine.java \
# Build only java lib
C_SOURCES=foundation_pEp_jniadapter_Engine.cc \ lib-java: $(LIB_JAVA)
foundation_pEp_jniadapter_Engine.h \
foundation_pEp_jniadapter_Message.cc \ # Build only c++ static/shared lib
foundation_pEp_jniadapter_Message.h \ lib-cxx: $(LIB_CXX_DYN) $(LIB_CXX_STATIC)
throw_pEp_exception.cc \
throw_pEp_exception.hh \ # ---------------- Link -----------------
foundation_pEp_jniadapter_AbstractEngine.h \ $(LIB_JAVA): compile-java
foundation_pEp_jniadapter__Blob.cc \ $(JAVA_BIN_DIR)/jar cf $@ -C $(JAVA_BUILD_ROOT) foundation
foundation_pEp_jniadapter__Blob.h
$(LIB_CXX_DYN): compile-cxx
PEP_HEADER:=$(shell $(CXX) $(CXXFLAGS) -E -M get_header.cc | grep -oe '[^[:space:]]*pEpEngine\.h' | head -1) $(CXX) $(OBJ_DIR)*.o $(LDFLAGS) $(LDLIBS) -o $@
$(LIB_CXX_STATIC): compile-cxx
.PHONY: all $(AR) -r $@ $(OBJ_DIR)*.o
all: $(JAR) $(SHARED)
$(JAR): status_list.yml2 passphrase_status_list.yml2 $(JAVA_SOURCES) $(C_SOURCES) # -------------- Compile -----------------
$(JP)/javac foundation/pEp/jniadapter/*.java compile-java: create-dirs codegen
$(JP)/jar cf $@ foundation/pEp/jniadapter/*.class cd $(JAVA_DIR);$(JAVA_BIN_DIR)/javac -d ../$(JAVA_BUILD_ROOT) $(JAVA_PKG_BASENAME)/*.java
cd $(JAVA_DIR);$(JAVA_BIN_DIR)/javac -d ../$(JAVA_BUILD_ROOT) $(JAVA_PKG_BASENAME)/exceptions/*.java
BLUBB=foundation_pEp_jniadapter_AbstractEngine.h foundation_pEp_jniadapter_Engine.h foundation_pEp_jniadapter_Message.h foundation_pEp_jniadapter__Blob.h cd $(JAVA_DIR);$(JAVA_BIN_DIR)/javac -d ../$(JAVA_BUILD_ROOT) $(JAVA_PKG_BASENAME)/interfaces/*.java
$(BLUBB): foundation_pEp_jniadapter_%.h: foundation/pEp/jniadapter/%.java
compile-cxx: create-dirs gen-jni-headers $(OBJECTS)
$(OBJECTS): $(BUILD_ROOT)%.o: %.cc
$(CXX) $(CXXFLAGS) -c $< -o $@
# --------- Generate JNI headers ----------
gen-jni-headers: codegen $(JNI_GENERATED_HH)
$(JNI_GENERATED_HH):
ifdef OLD_JAVA ifdef OLD_JAVA
$(JP)/javah $(subst /,.,$(subst .java,,$<)) cd $(JAVA_DIR);$(JAVA_BIN_DIR)/javah -d ../$(JAVA_BUILD_ROOT) $(subst /,.,$(subst .java,,$<))
else else
$(JP)/javac -h . $< cd $(JAVA_DIR);$(JAVA_BIN_DIR)/javac -d ../$(JAVA_BUILD_ROOT) -h ../$(CXX_DIR)/ $(JAVA_PKG_BASENAME)/*.java
endif endif
foundation_pEp_jniadapter_AbstractEngine.o: %.o: %.cc %.h throw_pEp_exception.hh jniutils.hh
$(CXX) $(CXXFLAGS) -c $< -o $@
foundation_pEp_jniadapter_Engine.o foundation_pEp_jniadapter_Message.o foundation_pEp_jniadapter__Blob.o : %.o: %.cc %.h # ------------- YML2 CodeGen --------------
$(CXX) $(CXXFLAGS) -c $< -o $@ codegen:
$(MAKE) -C codegen
# ------------- Housekeeping ---------------
create-dirs:
$(MAKE) -C codegen create-dirs
mkdir -p $(JAVA_BUILD_ROOT)/$(JAVA_PKG_BASENAME)
mkdir -p $(JAVA_BUILD_ROOT)/$(JAVA_PKG_BASENAME)/exceptions
mkdir -p $(OBJ_DIR)
mkdir -p $(DIST_DIR)
mkdir -p $(JAVA_PKG_ROOT)/exceptions
#rm -rf is too dangerous for vars
remove-dirs:
$(MAKE) -C codegen remove-dirs
rm -rf ../build
rm -rf ../dist
clean: remove-dirs
$(MAKE) -C codegen clean
rm -f $(GENERATED_JAVA)
rm -f $(GENERATED_CC)
rm -f $(GENERATED_HH)
rm -f $(JNI_GENERATED_HH)
rm -f $(DEPENDS)
rm -f $(OBJECTS)
install: $(LIB_JAVA) $(LIB_CXX_STATIC) $(LIB_CXX_DYN)
mkdir -p $(PREFIX)/lib
cp -v $(LIB_JAVA) $(PREFIX)/lib/
cp -v $(LIB_CXX_STATIC) $(PREFIX)/lib/
cp -v $(LIB_CXX_DYN) $(PREFIX)/lib/
uninstall:
cd $(PREFIX)/lib && rm -vf $(LIB_JAVA_NAME)
cd $(PREFIX)/lib && rm -vf $(LIB_CXX_STATIC_NAME)
cd $(PREFIX)/lib && rm -vf $(LIB_CXX_DYN_NAME)
$(LIBRARY): foundation_pEp_jniadapter_AbstractEngine.o foundation_pEp_jniadapter_Engine.o foundation_pEp_jniadapter_Message.o throw_pEp_exception.o jniutils.o basic_api.o foundation_pEp_jniadapter__Blob.o
ar -r $@ *.o
$(SHARED): $(LIBRARY)
$(CXX) *.o $(LDFLAGS) $(LDLIBS) -o $@
status_list.yml2: pEp.yml2
bash ../utils/extract_pEp_status_codes_from_engine.sh "$(PEP_HEADER)" $@
passphrase_status_list.yml2: status_list.yml2
grep passphrase $< > $@
foundation/pEp/jniadapter/pEpException.java: pEp.yml2 gen_java_exceptions.ysl2 pEp.yml2
$(YML2_PROC) -y gen_java_exceptions.ysl2 $< -o $@
foundation/pEp/jniadapter/Message.java: pEp.yml2 gen_java_Message.ysl2 types_java.ysl2
$(YML2_PROC) -y gen_java_Message.ysl2 $<
foundation/pEp/jniadapter/Engine.java: pEp.yml2 gen_java_Engine.ysl2 types_java.ysl2
$(YML2_PROC) -y gen_java_Engine.ysl2 $<
foundation_pEp_jniadapter_Message.cc: pEp.yml2 gen_cpp_Message.ysl2 types_c.ysl2
$(YML2_PROC) -y gen_cpp_Message.ysl2 $<
foundation_pEp_jniadapter_Engine.cc: pEp.yml2 gen_cpp_Engine.ysl2 types_c.ysl2
$(YML2_PROC) -y gen_cpp_Engine.ysl2 $<
throw_pEp_exception.cc throw_pEp_exception.hh: pEp.yml2 gen_throw_pEp_exception.ysl2 textutils.ysl2
$(YML2_PROC) -y gen_throw_pEp_exception.ysl2 $< -o throw_pEp_exception.cc
throw_pEp_exception.o: throw_pEp_exception.cc throw_pEp_exception.hh
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
rm -f foundation_pEp_jniadapter_*.h
rm -f foundation/pEp/jniadapter/*.class
rm -f foundation/pEp/jniadapter/pEp*.java
rm -f foundation/pEp/jniadapter/Engine.java
rm -f foundation/pEp/jniadapter/Message.java
rm -f foundation/pEp/jniadapter/Color.java
rm -f foundation/pEp/jniadapter/DecryptFlags.java
rm -f foundation/pEp/jniadapter/IdentityFlags.java
rm -f foundation/pEp/jniadapter/Rating.java
rm -f foundation/pEp/jniadapter/Status.java
rm -f foundation/pEp/jniadapter/SyncHandshakeResult.java
rm -f foundation/pEp/jniadapter/SyncHandshakeSignal.java
rm -f foundation/pEp/jniadapter/CipherSuite.java
rm -f foundation/pEp/jniadapter/PassphraseType.java
rm -f throw_pEp_exception.*
rm -f foundation_pEp_jniadapter_Message.cc foundation_pEp_jniadapter_Engine.cc
rm -f status_list.yml2
rm -f passphrase_status_list.yml2

60
src/codegen/Makefile

@ -0,0 +1,60 @@
# Copyright 2018, pEp Foundation
# This file is part of pEp JNI Adapter
# This file may be used under the terms of the GNU General Public License version 3
# see LICENSE.txt
include ../../Makefile.conf
MARKER_DIR=../../build/marker/
PEP_HEADER:=$(shell $(CXX) $(CXXFLAGS) -E -M ../cxx/get_header.cc | grep -oe '[^[:space:]]*pEpEngine\.h' | head -1)
# Every ysl2 file that needs to be "compiled" separately, needs to generate a "marker" file
# The marker serves as the make target.
# If the marker file is older than its corresponding ysl2 file, or not exsiting, the ysl2 file will be "compiled"
# Naming:
# For a ysl2 file called "gen_example_stuff.ysl2", a marker file called "gen_example_stuff.marker" is expected.
YML2_MARKERS= \
$(MARKER_DIR)/gen_java_Engine.marker \
$(MARKER_DIR)/gen_java_Message.marker \
$(MARKER_DIR)/gen_cpp_Engine.marker \
$(MARKER_DIR)/gen_cpp_Message.marker \
$(MARKER_DIR)/gen_throw_pEp_exception.marker
# All code genration will be done upon change of these files
YML2_INCLUDES= \
textutils.ysl2 \
types_c.ysl2 \
types_java.ysl2
.PHONY: all codegen gen-status-codes create-dirs remove-dirs clean
all: codegen
# ------------- YML2 CodeGen --------------
codegen: create-dirs gen-status-codes $(YML2_MARKERS)
$(YML2_MARKERS): $(MARKER_DIR)/%.marker : %.ysl2 pEp.yml2 $(YML2_INCLUDES)
$(YML2_PROC) -y $< pEp.yml2
gen-status-codes: status_list.yml2 passphrase_status_list.yml2
status_list.yml2: pEp.yml2
bash ../../utils/extract_pEp_status_codes_from_engine.sh "$(PEP_HEADER)" $@
passphrase_status_list.yml2: status_list.yml2
grep passphrase $< > $@
# ------------- Housekeeping ---------------
create-dirs:
mkdir -p $(MARKER_DIR)
#rm -rf is too dangerous for vars
remove-dirs:
rm -rf ../../build/marker
clean: remove-dirs
rm -f status_list.yml2
rm -f passphrase_status_list.yml2

14
src/gen_cpp_Engine.ysl2 → src/codegen/gen_cpp_Engine.ysl2

@ -5,9 +5,12 @@ tstylesheet {
include ./types_c.ysl2 include ./types_c.ysl2
include ./types_java.ysl2 include ./types_java.ysl2
template "/namespace[@name='pEp']" apply "interface", 0; template "/namespace[@name='pEp']" {
apply "interface", 0;
document("../../build/marker/gen_cpp_Engine.marker", "text") > ""
}
template "interface" document("foundation_pEp_jniadapter_{@name}.cc", "text") template "interface" document("../cxx/foundation_pEp_jniadapter_{@name}.cc", "text")
|| ||
#include <cassert> #include <cassert>
#include <pEp/blacklist.h> #include <pEp/blacklist.h>
@ -310,14 +313,7 @@ tstylesheet {
} }
function "mangle" { function "mangle" {
const "convert", "count(parm/stringlist|parm/string|parm/identity|parm/identitylist) > 0";
choose {
when "$convert"
> «concat('Java_foundation_pEp_jniadapter_', ../@name, '__1', str:replace(@name, '_', '_1'))» > «concat('Java_foundation_pEp_jniadapter_', ../@name, '__1', str:replace(@name, '_', '_1'))»
otherwise
> «concat('Java_foundation_pEp_jniadapter_', ../@name, '_', str:replace(@name, '_', '_1'))»
}
} }
template "parm", mode=sig { template "parm", mode=sig {

7
src/gen_cpp_Message.ysl2 → src/codegen/gen_cpp_Message.ysl2

@ -5,12 +5,15 @@ tstylesheet {
include ./textutils.ysl2 include ./textutils.ysl2
include ./types_c.ysl2 include ./types_c.ysl2
template "/namespace[@name='pEp']" apply "struct", 0; template "/namespace[@name='pEp']" {
apply "struct", 0;
document("../../build/marker/gen_cpp_Message.marker", "text") > ""
}
template "struct" { template "struct" {
const "jname" call "CamelCase" with "text", "@name"; const "jname" call "CamelCase" with "text", "@name";
document("foundation_pEp_jniadapter_{$jname}.cc", "text") { document("../cxx/foundation_pEp_jniadapter_{$jname}.cc", "text") {
|| ||
#include <cassert> #include <cassert>
#include <pEp/mime.h> #include <pEp/mime.h>

122
src/gen_java_Engine.ysl2 → src/codegen/gen_java_Engine.ysl2

@ -4,24 +4,41 @@ tstylesheet {
include ./textutils.ysl2 include ./textutils.ysl2
include ./types_java.ysl2 include ./types_java.ysl2
template "/namespace[@name='pEp']" apply "interface", 0; template "/namespace[@name='pEp']" {
apply "interface", 0;
document("../../build/marker/gen_java_Engine.marker", "text") > ""
}
template "interface" { template "interface" {
const "cname" call "toJava" with "type", "@name"; const "cname" call "toJava" with "type", "@name";
document("foundation/pEp/jniadapter/{$cname}.java", "text") document("../java/foundation/pEp/jniadapter/{$cname}.java", "text")
|| ||
package foundation.pEp.jniadapter; package foundation.pEp.jniadapter;
import foundation.pEp.jniadapter.interfaces.*;
import foundation.pEp.jniadapter.exceptions.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Vector; import java.util.Vector;
final public class «$cname» extends AbstractEngine { final public class «$cname» extends AbstractEngine implements EngineInterface {
public «$cname»() throws pEpException { } public «$cname»() throws pEpException { }
`` apply "method"
`` apply "method", mode=plain
`` apply "basic" `` apply "basic"
} }
||
document("../java/foundation/pEp/jniadapter/interfaces/{$cname}Interface.java", "text")
||
package foundation.pEp.jniadapter.interfaces;
import foundation.pEp.jniadapter.*;
import java.util.ArrayList;
import java.util.Vector;
public interface «$cname»Interface extends AbstractEngineInterface {
`` apply "method", mode=java_interface
`` apply "basic", mode=java_interface
}
|| ||
} }
@ -29,16 +46,9 @@ tstylesheet {
const "itype" call "toIntermediate" with "type", "@type"; const "itype" call "toIntermediate" with "type", "@type";
const "jtype" call "toJava" with "type", "@type"; const "jtype" call "toJava" with "type", "@type";
choose {
when "name(parm/*[1])='bytearray|identitylist'"
||
public native «$itype» «@name»(`apply "parm/*", mode=basic_iparm`);
||
otherwise {
|| ||
private native «$itype» _«@name»(`apply "parm/*", mode=basic_iparm`);
// CodeGen "basic"
public «$jtype» «@name»(`apply "parm/*", mode=basic_parm`) { public «$jtype» «@name»(`apply "parm/*", mode=basic_parm`) {
|| ||
apply "parm/*", mode=basic_parm_set; apply "parm/*", mode=basic_parm_set;
@ -61,14 +71,20 @@ tstylesheet {
return ret; return ret;
|| ||
} otherwise } otherwise
|> return AbstractEngine.toUTF16(_«@name»(`apply "parm/*", mode=basic_parm_name`)); |> return Utils.toUTF16(_«@name»(`apply "parm/*", mode=basic_parm_name`));
} }
|| ||
} }
private native «$itype» _«@name»(`apply "parm/*", mode=basic_iparm`);
|| ||
} }
}
template "basic" mode=java_interface {
const "jtype" call "toJava" with "type", "@type";
||
public «$jtype» «@name»(`apply "parm/*", mode=basic_parm`);
||
} }
template "*", mode=basic_parm_name choose { template "*", mode=basic_parm_name choose {
@ -125,7 +141,7 @@ tstylesheet {
if "not(position() mod 2)" choose { if "not(position() mod 2)" choose {
when "$ptype = 'string'" when "$ptype = 'string'"
| «$pitype» _«$pname» = AbstractEngine.toUTF8(«$pname»); | «$pitype» _«$pname» = Utils.toUTF8(«$pname»);
when "$ptype = 'bool'" when "$ptype = 'bool'"
| «$pitype» _«$pname» = «$pname».booleanValue(); | «$pitype» _«$pname» = «$pname».booleanValue();
when "$ptype = 'bytearray'" when "$ptype = 'bytearray'"
@ -161,59 +177,47 @@ tstylesheet {
} }
} }
template "method", mode=plain { template "method" {
const "convert", "count(parm/stringlist|parm/stringpairlist|parm/string|parm/identity|parm/identitylist) > 0";
const "singlereturn", "count(parm/creates|parm/returns|parm/inout[../int]) = 1"; const "singlereturn", "count(parm/creates|parm/returns|parm/inout[../int]) = 1";
const "multireturn", "count(parm/creates|parm/returns|parm/inout[../int]) > 1"; const "multireturn", "count(parm/creates|parm/returns|parm/inout[../int]) > 1";
if "$multireturn" {
if "$convert"
|| ||
private class _«@name»_Return {
`` apply "parm[creates|returns|inout[../int]]", 1, mode=intermediate with "public", 1;
}
//CodeGen "method"
|| ||
if "$multireturn" {
|| ||
public class «@name»_Return { //CodeGen "mutlireturn" - class for return type
`` apply "parm[creates|returns|inout[../int]]", 1, mode=java with "public", 1; private class _«@name»_Return {
`` apply "parm[creates|returns|inout[../int]]", 1, mode=intermediate with "public", 1;
} }
|| ||
} }
if "$convert"
|| ||
private native `call "returnInter"` _«@name»( public `call "returnJava"` «@name»(
`` apply "parm[in|inout]", 2, mode=intermediate
) throws pEpException;
||
||
public `if "not($convert)" > native ``call "returnJava"` «@name»(
`` apply "parm[in|inout]", 2, mode=java `` apply "parm[in|inout]", 2, mode=java
) throws pEpException`if "not($convert)" > ;` ) throws pEpException
{
|| ||
if "$convert" {
| {
apply "parm", mode=convertIn; apply "parm", mode=convertIn;
if "$singlereturn" choose { if "$singlereturn" {
choose {
// TODO factorize type conversion with multireturn and gen_java_message.java
when "count(parm[returns][stringlist|string|sstring]) > 0" when "count(parm[returns][stringlist|string|sstring]) > 0"
|> return AbstractEngine.toUTF16(_«@name»(`apply "parm[in]", mode=call;`)); |> return Utils.toUTF16(_«@name»(`apply "parm[in]", mode=call;`));
when "count(parm[returns]/stringpairlist) > 0" when "count(parm[returns]/stringpairlist) > 0"
|| ||
ArrayList<Pair<byte[], byte[]>> glist = _«@name»(`apply "parm[in]", mode=call;`); ArrayList<Pair<byte[], byte[]>> glist = _«@name»(`apply "parm[in]", mode=call;`);
if(glist != null){ if(glist != null){
ArrayList<Pair<String, String>> list = new ArrayList<Pair<String, String>>(); ArrayList<Pair<String, String>> list = new ArrayList<Pair<String, String>>();
for (Pair<byte[],byte[]> i : glist) for (Pair<byte[],byte[]> i : glist) {
list.add(new Pair<String, String>(AbstractEngine.toUTF16(i.first), AbstractEngine.toUTF16(i.second))); list.add(new Pair<String, String>(Utils.toUTF16(i.first), Utils.toUTF16(i.second)));
}
return list; return list;
} }
return null; return null;
@ -221,40 +225,53 @@ tstylesheet {
when "count(parm[returns]/identity) > 0" when "count(parm[returns]/identity) > 0"
|> return new Identity(_«@name»(`apply "parm[in]", mode=call;`)); |> return new Identity(_«@name»(`apply "parm[in]", mode=call;`));
when "count(parm[returns]/identitylist) > 0" when "count(parm[returns]/identitylist) > 0"
|| ||
Vector<_Identity> glist = _«@name»(`apply "parm[in]", mode=call;`); Vector<_Identity> glist = _«@name»(`apply "parm[in]", mode=call;`);
if(glist != null){ if(glist != null){
Vector<Identity> list = new Vector<Identity>(); Vector<Identity> list = new Vector<Identity>();
for (_Identity i : glist) for (_Identity i : glist) {
list.add(new Identity(i)); list.add(new Identity(i));
}
return list; return list;
} }
return null; return null;
|| ||
otherwise otherwise
|> return _«@name»(`apply "parm[in]", mode=call;`); |> return _«@name»(`apply "parm[in]", mode=call;`);
} }
}
if "$multireturn" if "$multireturn" {
|| ||
_«@name»_Return _result = _«@name»(`apply "parm[in|inout]", mode=call;`); _«@name»_Return _result = _«@name»(`apply "parm[in|inout]", mode=call;`);
«@name»_Return result = new «@name»_Return(); «@name»_Return result = new «@name»_Return();
`` apply "parm[creates|returns|inout[../int]]", mode=convertOut; `` apply "parm[creates|returns|inout[../int]]", mode=convertOut;
return result; return result;
|| ||
}
if "not($singlereturn) and not($multireturn)" if "not($singlereturn) and not($multireturn)" {
|| ||
_«@name»(`apply "parm[in]", mode=call;`); _«@name»(`apply "parm[in]", mode=call;`);
return;
|| ||
}
|| ||
} }
private native `call "returnInter"` _«@name»(
`` apply "parm[in|inout]", 2, mode=intermediate
) throws pEpException;
|| ||
} }
template "method", mode=java_interface {
|| ||
public `call "returnJava"` «@name»(
`` apply "parm[in|inout]", 2, mode=java
);
|| ||
} }
@ -302,7 +319,7 @@ tstylesheet {
if "$dir = 'in' or $dir = 'inout'" choose { if "$dir = 'in' or $dir = 'inout'" choose {
when "$type = 'string' or $type = 'stringlist'" when "$type = 'string' or $type = 'stringlist'"
| ¡$type _«$name» = AbstractEngine.toUTF8(«$name»); | ¡$type _«$name» = Utils.toUTF8(«$name»);
when "$type = 'identity'" when "$type = 'identity'"
|| ||
_Identity _«$name» = null; _Identity _«$name» = null;
@ -313,8 +330,9 @@ tstylesheet {
when "$type = 'identitylist'" when "$type = 'identitylist'"
|| ||
Vector<_Identity> _«$name» = new Vector<_Identity>(); Vector<_Identity> _«$name» = new Vector<_Identity>();
for (Identity i : «$name») for (Identity i : «$name») {
_«$name».add(new _Identity(i)); _«$name».add(new _Identity(i));
}
|| ||
} }
} }
@ -326,7 +344,7 @@ tstylesheet {
if "$dir != 'in'" choose { if "$dir != 'in'" choose {
when "$type = 'string' or $type = 'stringlist'" when "$type = 'string' or $type = 'stringlist'"
| result.«$name» = AbstractEngine.toUTF16(_result.«$name»); | result.«$name» = Utils.toUTF16(_result.«$name»);
when "$type = 'identity'" when "$type = 'identity'"
| result.«$name» = Identity(«$name»); | result.«$name» = Identity(«$name»);
otherwise otherwise

327
src/codegen/gen_java_Message.ysl2

@ -0,0 +1,327 @@
include yslt.yml2
tstylesheet {
include ./textutils.ysl2
include ./types_java.ysl2
template "/namespace[@name='pEp']" {
apply "struct|enum|exception", 0;
document "../java/foundation/pEp/jniadapter/exceptions/pEpException.java", "text" {
||
package foundation.pEp.jniadapter.exceptions;
public class pEpException extends RuntimeException {
public pEpException(String message) {
super(message);
}
}
||
}
document("../../build/marker/gen_java_Message.marker", "text") > ""
}
template "struct" {
const "cname" call "toJava" with "type", "@name";
document("../java/foundation/pEp/jniadapter/{$cname}.java", "text")
||
package foundation.pEp.jniadapter;
import foundation.pEp.jniadapter.interfaces.*;
import foundation.pEp.jniadapter.exceptions.*;
import java.util.ArrayList;
import java.util.Vector;
import java.util.Date;
import java.util.HashMap;
import java.io.Serializable;
public class «$cname» implements MessageInterface, AutoCloseable, Serializable {
private static final long serialVersionUID = 2119420428331150924L;
private long handle;
native long init();
native void release(long handle);
public «$cname»() {
handle = init();
}
private native long _«$cname»(
byte[] mime_text
) throws pEpException;
public «$cname»(String mime_text) {
byte[] _mime_text = Utils.toUTF8(mime_text);
handle = _«$cname»(_mime_text);
}
private native byte[] _encodeMIME() throws pEpException;
public String encodeMIME() {
return Utils.toUTF16(_encodeMIME());
}
private «$cname»(long h) {
handle = h;
}
public final void close() {
release(handle);
}
final protected long getHandle() {
return handle;
}
`` apply "enum", mode=inner
`` apply "*[name(.)!='enum']", mode=entry
}
||
document("../java/foundation/pEp/jniadapter/interfaces/{$cname}Interface.java", "text")
||
package foundation.pEp.jniadapter.interfaces;
import foundation.pEp.jniadapter.*;
import foundation.pEp.jniadapter.Message.*;
import java.util.Date;
import java.util.Vector;
import java.util.ArrayList;
public interface «$cname»Interface {
public String encodeMIME();
`` apply "*[name(.)!='enum']", mode=interface
}
||
}
template "enum" {
const "jname" call "toJava" with "type", "@name";
document("../java/foundation/pEp/jniadapter/{$jname}.java", "text")
||
// CodeGen template enum
package foundation.pEp.jniadapter;
import java.util.HashMap;
`` apply ".", 0, mode=inner
||
}
template "enum", mode=inner {
const "jname" call "CamelCase" with "text", "@name";
||
// CodeGen template enum, mode=inner
public enum «$jname» {
`` apply "*", mode=value
;
public final int value;
private static HashMap<Integer, «$jname»> intMap;
private «$jname»(int value) {
this.value = value;
}
public static «$jname» getByInt(int value){
if (intMap == null) {
intMap = new HashMap<Integer, «$jname»>();
for («$jname» s : «$jname».values()) {
intMap.put(s.value, s);
}
}
if (intMap.containsKey(value)) {
return intMap.get(value);
}
return null;
}
}
||
}
function "exception" {
param "name";
document "../java/foundation/pEp/jniadapter/exceptions/{$name}.java", "text" {
| package foundation.pEp.jniadapter.exceptions;
|
| public class «$name» extends pEpException {
| public «$name»(String message) {
| super(message);
| }
| }
}
}
template "exception" for "*[text()!=0]" call "exception"
with "name" call "CamelCase" with "text", "name(.)";
template "*", mode=entry {
const "ctype", "name(.)";
const "type" call "toJava" with "type", "name(.)";
const "itype" call "toIntermediate" with "type", "name(.)";
const "name" call "toJava" with "type", "name(*[position()=1])";
||
// CodeGen template * mode=entry
||
choose {
when "$ctype = 'identity'" {
||
// Property type: Identity. [java: «$type», intermediate: «$itype», ctype: «$ctype»]
public «$type» get«$name»() {
«$itype» res = _get«$name»();
if (res != null) {
return new «$type»(_get«$name»());
} else {
return null;
}
}
private native «$itype» _get«$name»();
public void set«$name»(«$type» value) {
if (value != null) {
_set«$name»(new «$itype»(value));
} else {
_set«$name»(null);
}
}
private native void _set«$name»(«$itype» value);
||
}
when "$ctype = 'identitylist' or $ctype = 'bloblist' or $ctype = 'stringlist' or $ctype = 'stringpairlist'" {
const "ename", "substring-after(substring($type,1,string-length($type)-1), '<')";
const "iename" choose {
when "$ctype = 'stringlist'" > byte[]
when "$ctype = 'stringpairlist'" > Pair<byte[],byte[]>
otherwise > _«$ename»
}
const "convget" choose {
when "$ctype = 'stringlist'" > Utils.toUTF16(i)
when "$ctype = 'stringpairlist'" > new Pair<String, String>(Utils.toUTF16(i.first), Utils.toUTF16(i.second))
otherwise > new «$ename»(i)
}
const "convset" choose {
when "$ctype = 'stringlist'" > Utils.toUTF8(i)
when "$ctype = 'stringpairlist'" > new Pair<byte[],byte[]>(Utils.toUTF8(i.first), Utils.toUTF8(i.second))
otherwise > new _«$ename»(i)
}
||
// Property type: list type. [java: «$type», intermediate: «$itype», ctype: «$ctype»]
public «$type» get«$name»() {
«$itype» glist = _get«$name»();
if (glist != null) {
«$type» list = new «$type»();
for («$iename» i : glist) {
list.add(«$convget»);
}
return list;
}
return null;
}
private native «$itype» _get«$name»();
public void set«$name»(«$type» value) {
if (value != null) {
«$itype» list = new «$itype»();
for («$ename» i : value) {
list.add(«$convset»);
}
_set«$name»(list);
} else {
_set«$name»(null);
}
}
private native void _set«$name»(«$itype» value);
||
}
when "$itype != $type" {
||
// Property type: differs from intermediate. [java: «$type», intermediate: «$itype», ctype: «$ctype»]
public «$type» get«$name»() {
«$itype» res = _get«$name»();
if (res != null) {
return Utils.toUTF16(res);
} else {
return null;
}
}
private native «$itype» _get«$name»();
public void set«$name»(«$type» value) {
if (value != null) {
_set«$name»(Utils.toUTF8(value));
} else {
_set«$name»(new byte[0]);
}
}
private native void _set«$name»(«$itype» value);
||
}
when "../enum[@name=$ctype]" {
||
// Property type: enum type. [java: «$type», intermediate: «$itype», ctype: «$ctype»]
public «$type» get«$name»() {
return «$type».getByInt(_get«$name»());
}
private native int _get«$name»();
public void set«$name»(«$type» value) {
if(value != null)
_set«$name»(value.value);
else
_set«$name»(0);
}
private native void _set«$name»(int value);
||
}
otherwise {
||
// Property type: no intermediate type [java: «$type», intermediate: «$itype», ctype: «$ctype»]
public «$type» get«$name»() {
return get«$name»();
}
private native «$type» _get«$name»();
public void set«$name»(«$type» value) {
_set«$name»(value);
}
private native void _set«$name»(«$type» value);
||
}
}
}
template "*", mode=interface {
const "type" call "toJava" with "type", "name(.)";
const "name" call "toJava" with "type", "name(*[position()=1])";
||
public «$type» get«$name»();
public void set«$name»(«$type» value);
||
}
template "*", mode=value {
const "name" call "toJava" with "type", "name(.)";
| «$name» («.»)`if "position()!=last()" > , `
}
}

65
src/codegen/gen_throw_pEp_exception.ysl2

@ -0,0 +1,65 @@
include yslt.yml2
tstylesheet {
include ./textutils.ysl2
template "/" {
apply "namespace", 0;
document "../cxx/throw_pEp_exception.hh", "text"
||
#pragma once
#include <jni.h>
namespace pEp {
namespace JNIAdapter {
jint throw_pEp_Exception(JNIEnv *env, PEP_STATUS status);
};
};
||
document("../../build/marker/gen_throw_pEp_exception.marker", "text") > ""
}
template "namespace"
document("../cxx/throw_pEp_exception.cc", "text")
||
#include <assert.h>
#include <pEp/pEpEngine.h>
#include "throw_pEp_exception.hh"
namespace pEp {
namespace JNIAdapter {
jint throw_pEp_Exception(JNIEnv *env, PEP_STATUS status)
{
jclass ex;
const char *ex_name;
switch (status) {
`` apply "exception/*[text()!=0]", 4, mode=case
default:
assert(0);
ex_name = "Exception";
}
ex = env->FindClass(ex_name);
assert(ex);
if (ex == NULL) {
ex = env->FindClass("java/lang/NoClassDefFoundError");
assert(ex);
}
return env->ThrowNew(ex, ex_name);
}
};
};
||
template "*", mode=case {
| case `call "UCASE" with "text", "name(.)"`:
| ex_name = "foundation/pEp/jniadapter/exceptions/`call "CamelCase" with "text", "name(.)"`";
| break;
}
}

0
src/pEp.yml2 → src/codegen/pEp.yml2

0
src/textutils.ysl2 → src/codegen/textutils.ysl2

0
src/types_c.ysl2 → src/codegen/types_c.ysl2

0
src/types_java.ysl2 → src/codegen/types_java.ysl2

0
src/basic_api.cc → src/cxx/basic_api.cc

14
src/foundation_pEp_jniadapter_AbstractEngine.cc → src/cxx/foundation_pEp_jniadapter_AbstractEngine.cc

@ -264,7 +264,7 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_release(
Adapter::session(pEp::Adapter::release); Adapter::session(pEp::Adapter::release);
} }
JNIEXPORT jstring JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_getVersion( JNIEXPORT jstring JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1getVersion(
JNIEnv *env, JNIEnv *env,
jobject obj jobject obj
) )
@ -280,7 +280,7 @@ JNIEXPORT jstring JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_getVersi
return env->NewStringUTF(::get_engine_version()); return env->NewStringUTF(::get_engine_version());
} }
JNIEXPORT jstring JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_getProtocolVersion( JNIEXPORT jstring JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1getProtocolVersion(
JNIEnv *env, JNIEnv *env,
jobject obj jobject obj
) )
@ -331,7 +331,7 @@ static void *keyserver_thread_routine(void *arg)
return (void *) status; return (void *) status;
} }
JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_startKeyserverLookup( JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1startKeyserverLookup(
JNIEnv *env, JNIEnv *env,
jobject obj jobject obj
) )
@ -375,7 +375,7 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_startKeyser
pthread_create(thread, nullptr, keyserver_thread_routine, (void *) queue); pthread_create(thread, nullptr, keyserver_thread_routine, (void *) queue);
} }
JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_stopKeyserverLookup( JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1stopKeyserverLookup(
JNIEnv *env, JNIEnv *env,
jobject obj jobject obj
) )
@ -419,7 +419,7 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_stopKeyserv
free(thread); free(thread);
} }
JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_startSync( JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1startSync(
JNIEnv *env, JNIEnv *env,
jobject obj jobject obj
) )
@ -441,7 +441,7 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_startSync(
} }
} }
JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_stopSync( JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1stopSync(
JNIEnv *env, JNIEnv *env,
jobject obj jobject obj
) )
@ -458,7 +458,7 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_stopSync(
// Adapter::shutdown(); // Adapter::shutdown();
} }
JNIEXPORT jboolean JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_isSyncRunning( JNIEXPORT jboolean JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1isSyncRunning(
JNIEnv *env, JNIEnv *env,
jobject obj jobject obj
) )

0
src/foundation_pEp_jniadapter__Blob.cc → src/cxx/foundation_pEp_jniadapter__Blob.cc

0
src/get_header.cc → src/cxx/get_header.cc

0
src/identity_api.cc → src/cxx/identity_api.cc

0
src/jniutils.cc → src/cxx/jniutils.cc

0
src/jniutils.hh → src/cxx/jniutils.hh

0
src/passphrase_callback.hh → src/cxx/passphrase_callback.hh

0
src/passphrase_callback.hxx → src/cxx/passphrase_callback.hxx

28
src/foundation/pEp/jniadapter/Engine.java.target

@ -1,28 +0,0 @@
package foundation.pEp.jniadapter;
import java.util.ArrayList;
import java.util.Vector;
final public class Engine extends AbstractEngine {
public Engine() throws pEpException { }
public native Message encrypt_message(
Message src,
ArrayList<String> extra,
Message.EncFormat enc_format
) throws pEpException;
public class DecryptResult {
public Message dst;
public Color color;
}
public native DecryptResult decrypt_message(
Message src,
ArrayList<String> keylist
) throws pEpException;
public native Color outgoing_message_color(
Message msg
) throws pEpException;
}

218
src/foundation/pEp/jniadapter/Message.java.target

@ -1,218 +0,0 @@
package foundation.pEp.jniadapter;
import java.util.ArrayList;
import java.util.Vector;
import java.util.Date;
import java.util.HashMap;
public class Message implements AutoCloseable {
private final long handle;
native long init();
native void release(long handle);
public Message() {
handle = init();
}
public final void close() {
release(handle);
}
public enum TextFormat {
Plain (0),
Html (1),
Other (255)
;
static class Management {
public static final HashMap<Integer, TextFormat> tag =
new HashMap<Integer, TextFormat>();
}
public final int value;
TextFormat(int value) {
this.value = value;
fill(value);
}
private void fill(int value) {
Management.tag.put(value, this);
}
}
public enum Direction {
Incoming (0),
Outgoing (1)
;
static class Management {
public static final HashMap<Integer, Direction> tag =
new HashMap<Integer, Direction>();
}
public final int value;
Direction(int value) {
this.value = value;
fill(value);
}
private void fill(int value) {
Management.tag.put(value, this);
}
}
public enum EncFormat {
None (0),
Pieces (1),
SMIME (2),
PGPMIME (3),
PEP (4)
;
static class Management {
public static final HashMap<Integer, EncFormat> tag =
new HashMap<Integer, EncFormat>();
}
public final int value;
EncFormat(int value) {
this.value = value;
fill(value);
}
private void fill(int value) {
Management.tag.put(value, this);
}
}
private native int _getDir();
private native void _setDir(int value);
public Direction getDir() {
return Direction.tag.get(_getDir());
}
public void setDir(Direction value) {
_setDir(value.value);
}
private native byte[] _getId();
private native void _setId(byte[] value);
public String getId() {
return AbstractEngine.toUTF16(_getId());
}
public void setId(String value) {
_setId(AbstractEngine.toUTF8(value));
}
private native byte[] _getShortmsg();
private native void _setShortmsg(byte[] value);
public String getShortmsg() {
return AbstractEngine.toUTF16(_getShortmsg());
}
public void setShortmsg(String value) {
_setShortmsg(AbstractEngine.toUTF8(value));
}
private native byte[] _getLongmsg();
private native void _setLongmsg(byte[] value);
public String getLongmsg() {
return AbstractEngine.toUTF16(_getLongmsg());
}
public void setLongmsg(String value) {
_setLongmsg(AbstractEngine.toUTF8(value));
}
private native byte[] _getLongmsgFormatted();
private native void _setLongmsgFormatted(byte[] value);
public String getLongmsgFormatted() {
return AbstractEngine.toUTF16(_getLongmsgFormatted());
}
public void setLongmsgFormatted(String value) {
_setLongmsgFormatted(AbstractEngine.toUTF8(value));
}
public native ArrayList<Blob> getAttachments();
public native void setAttachments(ArrayList<Blob> value);
public native Date getSent();
public native void setSent(Date value);
public native Date getRecv();
public native void setRecv(Date value);
private native AbstractEngine._Identity _getFrom();
private native void _setFrom(AbstractEngine._Identity value);
public Identity getFrom() {
return new _getFrom().getIdentity();
}
public void setFrom(Identity value) {
_setFrom(new AbstractEngine._Identity(value));
}
public native ArrayList<Identity> getTo();
public native void setTo(ArrayList<Identity> value);
public native Identity getRecvBy();
public native void setRecvBy(Identity value);
public native ArrayList<Identity> getCc();
public native void setCc(ArrayList<Identity> value);
public native ArrayList<Identity> getBcc();
public native void setBcc(ArrayList<Identity> value);
public native ArrayList<Identity> getReplyTo();
public native void setReplyTo(ArrayList<Identity> value);
private native ArrayList<byte[]> _getInReplyTo();
private native void _setInReplyTo(ArrayList<byte[]> value);
public ArrayList<String> getInReplyTo() {
return AbstractEngine.toUTF16(_getInReplyTo());
}
public void setInReplyTo(ArrayList<String> value) {
_setInReplyTo(AbstractEngine.toUTF8(value));
}
private native ArrayList<byte[]> _getReferences();
private native void _setReferences(ArrayList<byte[]> value);
public ArrayList<String> getReferences() {
return AbstractEngine.toUTF16(_getReferences());
}
public void setReferences(ArrayList<String> value) {
_setReferences(AbstractEngine.toUTF8(value));
}
private native ArrayList<byte[]> _getKeywords();
private native void _setKeywords(ArrayList<byte[]> value);
public ArrayList<String> getKeywords() {
return AbstractEngine.toUTF16(_getKeywords());
}
public void setKeywords(ArrayList<String> value) {
_setKeywords(AbstractEngine.toUTF8(value));
}
private native byte[] _getComments();
private native void _setComments(byte[] value);
public String getComments() {
return AbstractEngine.toUTF16(_getComments());
}
public void setComments(String value) {
_setComments(AbstractEngine.toUTF8(value));
}
private native Vector<Pair<byte[], byte[]>> _getOptFields();
private native void _setOptFields(Vector<Pair<byte[], byte[]>> value);
public Vector<Pair<String, String>> getOptFields() {
return AbstractEngine.toUTF16(_getOptFields());
}
public void setOptFields(Vector<Pair<String, String>> value) {
_setOptFields(AbstractEngine.toUTF8(value));
}
public native Message.EncFormat getEncFormat();
public native void setEncFormat(Message.EncFormat value);
}

11
src/foundation/pEp/jniadapter/UniquelyIdentifiable.java

@ -1,11 +0,0 @@
package foundation.pEp.jniadapter;
import java.util.concurrent.atomic.AtomicLong;
abstract class UniquelyIdentifiable {
static final AtomicLong NEXT_ID = new AtomicLong(1);
final long id = NEXT_ID.getAndIncrement();
public long getId() {
return id;
}
}

252
src/gen_java_Message.ysl2

@ -1,252 +0,0 @@
include yslt.yml2
tstylesheet {
include ./textutils.ysl2
include ./types_java.ysl2
template "/namespace[@name='pEp']" apply "struct|enum|exception", 0;
template "struct" {
const "cname" call "toJava" with "type", "@name";
document("foundation/pEp/jniadapter/{$cname}.java", "text")
||
package foundation.pEp.jniadapter;
import java.util.ArrayList;
import java.util.Vector;
import java.util.Date;
import java.util.HashMap;
import java.io.Serializable;
public class «$cname» implements AutoCloseable, Serializable {
private static final long serialVersionUID = 2119420428331150924L;
private long handle;
native long init();
native void release(long handle);
public «$cname»() {
handle = init();
}
private native long _«$cname»(
byte[] mime_text
) throws pEpException;
public «$cname»(String mime_text) {
byte[] _mime_text = AbstractEngine.toUTF8(mime_text);
handle = _«$cname»(_mime_text);
}
public native byte[] _encodeMIME() throws pEpException;
public String encodeMIME() {
return AbstractEngine.toUTF16(_encodeMIME());
}
private «$cname»(long h) {
handle = h;
}
public final void close() {
release(handle);
}
final protected long getHandle() {
return handle;
}
`` apply "enum", mode=inner
`` apply "*[name(.)!='enum']", mode=entry
}
||
}
template "enum|exception" {
const "jname" call "toJava" with "type", "@name";
document("foundation/pEp/jniadapter/{$jname}.java", "text")
||
package foundation.pEp.jniadapter;
import java.util.HashMap;
`` apply ".", 0, mode=inner
||
}
template "enum|exception", mode=inner {
const "jname" call "CamelCase" with "text", "@name";
||
public enum «$jname» {
`` apply "*", mode=value
;
public final int value;
private static HashMap<Integer, «$jname»> intMap;
private «$jname»(int value) {
this.value = value;
}
public static «$jname» getByInt(int value){
if (intMap == null) {
intMap = new HashMap<Integer, «$jname»>();
for («$jname» s : «$jname».values()) {
intMap.put(s.value, s);
}
}
if (intMap.containsKey(value)) {
return intMap.get(value);
}
return null;
}
}
||
}
template "*", mode=entry {
const "ctype", "name(.)";
const "type" call "toJava" with "type", "name(.)";
const "itype" call "toIntermediate" with "type", "name(.)";
const "name" call "toJava" with "type", "name(*[position()=1])";
choose {
when "$ctype = 'identity'"
||
private native «$itype» _get«$name»();
private native void _set«$name»(«$itype» value);
public «$type» get«$name»() {
«$itype» res = _get«$name»();
if(res != null){
return new «$type»(_get«$name»());
}else{
return null;
}
}
public void set«$name»(«$type» value) {
if(value != null)
_set«$name»(new «$itype»(value));
else
_set«$name»(null);
}
||
when "$ctype = 'identitylist' or $ctype = 'bloblist' or $ctype = 'stringlist' or $ctype = 'stringpairlist'"
{
const "ename", "substring-after(substring($type,1,string-length($type)-1), '<')";
const "iename" choose {
when "$ctype = 'stringlist'" > byte[]
when "$ctype = 'stringpairlist'" > Pair<byte[],byte[]>
otherwise > _«$ename»
}
const "convget" choose {
when "$ctype = 'stringlist'" > AbstractEngine.toUTF16(i)
when "$ctype = 'stringpairlist'" > new Pair<String, String>(AbstractEngine.toUTF16(i.first), AbstractEngine.toUTF16(i.second))
otherwise > new «$ename»(i)
}
const "convset" choose {
when "$ctype = 'stringlist'" > AbstractEngine.toUTF8(i)
when "$ctype = 'stringpairlist'" > new Pair<byte[],byte[]>(AbstractEngine.toUTF8(i.first), AbstractEngine.toUTF8(i.second))
otherwise > new _«$ename»(i)
}
||
private native «$itype» _get«$name»();
private native void _set«$name»(«$itype» value);
public «$type» get«$name»() {
«$itype» glist = _get«$name»();
if(glist != null){
«$type» list = new «$type»();
for («$iename» i : glist)
list.add(«$convget»);
return list;
}
return null;
}
public void set«$name»(«$type» value) {
if(value != null){
«$itype» list = new «$itype»();
for («$ename» i : value)
list.add(«$convset»);
_set«$name»(list);
}else{
_set«$name»(null);
}
}
||
}
when "$itype != $type"
||
private native «$itype» _get«$name»();
private native void _set«$name»(«$itype» value);
public «$type» get«$name»() {
«$itype» res = _get«$name»();
if(res != null)
return AbstractEngine.toUTF16(res);
else
return null;
}
public void set«$name»(«$type» value) {
if(value != null)
_set«$name»(AbstractEngine.toUTF8(value));
else
_set«$name»(new byte[0]);
}
||
when "$itype != $type"
||
private native «$itype» _get«$name»();
private native void _set«$name»(«$itype» value);
public «$type» get«$name»() {
«$itype» res = _get«$name»();
if(res != null)
return AbstractEngine.toUTF16(res);
else
return null;
}
public void set«$name»(«$type» value) {
if(value != null)
_set«$name»(AbstractEngine.toUTF8(value));
else
_set«$name»(null);
}
||
when "../enum[@name=$ctype]"
||
private native int _get«$name»();
public «$itype» get«$name»() {
return «$itype».getByInt(_get«$name»());
}
private native void _set«$name»(int value);
public void set«$name»(«$itype» value) {
if(value != null)
_set«$name»(value.value);
else
_set«$name»(0);
}
||
otherwise
||
public native «$itype» get«$name»();
public native void set«$name»(«$itype» value);
||
}
}
template "*", mode=value {
const "name" call "toJava" with "type", "name(.)";
| «$name» («.»)`if "position()!=last()" > , `
}
}

35
src/gen_java_exceptions.ysl2

@ -1,35 +0,0 @@
include yslt.yml2
tstylesheet {
include ./textutils.ysl2
template "/" {
| package foundation.pEp.jniadapter;
|
| public class pEpException extends RuntimeException {
| public pEpException(String message) {
| super(message);
| }
| }
apply "namespace/exception[@name='Status']", 0;
}
function "exception" {
param "name";
document "foundation/pEp/jniadapter/{$name}.java", "text" {
| package foundation.pEp.jniadapter;
|
| public class «$name» extends pEpException {
| public «$name»(String message) {
| super(message);
| }
| }
}
}
template "exception" for "*[text()!=0]" call "exception"
with "name" call "CamelCase" with "text", "name(.)";
}

64
src/gen_throw_pEp_exception.ysl2

@ -1,64 +0,0 @@
include yslt.yml2
tstylesheet {
include ./textutils.ysl2
template "/" {
apply "namespace", 0;
document "throw_pEp_exception.hh", "text"
||
#pragma once
#include <jni.h>
namespace pEp {
namespace JNIAdapter {
jint throw_pEp_Exception(JNIEnv *env, PEP_STATUS status);
};
};
||
}
template "namespace"
||
#include <assert.h>
#include <pEp/pEpEngine.h>
#include "throw_pEp_exception.hh"
namespace pEp {
namespace JNIAdapter {
jint throw_pEp_Exception(JNIEnv *env, PEP_STATUS status)
{
jclass ex;
const char *ex_name;
switch (status) {
`` apply "exception/*[text()!=0]", 4, mode=case
default:
assert(0);
ex_name = "Exception";
}
ex = env->FindClass(ex_name);
assert(ex);
if (ex == NULL) {
ex = env->FindClass("java/lang/NoClassDefFoundError");
assert(ex);
}
return env->ThrowNew(ex, ex_name);
}
};
};
||
template "*", mode=case {
| case `call "UCASE" with "text", "name(.)"`:
| ex_name = "foundation/pEp/jniadapter/`call "CamelCase" with "text", "name(.)"`";
| break;
}
}

145
src/foundation/pEp/jniadapter/AbstractEngine.java → src/java/foundation/pEp/jniadapter/AbstractEngine.java

@ -4,11 +4,11 @@ import java.util.ArrayList;
import java.util.Vector; import java.util.Vector;
import foundation.pEp.jniadapter.Sync.DefaultCallback; import foundation.pEp.jniadapter.Sync.DefaultCallback;
import foundation.pEp.jniadapter.interfaces.*;
import foundation.pEp.jniadapter.exceptions.*;
import java.io.UnsupportedEncodingException;
import java.text.Normalizer;
abstract class AbstractEngine extends UniquelyIdentifiable implements AutoCloseable { abstract class AbstractEngine extends UniquelyIdentifiable implements AbstractEngineInterface {
static { static {
System.loadLibrary("pEpJNI"); System.loadLibrary("pEpJNI");
} }
@ -23,6 +23,9 @@ abstract class AbstractEngine extends UniquelyIdentifiable implements AutoClosea
private native void init(); private native void init();
private native void release(); private native void release();
private long keyserverThread;
private long keyserverQueue;
public AbstractEngine() throws pEpException { public AbstractEngine() throws pEpException {
synchronized (AbstractEngine.class) { synchronized (AbstractEngine.class) {
init(); init();
@ -35,124 +38,52 @@ abstract class AbstractEngine extends UniquelyIdentifiable implements AutoClosea
} }
} }
public native String getVersion(); public String getVersion() {
public native String getProtocolVersion(); return _getVersion();
private long keyserverThread;
private long keyserverQueue;
public native void startKeyserverLookup();
public native void stopKeyserverLookup();
public native void startSync();
public native void stopSync();
public native boolean isSyncRunning();
public static byte[] toUTF8(String str) {
if (str == null)
return null;
try {
String _str = Normalizer.normalize(str, Normalizer.Form.NFC);
byte _buf[] = _str.getBytes("UTF-8");
byte _cpy[] = new byte[_buf.length];
System.arraycopy(_buf,0,_cpy,0,_buf.length);
return _cpy;
}
catch (UnsupportedEncodingException e) {
assert false;
return new byte[0];
}
} }
public static Vector<byte[]> toUTF8(Vector<String> list) { private native String _getVersion();
if (list == null)
return null;
Vector<byte[]> result = new Vector<byte[]>(list.size());
for (int i=0; i<list.size(); i++) public String getProtocolVersion() {
result.add(toUTF8(list.get(i))); return _getProtocolVersion();
return result;
} }
public static Pair<byte[], byte[]> toUTF8(Pair<String, String> pair) { private native String _getProtocolVersion();
if (pair == null)
return null;
Pair<byte[], byte[]> result = new Pair<byte[], byte[]>();
result.first = toUTF8(pair.first);
result.second = toUTF8(pair.second);
return result; public void startKeyserverLookup() {
_startKeyserverLookup();
} }
public static ArrayList<Pair<byte[], byte[]>> toUTF8(ArrayList<Pair<String, String>> list) { private native void _startKeyserverLookup();
if (list == null)
return null;
ArrayList<Pair<byte[], byte[]>> result = new ArrayList<Pair<byte[], byte[]>>(list.size());
for (int i=0; i<list.size(); i++) public void stopKeyserverLookup() {
result.set(i, toUTF8(list.get(i))); _startKeyserverLookup();
return result;
} }
public static String toUTF16(byte[] utf8) { private native void _stopKeyserverLookup();
if (utf8 == null)
return null;
try {
byte newUtf8[] = new byte[utf8.length];
System.arraycopy(utf8,0,newUtf8,0,utf8.length);
return new String(newUtf8, "UTF-8"); public void startSync() {
} _startSync();
catch (UnsupportedEncodingException e) {
assert false;
return new String();
} }
}
public static Vector<String> toUTF16(Vector<byte[]> list) {
if (list == null)
return null;
Vector<String> result = new Vector<String>(list.size()); private native void _startSync();
for (int i=0; i<list.size(); i++) public void stopSync() {
result.add(toUTF16(list.get(i))); _stopSync();
return result;
} }
public static Pair<String, String> toUTF16(Pair<byte[], byte[]> pair) { private native void _stopSync();
if (pair == null)
return null;
Pair<String, String> result = new Pair<String,String>();
result.first = toUTF16(pair.first);
result.second = toUTF16(pair.second);
return result; public boolean isSyncRunning() {
return _isSyncRunning();
} }
public static ArrayList<Pair<String, String>> toUTF16(ArrayList<Pair<byte[], byte[]>> list) { private native boolean _isSyncRunning();
if (list == null)
return null;
ArrayList<Pair<String, String>> result = new ArrayList<Pair<String, String>>(list.size());
for (int i=0; i<list.size(); i++)
result.set(i, toUTF16(list.get(i)));
return result;
}
// Callbacks
public void setMessageToSendCallback(Sync.MessageToSendCallback messageToSendCallback) { public void setMessageToSendCallback(Sync.MessageToSendCallback messageToSendCallback) {
this.messageToSendCallback = messageToSendCallback; this.messageToSendCallback = messageToSendCallback;
} }
@ -171,7 +102,7 @@ abstract class AbstractEngine extends UniquelyIdentifiable implements AutoClosea
this.passphraseRequiredCallback = passphraseRequiredCallback; this.passphraseRequiredCallback = passphraseRequiredCallback;
} }
public int needsFastPollCallFromC(boolean fast_poll_needed) { private int needsFastPollCallFromC(boolean fast_poll_needed) {
if (needsFastPollCallback != null) { if (needsFastPollCallback != null) {
needsFastPollCallback.needsFastPollCallFromC(fast_poll_needed); needsFastPollCallback.needsFastPollCallFromC(fast_poll_needed);
} else { } else {
@ -180,7 +111,7 @@ abstract class AbstractEngine extends UniquelyIdentifiable implements AutoClosea
return 0; return 0;
} }
public int notifyHandshakeCallFromC(_Identity _myself, _Identity _partner, SyncHandshakeSignal _signal) { private int notifyHandshakeCallFromC(_Identity _myself, _Identity _partner, SyncHandshakeSignal _signal) {
Identity myself = new Identity(_myself); Identity myself = new Identity(_myself);
Identity partner = (_partner != null) ? new Identity(_partner) : null; Identity partner = (_partner != null) ? new Identity(_partner) : null;
@ -193,7 +124,7 @@ abstract class AbstractEngine extends UniquelyIdentifiable implements AutoClosea
return 0; return 0;
} }
public byte[] passphraseRequiredFromC(final PassphraseType passphraseType) { private byte[] passphraseRequiredFromC(final PassphraseType passphraseType) {
String ret = ""; String ret = "";
if (passphraseRequiredCallback != null) { if (passphraseRequiredCallback != null) {
System.out.println("calling passphraseRequiredCallback on engine ObjID:" + getId()); System.out.println("calling passphraseRequiredCallback on engine ObjID:" + getId());
@ -206,10 +137,10 @@ abstract class AbstractEngine extends UniquelyIdentifiable implements AutoClosea
// this repeats MaxRetries times (currentluy hardcoded to 3) // this repeats MaxRetries times (currentluy hardcoded to 3)
// Then the orig call will return with the PEP_STATUS (most likely PEP_PASSPHRASE_REQUIRED) // Then the orig call will return with the PEP_STATUS (most likely PEP_PASSPHRASE_REQUIRED)
} }
return toUTF8(ret); return Utils.toUTF8(ret);
} }
public int messageToSendCallFromC (Message message) { private int messageToSendCallFromC (Message message) {
System.out.println("pEpSync" + "messageToSendCallFromC: " + messageToSendCallback ); System.out.println("pEpSync" + "messageToSendCallFromC: " + messageToSendCallback );
if (messageToSendCallback != null) { if (messageToSendCallback != null) {
messageToSendCallback.messageToSend(message); messageToSendCallback.messageToSend(message);
@ -228,11 +159,11 @@ abstract class AbstractEngine extends UniquelyIdentifiable implements AutoClosea
ArrayList<Pair<String, String>> opts = new ArrayList<>(); ArrayList<Pair<String, String>> opts = new ArrayList<>();
Pair<String, String> xpEp = new Pair<>(); Pair<String, String> xpEp = new Pair<>();
xpEp.first = "X-pEp-Version"; xpEp.first = "X-pEp-Version";
xpEp.second = this.getProtocolVersion();; xpEp.second = this.getProtocolVersion();
opts.add(xpEp); opts.add(xpEp);
msg.setOptFields(opts); msg.setOptFields(opts);
if(encFormat == Message.EncFormat.PEP) { if (encFormat == Message.EncFormat.PEP) {
// For EncFormat.PEP // For EncFormat.PEP
// The pgpText goes into the attachment index 1 // The pgpText goes into the attachment index 1
msg.setShortmsg("p≡p"); msg.setShortmsg("p≡p");
@ -253,14 +184,12 @@ abstract class AbstractEngine extends UniquelyIdentifiable implements AutoClosea
attachments.add(att0); attachments.add(att0);
attachments.add(att1); attachments.add(att1);
msg.setAttachments(attachments); msg.setAttachments(attachments);
} } else if (encFormat == Message.EncFormat.PEPEncInlineEA) {
else if (encFormat == Message.EncFormat.PEPEncInlineEA) {
// For EncFormat.PEPEncInlineEA // For EncFormat.PEPEncInlineEA
// The pgpText goes into the longMessage // The pgpText goes into the longMessage
msg.setShortmsg(""); msg.setShortmsg("");
msg.setLongmsg(pgpText); msg.setLongmsg(pgpText);
} } else {
else {
throw new pEpCannotEncode("Message.Encformat not supported: " + encFormat.toString()); throw new pEpCannotEncode("Message.Encformat not supported: " + encFormat.toString());
} }

20
src/foundation/pEp/jniadapter/Blob.java → src/java/foundation/pEp/jniadapter/Blob.java

@ -1,8 +1,9 @@
package foundation.pEp.jniadapter; package foundation.pEp.jniadapter;
import foundation.pEp.jniadapter.interfaces.*;
import java.io.Serializable; import java.io.Serializable;
public class Blob implements Serializable { public class Blob implements BlobInterface, Serializable {
public byte[] data; public byte[] data;
public String mime_type; public String mime_type;
public String filename; public String filename;
@ -11,10 +12,18 @@ public class Blob implements Serializable {
mime_type = "application/octet-stream"; mime_type = "application/octet-stream";
} }
/** Human readable string representation of Blob. Blob(_Blob b) {
data = b.data;
mime_type = Utils.toUTF16(b.mime_type);
filename = Utils.toUTF16(b.filename);
}
/**
* Human readable string representation of Blob.
* The data field is ASN.1 XER decoded for mime_types: * The data field is ASN.1 XER decoded for mime_types:
* "application/pEp.sync" * "application/pEp.sync"
* "application/pEp.keyreset" * "application/pEp.keyreset"
*
* @return String Blob as String * @return String Blob as String
*/ */
public String toString() { public String toString() {
@ -22,15 +31,10 @@ public class Blob implements Serializable {
String ret = ""; String ret = "";
ret += "mime_type: \"" + mime_type + "\"\n"; ret += "mime_type: \"" + mime_type + "\"\n";
ret += "filename: \"" + filename + "\"\n"; ret += "filename: \"" + filename + "\"\n";
ret += "data plain: \"" + AbstractEngine.toUTF16(data) + "\"\n"; ret += "data plain: \"" + Utils.toUTF16(data) + "\"\n";
ret += "data decoded: \"" + _b.dataToXER() + "\"\n"; ret += "data decoded: \"" + _b.dataToXER() + "\"\n";
return ret; return ret;
} }
Blob(_Blob b) {
data = b.data;
mime_type = AbstractEngine.toUTF16(b.mime_type);
filename = AbstractEngine.toUTF16(b.filename);
}
} }

0
src/foundation/pEp/jniadapter/CommType.java → src/java/foundation/pEp/jniadapter/CommType.java

26
src/foundation/pEp/jniadapter/Identity.java → src/java/foundation/pEp/jniadapter/Identity.java

@ -1,8 +1,9 @@
package foundation.pEp.jniadapter; package foundation.pEp.jniadapter;
import foundation.pEp.jniadapter.interfaces.*;
import java.io.Serializable; import java.io.Serializable;
public class Identity implements Serializable{ public class Identity implements IdentityInterface, Serializable {
public String address; public String address;
public String fpr; public String fpr;
public String user_id; public String user_id;
@ -23,27 +24,26 @@ public class Identity implements Serializable{
} }
public Identity(_Identity i) { public Identity(_Identity i) {
address = AbstractEngine.toUTF16(i.address); address = Utils.toUTF16(i.address);
fpr = AbstractEngine.toUTF16(i.fpr); fpr = Utils.toUTF16(i.fpr);
user_id = AbstractEngine.toUTF16(i.user_id); user_id = Utils.toUTF16(i.user_id);
username = AbstractEngine.toUTF16(i.username); username = Utils.toUTF16(i.username);
comm_type = CommType.Management.tag.get(i.comm_type); comm_type = CommType.Management.tag.get(i.comm_type);
lang = AbstractEngine.toUTF16(i.lang); lang = Utils.toUTF16(i.lang);
me = i.me; me = i.me;
flags = i.flags; flags = i.flags;
} }
@Override public Rating getRating() {
public String toString() { return Rating.getByInt(_getRating(comm_type.value));
return address + "::" + username + "\n" +
user_id + "::" + fpr;
} }
// Native
private native int _getRating(int commType); private native int _getRating(int commType);
public Rating getRating() { @Override
return Rating.getByInt(_getRating(comm_type.value)); public String toString() {
return address + "::" + username + "\n" +
user_id + "::" + fpr;
} }
} }

0
src/foundation/pEp/jniadapter/Pair.java → src/java/foundation/pEp/jniadapter/Pair.java

7
src/foundation/pEp/jniadapter/Sync.java → src/java/foundation/pEp/jniadapter/Sync.java

@ -1,9 +1,5 @@
package foundation.pEp.jniadapter; package foundation.pEp.jniadapter;
import foundation.pEp.jniadapter.Identity;
import foundation.pEp.jniadapter.Message;
import foundation.pEp.jniadapter.pEpException;
public interface Sync { public interface Sync {
@ -23,8 +19,7 @@ public interface Sync {
String passphraseRequired(final PassphraseType pEpStatus); String passphraseRequired(final PassphraseType pEpStatus);
} }
public class DefaultCallback public class DefaultCallback implements Sync.MessageToSendCallback, Sync.NotifyHandshakeCallback, Sync.NeedsFastPollCallback {
implements Sync.MessageToSendCallback, Sync.NotifyHandshakeCallback, Sync.NeedsFastPollCallback {
@Override @Override
public void needsFastPollCallFromC(Boolean fast_poll_needed) { public void needsFastPollCallFromC(Boolean fast_poll_needed) {
System.out.println("Need fast Poll"); System.out.println("Need fast Poll");

12
src/java/foundation/pEp/jniadapter/UniquelyIdentifiable.java

@ -0,0 +1,12 @@
package foundation.pEp.jniadapter;
import java.util.concurrent.atomic.AtomicLong;
// Abstract here so you can only inherit from, but not instantiate
abstract public class UniquelyIdentifiable {
private static final AtomicLong NEXT_ID = new AtomicLong(1);
private final long id = NEXT_ID.getAndIncrement();
protected long getId() {
return id;
}
}

115
src/java/foundation/pEp/jniadapter/Utils.java

@ -0,0 +1,115 @@
package foundation.pEp.jniadapter;
import java.io.UnsupportedEncodingException;
import java.text.Normalizer;
import java.util.ArrayList;
import java.util.Vector;
public class Utils {
private Utils() { }
public static byte[] toUTF8(String str) {
if (str == null)
return null;
try {
String _str = Normalizer.normalize(str, Normalizer.Form.NFC);
byte _buf[] = _str.getBytes("UTF-8");
byte _cpy[] = new byte[_buf.length];
System.arraycopy(_buf,0,_cpy,0,_buf.length);
return _cpy;
}
catch (UnsupportedEncodingException e) {
assert false;
return new byte[0];
}
}
public static Vector<byte[]> toUTF8(Vector<String> list) {
if (list == null)
return null;
Vector<byte[]> result = new Vector<byte[]>(list.size());
for (int i=0; i<list.size(); i++)
result.add(toUTF8(list.get(i)));
return result;
}
public static Pair<byte[], byte[]> toUTF8(Pair<String, String> pair) {
if (pair == null)
return null;
Pair<byte[], byte[]> result = new Pair<byte[], byte[]>();
result.first = toUTF8(pair.first);
result.second = toUTF8(pair.second);
return result;
}
public static ArrayList<Pair<byte[], byte[]>> toUTF8(ArrayList<Pair<String, String>> list) {
if (list == null)
return null;
ArrayList<Pair<byte[], byte[]>> result = new ArrayList<Pair<byte[], byte[]>>(list.size());
for (int i=0; i<list.size(); i++)
result.set(i, toUTF8(list.get(i)));
return result;
}
public static String toUTF16(byte[] utf8) {
if (utf8 == null)
return null;
try {
byte newUtf8[] = new byte[utf8.length];
System.arraycopy(utf8,0,newUtf8,0,utf8.length);
return new String(newUtf8, "UTF-8");
}
catch (UnsupportedEncodingException e) {
assert false;
return new String();
}
}
public static Vector<String> toUTF16(Vector<byte[]> list) {
if (list == null)
return null;
Vector<String> result = new Vector<String>(list.size());
for (int i=0; i<list.size(); i++)
result.add(toUTF16(list.get(i)));
return result;
}
public static Pair<String, String> toUTF16(Pair<byte[], byte[]> pair) {
if (pair == null)
return null;
Pair<String, String> result = new Pair<String,String>();
result.first = toUTF16(pair.first);
result.second = toUTF16(pair.second);
return result;
}
public static ArrayList<Pair<String, String>> toUTF16(ArrayList<Pair<byte[], byte[]>> list) {
if (list == null)
return null;
ArrayList<Pair<String, String>> result = new ArrayList<Pair<String, String>>(list.size());
for (int i=0; i<list.size(); i++)
result.set(i, toUTF16(list.get(i)));
return result;
}
}

8
src/foundation/pEp/jniadapter/_Blob.java → src/java/foundation/pEp/jniadapter/_Blob.java

@ -1,5 +1,7 @@
package foundation.pEp.jniadapter; package foundation.pEp.jniadapter;
import foundation.pEp.jniadapter.exceptions.*;
public class _Blob { public class _Blob {
public byte[] data; public byte[] data;
public byte[] mime_type; public byte[] mime_type;
@ -9,13 +11,13 @@ public class _Blob {
private native byte[] _dataToXER() throws pEpException;; private native byte[] _dataToXER() throws pEpException;;
public String dataToXER() { public String dataToXER() {
return AbstractEngine.toUTF16(_dataToXER()); return Utils.toUTF16(_dataToXER());
} }
_Blob(Blob b) { _Blob(Blob b) {
data = b.data; data = b.data;
mime_type = AbstractEngine.toUTF8(b.mime_type); mime_type = Utils.toUTF8(b.mime_type);
filename = AbstractEngine.toUTF8(b.filename); filename = Utils.toUTF8(b.filename);
} }
} }

10
src/foundation/pEp/jniadapter/_Identity.java → src/java/foundation/pEp/jniadapter/_Identity.java

@ -19,12 +19,12 @@ public class _Identity {
} }
public _Identity(Identity i) { public _Identity(Identity i) {
address = AbstractEngine.toUTF8(i.address); address = Utils.toUTF8(i.address);
fpr = AbstractEngine.toUTF8(i.fpr); fpr = Utils.toUTF8(i.fpr);
user_id = AbstractEngine.toUTF8(i.user_id); user_id = Utils.toUTF8(i.user_id);
username = AbstractEngine.toUTF8(i.username); username = Utils.toUTF8(i.username);
comm_type = i.comm_type.value; comm_type = i.comm_type.value;
lang = AbstractEngine.toUTF8(i.lang); lang = Utils.toUTF8(i.lang);
me = i.me; me = i.me;
flags = i.flags; flags = i.flags;
} }

7
src/java/foundation/pEp/jniadapter/decrypt_message_Return.java

@ -0,0 +1,7 @@
package foundation.pEp.jniadapter;
public class decrypt_message_Return {
public Message dst;
public Rating rating;
public int flags;
}

30
src/java/foundation/pEp/jniadapter/interfaces/AbstractEngineInterface.java

@ -0,0 +1,30 @@
package foundation.pEp.jniadapter.interfaces;
import foundation.pEp.jniadapter.Message;
import foundation.pEp.jniadapter.Sync;
public interface AbstractEngineInterface extends AutoCloseable {
public String getVersion();
public String getProtocolVersion();
public void startKeyserverLookup();
public void stopKeyserverLookup();
public void startSync();
public void stopSync();
public boolean isSyncRunning();
public void setMessageToSendCallback(Sync.MessageToSendCallback messageToSendCallback);
public void setNotifyHandshakeCallback(Sync.NotifyHandshakeCallback notifyHandshakeCallback);
public void setNeedsFastPollCallback(Sync.NeedsFastPollCallback needsFastPollCallback);
public void setPassphraseRequiredCallback(Sync.PassphraseRequiredCallback passphraseRequiredCallback);
public Message incomingMessageFromPGPText(String pgpText, Message.EncFormat encFormat);
}

5
src/java/foundation/pEp/jniadapter/interfaces/BlobInterface.java

@ -0,0 +1,5 @@
package foundation.pEp.jniadapter.interfaces;
public interface BlobInterface {
}

7
src/java/foundation/pEp/jniadapter/interfaces/IdentityInterface.java

@ -0,0 +1,7 @@
package foundation.pEp.jniadapter.interfaces;
import foundation.pEp.jniadapter.Rating;
public interface IdentityInterface {
public Rating getRating();
}

6
test/java/foundation/pEp/jniadapter/test/Makefile.conf

@ -1,6 +1,7 @@
JAVA_PKG_BASENAME=foundation.pEp.jniadapter.test JAVA_PKG_BASENAME=foundation.pEp.jniadapter.test
JAVA_PKG_BASEPATH=foundation/pEp/jniadapter/test JAVA_PKG_BASEPATH=foundation/pEp/jniadapter/test
REPOROOT=../.. REPOROOT=../..
DIST_DIR=$(REPOROOT)/dist
JAVA_CWD=../../../../../ JAVA_CWD=../../../../../
JAVA_RESOURCES_DIR=../resources JAVA_RESOURCES_DIR=../resources
@ -14,9 +15,10 @@ PEP_HOME_DIR_BOB=$(JAVA_CWD)$(JAVA_PEP_HOME_DIR_BOB)
PEP_HOME_DIR_CAROL=$(JAVA_CWD)$(JAVA_PEP_HOME_DIR_CAROL) PEP_HOME_DIR_CAROL=$(JAVA_CWD)$(JAVA_PEP_HOME_DIR_CAROL)
PEP_HOME_DIR=$(PEP_HOME_DIR_ALICE) PEP_HOME_DIR=$(PEP_HOME_DIR_ALICE)
CLASSPATH=.:$(REPOROOT)/src CLASSPATH=.:$(DIST_DIR)/pEp.jar
LD_LIB_PATH=.:$(DIST_DIR)
JAVA=java -enableassertions -Xcheck:jni -cp $(CLASSPATH) -Djava.library.path=$(CLASSPATH) JAVA=java -enableassertions -Xcheck:jni -cp $(CLASSPATH) -Djava.library.path=$(LD_LIB_PATH)
PITYTEST_DIR=../../../pitytest PITYTEST_DIR=../../../pitytest

7
test/java/foundation/pEp/jniadapter/test/basic/TestMain.java

@ -1,9 +1,6 @@
package foundation.pEp.jniadapter.test.basic; package foundation.pEp.jniadapter.test.basic;
import foundation.pEp.jniadapter.Blob; import foundation.pEp.jniadapter.*;
import foundation.pEp.jniadapter.Engine;
import foundation.pEp.jniadapter.Identity;
import foundation.pEp.jniadapter.Message;
import foundation.pEp.pitytest.TestSuite; import foundation.pEp.pitytest.TestSuite;
import foundation.pEp.pitytest.TestUnit; import foundation.pEp.pitytest.TestUnit;
import foundation.pEp.jniadapter.test.utils.AdapterBaseTestContext; import foundation.pEp.jniadapter.test.utils.AdapterBaseTestContext;
@ -15,7 +12,7 @@ import static foundation.pEp.pitytest.TestLogger.log;
class BasicTestContext extends AdapterBaseTestContext { class BasicTestContext extends AdapterBaseTestContext {
Message enc; Message enc;
Engine.decrypt_message_Return result; decrypt_message_Return result;
public BasicTestContext() { public BasicTestContext() {
setTestContextName("BasicTestContext"); setTestContextName("BasicTestContext");

1
test/java/foundation/pEp/jniadapter/test/jni111/TestAlice.java

@ -4,6 +4,7 @@ import static foundation.pEp.pitytest.TestLogger.*;
import static foundation.pEp.pitytest.utils.TestUtils.readKey; import static foundation.pEp.pitytest.utils.TestUtils.readKey;
import foundation.pEp.jniadapter.*; import foundation.pEp.jniadapter.*;
import foundation.pEp.jniadapter.exceptions.*;
import foundation.pEp.pitytest.*; import foundation.pEp.pitytest.*;
import foundation.pEp.pitytest.utils.TestUtils; import foundation.pEp.pitytest.utils.TestUtils;
import foundation.pEp.jniadapter.test.utils.*; import foundation.pEp.jniadapter.test.utils.*;

1
test/java/foundation/pEp/jniadapter/test/jni114/TestAlice.java

@ -5,6 +5,7 @@ import static foundation.pEp.pitytest.utils.TestUtils.readKey;
import static foundation.pEp.pitytest.utils.TestUtils.sleep; import static foundation.pEp.pitytest.utils.TestUtils.sleep;
import foundation.pEp.jniadapter.*; import foundation.pEp.jniadapter.*;
import foundation.pEp.jniadapter.exceptions.*;
import foundation.pEp.pitytest.*; import foundation.pEp.pitytest.*;
import foundation.pEp.pitytest.utils.TestUtils; import foundation.pEp.pitytest.utils.TestUtils;
import foundation.pEp.jniadapter.test.utils.*; import foundation.pEp.jniadapter.test.utils.*;

2
test/java/foundation/pEp/jniadapter/test/jni88/TestMain.java

@ -1,5 +1,7 @@
package foundation.pEp.jniadapter.test.jni88; package foundation.pEp.jniadapter.test.jni88;
import foundation.pEp.jniadapter.*; import foundation.pEp.jniadapter.*;
import foundation.pEp.jniadapter.exceptions.*;
import java.util.Vector; import java.util.Vector;
import java.lang.Thread; import java.lang.Thread;

1
test/java/foundation/pEp/jniadapter/test/jni91/TestMain.java

@ -1,5 +1,6 @@
package foundation.pEp.jniadapter.test.jni91; package foundation.pEp.jniadapter.test.jni91;
import foundation.pEp.jniadapter.*; import foundation.pEp.jniadapter.*;
import foundation.pEp.jniadapter.exceptions.*;
import java.lang.Thread; import java.lang.Thread;

5
test/java/foundation/pEp/jniadapter/test/jni92/TestMain.java

@ -1,4 +1,5 @@
package foundation.pEp.jniadapter.test.jni92; package foundation.pEp.jniadapter.test.jni92;
import foundation.pEp.jniadapter.exceptions.*;
import foundation.pEp.jniadapter.test.utils.*; import foundation.pEp.jniadapter.test.utils.*;
import foundation.pEp.pitytest.*; import foundation.pEp.pitytest.*;
import foundation.pEp.jniadapter.*; import foundation.pEp.jniadapter.*;
@ -38,7 +39,7 @@ class TestMain {
Engine e; Engine e;
TestLogger.logH2("Creating new Engine"); TestLogger.logH2("Creating new Engine");
e = new Engine(); e = new Engine();
TestLogger.log("Engine created with java object ID: " + e.getId()); // TestLogger.log("Engine created with java object ID: " + e.getId());
return e; return e;
} }
@ -52,7 +53,7 @@ class TestMain {
public static void engineConsumer(Vector<Engine> ev, Consumer<Engine> ec) { public static void engineConsumer(Vector<Engine> ev, Consumer<Engine> ec) {
ev.forEach(e -> { ev.forEach(e -> {
TestLogger.logH2("engineConsumer: on engine java object ID: " + e.getId()); // TestLogger.logH2("engineConsumer: on engine java object ID: " + e.getId());
ec.accept(e); ec.accept(e);
}); });
} }

6
test/java/foundation/pEp/jniadapter/test/jni98/TestMain.java

@ -1,6 +1,6 @@
package foundation.pEp.jniadapter.test.jni98; package foundation.pEp.jniadapter.test.jni98;
import foundation.pEp.jniadapter.Engine; import foundation.pEp.jniadapter.*;
import foundation.pEp.jniadapter.Message; import foundation.pEp.jniadapter.Message;
import foundation.pEp.pitytest.TestUnit; import foundation.pEp.pitytest.TestUnit;
import foundation.pEp.jniadapter.test.utils.AdapterBaseTestContext; import foundation.pEp.jniadapter.test.utils.AdapterBaseTestContext;
@ -34,7 +34,7 @@ class TestMain {
log("\n" + msgToString(msg1, false)); log("\n" + msgToString(msg1, false));
// Lets get the pgpText of the msg1, and the EncFormat // Lets get the pgpText of the msg1, and the EncFormat
String pgpText = Engine.toUTF16(msg1.getAttachments().elementAt(1).data); String pgpText = Utils.toUTF16(msg1.getAttachments().elementAt(1).data);
Message.EncFormat ef = msg1.getEncFormat(); Message.EncFormat ef = msg1.getEncFormat();
//TODO: setting encformat to 4 (PEP) but getting back 3 (PGPMIME) //TODO: setting encformat to 4 (PEP) but getting back 3 (PGPMIME)
@ -44,7 +44,7 @@ class TestMain {
log("\n" + msgToString(msg2, false)); log("\n" + msgToString(msg2, false));
logH2("Verify msg2"); logH2("Verify msg2");
Engine.decrypt_message_Return result = null; decrypt_message_Return result = null;
result = ctx.engine.decrypt_message(msg2, ctx.vStr, 0); result = ctx.engine.decrypt_message(msg2, ctx.vStr, 0);
log("\n" + msgToString(result.dst, false)); log("\n" + msgToString(result.dst, false));
}).run(); }).run();

4
test/java/foundation/pEp/jniadapter/test/templateAliceBob/TestAlice.java

@ -2,7 +2,7 @@ package foundation.pEp.jniadapter.test.templateAliceBob;
import static foundation.pEp.pitytest.TestLogger.*; import static foundation.pEp.pitytest.TestLogger.*;
import foundation.pEp.jniadapter.Engine; import foundation.pEp.jniadapter.*;
import foundation.pEp.jniadapter.Message; import foundation.pEp.jniadapter.Message;
import foundation.pEp.jniadapter.test.utils.transport.fsmqmanager.FsMQMessage; import foundation.pEp.jniadapter.test.utils.transport.fsmqmanager.FsMQMessage;
import foundation.pEp.pitytest.*; import foundation.pEp.pitytest.*;
@ -59,7 +59,7 @@ class TestAlice {
Message msgRx = Utils.deserializepEpMessage(ctx, msgRxSerialized, Message.EncFormat.PEPEncInlineEA); Message msgRx = Utils.deserializepEpMessage(ctx, msgRxSerialized, Message.EncFormat.PEPEncInlineEA);
log("ENCRYPTED IN: \n" + AdapterTestUtils.msgToString(msgRx, false)); log("ENCRYPTED IN: \n" + AdapterTestUtils.msgToString(msgRx, false));
Engine.decrypt_message_Return result = ctx.engine.decrypt_message(msgRx, null, 0); decrypt_message_Return result = ctx.engine.decrypt_message(msgRx, null, 0);
log("DECRYPTED msg: \n" + AdapterTestUtils.msgToString(result.dst, false)); log("DECRYPTED msg: \n" + AdapterTestUtils.msgToString(result.dst, false));
log("DECRYPTED rating:" + result.rating.toString()); log("DECRYPTED rating:" + result.rating.toString());
log("DECRYPTED flags:" + result.flags); log("DECRYPTED flags:" + result.flags);

4
test/java/foundation/pEp/jniadapter/test/templateAliceBob/TestBob.java

@ -2,7 +2,7 @@ package foundation.pEp.jniadapter.test.templateAliceBob;
import static foundation.pEp.pitytest.TestLogger.*; import static foundation.pEp.pitytest.TestLogger.*;
import foundation.pEp.jniadapter.Engine; import foundation.pEp.jniadapter.*;
import foundation.pEp.jniadapter.Message; import foundation.pEp.jniadapter.Message;
import foundation.pEp.jniadapter.test.utils.transport.fsmqmanager.FsMQMessage; import foundation.pEp.jniadapter.test.utils.transport.fsmqmanager.FsMQMessage;
import foundation.pEp.pitytest.*; import foundation.pEp.pitytest.*;
@ -39,7 +39,7 @@ class TestBob {
Message msgRx = Utils.deserializepEpMessage(ctx, msgRxSerialized, Message.EncFormat.PEPEncInlineEA); Message msgRx = Utils.deserializepEpMessage(ctx, msgRxSerialized, Message.EncFormat.PEPEncInlineEA);
log("ENCRYPTED IN: \n" + AdapterTestUtils.msgToString(msgRx, false)); log("ENCRYPTED IN: \n" + AdapterTestUtils.msgToString(msgRx, false));
Engine.decrypt_message_Return result = ctx.engine.decrypt_message(msgRx, null, 0); decrypt_message_Return result = ctx.engine.decrypt_message(msgRx, null, 0);
log("DECRYPTED msg: \n" + AdapterTestUtils.msgToString(result.dst, false)); log("DECRYPTED msg: \n" + AdapterTestUtils.msgToString(result.dst, false));
log("DECRYPTED rating:" + result.rating.toString()); log("DECRYPTED rating:" + result.rating.toString());
log("DECRYPTED flags:" + result.flags); log("DECRYPTED flags:" + result.flags);

Loading…
Cancel
Save