From 1a08fa368238ecee208f1d7567ff61aa1f00a858 Mon Sep 17 00:00:00 2001 From: heck Date: Thu, 25 Jun 2020 22:52:48 +0200 Subject: [PATCH 01/94] Added interface for Message, Identity, Blob --- src/foundation/pEp/jniadapter/Blob.java | 2 +- .../pEp/jniadapter/BlobInterface.java | 5 ++ src/foundation/pEp/jniadapter/Identity.java | 2 +- .../pEp/jniadapter/IdentityInterface.java | 5 ++ src/gen_java_Message.ysl2 | 79 ++++++++++++++++++- 5 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 src/foundation/pEp/jniadapter/BlobInterface.java create mode 100644 src/foundation/pEp/jniadapter/IdentityInterface.java diff --git a/src/foundation/pEp/jniadapter/Blob.java b/src/foundation/pEp/jniadapter/Blob.java index f246e0c..dffd60f 100644 --- a/src/foundation/pEp/jniadapter/Blob.java +++ b/src/foundation/pEp/jniadapter/Blob.java @@ -2,7 +2,7 @@ package foundation.pEp.jniadapter; import java.io.Serializable; -public class Blob implements Serializable { +public class Blob implements BlobInterface, Serializable { public byte[] data; public String mime_type; public String filename; diff --git a/src/foundation/pEp/jniadapter/BlobInterface.java b/src/foundation/pEp/jniadapter/BlobInterface.java new file mode 100644 index 0000000..d52e7c7 --- /dev/null +++ b/src/foundation/pEp/jniadapter/BlobInterface.java @@ -0,0 +1,5 @@ +package foundation.pEp.jniadapter; + +public interface BlobInterface { + +} diff --git a/src/foundation/pEp/jniadapter/Identity.java b/src/foundation/pEp/jniadapter/Identity.java index 756102c..3f72b90 100644 --- a/src/foundation/pEp/jniadapter/Identity.java +++ b/src/foundation/pEp/jniadapter/Identity.java @@ -2,7 +2,7 @@ package foundation.pEp.jniadapter; import java.io.Serializable; -public class Identity implements Serializable{ +public class Identity implements IdentityInterface, Serializable { public String address; public String fpr; public String user_id; diff --git a/src/foundation/pEp/jniadapter/IdentityInterface.java b/src/foundation/pEp/jniadapter/IdentityInterface.java new file mode 100644 index 0000000..93e0d29 --- /dev/null +++ b/src/foundation/pEp/jniadapter/IdentityInterface.java @@ -0,0 +1,5 @@ +package foundation.pEp.jniadapter; + +public interface IdentityInterface { + public Rating getRating(); +} diff --git a/src/gen_java_Message.ysl2 b/src/gen_java_Message.ysl2 index a16658a..19b0a94 100644 --- a/src/gen_java_Message.ysl2 +++ b/src/gen_java_Message.ysl2 @@ -18,7 +18,7 @@ tstylesheet { import java.util.HashMap; import java.io.Serializable; - public class «$cname» implements AutoCloseable, Serializable { + public class «$cname» implements MessageInterface, AutoCloseable, Serializable { private static final long serialVersionUID = 2119420428331150924L; private long handle; @@ -60,6 +60,20 @@ tstylesheet { `` apply "*[name(.)!='enum']", mode=entry } || + document("foundation/pEp/jniadapter/{$cname}Interface.java", "text") + || + package foundation.pEp.jniadapter; + + import foundation.pEp.jniadapter.Message.Direction; + 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|exception" { @@ -244,6 +258,69 @@ tstylesheet { } } + template "*", mode=interface { + 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'" + || + public «$type» get«$name»(); + public void set«$name»(«$type» 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 + otherwise > _«$ename» + } + const "convget" choose { + when "$ctype = 'stringlist'" > AbstractEngine.toUTF16(i) + when "$ctype = 'stringpairlist'" > new Pair(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(AbstractEngine.toUTF8(i.first), AbstractEngine.toUTF8(i.second)) + otherwise > new _«$ename»(i) + } + || + public «$type» get«$name»(); + public void set«$name»(«$type» value); + || + } + + when "$itype != $type" + || + public «$type» get«$name»(); + public void set«$name»(«$type» value); + || + + when "$itype != $type" + || + public «$type» get«$name»(); + public void set«$name»(«$type» value); + || + + when "../enum[@name=$ctype]" + || + public «$itype» get«$name»(); + public void set«$name»(«$itype» value); + || + + otherwise + || + public «$itype» get«$name»(); + public void set«$name»(«$itype» value); + || + } + } + template "*", mode=value { const "name" call "toJava" with "type", "name(.)"; | «$name» («.»)`if "position()!=last()" > , ` From d11409365a54a5b0410870f2b5d56eb6b6e20104 Mon Sep 17 00:00:00 2001 From: heck Date: Tue, 30 Jun 2020 20:12:14 +0200 Subject: [PATCH 02/94] AbstractEngineInterface containing all public methods. needed wrap all native methods (native methods cant be in interfaces) --- .../pEp/jniadapter/AbstractEngine.java | 44 +++++++++++++++---- .../jniadapter/AbstractEngineInterface.java | 31 +++++++++++++ ...oundation_pEp_jniadapter_AbstractEngine.cc | 14 +++--- 3 files changed, 74 insertions(+), 15 deletions(-) create mode 100644 src/foundation/pEp/jniadapter/AbstractEngineInterface.java diff --git a/src/foundation/pEp/jniadapter/AbstractEngine.java b/src/foundation/pEp/jniadapter/AbstractEngine.java index f492ccb..496c118 100644 --- a/src/foundation/pEp/jniadapter/AbstractEngine.java +++ b/src/foundation/pEp/jniadapter/AbstractEngine.java @@ -8,7 +8,7 @@ import foundation.pEp.jniadapter.Sync.DefaultCallback; import java.io.UnsupportedEncodingException; import java.text.Normalizer; -abstract class AbstractEngine extends UniquelyIdentifiable implements AutoCloseable { +abstract class AbstractEngine extends UniquelyIdentifiable implements AbstractEngineInterface, AutoCloseable { static { System.loadLibrary("pEpJNI"); } @@ -34,18 +34,46 @@ abstract class AbstractEngine extends UniquelyIdentifiable implements AutoClosea } } - public native String getVersion(); - public native String getProtocolVersion(); + private native String _getVersion(); + + public String getVersion() { + return _getVersion(); + } + + private native String _getProtocolVersion(); + + public String getProtocolVersion() { + return _getProtocolVersion(); + } private long keyserverThread; private long keyserverQueue; - public native void startKeyserverLookup(); - public native void stopKeyserverLookup(); + private native void _startKeyserverLookup(); + + public void startKeyserverLookup() { + _startKeyserverLookup(); + } + + private native void _stopKeyserverLookup(); + + public void stopKeyserverLookup() { + _startKeyserverLookup(); + } + + private native void _startSync(); + + public void startSync() { + _startSync(); + } + + private native void _stopSync(); + + public void stopSync() { + _stopSync(); + } - public native void startSync(); - public native void stopSync(); - public native boolean isSyncRunning(); + private native boolean _isSyncRunning(); public static byte[] toUTF8(String str) { if (str == null) diff --git a/src/foundation/pEp/jniadapter/AbstractEngineInterface.java b/src/foundation/pEp/jniadapter/AbstractEngineInterface.java new file mode 100644 index 0000000..9b13206 --- /dev/null +++ b/src/foundation/pEp/jniadapter/AbstractEngineInterface.java @@ -0,0 +1,31 @@ +package foundation.pEp.jniadapter; + +public interface AbstractEngineInterface { + 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 int needsFastPollCallFromC(boolean fast_poll_needed); + + public int notifyHandshakeCallFromC(_Identity _myself, _Identity _partner, SyncHandshakeSignal _signal); + + public int messageToSendCallFromC(Message message); + + public Message incomingMessageFromPGPText(String pgpText, Message.EncFormat encFormat); +} diff --git a/src/foundation_pEp_jniadapter_AbstractEngine.cc b/src/foundation_pEp_jniadapter_AbstractEngine.cc index beb06ef..8511fb7 100644 --- a/src/foundation_pEp_jniadapter_AbstractEngine.cc +++ b/src/foundation_pEp_jniadapter_AbstractEngine.cc @@ -196,7 +196,7 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_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, jobject obj ) @@ -212,7 +212,7 @@ JNIEXPORT jstring JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_getVersi 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, jobject obj ) @@ -263,7 +263,7 @@ static void *keyserver_thread_routine(void *arg) return (void *) status; } -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_startKeyserverLookup( +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1startKeyserverLookup( JNIEnv *env, jobject obj ) @@ -307,7 +307,7 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_startKeyser 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, jobject obj ) @@ -351,7 +351,7 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_stopKeyserv free(thread); } -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_startSync( +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1startSync( JNIEnv *env, jobject obj ) @@ -374,7 +374,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, jobject obj ) @@ -390,7 +390,7 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_stopSync( Adapter::shutdown(); } -JNIEXPORT jboolean JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_isSyncRunning( +JNIEXPORT jboolean JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1isSyncRunning( JNIEnv *env, jobject obj ) From 555cb1007068ead76ec96b8d09dbb0be781ea5e0 Mon Sep 17 00:00:00 2001 From: heck Date: Tue, 30 Jun 2020 20:54:50 +0200 Subject: [PATCH 03/94] move encoding/decoding UTF-8/UTF-16 functions to new "static" class Utils.java --- .../pEp/jniadapter/AbstractEngine.java | 122 +--------- src/foundation/pEp/jniadapter/Blob.java | 6 +- .../pEp/jniadapter/Engine.java.target | 28 --- src/foundation/pEp/jniadapter/Identity.java | 10 +- .../pEp/jniadapter/Message.java.target | 218 ------------------ src/foundation/pEp/jniadapter/Utils.java | 115 +++++++++ src/foundation/pEp/jniadapter/_Blob.java | 6 +- src/foundation/pEp/jniadapter/_Identity.java | 10 +- src/gen_java_Engine.ysl2 | 10 +- src/gen_java_Message.ysl2 | 28 +-- 10 files changed, 160 insertions(+), 393 deletions(-) delete mode 100644 src/foundation/pEp/jniadapter/Engine.java.target delete mode 100644 src/foundation/pEp/jniadapter/Message.java.target create mode 100644 src/foundation/pEp/jniadapter/Utils.java diff --git a/src/foundation/pEp/jniadapter/AbstractEngine.java b/src/foundation/pEp/jniadapter/AbstractEngine.java index 496c118..fa45755 100644 --- a/src/foundation/pEp/jniadapter/AbstractEngine.java +++ b/src/foundation/pEp/jniadapter/AbstractEngine.java @@ -29,7 +29,7 @@ abstract class AbstractEngine extends UniquelyIdentifiable implements AbstractEn } final public void close() { - synchronized (AbstractEngine.class){ + synchronized (AbstractEngine.class) { release(); } } @@ -75,110 +75,10 @@ abstract class AbstractEngine extends UniquelyIdentifiable implements AbstractEn private 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 toUTF8(Vector list) { - if (list == null) - return null; - - Vector result = new Vector(list.size()); - - for (int i=0; i toUTF8(Pair pair) { - if (pair == null) - return null; - - Pair result = new Pair(); - - result.first = toUTF8(pair.first); - result.second = toUTF8(pair.second); - - return result; - } - - public static ArrayList> toUTF8(ArrayList> list) { - if (list == null) - return null; - - ArrayList> result = new ArrayList>(list.size()); - - for (int i=0; i toUTF16(Vector list) { - if (list == null) - return null; - - Vector result = new Vector(list.size()); - - for (int i=0; i toUTF16(Pair pair) { - if (pair == null) - return null; - - Pair result = new Pair(); - - result.first = toUTF16(pair.first); - result.second = toUTF16(pair.second); - - return result; - } - - public static ArrayList> toUTF16(ArrayList> list) { - if (list == null) - return null; - - ArrayList> result = new ArrayList>(list.size()); - - for (int i=0; i> opts = new ArrayList<>(); Pair xpEp = new Pair<>(); xpEp.first = "X-pEp-Version"; - xpEp.second = this.getProtocolVersion();; + xpEp.second = this.getProtocolVersion(); opts.add(xpEp); msg.setOptFields(opts); - if(encFormat == Message.EncFormat.PEP) { + if (encFormat == Message.EncFormat.PEP) { // For EncFormat.PEP // The pgpText goes into the attachment index 1 msg.setShortmsg("p≡p"); @@ -257,14 +157,12 @@ abstract class AbstractEngine extends UniquelyIdentifiable implements AbstractEn attachments.add(att0); attachments.add(att1); msg.setAttachments(attachments); - } - else if (encFormat == Message.EncFormat.PEPEncInlineEA) { + } else if (encFormat == Message.EncFormat.PEPEncInlineEA) { // For EncFormat.PEPEncInlineEA // The pgpText goes into the longMessage msg.setShortmsg(""); msg.setLongmsg(pgpText); - } - else { + } else { throw new pEpCannotEncode("Message.Encformat not supported: " + encFormat.toString()); } diff --git a/src/foundation/pEp/jniadapter/Blob.java b/src/foundation/pEp/jniadapter/Blob.java index dffd60f..9d2c7cc 100644 --- a/src/foundation/pEp/jniadapter/Blob.java +++ b/src/foundation/pEp/jniadapter/Blob.java @@ -22,15 +22,15 @@ public class Blob implements BlobInterface, Serializable { String ret = ""; ret += "mime_type: \"" + mime_type + "\"\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"; return ret; } Blob(_Blob b) { data = b.data; - mime_type = AbstractEngine.toUTF16(b.mime_type); - filename = AbstractEngine.toUTF16(b.filename); + mime_type = Utils.toUTF16(b.mime_type); + filename = Utils.toUTF16(b.filename); } } diff --git a/src/foundation/pEp/jniadapter/Engine.java.target b/src/foundation/pEp/jniadapter/Engine.java.target deleted file mode 100644 index 7708586..0000000 --- a/src/foundation/pEp/jniadapter/Engine.java.target +++ /dev/null @@ -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 extra, - Message.EncFormat enc_format - ) throws pEpException; - - public class DecryptResult { - public Message dst; - public Color color; - } - - public native DecryptResult decrypt_message( - Message src, - ArrayList keylist - ) throws pEpException; - - public native Color outgoing_message_color( - Message msg - ) throws pEpException; -} diff --git a/src/foundation/pEp/jniadapter/Identity.java b/src/foundation/pEp/jniadapter/Identity.java index 3f72b90..54ff7de 100644 --- a/src/foundation/pEp/jniadapter/Identity.java +++ b/src/foundation/pEp/jniadapter/Identity.java @@ -23,12 +23,12 @@ public class Identity implements IdentityInterface, Serializable { } public Identity(_Identity i) { - address = AbstractEngine.toUTF16(i.address); - fpr = AbstractEngine.toUTF16(i.fpr); - user_id = AbstractEngine.toUTF16(i.user_id); - username = AbstractEngine.toUTF16(i.username); + address = Utils.toUTF16(i.address); + fpr = Utils.toUTF16(i.fpr); + user_id = Utils.toUTF16(i.user_id); + username = Utils.toUTF16(i.username); comm_type = CommType.Management.tag.get(i.comm_type); - lang = AbstractEngine.toUTF16(i.lang); + lang = Utils.toUTF16(i.lang); me = i.me; flags = i.flags; } diff --git a/src/foundation/pEp/jniadapter/Message.java.target b/src/foundation/pEp/jniadapter/Message.java.target deleted file mode 100644 index 6cdc3e6..0000000 --- a/src/foundation/pEp/jniadapter/Message.java.target +++ /dev/null @@ -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 tag = - new HashMap(); - } - - 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 tag = - new HashMap(); - } - - 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 tag = - new HashMap(); - } - - 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 getAttachments(); - public native void setAttachments(ArrayList 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 getTo(); - public native void setTo(ArrayList value); - - public native Identity getRecvBy(); - public native void setRecvBy(Identity value); - - public native ArrayList getCc(); - public native void setCc(ArrayList value); - - public native ArrayList getBcc(); - public native void setBcc(ArrayList value); - - public native ArrayList getReplyTo(); - public native void setReplyTo(ArrayList value); - - private native ArrayList _getInReplyTo(); - private native void _setInReplyTo(ArrayList value); - public ArrayList getInReplyTo() { - return AbstractEngine.toUTF16(_getInReplyTo()); - } - public void setInReplyTo(ArrayList value) { - _setInReplyTo(AbstractEngine.toUTF8(value)); - } - - private native ArrayList _getReferences(); - private native void _setReferences(ArrayList value); - public ArrayList getReferences() { - return AbstractEngine.toUTF16(_getReferences()); - } - public void setReferences(ArrayList value) { - _setReferences(AbstractEngine.toUTF8(value)); - } - - private native ArrayList _getKeywords(); - private native void _setKeywords(ArrayList value); - public ArrayList getKeywords() { - return AbstractEngine.toUTF16(_getKeywords()); - } - public void setKeywords(ArrayList 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> _getOptFields(); - private native void _setOptFields(Vector> value); - public Vector> getOptFields() { - return AbstractEngine.toUTF16(_getOptFields()); - } - public void setOptFields(Vector> value) { - _setOptFields(AbstractEngine.toUTF8(value)); - } - - public native Message.EncFormat getEncFormat(); - public native void setEncFormat(Message.EncFormat value); - -} diff --git a/src/foundation/pEp/jniadapter/Utils.java b/src/foundation/pEp/jniadapter/Utils.java new file mode 100644 index 0000000..709998f --- /dev/null +++ b/src/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 toUTF8(Vector list) { + if (list == null) + return null; + + Vector result = new Vector(list.size()); + + for (int i=0; i toUTF8(Pair pair) { + if (pair == null) + return null; + + Pair result = new Pair(); + + result.first = toUTF8(pair.first); + result.second = toUTF8(pair.second); + + return result; + } + + public static ArrayList> toUTF8(ArrayList> list) { + if (list == null) + return null; + + ArrayList> result = new ArrayList>(list.size()); + + for (int i=0; i toUTF16(Vector list) { + if (list == null) + return null; + + Vector result = new Vector(list.size()); + + for (int i=0; i toUTF16(Pair pair) { + if (pair == null) + return null; + + Pair result = new Pair(); + + result.first = toUTF16(pair.first); + result.second = toUTF16(pair.second); + + return result; + } + + public static ArrayList> toUTF16(ArrayList> list) { + if (list == null) + return null; + + ArrayList> result = new ArrayList>(list.size()); + + for (int i=0; i return new Boolean(_«@name»(`apply "parm/*", mode=basic_parm_name`)); otherwise - |> return AbstractEngine.toUTF16(_«@name»(`apply "parm/*", mode=basic_parm_name`)); + |> return Utils.toUTF16(_«@name»(`apply "parm/*", mode=basic_parm_name`)); } || } @@ -191,14 +191,14 @@ tstylesheet { // TODO factorize type conversion with multireturn and gen_java_message.java 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" || ArrayList> glist = _«@name»(`apply "parm[in]", mode=call;`); if(glist != null){ ArrayList> list = new ArrayList>(); for (Pair i : glist) - list.add(new Pair(AbstractEngine.toUTF16(i.first), AbstractEngine.toUTF16(i.second))); + list.add(new Pair(Utils.toUTF16(i.first), Utils.toUTF16(i.second))); return list; } return null; @@ -287,7 +287,7 @@ tstylesheet { if "$dir = 'in' or $dir = 'inout'" choose { when "$type = 'string' or $type = 'stringlist'" - | ¡$type _«$name» = AbstractEngine.toUTF8(«$name»); + | ¡$type _«$name» = Utils.toUTF8(«$name»); when "$type = 'identity'" || _Identity _«$name» = null; @@ -311,7 +311,7 @@ tstylesheet { if "$dir != 'in'" choose { when "$type = 'string' or $type = 'stringlist'" - | result.«$name» = AbstractEngine.toUTF16(_result.«$name»); + | result.«$name» = Utils.toUTF16(_result.«$name»); when "$type = 'identity'" | result.«$name» = Identity(«$name»); otherwise diff --git a/src/gen_java_Message.ysl2 b/src/gen_java_Message.ysl2 index 19b0a94..655f075 100644 --- a/src/gen_java_Message.ysl2 +++ b/src/gen_java_Message.ysl2 @@ -34,14 +34,14 @@ tstylesheet { ) throws pEpException; public «$cname»(String mime_text) { - byte[] _mime_text = AbstractEngine.toUTF8(mime_text); + byte[] _mime_text = Utils.toUTF8(mime_text); handle = _«$cname»(_mime_text); } public native byte[] _encodeMIME() throws pEpException; public String encodeMIME() { - return AbstractEngine.toUTF16(_encodeMIME()); + return Utils.toUTF16(_encodeMIME()); } private «$cname»(long h) { @@ -157,13 +157,13 @@ tstylesheet { otherwise > _«$ename» } const "convget" choose { - when "$ctype = 'stringlist'" > AbstractEngine.toUTF16(i) - when "$ctype = 'stringpairlist'" > new Pair(AbstractEngine.toUTF16(i.first), AbstractEngine.toUTF16(i.second)) + when "$ctype = 'stringlist'" > Utils.toUTF16(i) + when "$ctype = 'stringpairlist'" > new Pair(Utils.toUTF16(i.first), Utils.toUTF16(i.second)) otherwise > new «$ename»(i) } const "convset" choose { - when "$ctype = 'stringlist'" > AbstractEngine.toUTF8(i) - when "$ctype = 'stringpairlist'" > new Pair(AbstractEngine.toUTF8(i.first), AbstractEngine.toUTF8(i.second)) + when "$ctype = 'stringlist'" > Utils.toUTF8(i) + when "$ctype = 'stringpairlist'" > new Pair(Utils.toUTF8(i.first), Utils.toUTF8(i.second)) otherwise > new _«$ename»(i) } || @@ -200,13 +200,13 @@ tstylesheet { public «$type» get«$name»() { «$itype» res = _get«$name»(); if(res != null) - return AbstractEngine.toUTF16(res); + return Utils.toUTF16(res); else return null; } public void set«$name»(«$type» value) { if(value != null) - _set«$name»(AbstractEngine.toUTF8(value)); + _set«$name»(Utils.toUTF8(value)); else _set«$name»(new byte[0]); } @@ -220,13 +220,13 @@ tstylesheet { public «$type» get«$name»() { «$itype» res = _get«$name»(); if(res != null) - return AbstractEngine.toUTF16(res); + return Utils.toUTF16(res); else return null; } public void set«$name»(«$type» value) { if(value != null) - _set«$name»(AbstractEngine.toUTF8(value)); + _set«$name»(Utils.toUTF8(value)); else _set«$name»(null); } @@ -280,13 +280,13 @@ tstylesheet { otherwise > _«$ename» } const "convget" choose { - when "$ctype = 'stringlist'" > AbstractEngine.toUTF16(i) - when "$ctype = 'stringpairlist'" > new Pair(AbstractEngine.toUTF16(i.first), AbstractEngine.toUTF16(i.second)) + when "$ctype = 'stringlist'" > Utils.toUTF16(i) + when "$ctype = 'stringpairlist'" > new Pair(Utils.toUTF16(i.first), Utils.toUTF16(i.second)) otherwise > new «$ename»(i) } const "convset" choose { - when "$ctype = 'stringlist'" > AbstractEngine.toUTF8(i) - when "$ctype = 'stringpairlist'" > new Pair(AbstractEngine.toUTF8(i.first), AbstractEngine.toUTF8(i.second)) + when "$ctype = 'stringlist'" > Utils.toUTF8(i) + when "$ctype = 'stringpairlist'" > new Pair(Utils.toUTF8(i.first), Utils.toUTF8(i.second)) otherwise > new _«$ename»(i) } || From 97a006385d2aa119fe124beb36043fe7f0120528 Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 1 Jul 2020 16:17:29 +0200 Subject: [PATCH 04/94] Move class decrypt_message_Return from inner class of Engine, to new class decrypt_message_Return (in pkg foundation.pEp.jniadapter) --- src/foundation/pEp/jniadapter/decrypt_message_Return.java | 7 +++++++ src/gen_java_Engine.ysl2 | 7 ------- .../foundation/pEp/jniadapter/test/basic/TestMain.java | 7 ++----- .../foundation/pEp/jniadapter/test/jni98/TestMain.java | 6 +++--- .../pEp/jniadapter/test/templateAliceBob/TestAlice.java | 4 ++-- .../pEp/jniadapter/test/templateAliceBob/TestBob.java | 4 ++-- 6 files changed, 16 insertions(+), 19 deletions(-) create mode 100644 src/foundation/pEp/jniadapter/decrypt_message_Return.java diff --git a/src/foundation/pEp/jniadapter/decrypt_message_Return.java b/src/foundation/pEp/jniadapter/decrypt_message_Return.java new file mode 100644 index 0000000..e59aae9 --- /dev/null +++ b/src/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; +} diff --git a/src/gen_java_Engine.ysl2 b/src/gen_java_Engine.ysl2 index 838729c..1e74012 100644 --- a/src/gen_java_Engine.ysl2 +++ b/src/gen_java_Engine.ysl2 @@ -159,13 +159,6 @@ tstylesheet { } || - - || - public class «@name»_Return { - `` apply "parm[creates|returns|inout[../int]]", 1, mode=java with "public", 1; - } - - || } if "$convert" diff --git a/test/java/foundation/pEp/jniadapter/test/basic/TestMain.java b/test/java/foundation/pEp/jniadapter/test/basic/TestMain.java index d1f290c..12dc192 100644 --- a/test/java/foundation/pEp/jniadapter/test/basic/TestMain.java +++ b/test/java/foundation/pEp/jniadapter/test/basic/TestMain.java @@ -1,9 +1,6 @@ package foundation.pEp.jniadapter.test.basic; -import foundation.pEp.jniadapter.Blob; -import foundation.pEp.jniadapter.Engine; -import foundation.pEp.jniadapter.Identity; -import foundation.pEp.jniadapter.Message; +import foundation.pEp.jniadapter.*; import foundation.pEp.pitytest.TestSuite; import foundation.pEp.pitytest.TestUnit; import foundation.pEp.jniadapter.test.utils.AdapterBaseTestContext; @@ -15,7 +12,7 @@ import static foundation.pEp.pitytest.TestLogger.log; class BasicTestContext extends AdapterBaseTestContext { Message enc; - Engine.decrypt_message_Return result; + decrypt_message_Return result; public BasicTestContext() { setTestContextName("BasicTestContext"); diff --git a/test/java/foundation/pEp/jniadapter/test/jni98/TestMain.java b/test/java/foundation/pEp/jniadapter/test/jni98/TestMain.java index a8327e1..aad0166 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni98/TestMain.java +++ b/test/java/foundation/pEp/jniadapter/test/jni98/TestMain.java @@ -1,6 +1,6 @@ package foundation.pEp.jniadapter.test.jni98; -import foundation.pEp.jniadapter.Engine; +import foundation.pEp.jniadapter.*; import foundation.pEp.jniadapter.Message; import foundation.pEp.pitytest.TestUnit; import foundation.pEp.jniadapter.test.utils.AdapterBaseTestContext; @@ -34,7 +34,7 @@ class TestMain { log("\n" + msgToString(msg1, false)); // 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(); //TODO: setting encformat to 4 (PEP) but getting back 3 (PGPMIME) @@ -44,7 +44,7 @@ class TestMain { log("\n" + msgToString(msg2, false)); logH2("Verify msg2"); - Engine.decrypt_message_Return result = null; + decrypt_message_Return result = null; result = ctx.engine.decrypt_message(msg2, ctx.vStr, 0); log("\n" + msgToString(result.dst, false)); }).run(); diff --git a/test/java/foundation/pEp/jniadapter/test/templateAliceBob/TestAlice.java b/test/java/foundation/pEp/jniadapter/test/templateAliceBob/TestAlice.java index 1cb6358..f872423 100644 --- a/test/java/foundation/pEp/jniadapter/test/templateAliceBob/TestAlice.java +++ b/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 foundation.pEp.jniadapter.Engine; +import foundation.pEp.jniadapter.*; import foundation.pEp.jniadapter.Message; import foundation.pEp.jniadapter.test.utils.transport.fsmqmanager.FsMQMessage; import foundation.pEp.pitytest.*; @@ -59,7 +59,7 @@ class TestAlice { Message msgRx = Utils.deserializepEpMessage(ctx, msgRxSerialized, Message.EncFormat.PEPEncInlineEA); 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 rating:" + result.rating.toString()); log("DECRYPTED flags:" + result.flags); diff --git a/test/java/foundation/pEp/jniadapter/test/templateAliceBob/TestBob.java b/test/java/foundation/pEp/jniadapter/test/templateAliceBob/TestBob.java index c8b7afc..d5e477e 100644 --- a/test/java/foundation/pEp/jniadapter/test/templateAliceBob/TestBob.java +++ b/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 foundation.pEp.jniadapter.Engine; +import foundation.pEp.jniadapter.*; import foundation.pEp.jniadapter.Message; import foundation.pEp.jniadapter.test.utils.transport.fsmqmanager.FsMQMessage; import foundation.pEp.pitytest.*; @@ -39,7 +39,7 @@ class TestBob { Message msgRx = Utils.deserializepEpMessage(ctx, msgRxSerialized, Message.EncFormat.PEPEncInlineEA); 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 rating:" + result.rating.toString()); log("DECRYPTED flags:" + result.flags); From f70a3abb7d1adcbb9c3bee4b52a00c56163c9626 Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 1 Jul 2020 16:29:45 +0200 Subject: [PATCH 05/94] generated EngineInterface started (need to merge in default now, there stuff has changed that causes problems now) --- src/gen_java_Engine.ysl2 | 46 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/src/gen_java_Engine.ysl2 b/src/gen_java_Engine.ysl2 index 1e74012..8d9ce6d 100644 --- a/src/gen_java_Engine.ysl2 +++ b/src/gen_java_Engine.ysl2 @@ -22,6 +22,19 @@ tstylesheet { `` apply "basic" } + || + document("foundation/pEp/jniadapter/{$cname}Interface.java", "text") + || + package foundation.pEp.jniadapter; + + import java.util.ArrayList; + import java.util.Vector; + + public interface «$cname»Interface { + `` apply "method", mode=java_interface + `` apply "basic", mode=java_interface + } + || } @@ -59,7 +72,25 @@ tstylesheet { } } } - + + template "basic" mode=java_interface { + const "itype" call "toIntermediate" with "type", "@type"; + const "jtype" call "toJava" with "type", "@type"; + + choose { + when "name(parm/*[1])='bytearray'" + || + public native «$itype» «@name»(`apply "parm/*", mode=basic_iparm`); + + || + otherwise { + || + public «$jtype» «@name»(`apply "parm/*", mode=basic_parm`); + || + } + } + } + template "*", mode=basic_parm_name choose { when "position() mod 2" { if "position() = 1 and name(.)='int'" @@ -237,6 +268,19 @@ tstylesheet { || } + template "method", mode=java_interface { + 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 "multireturn", "count(parm/creates|parm/returns|parm/inout[../int]) > 1"; + + || + public `if "not($convert)" > native ``call "returnJava"` «@name»( + `` apply "parm[in|inout]", 2, mode=java + ) throws pEpException; + + || + } + template "parm", mode=java { param "public", 0; const "dir", "name(*[1])"; From f3ed199b6978e1a61e2569d1efa6c497bb54e1cd Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 1 Jul 2020 18:52:06 +0200 Subject: [PATCH 06/94] eliminate public native methods (wrap all in native methods in "normal" java method) // CodeGen - convert needs to go --- src/gen_cpp_Engine.ysl2 | 2 +- src/gen_java_Engine.ysl2 | 93 +++++++++++++++++----------------------- 2 files changed, 40 insertions(+), 55 deletions(-) diff --git a/src/gen_cpp_Engine.ysl2 b/src/gen_cpp_Engine.ysl2 index 9f50823..c93b0cd 100644 --- a/src/gen_cpp_Engine.ysl2 +++ b/src/gen_cpp_Engine.ysl2 @@ -298,7 +298,7 @@ tstylesheet { } function "mangle" { - const "convert", "count(parm/stringlist|parm/string|parm/identity|parm/identitylist) > 0"; + const "convert", "1"; choose { when "$convert" diff --git a/src/gen_java_Engine.ysl2 b/src/gen_java_Engine.ysl2 index c909014..486d66a 100644 --- a/src/gen_java_Engine.ysl2 +++ b/src/gen_java_Engine.ysl2 @@ -23,6 +23,7 @@ tstylesheet { } || +/* document("foundation/pEp/jniadapter/{$cname}Interface.java", "text") || package foundation.pEp.jniadapter; @@ -34,72 +35,54 @@ tstylesheet { `` apply "method", mode=java_interface `` apply "basic", mode=java_interface } - || +*/ } template "basic" { const "itype" call "toIntermediate" 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`); + || + private native «$itype» _«@name»(`apply "parm/*", mode=basic_iparm`); - public «$jtype» «@name»(`apply "parm/*", mode=basic_parm`) { + 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`); + when "@type = 'identity'" + |> return new Identity(_«@name»(`apply "parm/*", mode=basic_parm_name`)); + when "@type = 'bool'" + |> return new Boolean(_«@name»(`apply "parm/*", mode=basic_parm_name`)); + when "@type = 'identitylist'" { || - apply "parm/*", mode=basic_parm_set; - choose { - when "@type = 'void'" - |> _«@name»(`apply "parm/*", mode=basic_parm_name`); - when "@type = 'identity'" - |> return new Identity(_«@name»(`apply "parm/*", mode=basic_parm_name`)); - when "@type = 'bool'" - |> return new Boolean(_«@name»(`apply "parm/*", mode=basic_parm_name`)); - when "@type = 'identitylist'" { - || - Vector<_Identity> glist = _«@name»(`apply "parm/*", mode=basic_parm_name`); - Vector ret = new Vector(); - if(glist != null) { - for (_Identity i : glist) { - ret.add(new Identity(i)); - } + Vector<_Identity> glist = _«@name»(`apply "parm/*", mode=basic_parm_name`); + Vector ret = new Vector(); + if(glist != null) { + for (_Identity i : glist) { + ret.add(new Identity(i)); } - return ret; - || - } otherwise - |> return Utils.toUTF16(_«@name»(`apply "parm/*", mode=basic_parm_name`)); - } - || - } - + } + return ret; || - } + } otherwise + |> return Utils.toUTF16(_«@name»(`apply "parm/*", mode=basic_parm_name`)); + } + || } + + || } template "basic" mode=java_interface { const "itype" call "toIntermediate" with "type", "@type"; const "jtype" call "toJava" with "type", "@type"; - choose { - when "name(parm/*[1])='bytearray'" - || - public native «$itype» «@name»(`apply "parm/*", mode=basic_iparm`); - - || - otherwise { - || - public «$jtype» «@name»(`apply "parm/*", mode=basic_parm`); - || - } - } + || + public «$jtype» «@name»(`apply "parm/*", mode=basic_parm`); + || } template "*", mode=basic_parm_name choose { @@ -193,7 +176,7 @@ tstylesheet { } template "method", mode=plain { - const "convert", "count(parm/stringlist|parm/stringpairlist|parm/string|parm/identity|parm/identitylist) > 0"; + const "convert", "1"; const "singlereturn", "count(parm/creates|parm/returns|parm/inout[../int]) = 1"; const "multireturn", "count(parm/creates|parm/returns|parm/inout[../int]) > 1"; @@ -236,8 +219,9 @@ tstylesheet { ArrayList> glist = _«@name»(`apply "parm[in]", mode=call;`); if(glist != null){ ArrayList> list = new ArrayList>(); - for (Pair i : glist) + for (Pair i : glist) { list.add(new Pair(Utils.toUTF16(i.first), Utils.toUTF16(i.second))); + } return list; } return null; @@ -250,8 +234,9 @@ tstylesheet { Vector<_Identity> glist = _«@name»(`apply "parm[in]", mode=call;`); if(glist != null){ Vector list = new Vector(); - for (_Identity i : glist) + for (_Identity i : glist) { list.add(new Identity(i)); + } return list; } return null; @@ -271,9 +256,8 @@ tstylesheet { if "not($singlereturn) and not($multireturn)" || _«@name»(`apply "parm[in]", mode=call;`); - return; || - + || } || @@ -350,8 +334,9 @@ tstylesheet { when "$type = 'identitylist'" || Vector<_Identity> _«$name» = new Vector<_Identity>(); - for (Identity i : «$name») + for (Identity i : «$name») { _«$name».add(new _Identity(i)); + } || } } From 99e7f7ef909be3031a2042128e5ed60bc13328f5 Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 1 Jul 2020 19:02:08 +0200 Subject: [PATCH 07/94] CodeGen - convert gone --- src/gen_cpp_Engine.ysl2 | 9 +-- src/gen_java_Engine.ysl2 | 116 ++++++++++++++++++--------------------- 2 files changed, 53 insertions(+), 72 deletions(-) diff --git a/src/gen_cpp_Engine.ysl2 b/src/gen_cpp_Engine.ysl2 index c93b0cd..7bfb086 100644 --- a/src/gen_cpp_Engine.ysl2 +++ b/src/gen_cpp_Engine.ysl2 @@ -298,14 +298,7 @@ tstylesheet { } function "mangle" { - const "convert", "1"; - - choose { - when "$convert" - > «concat('Java_foundation_pEp_jniadapter_', ../@name, '__1', str:replace(@name, '_', '_1'))» - otherwise - > «concat('Java_foundation_pEp_jniadapter_', ../@name, '_', str:replace(@name, '_', '_1'))» - } + > «concat('Java_foundation_pEp_jniadapter_', ../@name, '__1', str:replace(@name, '_', '_1'))» } template "parm", mode=sig { diff --git a/src/gen_java_Engine.ysl2 b/src/gen_java_Engine.ysl2 index 486d66a..876a089 100644 --- a/src/gen_java_Engine.ysl2 +++ b/src/gen_java_Engine.ysl2 @@ -176,12 +176,10 @@ tstylesheet { } template "method", mode=plain { - const "convert", "1"; const "singlereturn", "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; @@ -190,90 +188,80 @@ tstylesheet { || } - if "$convert" || private native `call "returnInter"` _«@name»( `` apply "parm[in|inout]", 2, mode=intermediate ) throws pEpException; - || - - || - public `if "not($convert)" > native ``call "returnJava"` «@name»( + public `call "returnJava"` «@name»( `` apply "parm[in|inout]", 2, mode=java - ) throws pEpException`if "not($convert)" > ;` + ) throws pEpException + { || - if "$convert" { - | { - apply "parm", mode=convertIn; - - if "$singlereturn" choose { - - // TODO factorize type conversion with multireturn and gen_java_message.java - - when "count(parm[returns][stringlist|string|sstring]) > 0" - |> return Utils.toUTF16(_«@name»(`apply "parm[in]", mode=call;`)); - when "count(parm[returns]/stringpairlist) > 0" - || - ArrayList> glist = _«@name»(`apply "parm[in]", mode=call;`); - if(glist != null){ - ArrayList> list = new ArrayList>(); - for (Pair i : glist) { - list.add(new Pair(Utils.toUTF16(i.first), Utils.toUTF16(i.second))); - } - return list; - } - return null; - || - - when "count(parm[returns]/identity) > 0" - |> return new Identity(_«@name»(`apply "parm[in]", mode=call;`)); - when "count(parm[returns]/identitylist) > 0" - || - Vector<_Identity> glist = _«@name»(`apply "parm[in]", mode=call;`); - if(glist != null){ - Vector list = new Vector(); - for (_Identity i : glist) { - list.add(new Identity(i)); - } - return list; - } - return null; - || - otherwise - |> return _«@name»(`apply "parm[in]", mode=call;`); - } + apply "parm", mode=convertIn; - if "$multireturn" - || - _«@name»_Return _result = _«@name»(`apply "parm[in|inout]", mode=call;`); - «@name»_Return result = new «@name»_Return(); - `` apply "parm[creates|returns|inout[../int]]", mode=convertOut; - return result; - || + if "$singlereturn" choose { - if "not($singlereturn) and not($multireturn)" - || - _«@name»(`apply "parm[in]", mode=call;`); - || + // TODO factorize type conversion with multireturn and gen_java_message.java - || - } - || + when "count(parm[returns][stringlist|string|sstring]) > 0" + |> return Utils.toUTF16(_«@name»(`apply "parm[in]", mode=call;`)); + when "count(parm[returns]/stringpairlist) > 0" + || + ArrayList> glist = _«@name»(`apply "parm[in]", mode=call;`); + if(glist != null){ + ArrayList> list = new ArrayList>(); + for (Pair i : glist) { + list.add(new Pair(Utils.toUTF16(i.first), Utils.toUTF16(i.second))); + } + return list; + } + return null; + || + + when "count(parm[returns]/identity) > 0" + |> return new Identity(_«@name»(`apply "parm[in]", mode=call;`)); + when "count(parm[returns]/identitylist) > 0" + || + Vector<_Identity> glist = _«@name»(`apply "parm[in]", mode=call;`); + if(glist != null){ + Vector list = new Vector(); + for (_Identity i : glist) { + list.add(new Identity(i)); + } + return list; + } + return null; + || + otherwise + |> return _«@name»(`apply "parm[in]", mode=call;`); } + + if "$multireturn" + || + _«@name»_Return _result = _«@name»(`apply "parm[in|inout]", mode=call;`); + «@name»_Return result = new «@name»_Return(); + `` apply "parm[creates|returns|inout[../int]]", mode=convertOut; + return result; || + if "not($singlereturn) and not($multireturn)" + || + _«@name»(`apply "parm[in]", mode=call;`); + || + + || + } || } template "method", mode=java_interface { - 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 "multireturn", "count(parm/creates|parm/returns|parm/inout[../int]) > 1"; || - public `if "not($convert)" > native ``call "returnJava"` «@name»( + public `call "returnJava"` «@name»( `` apply "parm[in|inout]", 2, mode=java ) throws pEpException; From a9883f9632d301b25dd39f63b29e0f32e77f32ef Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 1 Jul 2020 19:14:27 +0200 Subject: [PATCH 08/94] finally add EngineInterface --- src/gen_java_Engine.ysl2 | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/gen_java_Engine.ysl2 b/src/gen_java_Engine.ysl2 index 876a089..5b2b29f 100644 --- a/src/gen_java_Engine.ysl2 +++ b/src/gen_java_Engine.ysl2 @@ -15,7 +15,7 @@ tstylesheet { import java.util.ArrayList; import java.util.Vector; - final public class «$cname» extends AbstractEngine { + final public class «$cname» extends AbstractEngine implements EngineInterface { public «$cname»() throws pEpException { } `` apply "method", mode=plain @@ -23,7 +23,6 @@ tstylesheet { } || -/* document("foundation/pEp/jniadapter/{$cname}Interface.java", "text") || package foundation.pEp.jniadapter; @@ -31,12 +30,11 @@ tstylesheet { import java.util.ArrayList; import java.util.Vector; - public interface «$cname»Interface { + public interface «$cname»Interface extends AbstractEngineInterface { `` apply "method", mode=java_interface `` apply "basic", mode=java_interface } || -*/ } template "basic" { @@ -109,7 +107,7 @@ tstylesheet { when "name(.) = 'bool'" > Boolean when "name(.) = 'bytearray'" - > byte[] + > byte[] otherwise > «name(.)» } From b2b6e678b3c031bb3e63013559a5e326403c182b Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 1 Jul 2020 19:35:03 +0200 Subject: [PATCH 09/94] UniquelyIdentifiable improvements --- src/foundation/pEp/jniadapter/UniquelyIdentifiable.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/foundation/pEp/jniadapter/UniquelyIdentifiable.java b/src/foundation/pEp/jniadapter/UniquelyIdentifiable.java index d599e9c..39d8004 100644 --- a/src/foundation/pEp/jniadapter/UniquelyIdentifiable.java +++ b/src/foundation/pEp/jniadapter/UniquelyIdentifiable.java @@ -1,11 +1,12 @@ 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(); +// 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(); - public long getId() { + protected long getId() { return id; } } From bf9cf19c337548344ca053140da004317cbea152 Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 1 Jul 2020 19:45:55 +0200 Subject: [PATCH 10/94] needsFastPollCallFromC etc.. dont need to public, they only get called from the C++ side of the adapter --- src/foundation/pEp/jniadapter/AbstractEngine.java | 13 ++++++------- .../pEp/jniadapter/AbstractEngineInterface.java | 6 ------ 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/src/foundation/pEp/jniadapter/AbstractEngine.java b/src/foundation/pEp/jniadapter/AbstractEngine.java index fa45755..9b14e52 100644 --- a/src/foundation/pEp/jniadapter/AbstractEngine.java +++ b/src/foundation/pEp/jniadapter/AbstractEngine.java @@ -22,6 +22,9 @@ abstract class AbstractEngine extends UniquelyIdentifiable implements AbstractEn private native void init(); private native void release(); + private long keyserverThread; + private long keyserverQueue; + public AbstractEngine() throws pEpException { synchronized (AbstractEngine.class) { init(); @@ -46,9 +49,6 @@ abstract class AbstractEngine extends UniquelyIdentifiable implements AbstractEn return _getProtocolVersion(); } - private long keyserverThread; - private long keyserverQueue; - private native void _startKeyserverLookup(); public void startKeyserverLookup() { @@ -79,7 +79,6 @@ abstract class AbstractEngine extends UniquelyIdentifiable implements AbstractEn return _isSyncRunning(); } - public void setMessageToSendCallback(Sync.MessageToSendCallback messageToSendCallback) { this.messageToSendCallback = messageToSendCallback; } @@ -92,7 +91,7 @@ abstract class AbstractEngine extends UniquelyIdentifiable implements AbstractEn this.needsFastPollCallback = needsFastPollCallback; } - public int needsFastPollCallFromC(boolean fast_poll_needed) { + private int needsFastPollCallFromC(boolean fast_poll_needed) { if (needsFastPollCallback != null) { needsFastPollCallback.needsFastPollCallFromC(fast_poll_needed); } else { @@ -101,7 +100,7 @@ abstract class AbstractEngine extends UniquelyIdentifiable implements AbstractEn 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 partner = new Identity(_partner); System.out.println("pEpSync" + "notifyHandshakeCallFromC: " + notifyHandshakeCallback); @@ -113,7 +112,7 @@ abstract class AbstractEngine extends UniquelyIdentifiable implements AbstractEn return 0; } - public int messageToSendCallFromC(Message message) { + private int messageToSendCallFromC(Message message) { System.out.println("pEpSync" + "messageToSendCallFromC: " + messageToSendCallback); if (messageToSendCallback != null) { messageToSendCallback.messageToSend(message); diff --git a/src/foundation/pEp/jniadapter/AbstractEngineInterface.java b/src/foundation/pEp/jniadapter/AbstractEngineInterface.java index 9b13206..7ad20f0 100644 --- a/src/foundation/pEp/jniadapter/AbstractEngineInterface.java +++ b/src/foundation/pEp/jniadapter/AbstractEngineInterface.java @@ -21,11 +21,5 @@ public interface AbstractEngineInterface { public void setNeedsFastPollCallback(Sync.NeedsFastPollCallback needsFastPollCallback); - public int needsFastPollCallFromC(boolean fast_poll_needed); - - public int notifyHandshakeCallFromC(_Identity _myself, _Identity _partner, SyncHandshakeSignal _signal); - - public int messageToSendCallFromC(Message message); - public Message incomingMessageFromPGPText(String pgpText, Message.EncFormat encFormat); } From 75704fa9f506ef6d4b907d58d41fb8553055b5ca Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 1 Jul 2020 20:40:40 +0200 Subject: [PATCH 11/94] CodeGen improvements - generate comments --- src/gen_java_Engine.ysl2 | 124 ++++++++++++++++++++------------------- 1 file changed, 64 insertions(+), 60 deletions(-) diff --git a/src/gen_java_Engine.ysl2 b/src/gen_java_Engine.ysl2 index 5b2b29f..30256e6 100644 --- a/src/gen_java_Engine.ysl2 +++ b/src/gen_java_Engine.ysl2 @@ -17,8 +17,7 @@ tstylesheet { final public class «$cname» extends AbstractEngine implements EngineInterface { public «$cname»() throws pEpException { } - - `` apply "method", mode=plain + `` apply "method" `` apply "basic" } @@ -42,8 +41,8 @@ tstylesheet { const "jtype" call "toJava" with "type", "@type"; || - private native «$itype» _«@name»(`apply "parm/*", mode=basic_iparm`); + // CodeGen "basic" public «$jtype» «@name»(`apply "parm/*", mode=basic_parm`) { || apply "parm/*", mode=basic_parm_set; @@ -71,13 +70,12 @@ tstylesheet { || } + private native «$itype» _«@name»(`apply "parm/*", mode=basic_iparm`); || } template "basic" mode=java_interface { - const "itype" call "toIntermediate" with "type", "@type"; const "jtype" call "toJava" with "type", "@type"; - || public «$jtype» «@name»(`apply "parm/*", mode=basic_parm`); || @@ -173,12 +171,18 @@ tstylesheet { } } - template "method", mode=plain { + template "method" { const "singlereturn", "count(parm/creates|parm/returns|parm/inout[../int]) = 1"; const "multireturn", "count(parm/creates|parm/returns|parm/inout[../int]) > 1"; + || + + //CodeGen "method" + || + if "$multireturn" { || + //CodeGen "mutlireturn" - class for return type private class _«@name»_Return { `` apply "parm[creates|returns|inout[../int]]", 1, mode=intermediate with "public", 1; } @@ -187,81 +191,81 @@ tstylesheet { } || - private native `call "returnInter"` _«@name»( - `` apply "parm[in|inout]", 2, mode=intermediate - ) throws pEpException; - public `call "returnJava"` «@name»( `` apply "parm[in|inout]", 2, mode=java - ) throws pEpException + ) throws pEpException { || apply "parm", mode=convertIn; - if "$singlereturn" choose { - - // TODO factorize type conversion with multireturn and gen_java_message.java - - when "count(parm[returns][stringlist|string|sstring]) > 0" - |> return Utils.toUTF16(_«@name»(`apply "parm[in]", mode=call;`)); - when "count(parm[returns]/stringpairlist) > 0" - || - ArrayList> glist = _«@name»(`apply "parm[in]", mode=call;`); - if(glist != null){ - ArrayList> list = new ArrayList>(); - for (Pair i : glist) { - list.add(new Pair(Utils.toUTF16(i.first), Utils.toUTF16(i.second))); + if "$singlereturn" { + choose { + when "count(parm[returns][stringlist|string|sstring]) > 0" + |> return Utils.toUTF16(_«@name»(`apply "parm[in]", mode=call;`)); + + when "count(parm[returns]/stringpairlist) > 0" + || + ArrayList> glist = _«@name»(`apply "parm[in]", mode=call;`); + if(glist != null){ + ArrayList> list = new ArrayList>(); + for (Pair i : glist) { + list.add(new Pair(Utils.toUTF16(i.first), Utils.toUTF16(i.second))); + } + return list; } - return list; - } - return null; - || - - when "count(parm[returns]/identity) > 0" - |> return new Identity(_«@name»(`apply "parm[in]", mode=call;`)); - when "count(parm[returns]/identitylist) > 0" - || - Vector<_Identity> glist = _«@name»(`apply "parm[in]", mode=call;`); - if(glist != null){ - Vector list = new Vector(); - for (_Identity i : glist) { - list.add(new Identity(i)); + return null; + || + + when "count(parm[returns]/identity) > 0" + |> return new Identity(_«@name»(`apply "parm[in]", mode=call;`)); + + when "count(parm[returns]/identitylist) > 0" + || + Vector<_Identity> glist = _«@name»(`apply "parm[in]", mode=call;`); + if(glist != null){ + Vector list = new Vector(); + for (_Identity i : glist) { + list.add(new Identity(i)); + } + return list; } - return list; - } - return null; - || - otherwise - |> return _«@name»(`apply "parm[in]", mode=call;`); - } + return null; + || - if "$multireturn" - || - _«@name»_Return _result = _«@name»(`apply "parm[in|inout]", mode=call;`); - «@name»_Return result = new «@name»_Return(); - `` apply "parm[creates|returns|inout[../int]]", mode=convertOut; - return result; - || + otherwise + |> return _«@name»(`apply "parm[in]", mode=call;`); + } + } - if "not($singlereturn) and not($multireturn)" - || - _«@name»(`apply "parm[in]", mode=call;`); - || + if "$multireturn" { + || + _«@name»_Return _result = _«@name»(`apply "parm[in|inout]", mode=call;`); + «@name»_Return result = new «@name»_Return(); + `` apply "parm[creates|returns|inout[../int]]", mode=convertOut; + return result; + || + } + if "not($singlereturn) and not($multireturn)" { + || + _«@name»(`apply "parm[in]", mode=call;`); + || + } || } + + private native `call "returnInter"` _«@name»( + `` apply "parm[in|inout]", 2, mode=intermediate + ) throws pEpException; || } template "method", mode=java_interface { - const "singlereturn", "count(parm/creates|parm/returns|parm/inout[../int]) = 1"; - const "multireturn", "count(parm/creates|parm/returns|parm/inout[../int]) > 1"; - || public `call "returnJava"` «@name»( `` apply "parm[in|inout]", 2, mode=java - ) throws pEpException; + ) throws pEpException; || } From 50abf8f82706bfa79cfc67af2bb3b2441ce318ea Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 1 Jul 2020 20:49:46 +0200 Subject: [PATCH 12/94] Formatting only --- .../pEp/jniadapter/AbstractEngine.java | 20 +++++++++++-------- src/foundation/pEp/jniadapter/Blob.java | 15 ++++++++------ src/foundation/pEp/jniadapter/Identity.java | 13 ++++++------ src/foundation/pEp/jniadapter/Sync.java | 7 +++---- 4 files changed, 30 insertions(+), 25 deletions(-) diff --git a/src/foundation/pEp/jniadapter/AbstractEngine.java b/src/foundation/pEp/jniadapter/AbstractEngine.java index 9b14e52..e3af136 100644 --- a/src/foundation/pEp/jniadapter/AbstractEngine.java +++ b/src/foundation/pEp/jniadapter/AbstractEngine.java @@ -37,48 +37,52 @@ abstract class AbstractEngine extends UniquelyIdentifiable implements AbstractEn } } - private native String _getVersion(); - public String getVersion() { return _getVersion(); } - private native String _getProtocolVersion(); + private native String _getVersion(); + public String getProtocolVersion() { return _getProtocolVersion(); } - private native void _startKeyserverLookup(); + private native String _getProtocolVersion(); + public void startKeyserverLookup() { _startKeyserverLookup(); } - private native void _stopKeyserverLookup(); + private native void _startKeyserverLookup(); public void stopKeyserverLookup() { _startKeyserverLookup(); } - private native void _startSync(); + private native void _stopKeyserverLookup(); + public void startSync() { _startSync(); } - private native void _stopSync(); + private native void _startSync(); public void stopSync() { _stopSync(); } - private native boolean _isSyncRunning(); + private native void _stopSync(); public boolean isSyncRunning() { return _isSyncRunning(); } + private native boolean _isSyncRunning(); + + // Callbacks public void setMessageToSendCallback(Sync.MessageToSendCallback messageToSendCallback) { this.messageToSendCallback = messageToSendCallback; } diff --git a/src/foundation/pEp/jniadapter/Blob.java b/src/foundation/pEp/jniadapter/Blob.java index 9d2c7cc..073ac42 100644 --- a/src/foundation/pEp/jniadapter/Blob.java +++ b/src/foundation/pEp/jniadapter/Blob.java @@ -11,10 +11,18 @@ public class Blob implements BlobInterface, Serializable { 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: * "application/pEp.sync" * "application/pEp.keyreset" + * * @return String Blob as String */ public String toString() { @@ -27,10 +35,5 @@ public class Blob implements BlobInterface, Serializable { return ret; } - Blob(_Blob b) { - data = b.data; - mime_type = Utils.toUTF16(b.mime_type); - filename = Utils.toUTF16(b.filename); - } } diff --git a/src/foundation/pEp/jniadapter/Identity.java b/src/foundation/pEp/jniadapter/Identity.java index 54ff7de..34e7dde 100644 --- a/src/foundation/pEp/jniadapter/Identity.java +++ b/src/foundation/pEp/jniadapter/Identity.java @@ -33,17 +33,16 @@ public class Identity implements IdentityInterface, Serializable { flags = i.flags; } - @Override - public String toString() { - return address + "::" + username + "\n" + - user_id + "::" + fpr; + public Rating getRating() { + return Rating.getByInt(_getRating(comm_type.value)); } - // Native private native int _getRating(int commType); - public Rating getRating() { - return Rating.getByInt(_getRating(comm_type.value)); + @Override + public String toString() { + return address + "::" + username + "\n" + + user_id + "::" + fpr; } } diff --git a/src/foundation/pEp/jniadapter/Sync.java b/src/foundation/pEp/jniadapter/Sync.java index 685ba0d..7889340 100644 --- a/src/foundation/pEp/jniadapter/Sync.java +++ b/src/foundation/pEp/jniadapter/Sync.java @@ -6,7 +6,7 @@ import foundation.pEp.jniadapter.pEpException; public interface Sync { - + interface NeedsFastPollCallback { void needsFastPollCallFromC(Boolean fast_poll_needed); } @@ -20,8 +20,7 @@ public interface Sync { } - public class DefaultCallback - implements Sync.MessageToSendCallback, Sync.NotifyHandshakeCallback, Sync.NeedsFastPollCallback { + public class DefaultCallback implements Sync.MessageToSendCallback, Sync.NotifyHandshakeCallback, Sync.NeedsFastPollCallback { @Override public void needsFastPollCallFromC(Boolean fast_poll_needed) { System.out.println("Need fast Poll"); @@ -31,7 +30,7 @@ public interface Sync { public void messageToSend(Message message) { System.out.println("messageToSend Defualt Callback"); } - + @Override public void notifyHandshake(Identity myself, Identity partner, SyncHandshakeSignal signal) { System.out.println("notifyHandshake Default Callback"); From 931cf1a1c355ccc60ec73833ff688221d7486b5f Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 1 Jul 2020 20:58:29 +0200 Subject: [PATCH 13/94] CodeGen ysl2 formatting only (i like brackets) --- src/gen_java_Message.ysl2 | 154 +++++++++++++++++++------------------- 1 file changed, 78 insertions(+), 76 deletions(-) diff --git a/src/gen_java_Message.ysl2 b/src/gen_java_Message.ysl2 index 655f075..21b9dd0 100644 --- a/src/gen_java_Message.ysl2 +++ b/src/gen_java_Message.ysl2 @@ -38,7 +38,7 @@ tstylesheet { handle = _«$cname»(_mime_text); } - public native byte[] _encodeMIME() throws pEpException; + private native byte[] _encodeMIME() throws pEpException; public String encodeMIME() { return Utils.toUTF16(_encodeMIME()); @@ -126,30 +126,28 @@ tstylesheet { 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; + 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); } - } - 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'" - { + || + } + 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[] @@ -193,68 +191,72 @@ tstylesheet { || } - 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 Utils.toUTF16(res); - else - return null; - } - public void set«$name»(«$type» value) { - if(value != null) - _set«$name»(Utils.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 Utils.toUTF16(res); + else + return null; + } + public void set«$name»(«$type» value) { + if(value != null) + _set«$name»(Utils.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 Utils.toUTF16(res); + else + return null; + } + public void set«$name»(«$type» value) { + if(value != null) + _set«$name»(Utils.toUTF8(value)); + 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 Utils.toUTF16(res); - else - return null; - } - public void set«$name»(«$type» value) { - if(value != null) - _set«$name»(Utils.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); + } - 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); + otherwise { + || + public native «$itype» get«$name»(); + public native void set«$name»(«$itype» value); - || + || + } } } From 38873a399d247c7c913ee549eb0f6f9b652ed455 Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 1 Jul 2020 21:34:57 +0200 Subject: [PATCH 14/94] CodeGen class Message - formatting only --- src/gen_java_Message.ysl2 | 78 +++++++++++++++++++++++++-------------- 1 file changed, 50 insertions(+), 28 deletions(-) diff --git a/src/gen_java_Message.ysl2 b/src/gen_java_Message.ysl2 index 21b9dd0..08c450c 100644 --- a/src/gen_java_Message.ysl2 +++ b/src/gen_java_Message.ysl2 @@ -80,6 +80,7 @@ tstylesheet { const "jname" call "toJava" with "type", "@name"; document("foundation/pEp/jniadapter/{$jname}.java", "text") || + // CodeGen template enum|exception package foundation.pEp.jniadapter; import java.util.HashMap; @@ -91,6 +92,7 @@ tstylesheet { template "enum|exception", mode=inner { const "jname" call "CamelCase" with "text", "@name"; || + // CodeGen template enum|exception, mode=inner public enum «$jname» { `` apply "*", mode=value ; @@ -116,6 +118,7 @@ tstylesheet { return null; } } + || } @@ -125,28 +128,35 @@ tstylesheet { const "itype" call "toIntermediate" with "type", "name(.)"; const "name" call "toJava" with "type", "name(*[position()=1])"; + || + // CodeGen template * mode=entry + || 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){ + if (res != null) { return new «$type»(_get«$name»()); - }else{ + } else { return null; } } + private native «$itype» _get«$name»(); + public void set«$name»(«$type» value) { - if(value != null) + if (value != null) { _set«$name»(new «$itype»(value)); - else + } 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 { @@ -165,87 +175,99 @@ tstylesheet { 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){ + if (glist != null) { «$type» list = new «$type»(); - for («$iename» i : glist) + 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){ + if (value != null) { «$itype» list = new «$itype»(); - for («$ename» i : value) + for («$ename» i : value) { list.add(«$convset»); + } _set«$name»(list); - }else{ + } else { _set«$name»(null); } } - + private native void _set«$name»(«$itype» value); + + || } 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) + if (res != null) { return Utils.toUTF16(res); - else + } else { return null; + } } + private native «$itype» _get«$name»(); + public void set«$name»(«$type» value) { - if(value != null) + if (value != null) { _set«$name»(Utils.toUTF8(value)); - else + } else { _set«$name»(new byte[0]); + } } + private native void _set«$name»(«$itype» value); + || } 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) + if (res != null) { return Utils.toUTF16(res); - else + } else { return null; + } } + private native «$itype» _get«$name»(); + public void set«$name»(«$type» value) { - if(value != null) + if (value != null) { _set«$name»(Utils.toUTF8(value)); - else + } else { _set«$name»(null); + } } + private native void _set«$name»(«$itype» value); + || } 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); + private native int _get«$name»(); public void set«$name»(«$itype» value) { if(value != null) _set«$name»(value.value); else _set«$name»(0); } + private native void _set«$name»(int value); || } From 83eef3bebd439f1e050ce6467ed8c80eb31b44ac Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 1 Jul 2020 21:42:36 +0200 Subject: [PATCH 15/94] CodeGen Message yslt - Remove Dead Code --- src/gen_java_Message.ysl2 | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/src/gen_java_Message.ysl2 b/src/gen_java_Message.ysl2 index 08c450c..7f22ae0 100644 --- a/src/gen_java_Message.ysl2 +++ b/src/gen_java_Message.ysl2 @@ -230,31 +230,6 @@ tstylesheet { || } - when "$itype != $type" { - || - 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»(null); - } - } - private native void _set«$name»(«$itype» value); - - - || - } - when "../enum[@name=$ctype]" { || public «$itype» get«$name»() { From 7cc5ca7c3276cb401abb565614e528316119b8b8 Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 1 Jul 2020 22:04:57 +0200 Subject: [PATCH 16/94] Message class eliminate public native methods, More comments generated --- src/gen_java_Message.ysl2 | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/gen_java_Message.ysl2 b/src/gen_java_Message.ysl2 index 7f22ae0..6aeaa2a 100644 --- a/src/gen_java_Message.ysl2 +++ b/src/gen_java_Message.ysl2 @@ -134,6 +134,7 @@ tstylesheet { choose { when "$ctype = 'identity'" { || + // Property type: Identity. [java: «$type», intermediate: «$itype», ctype: «$ctype»] public «$type» get«$name»() { «$itype» res = _get«$name»(); if (res != null) { @@ -175,6 +176,7 @@ tstylesheet { 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) { @@ -207,6 +209,7 @@ tstylesheet { 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) { @@ -232,11 +235,12 @@ tstylesheet { when "../enum[@name=$ctype]" { || - public «$itype» get«$name»() { - return «$itype».getByInt(_get«$name»()); + // 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»(«$itype» value) { + public void set«$name»(«$type» value) { if(value != null) _set«$name»(value.value); else @@ -249,8 +253,17 @@ tstylesheet { otherwise { || - public native «$itype» get«$name»(); - public native void set«$name»(«$itype» value); + // 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); + || } From a3c787371de082c85316a46c4985c1cea28d689d Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 1 Jul 2020 22:10:02 +0200 Subject: [PATCH 17/94] The CodeGen for MessageInterface is actually 50 lines less... --- src/gen_java_Message.ysl2 | 60 ++++----------------------------------- 1 file changed, 5 insertions(+), 55 deletions(-) diff --git a/src/gen_java_Message.ysl2 b/src/gen_java_Message.ysl2 index 6aeaa2a..e03f147 100644 --- a/src/gen_java_Message.ysl2 +++ b/src/gen_java_Message.ysl2 @@ -71,6 +71,7 @@ tstylesheet { public interface «$cname»Interface { public String encodeMIME(); + `` apply "*[name(.)!='enum']", mode=interface } || @@ -271,66 +272,15 @@ tstylesheet { } template "*", mode=interface { - 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'" - || - public «$type» get«$name»(); - public void set«$name»(«$type» 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 - otherwise > _«$ename» - } - const "convget" choose { - when "$ctype = 'stringlist'" > Utils.toUTF16(i) - when "$ctype = 'stringpairlist'" > new Pair(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(Utils.toUTF8(i.first), Utils.toUTF8(i.second)) - otherwise > new _«$ename»(i) - } - || - public «$type» get«$name»(); - public void set«$name»(«$type» value); - || - } - - when "$itype != $type" - || - public «$type» get«$name»(); - public void set«$name»(«$type» value); - || - - when "$itype != $type" - || - public «$type» get«$name»(); - public void set«$name»(«$type» value); - || + || + public «$type» get«$name»(); - when "../enum[@name=$ctype]" - || - public «$itype» get«$name»(); - public void set«$name»(«$itype» value); - || + public void set«$name»(«$type» value); - otherwise - || - public «$itype» get«$name»(); - public void set«$name»(«$itype» value); - || - } + || } template "*", mode=value { From 486d00fab443c91cb337c711dc75e62731546f75 Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 1 Jul 2020 22:44:26 +0200 Subject: [PATCH 18/94] Clean out and rebuild .hgignore --- .hgignore | 54 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/.hgignore b/.hgignore index d83d981..6a80d6a 100644 --- a/.hgignore +++ b/.hgignore @@ -9,37 +9,48 @@ syntax: glob *.a *.dylib *.so -*.orig -*~ -.DS_Store -*.db *.log +.DS_Store + +# ignore config files +local.conf +local.conf # ignore generated files +status_list.yml2 +foundation_pEp_jniadapter__Blob.h +foundation_pEp_jniadapter_AbstractEngine.h +foundation_pEp_jniadapter_Engine.* +foundation_pEp_jniadapter_Identity.h +foundation_pEp_jniadapter_Message.cc +foundation_pEp_jniadapter_Message.h +throw_pEp_exception.cc +throw_pEp_exception.hh -org_pEp_*.h -org_pEp_*.cc -pEp_*.h -pEp_*.cc -org/pEp/jniadapter/pEp*.java -foundation_pEp_*.h -foundation_pEp_*.cc -foundation/pEp/jniadapter/pEp*.java - -pEp/jniadapter/pEp*.java -throw_pEp_exception.* +CipherSuite.java Color.java +DecryptFlags.java Engine.java +EngineInterface.java +IdentityFlags.java Message.java -DecryptFlags.java +MessageInterface.java +pEp*.java Rating.java Status.java SyncHandshakeResult.java -IdentityFlags.java SyncHandshakeSignal.java -CipherSuite.java -status_list.yml2 +# 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 + ndk*/ # ignore vim workspace @@ -77,15 +88,12 @@ android/gradlew.bat androidTests/gradle/wrapper/gradle-wrapper.properties androidTests/gradlew androidTests/gradlew.bat -src/org.tar.gz -src/local.conf +org.tar.gz *.iml syntax: regexp android/external/[^.]* -local.conf -src/local.conf # Default ignored files .idea/ From e5f3aa6b8a00e9ab2eda520124c72d22fdd0cb1f Mon Sep 17 00:00:00 2001 From: heck Date: Thu, 2 Jul 2020 19:21:59 +0200 Subject: [PATCH 19/94] Generate marker files for make Move exceptions into own subpkg foundation.pEp.jniadapter.exceptions --- .hgignore | 4 +- .../pEp/jniadapter/AbstractEngine.java | 3 +- src/foundation/pEp/jniadapter/Sync.java | 4 -- src/foundation/pEp/jniadapter/_Blob.java | 2 + src/gen_cpp_Engine.ysl2 | 5 +- src/gen_cpp_Message.ysl2 | 5 +- src/gen_java_Engine.ysl2 | 8 ++- src/gen_java_Message.ysl2 | 35 +++++++++-- src/gen_java_exceptions.ysl2 | 35 ----------- src/gen_throw_pEp_exception.ysl2 | 59 ++++++++++--------- .../pEp/jniadapter/test/jni88/TestMain.java | 2 + .../pEp/jniadapter/test/jni91/TestMain.java | 1 + .../pEp/jniadapter/test/jni92/TestMain.java | 1 + 13 files changed, 82 insertions(+), 82 deletions(-) delete mode 100644 src/gen_java_exceptions.ysl2 diff --git a/.hgignore b/.hgignore index 6a80d6a..551e718 100644 --- a/.hgignore +++ b/.hgignore @@ -24,8 +24,8 @@ foundation_pEp_jniadapter_Engine.* foundation_pEp_jniadapter_Identity.h foundation_pEp_jniadapter_Message.cc foundation_pEp_jniadapter_Message.h -throw_pEp_exception.cc -throw_pEp_exception.hh +#throw_pEp_exception.cc +#throw_pEp_exception.hh CipherSuite.java Color.java diff --git a/src/foundation/pEp/jniadapter/AbstractEngine.java b/src/foundation/pEp/jniadapter/AbstractEngine.java index e3af136..b4befa8 100644 --- a/src/foundation/pEp/jniadapter/AbstractEngine.java +++ b/src/foundation/pEp/jniadapter/AbstractEngine.java @@ -4,9 +4,8 @@ import java.util.ArrayList; import java.util.Vector; import foundation.pEp.jniadapter.Sync.DefaultCallback; +import foundation.pEp.jniadapter.exceptions.*; -import java.io.UnsupportedEncodingException; -import java.text.Normalizer; abstract class AbstractEngine extends UniquelyIdentifiable implements AbstractEngineInterface, AutoCloseable { static { diff --git a/src/foundation/pEp/jniadapter/Sync.java b/src/foundation/pEp/jniadapter/Sync.java index 7889340..55f2e2c 100644 --- a/src/foundation/pEp/jniadapter/Sync.java +++ b/src/foundation/pEp/jniadapter/Sync.java @@ -1,9 +1,5 @@ package foundation.pEp.jniadapter; -import foundation.pEp.jniadapter.Identity; -import foundation.pEp.jniadapter.Message; -import foundation.pEp.jniadapter.pEpException; - public interface Sync { diff --git a/src/foundation/pEp/jniadapter/_Blob.java b/src/foundation/pEp/jniadapter/_Blob.java index 0cbc732..4922abd 100644 --- a/src/foundation/pEp/jniadapter/_Blob.java +++ b/src/foundation/pEp/jniadapter/_Blob.java @@ -1,5 +1,7 @@ package foundation.pEp.jniadapter; +import foundation.pEp.jniadapter.exceptions.*; + public class _Blob { public byte[] data; public byte[] mime_type; diff --git a/src/gen_cpp_Engine.ysl2 b/src/gen_cpp_Engine.ysl2 index 7bfb086..ab337bc 100644 --- a/src/gen_cpp_Engine.ysl2 +++ b/src/gen_cpp_Engine.ysl2 @@ -5,7 +5,10 @@ tstylesheet { include ./types_c.ysl2 include ./types_java.ysl2 - template "/namespace[@name='pEp']" apply "interface", 0; + template "/namespace[@name='pEp']" { + apply "interface", 0; + document("gen_cpp_Engine.marker", "text") > "" + } template "interface" document("foundation_pEp_jniadapter_{@name}.cc", "text") || diff --git a/src/gen_cpp_Message.ysl2 b/src/gen_cpp_Message.ysl2 index a5f4496..963c681 100644 --- a/src/gen_cpp_Message.ysl2 +++ b/src/gen_cpp_Message.ysl2 @@ -5,7 +5,10 @@ tstylesheet { include ./textutils.ysl2 include ./types_c.ysl2 - template "/namespace[@name='pEp']" apply "struct", 0; + template "/namespace[@name='pEp']" { + apply "struct", 0; + document("gen_cpp_Message.marker", "text") > "" + } template "struct" { const "jname" call "CamelCase" with "text", "@name"; diff --git a/src/gen_java_Engine.ysl2 b/src/gen_java_Engine.ysl2 index 30256e6..db69b7c 100644 --- a/src/gen_java_Engine.ysl2 +++ b/src/gen_java_Engine.ysl2 @@ -4,7 +4,10 @@ tstylesheet { include ./textutils.ysl2 include ./types_java.ysl2 - template "/namespace[@name='pEp']" apply "interface", 0; + template "/namespace[@name='pEp']" { + apply "interface", 0; + document("gen_java_Engine.marker", "text") > "" + } template "interface" { const "cname" call "toJava" with "type", "@name"; @@ -12,6 +15,7 @@ tstylesheet { || package foundation.pEp.jniadapter; + import foundation.pEp.jniadapter.exceptions.*; import java.util.ArrayList; import java.util.Vector; @@ -265,7 +269,7 @@ tstylesheet { || public `call "returnJava"` «@name»( `` apply "parm[in|inout]", 2, mode=java - ) throws pEpException; + ); || } diff --git a/src/gen_java_Message.ysl2 b/src/gen_java_Message.ysl2 index e03f147..2610d2f 100644 --- a/src/gen_java_Message.ysl2 +++ b/src/gen_java_Message.ysl2 @@ -4,7 +4,10 @@ tstylesheet { include ./textutils.ysl2 include ./types_java.ysl2 - template "/namespace[@name='pEp']" apply "struct|enum|exception", 0; + template "/namespace[@name='pEp']" { + apply "struct|enum|exception", 0; + document("gen_java_Message.marker", "text") > "" + } template "struct" { const "cname" call "toJava" with "type", "@name"; @@ -12,6 +15,7 @@ tstylesheet { || package foundation.pEp.jniadapter; + import foundation.pEp.jniadapter.exceptions.*; import java.util.ArrayList; import java.util.Vector; import java.util.Date; @@ -77,23 +81,24 @@ tstylesheet { || } - template "enum|exception" { + template "enum" { const "jname" call "toJava" with "type", "@name"; document("foundation/pEp/jniadapter/{$jname}.java", "text") || - // CodeGen template enum|exception + // CodeGen template enum package foundation.pEp.jniadapter; import java.util.HashMap; - + `` apply ".", 0, mode=inner || + } - template "enum|exception", mode=inner { + template "enum", mode=inner { const "jname" call "CamelCase" with "text", "@name"; || - // CodeGen template enum|exception, mode=inner + // CodeGen template enum, mode=inner public enum «$jname» { `` apply "*", mode=value ; @@ -123,6 +128,24 @@ tstylesheet { || } + function "exception" { + param "name"; + + document "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(.)"; diff --git a/src/gen_java_exceptions.ysl2 b/src/gen_java_exceptions.ysl2 deleted file mode 100644 index ecdca21..0000000 --- a/src/gen_java_exceptions.ysl2 +++ /dev/null @@ -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(.)"; -} - diff --git a/src/gen_throw_pEp_exception.ysl2 b/src/gen_throw_pEp_exception.ysl2 index 3c9d3ad..01602ac 100644 --- a/src/gen_throw_pEp_exception.ysl2 +++ b/src/gen_throw_pEp_exception.ysl2 @@ -18,42 +18,43 @@ tstylesheet { }; || - + document("gen_throw_pEp_exception.marker", "text") > "" } template "namespace" - || - #include - #include - #include "throw_pEp_exception.hh" + document("throw_pEp_exception.cc", "text") + || + #include + #include + #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"); + 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); } - - return env->ThrowNew(ex, ex_name); - } + }; }; - }; - || + || template "*", mode=case { | case `call "UCASE" with "text", "name(.)"`: diff --git a/test/java/foundation/pEp/jniadapter/test/jni88/TestMain.java b/test/java/foundation/pEp/jniadapter/test/jni88/TestMain.java index bc53fb5..68a15a6 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni88/TestMain.java +++ b/test/java/foundation/pEp/jniadapter/test/jni88/TestMain.java @@ -1,5 +1,7 @@ package foundation.pEp.jniadapter.test.jni88; import foundation.pEp.jniadapter.*; +import foundation.pEp.jniadapter.exceptions.*; + import java.util.Vector; import java.lang.Thread; diff --git a/test/java/foundation/pEp/jniadapter/test/jni91/TestMain.java b/test/java/foundation/pEp/jniadapter/test/jni91/TestMain.java index 0f01ccf..be7f75d 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni91/TestMain.java +++ b/test/java/foundation/pEp/jniadapter/test/jni91/TestMain.java @@ -1,5 +1,6 @@ package foundation.pEp.jniadapter.test.jni91; import foundation.pEp.jniadapter.*; +import foundation.pEp.jniadapter.exceptions.*; import java.lang.Thread; diff --git a/test/java/foundation/pEp/jniadapter/test/jni92/TestMain.java b/test/java/foundation/pEp/jniadapter/test/jni92/TestMain.java index 5a9d3c7..1ed476a 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni92/TestMain.java +++ b/test/java/foundation/pEp/jniadapter/test/jni92/TestMain.java @@ -1,4 +1,5 @@ package foundation.pEp.jniadapter.test.jni92; +import foundation.pEp.jniadapter.exceptions.*; import foundation.pEp.jniadapter.test.utils.*; import foundation.pEp.pitytest.*; import foundation.pEp.jniadapter.*; From 60a260720f8fdbca1b65522d9f7ab463321e29ae Mon Sep 17 00:00:00 2001 From: heck Date: Thu, 2 Jul 2020 20:33:06 +0200 Subject: [PATCH 20/94] Update tests - Engine.getId() has been made private/protected --- test/java/foundation/pEp/jniadapter/test/jni92/TestMain.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/java/foundation/pEp/jniadapter/test/jni92/TestMain.java b/test/java/foundation/pEp/jniadapter/test/jni92/TestMain.java index 1ed476a..62654f9 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni92/TestMain.java +++ b/test/java/foundation/pEp/jniadapter/test/jni92/TestMain.java @@ -39,7 +39,7 @@ class TestMain { Engine e; TestLogger.logH2("Creating 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; } @@ -53,7 +53,7 @@ class TestMain { public static void engineConsumer(Vector ev, Consumer ec) { 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); }); } From 047baa52b70a52bd9d85dffb54b8a11e6758f57e Mon Sep 17 00:00:00 2001 From: heck Date: Thu, 2 Jul 2020 22:49:33 +0200 Subject: [PATCH 21/94] Total overhaul/redesign of project filesystem structure / Makefile - Separate build folder (so far for all class files) - Separate dist folder (so folks dont have to dig for the build results) - Improved incremental build - Implicit rules and automatic dependency using gcc/clang features (.d files) - YML2 CodeGen incremental build support using marker files - Tests are using dist folder --- Makefile.conf | 18 +- src/Makefile | 236 ++++++++++-------- .../pEp/jniadapter/test/Makefile.conf | 6 +- 3 files changed, 151 insertions(+), 109 deletions(-) diff --git a/Makefile.conf b/Makefile.conf index 15c9dde..9cfb440 100644 --- a/Makefile.conf +++ b/Makefile.conf @@ -23,6 +23,17 @@ ifeq ($(PLATFORM),linux) JAVA_HOME=$(subst /bin,,$(dir $(realpath /usr/bin/javac))) endif +ifndef JAVA_HOME + $(error JAVA_HOME is not set!) +endif + +JAVA_BIN_DIR=$(JAVA_HOME)/bin + +# 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) ######### ifneq ("$(wildcard $(HERE)local.conf)","") @@ -32,13 +43,6 @@ else $(info Optional build config not found: $(HERE)local.conf) 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 ENGINE_LIB=-L$(ENGINE_LIB_PATH) ENGINE_INC=-I$(ENGINE_INC_PATH) diff --git a/src/Makefile b/src/Makefile index 29ba667..8ef7459 100644 --- a/src/Makefile +++ b/src/Makefile @@ -18,127 +18,163 @@ $(info CXXFLAGS: $(CXXFLAGS)) $(info LDFLAGS: $(LDFLAGS)) $(info LDLIBS: $(LDLIBS)) -ifndef JAVA_HOME - $(error JAVA_HOME is not set!) -endif - -JP=$(JAVA_HOME)/bin - -# 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 -JAR=pEp.jar - +# Names of the java and c++ libs to be built +LIB_JAVA=pEp.jar +LIB_CXX_STATIC=libpEpJNI.a ifeq ($(PLATFORM),linux) - SHARED=libpEpJNI.so + LIB_CXX_DYN=libpEpJNI.so else ifeq ($(PLATFORM),darwin) - SHARED=libpEpJNI.dylib + LIB_CXX_DYN=libpEpJNI.dylib else $(error I dont know how to build for $(PLATFORM).) endif -JAVA_SOURCES=foundation/pEp/jniadapter/AbstractEngine.java \ - foundation/pEp/jniadapter/Blob.java \ - foundation/pEp/jniadapter/CommType.java \ - foundation/pEp/jniadapter/Identity.java \ - foundation/pEp/jniadapter/Pair.java \ - foundation/pEp/jniadapter/Sync.java \ - foundation/pEp/jniadapter/_Blob.java \ - foundation/pEp/jniadapter/_Identity.java \ - foundation/pEp/jniadapter/pEpException.java \ - foundation/pEp/jniadapter/Message.java \ - foundation/pEp/jniadapter/Engine.java \ - -C_SOURCES=foundation_pEp_jniadapter_Engine.cc \ - foundation_pEp_jniadapter_Engine.h \ - foundation_pEp_jniadapter_Message.cc \ - foundation_pEp_jniadapter_Message.h \ - throw_pEp_exception.cc \ - throw_pEp_exception.hh \ - foundation_pEp_jniadapter_AbstractEngine.h \ - foundation_pEp_jniadapter__Blob.cc \ - foundation_pEp_jniadapter__Blob.h +# Dirs +# relative to "src/" +JAVA_PKG_ROOT=foundation/pEp/jniadapter/ +JAVA_BUILD_ROOT=../build/java/ +# Separate dir for derived objects DOES NOT WORK YET :/ (has to be .) +OBJ_DIR=. +DIST_DIR=../dist/ PEP_HEADER:=$(shell $(CXX) $(CXXFLAGS) -E -M get_header.cc | grep -oe '[^[:space:]]*pEpEngine\.h' | head -1) +# Every ysl2 file that need 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= \ + gen_java_Engine.marker \ + gen_java_Message.marker \ + gen_cpp_Engine.marker \ + gen_cpp_Message.marker \ + 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 + +# for "make clean" only +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)/EngineInterface.java \ + $(JAVA_PKG_ROOT)/IdentityFlags.java \ + $(JAVA_PKG_ROOT)/MessageInterface.java \ + $(JAVA_PKG_ROOT)/Rating.java \ + $(JAVA_PKG_ROOT)/SyncHandshakeResult.java \ + $(JAVA_PKG_ROOT)/SyncHandshakeSignal.java + +# Used to determine files to compile which are being generated +GENERATED_CC=\ + foundation_pEp_jniadapter_Engine.cc \ + foundation_pEp_jniadapter_Message.cc \ + throw_pEp_exception.cc + +# for "make clean" only +GENERATED_HH=\ + throw_pEp_exception.hh + +# Generated JNI headers (javac -h) +JNI_GENERATED_HH=\ + foundation_pEp_jniadapter_AbstractEngine.h \ + foundation_pEp_jniadapter__Blob.h \ + foundation_pEp_jniadapter_Engine.h \ + foundation_pEp_jniadapter_Identity.h \ + foundation_pEp_jniadapter_Message.h + +# Derive Java sources that will cause generated headers (for incremental build) +helper=$(subst _,/,$(JNI_GENERATED_HH)) +JNI_GENERATING_JAVA=$(subst .h,.java,$(helper)) +$(info JNI_GENERATING_JAVA: $(JNI_GENERATING_JAVA)) + +# Auto dependencies using gcc/clang +CXXFLAGS+= -MMD -MP + +SOURCES=$(wildcard *.cc) +SOURCES+=$(GENERATED_CC) +OBJECTS=$(SOURCES:.cc=.o) +DEPENDS=$(OBJECTS:.o=.d) + +.PHONY: all lib-java lib-cxx compile-java compile-cxx gen-jni-headers codegen gen-status-codes clean out-dirs clean-out-dirs + +all: lib-java lib-cxx -.PHONY: all -all: $(JAR) $(SHARED) +# Build only java lib +lib-java: $(LIB_JAVA) -$(JAR): status_list.yml2 $(JAVA_SOURCES) $(C_SOURCES) - $(JP)/javac foundation/pEp/jniadapter/*.java - $(JP)/jar cf $@ foundation/pEp/jniadapter/*.class +# Build only c++ static/shared lib +lib-cxx: $(LIB_CXX_DYN) $(LIB_CXX_STATIC) -BLUBB=foundation_pEp_jniadapter_AbstractEngine.h foundation_pEp_jniadapter_Engine.h foundation_pEp_jniadapter_Message.h foundation_pEp_jniadapter__Blob.h -$(BLUBB): foundation_pEp_jniadapter_%.h: foundation/pEp/jniadapter/%.java +# ---------------- Link ----------------- +$(LIB_JAVA): compile-java + $(JAVA_BIN_DIR)/jar cf $(DIST_DIR)/$@ -C $(JAVA_BUILD_ROOT) foundation + +$(LIB_CXX_DYN): compile-cxx + $(CXX) $(OBJ_DIR)/*.o $(LDFLAGS) $(LDLIBS) -o $(DIST_DIR)/$@ + +$(LIB_CXX_STATIC): compile-cxx + $(AR) -r $(DIST_DIR)/$@ $(OBJ_DIR)/*.o + + +# -------------- Compile ----------------- +compile-java: out-dirs codegen + $(JAVA_BIN_DIR)/javac -d $(JAVA_BUILD_ROOT) $(JAVA_PKG_ROOT)/*.java + $(JAVA_BIN_DIR)/javac -d $(JAVA_BUILD_ROOT) $(JAVA_PKG_ROOT)/exceptions/*.java + + +# Compile C++ using implicit rules +-include $(DEPENDS) +compile-cxx: out-dirs gen-jni-headers $(OBJECTS) + + +# --------- Generate JNI headers ---------- +gen-jni-headers: codegen $(JNI_GENERATED_HH) + +$(JNI_GENERATED_HH): $(JNI_GENERATING_JAVA) ifdef OLD_JAVA - $(JP)/javah $(subst /,.,$(subst .java,,$<)) + $(JAVA_BIN_DIR)/javah $(subst /,.,$(subst .java,,$<)) else - $(JP)/javac -h . $< + $(JAVA_BIN_DIR)/javac -h . $(JAVA_PKG_ROOT)/*.java endif + mv $(JAVA_PKG_ROOT)/*.class $(JAVA_BUILD_ROOT)/$(JAVA_PKG_ROOT)/ -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 - $(CXX) $(CXXFLAGS) -c $< -o $@ +# ------------- YML2 CodeGen -------------- +codegen: gen-status-codes $(YML2_MARKERS) -$(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 +# CodeGen +$(YML2_MARKERS): %.marker : %.ysl2 pEp.yml2 $(YML2_INCLUDES) + $(YML2_PROC) -y $< pEp.yml2 -$(SHARED): $(LIBRARY) - $(CXX) *.o $(LDFLAGS) $(LDLIBS) -o $@ +gen-status-codes: status_list.yml2 status_list.yml2: pEp.yml2 bash ../utils/extract_pEp_status_codes_from_engine.sh "$(PEP_HEADER)" $@ -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 throw_pEp_exception.* - rm -f foundation_pEp_jniadapter_Message.cc foundation_pEp_jniadapter_Engine.cc + +# ------------- Housekeeping --------------- +out-dirs: + mkdir -p $(JAVA_BUILD_ROOT)/$(JAVA_PKG_ROOT) + mkdir -p $(JAVA_BUILD_ROOT)/$(JAVA_PKG_ROOT)/exceptions + mkdir -p $(OBJ_DIR) + mkdir -p $(DIST_DIR) + +clean-out-dirs: + rm -rf ../build + rm -rf ../dist + +clean: clean-out-dirs + rm -f $(GENERATED_JAVA) + rm -f $(GENERATED_CC) + rm -f $(GENERATED_HH) + rm -f $(JNI_GENERATED_HH) + rm -f $(YML2_MARKERS) rm -f status_list.yml2 + diff --git a/test/java/foundation/pEp/jniadapter/test/Makefile.conf b/test/java/foundation/pEp/jniadapter/test/Makefile.conf index 0ee4a7b..71ee752 100644 --- a/test/java/foundation/pEp/jniadapter/test/Makefile.conf +++ b/test/java/foundation/pEp/jniadapter/test/Makefile.conf @@ -1,6 +1,7 @@ JAVA_PKG_BASENAME=foundation.pEp.jniadapter.test JAVA_PKG_BASEPATH=foundation/pEp/jniadapter/test REPOROOT=../.. +DIST_DIR=$(REPOROOT)/dist JAVA_CWD=../../../../../ 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=$(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 From 0f33979a7211e0b0f3b733a4ad7ffe224a561de4 Mon Sep 17 00:00:00 2001 From: heck Date: Thu, 2 Jul 2020 23:12:59 +0200 Subject: [PATCH 22/94] Build info and lib-name --- src/Makefile | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/src/Makefile b/src/Makefile index 8ef7459..c23556b 100644 --- a/src/Makefile +++ b/src/Makefile @@ -5,6 +5,24 @@ include ../Makefile.conf +# Names of the java and c++ libs to be built +LIB_JAVA=pEp.jar +LIB_CXX_NAME=libpEpJNI +LIB_CXX_STATIC=$(addsuffix .a,$(LIB_CXX_NAME)) + +ifeq ($(PLATFORM),linux) + LIB_CXX_DYN=$(addsuffix .so,$(LIB_CXX_NAME)) +else ifeq ($(PLATFORM),darwin) + LIB_CXX_DYN=$(addsuffix .dylib,$(LIB_CXX_NAME)) +else + $(error I dont know how to build for $(PLATFORM).) +endif + +$(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 DEBUG: $(DEBUG)) $(info CXX: $(CXX)) @@ -17,17 +35,7 @@ $(info YML2_PATH: $(YML2_PATH)) $(info CXXFLAGS: $(CXXFLAGS)) $(info LDFLAGS: $(LDFLAGS)) $(info LDLIBS: $(LDLIBS)) - -# Names of the java and c++ libs to be built -LIB_JAVA=pEp.jar -LIB_CXX_STATIC=libpEpJNI.a -ifeq ($(PLATFORM),linux) - LIB_CXX_DYN=libpEpJNI.so -else ifeq ($(PLATFORM),darwin) - LIB_CXX_DYN=libpEpJNI.dylib -else - $(error I dont know how to build for $(PLATFORM).) -endif +$(info ---------------------------------------------------) # Dirs # relative to "src/" @@ -92,7 +100,6 @@ JNI_GENERATED_HH=\ # Derive Java sources that will cause generated headers (for incremental build) helper=$(subst _,/,$(JNI_GENERATED_HH)) JNI_GENERATING_JAVA=$(subst .h,.java,$(helper)) -$(info JNI_GENERATING_JAVA: $(JNI_GENERATING_JAVA)) # Auto dependencies using gcc/clang CXXFLAGS+= -MMD -MP @@ -102,7 +109,7 @@ SOURCES+=$(GENERATED_CC) OBJECTS=$(SOURCES:.cc=.o) DEPENDS=$(OBJECTS:.o=.d) -.PHONY: all lib-java lib-cxx compile-java compile-cxx gen-jni-headers codegen gen-status-codes clean out-dirs clean-out-dirs +.PHONY: all lib-java lib-cxx compile-java compile-cxx gen-jni-headers codegen gen-status-codes clean create-dirs remove-dirs all: lib-java lib-cxx @@ -124,14 +131,13 @@ $(LIB_CXX_STATIC): compile-cxx # -------------- Compile ----------------- -compile-java: out-dirs codegen +compile-java: create-dirs codegen $(JAVA_BIN_DIR)/javac -d $(JAVA_BUILD_ROOT) $(JAVA_PKG_ROOT)/*.java $(JAVA_BIN_DIR)/javac -d $(JAVA_BUILD_ROOT) $(JAVA_PKG_ROOT)/exceptions/*.java # Compile C++ using implicit rules -include $(DEPENDS) -compile-cxx: out-dirs gen-jni-headers $(OBJECTS) # --------- Generate JNI headers ---------- @@ -149,28 +155,26 @@ endif # ------------- YML2 CodeGen -------------- codegen: gen-status-codes $(YML2_MARKERS) -# CodeGen $(YML2_MARKERS): %.marker : %.ysl2 pEp.yml2 $(YML2_INCLUDES) $(YML2_PROC) -y $< pEp.yml2 gen-status-codes: status_list.yml2 - status_list.yml2: pEp.yml2 bash ../utils/extract_pEp_status_codes_from_engine.sh "$(PEP_HEADER)" $@ # ------------- Housekeeping --------------- -out-dirs: +create-dirs: mkdir -p $(JAVA_BUILD_ROOT)/$(JAVA_PKG_ROOT) mkdir -p $(JAVA_BUILD_ROOT)/$(JAVA_PKG_ROOT)/exceptions mkdir -p $(OBJ_DIR) mkdir -p $(DIST_DIR) -clean-out-dirs: +remove-dirs: rm -rf ../build rm -rf ../dist -clean: clean-out-dirs +clean: remove-dirs rm -f $(GENERATED_JAVA) rm -f $(GENERATED_CC) rm -f $(GENERATED_HH) From 80c0b1e542ccf5cc8dffa18bfa9af92b2a93b5de Mon Sep 17 00:00:00 2001 From: heck Date: Fri, 3 Jul 2020 00:47:46 +0200 Subject: [PATCH 23/94] Move all yml2 into own src folder "codegen" --- .hgignore | 5 +- src/Makefile | 54 ++++++------------ src/codegen/Makefile | 57 +++++++++++++++++++ src/{ => codegen}/gen_cpp_Engine.ysl2 | 4 +- src/{ => codegen}/gen_cpp_Message.ysl2 | 4 +- src/{ => codegen}/gen_java_Engine.ysl2 | 6 +- src/{ => codegen}/gen_java_Message.ysl2 | 10 ++-- .../gen_throw_pEp_exception.ysl2 | 6 +- src/{ => codegen}/pEp.yml2 | 0 src/{ => codegen}/textutils.ysl2 | 0 src/{ => codegen}/types_c.ysl2 | 0 src/{ => codegen}/types_java.ysl2 | 0 12 files changed, 92 insertions(+), 54 deletions(-) create mode 100644 src/codegen/Makefile rename src/{ => codegen}/gen_cpp_Engine.ysl2 (98%) rename src/{ => codegen}/gen_cpp_Message.ysl2 (97%) rename src/{ => codegen}/gen_java_Engine.ysl2 (98%) rename src/{ => codegen}/gen_java_Message.ysl2 (96%) rename src/{ => codegen}/gen_throw_pEp_exception.ysl2 (89%) rename src/{ => codegen}/pEp.yml2 (100%) rename src/{ => codegen}/textutils.ysl2 (100%) rename src/{ => codegen}/types_c.ysl2 (100%) rename src/{ => codegen}/types_java.ysl2 (100%) diff --git a/.hgignore b/.hgignore index 551e718..a885677 100644 --- a/.hgignore +++ b/.hgignore @@ -5,6 +5,7 @@ syntax: glob *.class *.jar *.swp +*.d *.o *.a *.dylib @@ -24,8 +25,8 @@ foundation_pEp_jniadapter_Engine.* foundation_pEp_jniadapter_Identity.h foundation_pEp_jniadapter_Message.cc foundation_pEp_jniadapter_Message.h -#throw_pEp_exception.cc -#throw_pEp_exception.hh +throw_pEp_exception.cc +throw_pEp_exception.hh CipherSuite.java Color.java diff --git a/src/Makefile b/src/Makefile index c23556b..0514014 100644 --- a/src/Makefile +++ b/src/Makefile @@ -45,26 +45,6 @@ JAVA_BUILD_ROOT=../build/java/ OBJ_DIR=. DIST_DIR=../dist/ -PEP_HEADER:=$(shell $(CXX) $(CXXFLAGS) -E -M get_header.cc | grep -oe '[^[:space:]]*pEpEngine\.h' | head -1) - -# Every ysl2 file that need 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= \ - gen_java_Engine.marker \ - gen_java_Message.marker \ - gen_cpp_Engine.marker \ - gen_cpp_Message.marker \ - 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 - # for "make clean" only GENERATED_JAVA=\ $(JAVA_PKG_ROOT)/Engine.java \ @@ -79,7 +59,7 @@ GENERATED_JAVA=\ $(JAVA_PKG_ROOT)/SyncHandshakeResult.java \ $(JAVA_PKG_ROOT)/SyncHandshakeSignal.java -# Used to determine files to compile which are being generated +# files to compile which will be be generated GENERATED_CC=\ foundation_pEp_jniadapter_Engine.cc \ foundation_pEp_jniadapter_Message.cc \ @@ -109,7 +89,11 @@ SOURCES+=$(GENERATED_CC) OBJECTS=$(SOURCES:.cc=.o) DEPENDS=$(OBJECTS:.o=.d) -.PHONY: all lib-java lib-cxx compile-java compile-cxx gen-jni-headers codegen gen-status-codes clean create-dirs remove-dirs +.PHONY: all lib-java lib-cxx compile-java compile-cxx gen-jni-headers codegen clean create-dirs remove-dirs + +$(info SOURCES: $(SOURCES)) +$(info OBJECTS: $(OBJECTS)) +$(info DEPENDS: $(DEPENDS)) all: lib-java lib-cxx @@ -124,10 +108,10 @@ $(LIB_JAVA): compile-java $(JAVA_BIN_DIR)/jar cf $(DIST_DIR)/$@ -C $(JAVA_BUILD_ROOT) foundation $(LIB_CXX_DYN): compile-cxx - $(CXX) $(OBJ_DIR)/*.o $(LDFLAGS) $(LDLIBS) -o $(DIST_DIR)/$@ + $(CXX) *.o $(LDFLAGS) $(LDLIBS) -o $(DIST_DIR)/$@ $(LIB_CXX_STATIC): compile-cxx - $(AR) -r $(DIST_DIR)/$@ $(OBJ_DIR)/*.o + $(AR) -r $(DIST_DIR)/$@ *.o # -------------- Compile ----------------- @@ -135,8 +119,8 @@ compile-java: create-dirs codegen $(JAVA_BIN_DIR)/javac -d $(JAVA_BUILD_ROOT) $(JAVA_PKG_ROOT)/*.java $(JAVA_BIN_DIR)/javac -d $(JAVA_BUILD_ROOT) $(JAVA_PKG_ROOT)/exceptions/*.java - # Compile C++ using implicit rules +compile-cxx: create-dirs gen-jni-headers $(OBJECTS) -include $(DEPENDS) @@ -153,32 +137,28 @@ endif # ------------- YML2 CodeGen -------------- -codegen: gen-status-codes $(YML2_MARKERS) - -$(YML2_MARKERS): %.marker : %.ysl2 pEp.yml2 $(YML2_INCLUDES) - $(YML2_PROC) -y $< pEp.yml2 - -gen-status-codes: status_list.yml2 -status_list.yml2: pEp.yml2 - bash ../utils/extract_pEp_status_codes_from_engine.sh "$(PEP_HEADER)" $@ - +codegen: + $(MAKE) -C codegen # ------------- Housekeeping --------------- create-dirs: + $(MAKE) -C codegen create-dirs mkdir -p $(JAVA_BUILD_ROOT)/$(JAVA_PKG_ROOT) mkdir -p $(JAVA_BUILD_ROOT)/$(JAVA_PKG_ROOT)/exceptions - mkdir -p $(OBJ_DIR) mkdir -p $(DIST_DIR) +#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 $(YML2_MARKERS) - rm -f status_list.yml2 + rm -f $(DEPENDS) + rm -f $(OBJECTS) diff --git a/src/codegen/Makefile b/src/codegen/Makefile new file mode 100644 index 0000000..2f6fb48 --- /dev/null +++ b/src/codegen/Makefile @@ -0,0 +1,57 @@ +# 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 ../get_header.cc | grep -oe '[^[:space:]]*pEpEngine\.h' | head -1) + +# Every ysl2 file that need 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 + +status_list.yml2: pEp.yml2 + bash ../../utils/extract_pEp_status_codes_from_engine.sh "$(PEP_HEADER)" $@ + + +# ------------- 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 + diff --git a/src/gen_cpp_Engine.ysl2 b/src/codegen/gen_cpp_Engine.ysl2 similarity index 98% rename from src/gen_cpp_Engine.ysl2 rename to src/codegen/gen_cpp_Engine.ysl2 index ab337bc..994fed3 100644 --- a/src/gen_cpp_Engine.ysl2 +++ b/src/codegen/gen_cpp_Engine.ysl2 @@ -7,10 +7,10 @@ tstylesheet { template "/namespace[@name='pEp']" { apply "interface", 0; - document("gen_cpp_Engine.marker", "text") > "" + document("../../build/marker/gen_cpp_Engine.marker", "text") > "" } - template "interface" document("foundation_pEp_jniadapter_{@name}.cc", "text") + template "interface" document("../foundation_pEp_jniadapter_{@name}.cc", "text") || #include #include diff --git a/src/gen_cpp_Message.ysl2 b/src/codegen/gen_cpp_Message.ysl2 similarity index 97% rename from src/gen_cpp_Message.ysl2 rename to src/codegen/gen_cpp_Message.ysl2 index 963c681..6aeea12 100644 --- a/src/gen_cpp_Message.ysl2 +++ b/src/codegen/gen_cpp_Message.ysl2 @@ -7,13 +7,13 @@ tstylesheet { template "/namespace[@name='pEp']" { apply "struct", 0; - document("gen_cpp_Message.marker", "text") > "" + document("../../build/marker/gen_cpp_Message.marker", "text") > "" } template "struct" { const "jname" call "CamelCase" with "text", "@name"; - document("foundation_pEp_jniadapter_{$jname}.cc", "text") { + document("../foundation_pEp_jniadapter_{$jname}.cc", "text") { || #include #include diff --git a/src/gen_java_Engine.ysl2 b/src/codegen/gen_java_Engine.ysl2 similarity index 98% rename from src/gen_java_Engine.ysl2 rename to src/codegen/gen_java_Engine.ysl2 index db69b7c..96a2fe1 100644 --- a/src/gen_java_Engine.ysl2 +++ b/src/codegen/gen_java_Engine.ysl2 @@ -6,12 +6,12 @@ tstylesheet { template "/namespace[@name='pEp']" { apply "interface", 0; - document("gen_java_Engine.marker", "text") > "" + document("../../build/marker/gen_java_Engine.marker", "text") > "" } template "interface" { const "cname" call "toJava" with "type", "@name"; - document("foundation/pEp/jniadapter/{$cname}.java", "text") + document("../foundation/pEp/jniadapter/{$cname}.java", "text") || package foundation.pEp.jniadapter; @@ -26,7 +26,7 @@ tstylesheet { } || - document("foundation/pEp/jniadapter/{$cname}Interface.java", "text") + document("../foundation/pEp/jniadapter/{$cname}Interface.java", "text") || package foundation.pEp.jniadapter; diff --git a/src/gen_java_Message.ysl2 b/src/codegen/gen_java_Message.ysl2 similarity index 96% rename from src/gen_java_Message.ysl2 rename to src/codegen/gen_java_Message.ysl2 index 2610d2f..d94eae0 100644 --- a/src/gen_java_Message.ysl2 +++ b/src/codegen/gen_java_Message.ysl2 @@ -6,12 +6,12 @@ tstylesheet { template "/namespace[@name='pEp']" { apply "struct|enum|exception", 0; - document("gen_java_Message.marker", "text") > "" + document("../../build/marker/gen_java_Message.marker", "text") > "" } template "struct" { const "cname" call "toJava" with "type", "@name"; - document("foundation/pEp/jniadapter/{$cname}.java", "text") + document("../foundation/pEp/jniadapter/{$cname}.java", "text") || package foundation.pEp.jniadapter; @@ -64,7 +64,7 @@ tstylesheet { `` apply "*[name(.)!='enum']", mode=entry } || - document("foundation/pEp/jniadapter/{$cname}Interface.java", "text") + document("../foundation/pEp/jniadapter/{$cname}Interface.java", "text") || package foundation.pEp.jniadapter; @@ -83,7 +83,7 @@ tstylesheet { template "enum" { const "jname" call "toJava" with "type", "@name"; - document("foundation/pEp/jniadapter/{$jname}.java", "text") + document("../foundation/pEp/jniadapter/{$jname}.java", "text") || // CodeGen template enum package foundation.pEp.jniadapter; @@ -131,7 +131,7 @@ tstylesheet { function "exception" { param "name"; - document "foundation/pEp/jniadapter/exceptions/{$name}.java", "text" { + document "../foundation/pEp/jniadapter/exceptions/{$name}.java", "text" { | package foundation.pEp.jniadapter.exceptions; | | public class «$name» extends pEpException { diff --git a/src/gen_throw_pEp_exception.ysl2 b/src/codegen/gen_throw_pEp_exception.ysl2 similarity index 89% rename from src/gen_throw_pEp_exception.ysl2 rename to src/codegen/gen_throw_pEp_exception.ysl2 index 01602ac..7371e01 100644 --- a/src/gen_throw_pEp_exception.ysl2 +++ b/src/codegen/gen_throw_pEp_exception.ysl2 @@ -5,7 +5,7 @@ tstylesheet { template "/" { apply "namespace", 0; - document "throw_pEp_exception.hh", "text" + document "../throw_pEp_exception.hh", "text" || #pragma once @@ -18,11 +18,11 @@ tstylesheet { }; || - document("gen_throw_pEp_exception.marker", "text") > "" + document("../../build/marker/gen_throw_pEp_exception.marker", "text") > "" } template "namespace" - document("throw_pEp_exception.cc", "text") + document("../throw_pEp_exception.cc", "text") || #include #include diff --git a/src/pEp.yml2 b/src/codegen/pEp.yml2 similarity index 100% rename from src/pEp.yml2 rename to src/codegen/pEp.yml2 diff --git a/src/textutils.ysl2 b/src/codegen/textutils.ysl2 similarity index 100% rename from src/textutils.ysl2 rename to src/codegen/textutils.ysl2 diff --git a/src/types_c.ysl2 b/src/codegen/types_c.ysl2 similarity index 100% rename from src/types_c.ysl2 rename to src/codegen/types_c.ysl2 diff --git a/src/types_java.ysl2 b/src/codegen/types_java.ysl2 similarity index 100% rename from src/types_java.ysl2 rename to src/codegen/types_java.ysl2 From f991fd2dd34cf70addabfd94f2ac51d7cdfa9ba6 Mon Sep 17 00:00:00 2001 From: heck Date: Fri, 3 Jul 2020 16:35:44 +0200 Subject: [PATCH 24/94] Separate output dir for .d and .o files. --- src/Makefile | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/Makefile b/src/Makefile index 0514014..b465ff7 100644 --- a/src/Makefile +++ b/src/Makefile @@ -41,8 +41,7 @@ $(info ---------------------------------------------------) # relative to "src/" JAVA_PKG_ROOT=foundation/pEp/jniadapter/ JAVA_BUILD_ROOT=../build/java/ -# Separate dir for derived objects DOES NOT WORK YET :/ (has to be .) -OBJ_DIR=. +OBJ_DIR=../build/cxx/ DIST_DIR=../dist/ # for "make clean" only @@ -86,7 +85,8 @@ CXXFLAGS+= -MMD -MP SOURCES=$(wildcard *.cc) SOURCES+=$(GENERATED_CC) -OBJECTS=$(SOURCES:.cc=.o) +tmp=$(SOURCES:.cc=.o) +OBJECTS=$(addprefix $(OBJ_DIR), $(tmp)) DEPENDS=$(OBJECTS:.o=.d) .PHONY: all lib-java lib-cxx compile-java compile-cxx gen-jni-headers codegen clean create-dirs remove-dirs @@ -108,10 +108,10 @@ $(LIB_JAVA): compile-java $(JAVA_BIN_DIR)/jar cf $(DIST_DIR)/$@ -C $(JAVA_BUILD_ROOT) foundation $(LIB_CXX_DYN): compile-cxx - $(CXX) *.o $(LDFLAGS) $(LDLIBS) -o $(DIST_DIR)/$@ + $(CXX) $(OBJ_DIR)*.o $(LDFLAGS) $(LDLIBS) -o $(DIST_DIR)/$@ $(LIB_CXX_STATIC): compile-cxx - $(AR) -r $(DIST_DIR)/$@ *.o + $(AR) -r $(DIST_DIR)/$@ $(OBJ_DIR)*.o # -------------- Compile ----------------- @@ -119,8 +119,12 @@ compile-java: create-dirs codegen $(JAVA_BIN_DIR)/javac -d $(JAVA_BUILD_ROOT) $(JAVA_PKG_ROOT)/*.java $(JAVA_BIN_DIR)/javac -d $(JAVA_BUILD_ROOT) $(JAVA_PKG_ROOT)/exceptions/*.java -# Compile C++ using implicit rules + compile-cxx: create-dirs gen-jni-headers $(OBJECTS) + +$(OBJECTS): $(OBJ_DIR)%.o: %.cc + $(CXX) $(CXXFLAGS) -c $< -o $@ + -include $(DEPENDS) @@ -145,6 +149,7 @@ create-dirs: $(MAKE) -C codegen create-dirs mkdir -p $(JAVA_BUILD_ROOT)/$(JAVA_PKG_ROOT) mkdir -p $(JAVA_BUILD_ROOT)/$(JAVA_PKG_ROOT)/exceptions + mkdir -p $(OBJ_DIR) mkdir -p $(DIST_DIR) #rm -rf is too dangerous for vars From 0f044489054dfe2ee4b505a76ccfa946f4aeb71b Mon Sep 17 00:00:00 2001 From: heck Date: Fri, 3 Jul 2020 17:01:05 +0200 Subject: [PATCH 25/94] add Makefile targets install/uninstall (to $PREFIX) update local.conf.example --- Makefile | 9 ++++++++- Makefile.conf | 19 ++++++++++--------- local.conf.example | 25 +++++++++++++++---------- src/Makefile | 13 ++++++++++++- 4 files changed, 45 insertions(+), 21 deletions(-) diff --git a/Makefile b/Makefile index 45acece..4acf87e 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ # This file may be used under the terms of the GNU General Public License version 3 # 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 @@ -29,3 +29,10 @@ doxy-java: src doxy-clean: rm -rf doc/doxygen/cxx rm -rf doc/doxygen/java + +install: + $(MAKE) -C src install + +uninstall: + $(MAKE) -C src uninstall + diff --git a/Makefile.conf b/Makefile.conf index 9cfb440..2551f0d 100644 --- a/Makefile.conf +++ b/Makefile.conf @@ -10,24 +10,20 @@ PLATFORM:=$(shell uname | tr A-Z a-z) # The dev environment paths and configs are set to a default value which can be overridden by ./local.conf and overridden again by /local.conf ######### Build Config Defaults ######### DEBUG=1 +PREFIX=$(HOME)/local YML2_PATH=$(HOME)/yml2 YML2_PROC=$(YML2_PATH)/yml2proc $(YML2_OPTS) YML2_OPTS=--encoding=utf8 -ENGINE_LIB_PATH=$(HOME)/lib -ENGINE_INC_PATH=$(HOME)/include -AD_LIB_PATH=$(HOME)/lib -AD_INC_PATH=$(HOME)/include +ENGINE_LIB_PATH=$(PREFIX)/lib +ENGINE_INC_PATH=$(PREFIX)/include +AD_LIB_PATH=$(PREFIX)/lib +AD_INC_PATH=$(PREFIX)/include ### Guessing JAVA_HOME ifeq ($(PLATFORM),linux) JAVA_HOME=$(subst /bin,,$(dir $(realpath /usr/bin/javac))) endif -ifndef JAVA_HOME - $(error JAVA_HOME is not set!) -endif - -JAVA_BIN_DIR=$(JAVA_HOME)/bin # 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) @@ -49,6 +45,11 @@ ENGINE_INC=-I$(ENGINE_INC_PATH) AD_LIB=-L$(AD_LIB_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++ ######### CXXFLAGS+=-O0 -std=c++11 -fpermissive -fPIC -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/$(PLATFORM) $(AD_INC) $(ENGINE_INC) diff --git a/local.conf.example b/local.conf.example index 8de0aa8..d550ae5 100644 --- a/local.conf.example +++ b/local.conf.example @@ -2,23 +2,28 @@ # you might not need this file, but if the defaults dont work for you # You can override them here. # Tweak the values to your needs and rename it to local.conf +# These example values here reflect the defaults + +############ Install ########### +# PREFIX=$(HOME)/local ######### C++ Compiler ######### # Should work with clang and g++ # CXX=g++ -# DEBUG=1 # DEBUG Build (Default) -# DEBUG=0 # RELEASE Build +# DEBUG=0 # RELEASE Build / set to 1 for DEBUG build -######### JAVA ######### +############ JAVA ############## # JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home -######### YML2 ######### +############ YML2 ############## # YML2_PATH=$(HOME)/code/yml2 -######### Engine ######### -# ENGINE_LIB_PATH=$(HOME)/local/lib -# ENGINE_INC_PATH=$(HOME)/local/include +########### Engine ############# +# ENGINE_LIB_PATH=$(PREFIX)/lib +# ENGINE_INC_PATH=$(PREFIX)/include + +########## libAdapter ########## +# AD_LIB_PATH=$(PREFIX)/lib +# AD_INC_PATH=$(PREFIX)/include + -######### libAdapter ######### -# AD_LIB_PATH=$(HOME)/local/lib -# AD_INC_PATH=$(HOME)/local/include diff --git a/src/Makefile b/src/Makefile index b465ff7..4d3225b 100644 --- a/src/Makefile +++ b/src/Makefile @@ -89,7 +89,7 @@ tmp=$(SOURCES:.cc=.o) OBJECTS=$(addprefix $(OBJ_DIR), $(tmp)) DEPENDS=$(OBJECTS:.o=.d) -.PHONY: all lib-java lib-cxx compile-java compile-cxx gen-jni-headers codegen clean create-dirs remove-dirs +.PHONY: all lib-java lib-cxx compile-java compile-cxx gen-jni-headers codegen clean create-dirs remove-dirs install uninstall $(info SOURCES: $(SOURCES)) $(info OBJECTS: $(OBJECTS)) @@ -167,3 +167,14 @@ clean: remove-dirs rm -f $(DEPENDS) rm -f $(OBJECTS) +install: $(LIB_JAVA) $(LIB_CXX_STATIC) $(LIB_CXX_DYN) + mkdir -p $(PREFIX)/lib + cp -v $(DIST_DIR)/$(LIB_JAVA) $(PREFIX)/lib/ + cp -v $(DIST_DIR)/$(LIB_CXX_STATIC) $(PREFIX)/lib/ + cp -v $(DIST_DIR)/$(LIB_CXX_DYN) $(PREFIX)/lib/ + +uninstall: + cd $(PREFIX)/lib && rm -vf $(LIB_JAVA) + cd $(PREFIX)/lib && rm -vf $(LIB_CXX_STATIC) + cd $(PREFIX)/lib && rm -vf $(LIB_CXX_DYN) + From c1e9f6998500c98d96d32e1c193b83a8d3741e62 Mon Sep 17 00:00:00 2001 From: heck Date: Fri, 3 Jul 2020 17:07:17 +0200 Subject: [PATCH 26/94] .hgignore can now just ignore parallel build hierarchy instead of file types, and dist folder --- .hgignore | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/.hgignore b/.hgignore index a885677..3fadd4c 100644 --- a/.hgignore +++ b/.hgignore @@ -3,30 +3,24 @@ syntax: glob # ignore all of them *.class -*.jar -*.swp -*.d -*.o -*.a -*.dylib -*.so *.log .DS_Store # ignore config files local.conf -local.conf + +# ignore build and dist dirs +build/* +dist/* # ignore generated files status_list.yml2 foundation_pEp_jniadapter__Blob.h foundation_pEp_jniadapter_AbstractEngine.h foundation_pEp_jniadapter_Engine.* +foundation_pEp_jniadapter_Message.* foundation_pEp_jniadapter_Identity.h -foundation_pEp_jniadapter_Message.cc -foundation_pEp_jniadapter_Message.h -throw_pEp_exception.cc -throw_pEp_exception.hh +throw_pEp_exception.* CipherSuite.java Color.java From 935f3b58caa0d98c74f6d75a917af5ca74689050 Mon Sep 17 00:00:00 2001 From: heck Date: Fri, 3 Jul 2020 17:49:51 +0200 Subject: [PATCH 27/94] move java interfaces into own subpkg "foundation.pep.interfaces" --- src/Makefile | 12 ++++++------ src/codegen/gen_java_Engine.ysl2 | 6 ++++-- src/codegen/gen_java_Message.ysl2 | 8 +++++--- src/foundation/pEp/jniadapter/AbstractEngine.java | 1 + src/foundation/pEp/jniadapter/Blob.java | 1 + src/foundation/pEp/jniadapter/BlobInterface.java | 5 ----- src/foundation/pEp/jniadapter/Identity.java | 1 + src/foundation/pEp/jniadapter/IdentityInterface.java | 5 ----- .../{ => interfaces}/AbstractEngineInterface.java | 5 ++++- .../pEp/jniadapter/interfaces/BlobInterface.java | 5 +++++ .../pEp/jniadapter/interfaces/IdentityInterface.java | 7 +++++++ 11 files changed, 34 insertions(+), 22 deletions(-) delete mode 100644 src/foundation/pEp/jniadapter/BlobInterface.java delete mode 100644 src/foundation/pEp/jniadapter/IdentityInterface.java rename src/foundation/pEp/jniadapter/{ => interfaces}/AbstractEngineInterface.java (84%) create mode 100644 src/foundation/pEp/jniadapter/interfaces/BlobInterface.java create mode 100644 src/foundation/pEp/jniadapter/interfaces/IdentityInterface.java diff --git a/src/Makefile b/src/Makefile index 4d3225b..ae3efa9 100644 --- a/src/Makefile +++ b/src/Makefile @@ -51,12 +51,12 @@ GENERATED_JAVA=\ $(JAVA_PKG_ROOT)/CipherSuite.java \ $(JAVA_PKG_ROOT)/Color.java \ $(JAVA_PKG_ROOT)/DecryptFlags.java \ - $(JAVA_PKG_ROOT)/EngineInterface.java \ $(JAVA_PKG_ROOT)/IdentityFlags.java \ - $(JAVA_PKG_ROOT)/MessageInterface.java \ $(JAVA_PKG_ROOT)/Rating.java \ $(JAVA_PKG_ROOT)/SyncHandshakeResult.java \ - $(JAVA_PKG_ROOT)/SyncHandshakeSignal.java + $(JAVA_PKG_ROOT)/SyncHandshakeSignal.java \ + $(JAVA_PKG_ROOT)/interfaces/EngineInterface.java \ + $(JAVA_PKG_ROOT)/interfaces/MessageInterface.java # files to compile which will be be generated GENERATED_CC=\ @@ -118,6 +118,7 @@ $(LIB_CXX_STATIC): compile-cxx compile-java: create-dirs codegen $(JAVA_BIN_DIR)/javac -d $(JAVA_BUILD_ROOT) $(JAVA_PKG_ROOT)/*.java $(JAVA_BIN_DIR)/javac -d $(JAVA_BUILD_ROOT) $(JAVA_PKG_ROOT)/exceptions/*.java + $(JAVA_BIN_DIR)/javac -d $(JAVA_BUILD_ROOT) $(JAVA_PKG_ROOT)/interfaces/*.java compile-cxx: create-dirs gen-jni-headers $(OBJECTS) @@ -133,11 +134,10 @@ gen-jni-headers: codegen $(JNI_GENERATED_HH) $(JNI_GENERATED_HH): $(JNI_GENERATING_JAVA) ifdef OLD_JAVA - $(JAVA_BIN_DIR)/javah $(subst /,.,$(subst .java,,$<)) + $(JAVA_BIN_DIR)/javah -d $(JAVA_BUILD_ROOT) $(subst /,.,$(subst .java,,$<)) else - $(JAVA_BIN_DIR)/javac -h . $(JAVA_PKG_ROOT)/*.java + $(JAVA_BIN_DIR)/javac -d $(JAVA_BUILD_ROOT) -h . $(JAVA_PKG_ROOT)/*.java endif - mv $(JAVA_PKG_ROOT)/*.class $(JAVA_BUILD_ROOT)/$(JAVA_PKG_ROOT)/ # ------------- YML2 CodeGen -------------- diff --git a/src/codegen/gen_java_Engine.ysl2 b/src/codegen/gen_java_Engine.ysl2 index 96a2fe1..4402599 100644 --- a/src/codegen/gen_java_Engine.ysl2 +++ b/src/codegen/gen_java_Engine.ysl2 @@ -15,6 +15,7 @@ tstylesheet { || package foundation.pEp.jniadapter; + import foundation.pEp.jniadapter.interfaces.*; import foundation.pEp.jniadapter.exceptions.*; import java.util.ArrayList; import java.util.Vector; @@ -26,10 +27,11 @@ tstylesheet { } || - document("../foundation/pEp/jniadapter/{$cname}Interface.java", "text") + document("../foundation/pEp/jniadapter/interfaces/{$cname}Interface.java", "text") || - package foundation.pEp.jniadapter; + package foundation.pEp.jniadapter.interfaces; + import foundation.pEp.jniadapter.*; import java.util.ArrayList; import java.util.Vector; diff --git a/src/codegen/gen_java_Message.ysl2 b/src/codegen/gen_java_Message.ysl2 index d94eae0..651da83 100644 --- a/src/codegen/gen_java_Message.ysl2 +++ b/src/codegen/gen_java_Message.ysl2 @@ -15,6 +15,7 @@ tstylesheet { || package foundation.pEp.jniadapter; + import foundation.pEp.jniadapter.interfaces.*; import foundation.pEp.jniadapter.exceptions.*; import java.util.ArrayList; import java.util.Vector; @@ -64,11 +65,12 @@ tstylesheet { `` apply "*[name(.)!='enum']", mode=entry } || - document("../foundation/pEp/jniadapter/{$cname}Interface.java", "text") + document("../foundation/pEp/jniadapter/interfaces/{$cname}Interface.java", "text") || - package foundation.pEp.jniadapter; + package foundation.pEp.jniadapter.interfaces; - import foundation.pEp.jniadapter.Message.Direction; + import foundation.pEp.jniadapter.*; + import foundation.pEp.jniadapter.Message.*; import java.util.Date; import java.util.Vector; import java.util.ArrayList; diff --git a/src/foundation/pEp/jniadapter/AbstractEngine.java b/src/foundation/pEp/jniadapter/AbstractEngine.java index b4befa8..d4005a8 100644 --- a/src/foundation/pEp/jniadapter/AbstractEngine.java +++ b/src/foundation/pEp/jniadapter/AbstractEngine.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.Vector; import foundation.pEp.jniadapter.Sync.DefaultCallback; +import foundation.pEp.jniadapter.interfaces.*; import foundation.pEp.jniadapter.exceptions.*; diff --git a/src/foundation/pEp/jniadapter/Blob.java b/src/foundation/pEp/jniadapter/Blob.java index 073ac42..4fdffa4 100644 --- a/src/foundation/pEp/jniadapter/Blob.java +++ b/src/foundation/pEp/jniadapter/Blob.java @@ -1,5 +1,6 @@ package foundation.pEp.jniadapter; +import foundation.pEp.jniadapter.interfaces.*; import java.io.Serializable; public class Blob implements BlobInterface, Serializable { diff --git a/src/foundation/pEp/jniadapter/BlobInterface.java b/src/foundation/pEp/jniadapter/BlobInterface.java deleted file mode 100644 index d52e7c7..0000000 --- a/src/foundation/pEp/jniadapter/BlobInterface.java +++ /dev/null @@ -1,5 +0,0 @@ -package foundation.pEp.jniadapter; - -public interface BlobInterface { - -} diff --git a/src/foundation/pEp/jniadapter/Identity.java b/src/foundation/pEp/jniadapter/Identity.java index 34e7dde..2b0cdde 100644 --- a/src/foundation/pEp/jniadapter/Identity.java +++ b/src/foundation/pEp/jniadapter/Identity.java @@ -1,5 +1,6 @@ package foundation.pEp.jniadapter; +import foundation.pEp.jniadapter.interfaces.*; import java.io.Serializable; public class Identity implements IdentityInterface, Serializable { diff --git a/src/foundation/pEp/jniadapter/IdentityInterface.java b/src/foundation/pEp/jniadapter/IdentityInterface.java deleted file mode 100644 index 93e0d29..0000000 --- a/src/foundation/pEp/jniadapter/IdentityInterface.java +++ /dev/null @@ -1,5 +0,0 @@ -package foundation.pEp.jniadapter; - -public interface IdentityInterface { - public Rating getRating(); -} diff --git a/src/foundation/pEp/jniadapter/AbstractEngineInterface.java b/src/foundation/pEp/jniadapter/interfaces/AbstractEngineInterface.java similarity index 84% rename from src/foundation/pEp/jniadapter/AbstractEngineInterface.java rename to src/foundation/pEp/jniadapter/interfaces/AbstractEngineInterface.java index 7ad20f0..9e3630f 100644 --- a/src/foundation/pEp/jniadapter/AbstractEngineInterface.java +++ b/src/foundation/pEp/jniadapter/interfaces/AbstractEngineInterface.java @@ -1,4 +1,7 @@ -package foundation.pEp.jniadapter; +package foundation.pEp.jniadapter.interfaces; + +import foundation.pEp.jniadapter.Message; +import foundation.pEp.jniadapter.Sync; public interface AbstractEngineInterface { public String getVersion(); diff --git a/src/foundation/pEp/jniadapter/interfaces/BlobInterface.java b/src/foundation/pEp/jniadapter/interfaces/BlobInterface.java new file mode 100644 index 0000000..6a357d4 --- /dev/null +++ b/src/foundation/pEp/jniadapter/interfaces/BlobInterface.java @@ -0,0 +1,5 @@ +package foundation.pEp.jniadapter.interfaces; + +public interface BlobInterface { + +} diff --git a/src/foundation/pEp/jniadapter/interfaces/IdentityInterface.java b/src/foundation/pEp/jniadapter/interfaces/IdentityInterface.java new file mode 100644 index 0000000..1782cd3 --- /dev/null +++ b/src/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(); +} From c5ae320e7a19cea09a970cf93b5995a1e16e937a Mon Sep 17 00:00:00 2001 From: heck Date: Fri, 3 Jul 2020 19:28:52 +0200 Subject: [PATCH 28/94] move all cxx sources/headers into src/cxx --- src/Makefile | 78 ++++++++++--------- src/codegen/Makefile | 2 +- src/codegen/gen_cpp_Engine.ysl2 | 2 +- src/codegen/gen_cpp_Message.ysl2 | 2 +- src/codegen/gen_throw_pEp_exception.ysl2 | 4 +- src/{ => cxx}/basic_api.cc | 0 ...oundation_pEp_jniadapter_AbstractEngine.cc | 0 .../foundation_pEp_jniadapter__Blob.cc | 0 src/{ => cxx}/get_header.cc | 0 src/{ => cxx}/identity_api.cc | 0 src/{ => cxx}/jniutils.cc | 0 src/{ => cxx}/jniutils.hh | 0 12 files changed, 47 insertions(+), 41 deletions(-) rename src/{ => cxx}/basic_api.cc (100%) rename src/{ => cxx}/foundation_pEp_jniadapter_AbstractEngine.cc (100%) rename src/{ => cxx}/foundation_pEp_jniadapter__Blob.cc (100%) rename src/{ => cxx}/get_header.cc (100%) rename src/{ => cxx}/identity_api.cc (100%) rename src/{ => cxx}/jniutils.cc (100%) rename src/{ => cxx}/jniutils.hh (100%) diff --git a/src/Makefile b/src/Makefile index ae3efa9..9e7af01 100644 --- a/src/Makefile +++ b/src/Makefile @@ -6,18 +6,24 @@ include ../Makefile.conf # Names of the java and c++ libs to be built -LIB_JAVA=pEp.jar +LIB_JAVA_NAME=pEp.jar LIB_CXX_NAME=libpEpJNI -LIB_CXX_STATIC=$(addsuffix .a,$(LIB_CXX_NAME)) +DIST_DIR=../dist/ + +LIB_CXX_STATIC_NAME=$(addsuffix .a,$(LIB_CXX_NAME)) ifeq ($(PLATFORM),linux) - LIB_CXX_DYN=$(addsuffix .so,$(LIB_CXX_NAME)) + LIB_CXX_DYN_NAME=$(addsuffix .so,$(LIB_CXX_NAME)) else ifeq ($(PLATFORM),darwin) - LIB_CXX_DYN=$(addsuffix .dylib,$(LIB_CXX_NAME)) + 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)) @@ -39,10 +45,13 @@ $(info ---------------------------------------------------) # Dirs # relative to "src/" +BUILD_ROOT=../build/ +CXX_DIR=cxx/ + JAVA_PKG_ROOT=foundation/pEp/jniadapter/ -JAVA_BUILD_ROOT=../build/java/ -OBJ_DIR=../build/cxx/ -DIST_DIR=../dist/ +JAVA_BUILD_ROOT=$(BUILD_ROOT)/java/ +OBJ_DIR=$(BUILD_ROOT)/$(CXX_DIR) + # for "make clean" only GENERATED_JAVA=\ @@ -60,35 +69,34 @@ GENERATED_JAVA=\ # files to compile which will be be generated GENERATED_CC=\ - foundation_pEp_jniadapter_Engine.cc \ - foundation_pEp_jniadapter_Message.cc \ - throw_pEp_exception.cc + $(CXX_DIR)/foundation_pEp_jniadapter_Engine.cc \ + $(CXX_DIR)/foundation_pEp_jniadapter_Message.cc \ + $(CXX_DIR)/throw_pEp_exception.cc # for "make clean" only GENERATED_HH=\ - throw_pEp_exception.hh + $(CXX_DIR)/throw_pEp_exception.hh # Generated JNI headers (javac -h) JNI_GENERATED_HH=\ - foundation_pEp_jniadapter_AbstractEngine.h \ - foundation_pEp_jniadapter__Blob.h \ - foundation_pEp_jniadapter_Engine.h \ - foundation_pEp_jniadapter_Identity.h \ - foundation_pEp_jniadapter_Message.h - -# Derive Java sources that will cause generated headers (for incremental build) -helper=$(subst _,/,$(JNI_GENERATED_HH)) -JNI_GENERATING_JAVA=$(subst .h,.java,$(helper)) + $(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 *.cc) +SOURCES=$(wildcard $(CXX_DIR)/*.cc) SOURCES+=$(GENERATED_CC) tmp=$(SOURCES:.cc=.o) -OBJECTS=$(addprefix $(OBJ_DIR), $(tmp)) +OBJECTS=$(addprefix $(BUILD_ROOT), $(tmp)) DEPENDS=$(OBJECTS:.o=.d) +-include $(DEPENDS) +VPATH = $(CXX_DIR)/ + .PHONY: all lib-java lib-cxx compile-java compile-cxx gen-jni-headers codegen clean create-dirs remove-dirs install uninstall $(info SOURCES: $(SOURCES)) @@ -105,13 +113,13 @@ lib-cxx: $(LIB_CXX_DYN) $(LIB_CXX_STATIC) # ---------------- Link ----------------- $(LIB_JAVA): compile-java - $(JAVA_BIN_DIR)/jar cf $(DIST_DIR)/$@ -C $(JAVA_BUILD_ROOT) foundation + $(JAVA_BIN_DIR)/jar cf $@ -C $(JAVA_BUILD_ROOT) foundation $(LIB_CXX_DYN): compile-cxx - $(CXX) $(OBJ_DIR)*.o $(LDFLAGS) $(LDLIBS) -o $(DIST_DIR)/$@ + $(CXX) $(OBJ_DIR)*.o $(LDFLAGS) $(LDLIBS) -o $@ $(LIB_CXX_STATIC): compile-cxx - $(AR) -r $(DIST_DIR)/$@ $(OBJ_DIR)*.o + $(AR) -r $@ $(OBJ_DIR)*.o # -------------- Compile ----------------- @@ -123,20 +131,18 @@ compile-java: create-dirs codegen compile-cxx: create-dirs gen-jni-headers $(OBJECTS) -$(OBJECTS): $(OBJ_DIR)%.o: %.cc +$(OBJECTS): $(BUILD_ROOT)%.o: %.cc $(CXX) $(CXXFLAGS) -c $< -o $@ --include $(DEPENDS) - # --------- Generate JNI headers ---------- gen-jni-headers: codegen $(JNI_GENERATED_HH) -$(JNI_GENERATED_HH): $(JNI_GENERATING_JAVA) +$(JNI_GENERATED_HH): ifdef OLD_JAVA $(JAVA_BIN_DIR)/javah -d $(JAVA_BUILD_ROOT) $(subst /,.,$(subst .java,,$<)) else - $(JAVA_BIN_DIR)/javac -d $(JAVA_BUILD_ROOT) -h . $(JAVA_PKG_ROOT)/*.java + $(JAVA_BIN_DIR)/javac -d $(JAVA_BUILD_ROOT) -h $(CXX_DIR)/ $(JAVA_PKG_ROOT)/*.java endif @@ -169,12 +175,12 @@ clean: remove-dirs install: $(LIB_JAVA) $(LIB_CXX_STATIC) $(LIB_CXX_DYN) mkdir -p $(PREFIX)/lib - cp -v $(DIST_DIR)/$(LIB_JAVA) $(PREFIX)/lib/ - cp -v $(DIST_DIR)/$(LIB_CXX_STATIC) $(PREFIX)/lib/ - cp -v $(DIST_DIR)/$(LIB_CXX_DYN) $(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) - cd $(PREFIX)/lib && rm -vf $(LIB_CXX_STATIC) - cd $(PREFIX)/lib && rm -vf $(LIB_CXX_DYN) + 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) diff --git a/src/codegen/Makefile b/src/codegen/Makefile index 2f6fb48..907426c 100644 --- a/src/codegen/Makefile +++ b/src/codegen/Makefile @@ -7,7 +7,7 @@ include ../../Makefile.conf MARKER_DIR=../../build/marker/ -PEP_HEADER:=$(shell $(CXX) $(CXXFLAGS) -E -M ../get_header.cc | grep -oe '[^[:space:]]*pEpEngine\.h' | head -1) +PEP_HEADER:=$(shell $(CXX) $(CXXFLAGS) -E -M ../cxx/get_header.cc | grep -oe '[^[:space:]]*pEpEngine\.h' | head -1) # Every ysl2 file that need to be "compiled" separately, needs to generate a "marker" file # The marker serves as the make target. diff --git a/src/codegen/gen_cpp_Engine.ysl2 b/src/codegen/gen_cpp_Engine.ysl2 index 994fed3..66998ee 100644 --- a/src/codegen/gen_cpp_Engine.ysl2 +++ b/src/codegen/gen_cpp_Engine.ysl2 @@ -10,7 +10,7 @@ tstylesheet { 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 #include diff --git a/src/codegen/gen_cpp_Message.ysl2 b/src/codegen/gen_cpp_Message.ysl2 index 6aeea12..10672ef 100644 --- a/src/codegen/gen_cpp_Message.ysl2 +++ b/src/codegen/gen_cpp_Message.ysl2 @@ -13,7 +13,7 @@ tstylesheet { template "struct" { const "jname" call "CamelCase" with "text", "@name"; - document("../foundation_pEp_jniadapter_{$jname}.cc", "text") { + document("../cxx/foundation_pEp_jniadapter_{$jname}.cc", "text") { || #include #include diff --git a/src/codegen/gen_throw_pEp_exception.ysl2 b/src/codegen/gen_throw_pEp_exception.ysl2 index 7371e01..2314521 100644 --- a/src/codegen/gen_throw_pEp_exception.ysl2 +++ b/src/codegen/gen_throw_pEp_exception.ysl2 @@ -5,7 +5,7 @@ tstylesheet { template "/" { apply "namespace", 0; - document "../throw_pEp_exception.hh", "text" + document "../cxx/throw_pEp_exception.hh", "text" || #pragma once @@ -22,7 +22,7 @@ tstylesheet { } template "namespace" - document("../throw_pEp_exception.cc", "text") + document("../cxx/throw_pEp_exception.cc", "text") || #include #include diff --git a/src/basic_api.cc b/src/cxx/basic_api.cc similarity index 100% rename from src/basic_api.cc rename to src/cxx/basic_api.cc diff --git a/src/foundation_pEp_jniadapter_AbstractEngine.cc b/src/cxx/foundation_pEp_jniadapter_AbstractEngine.cc similarity index 100% rename from src/foundation_pEp_jniadapter_AbstractEngine.cc rename to src/cxx/foundation_pEp_jniadapter_AbstractEngine.cc diff --git a/src/foundation_pEp_jniadapter__Blob.cc b/src/cxx/foundation_pEp_jniadapter__Blob.cc similarity index 100% rename from src/foundation_pEp_jniadapter__Blob.cc rename to src/cxx/foundation_pEp_jniadapter__Blob.cc diff --git a/src/get_header.cc b/src/cxx/get_header.cc similarity index 100% rename from src/get_header.cc rename to src/cxx/get_header.cc diff --git a/src/identity_api.cc b/src/cxx/identity_api.cc similarity index 100% rename from src/identity_api.cc rename to src/cxx/identity_api.cc diff --git a/src/jniutils.cc b/src/cxx/jniutils.cc similarity index 100% rename from src/jniutils.cc rename to src/cxx/jniutils.cc diff --git a/src/jniutils.hh b/src/cxx/jniutils.hh similarity index 100% rename from src/jniutils.hh rename to src/cxx/jniutils.hh From e22afe2c2c0b1a12df6e73f0b32bbd4bbbb7e0c3 Mon Sep 17 00:00:00 2001 From: heck Date: Fri, 3 Jul 2020 19:57:07 +0200 Subject: [PATCH 29/94] Moved all java sources under src/java --- src/Makefile | 20 ++++++++++--------- src/codegen/gen_java_Engine.ysl2 | 4 ++-- src/codegen/gen_java_Message.ysl2 | 8 ++++---- .../pEp/jniadapter/AbstractEngine.java | 0 .../foundation/pEp/jniadapter/Blob.java | 0 .../foundation/pEp/jniadapter/CommType.java | 0 .../foundation/pEp/jniadapter/Identity.java | 0 .../foundation/pEp/jniadapter/Pair.java | 0 .../foundation/pEp/jniadapter/Sync.java | 0 .../pEp/jniadapter/UniquelyIdentifiable.java | 0 .../foundation/pEp/jniadapter/Utils.java | 0 .../foundation/pEp/jniadapter/_Blob.java | 0 .../foundation/pEp/jniadapter/_Identity.java | 0 .../jniadapter/decrypt_message_Return.java | 0 .../interfaces/AbstractEngineInterface.java | 0 .../jniadapter/interfaces/BlobInterface.java | 0 .../interfaces/IdentityInterface.java | 0 17 files changed, 17 insertions(+), 15 deletions(-) rename src/{ => java}/foundation/pEp/jniadapter/AbstractEngine.java (100%) rename src/{ => java}/foundation/pEp/jniadapter/Blob.java (100%) rename src/{ => java}/foundation/pEp/jniadapter/CommType.java (100%) rename src/{ => java}/foundation/pEp/jniadapter/Identity.java (100%) rename src/{ => java}/foundation/pEp/jniadapter/Pair.java (100%) rename src/{ => java}/foundation/pEp/jniadapter/Sync.java (100%) rename src/{ => java}/foundation/pEp/jniadapter/UniquelyIdentifiable.java (100%) rename src/{ => java}/foundation/pEp/jniadapter/Utils.java (100%) rename src/{ => java}/foundation/pEp/jniadapter/_Blob.java (100%) rename src/{ => java}/foundation/pEp/jniadapter/_Identity.java (100%) rename src/{ => java}/foundation/pEp/jniadapter/decrypt_message_Return.java (100%) rename src/{ => java}/foundation/pEp/jniadapter/interfaces/AbstractEngineInterface.java (100%) rename src/{ => java}/foundation/pEp/jniadapter/interfaces/BlobInterface.java (100%) rename src/{ => java}/foundation/pEp/jniadapter/interfaces/IdentityInterface.java (100%) diff --git a/src/Makefile b/src/Makefile index 9e7af01..9f479e6 100644 --- a/src/Makefile +++ b/src/Makefile @@ -47,9 +47,11 @@ $(info ---------------------------------------------------) # relative to "src/" BUILD_ROOT=../build/ CXX_DIR=cxx/ +JAVA_DIR=java/ +JAVA_PKG_BASENAME=foundation/pEp/jniadapter/ -JAVA_PKG_ROOT=foundation/pEp/jniadapter/ -JAVA_BUILD_ROOT=$(BUILD_ROOT)/java/ +JAVA_PKG_ROOT=$(JAVA_DIR)/$(JAVA_PKG_BASENAME) +JAVA_BUILD_ROOT=$(BUILD_ROOT)/$(JAVA_DIR) OBJ_DIR=$(BUILD_ROOT)/$(CXX_DIR) @@ -124,9 +126,9 @@ $(LIB_CXX_STATIC): compile-cxx # -------------- Compile ----------------- compile-java: create-dirs codegen - $(JAVA_BIN_DIR)/javac -d $(JAVA_BUILD_ROOT) $(JAVA_PKG_ROOT)/*.java - $(JAVA_BIN_DIR)/javac -d $(JAVA_BUILD_ROOT) $(JAVA_PKG_ROOT)/exceptions/*.java - $(JAVA_BIN_DIR)/javac -d $(JAVA_BUILD_ROOT) $(JAVA_PKG_ROOT)/interfaces/*.java + 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 + cd $(JAVA_DIR);$(JAVA_BIN_DIR)/javac -d ../$(JAVA_BUILD_ROOT) $(JAVA_PKG_BASENAME)/interfaces/*.java compile-cxx: create-dirs gen-jni-headers $(OBJECTS) @@ -140,9 +142,9 @@ gen-jni-headers: codegen $(JNI_GENERATED_HH) $(JNI_GENERATED_HH): ifdef OLD_JAVA - $(JAVA_BIN_DIR)/javah -d $(JAVA_BUILD_ROOT) $(subst /,.,$(subst .java,,$<)) + cd $(JAVA_DIR);$(JAVA_BIN_DIR)/javah -d ../$(JAVA_BUILD_ROOT) $(subst /,.,$(subst .java,,$<)) else - $(JAVA_BIN_DIR)/javac -d $(JAVA_BUILD_ROOT) -h $(CXX_DIR)/ $(JAVA_PKG_ROOT)/*.java + cd $(JAVA_DIR);$(JAVA_BIN_DIR)/javac -d ../$(JAVA_BUILD_ROOT) -h ../$(CXX_DIR)/ $(JAVA_PKG_BASENAME)/*.java endif @@ -153,8 +155,8 @@ codegen: # ------------- Housekeeping --------------- create-dirs: $(MAKE) -C codegen create-dirs - mkdir -p $(JAVA_BUILD_ROOT)/$(JAVA_PKG_ROOT) - mkdir -p $(JAVA_BUILD_ROOT)/$(JAVA_PKG_ROOT)/exceptions + 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) diff --git a/src/codegen/gen_java_Engine.ysl2 b/src/codegen/gen_java_Engine.ysl2 index 4402599..1c011d6 100644 --- a/src/codegen/gen_java_Engine.ysl2 +++ b/src/codegen/gen_java_Engine.ysl2 @@ -11,7 +11,7 @@ tstylesheet { template "interface" { 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; @@ -27,7 +27,7 @@ tstylesheet { } || - document("../foundation/pEp/jniadapter/interfaces/{$cname}Interface.java", "text") + document("../java/foundation/pEp/jniadapter/interfaces/{$cname}Interface.java", "text") || package foundation.pEp.jniadapter.interfaces; diff --git a/src/codegen/gen_java_Message.ysl2 b/src/codegen/gen_java_Message.ysl2 index 651da83..04224e1 100644 --- a/src/codegen/gen_java_Message.ysl2 +++ b/src/codegen/gen_java_Message.ysl2 @@ -11,7 +11,7 @@ tstylesheet { template "struct" { 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; @@ -65,7 +65,7 @@ tstylesheet { `` apply "*[name(.)!='enum']", mode=entry } || - document("../foundation/pEp/jniadapter/interfaces/{$cname}Interface.java", "text") + document("../java/foundation/pEp/jniadapter/interfaces/{$cname}Interface.java", "text") || package foundation.pEp.jniadapter.interfaces; @@ -85,7 +85,7 @@ tstylesheet { template "enum" { const "jname" call "toJava" with "type", "@name"; - document("../foundation/pEp/jniadapter/{$jname}.java", "text") + document("../java/foundation/pEp/jniadapter/{$jname}.java", "text") || // CodeGen template enum package foundation.pEp.jniadapter; @@ -133,7 +133,7 @@ tstylesheet { function "exception" { param "name"; - document "../foundation/pEp/jniadapter/exceptions/{$name}.java", "text" { + document "../java/foundation/pEp/jniadapter/exceptions/{$name}.java", "text" { | package foundation.pEp.jniadapter.exceptions; | | public class «$name» extends pEpException { diff --git a/src/foundation/pEp/jniadapter/AbstractEngine.java b/src/java/foundation/pEp/jniadapter/AbstractEngine.java similarity index 100% rename from src/foundation/pEp/jniadapter/AbstractEngine.java rename to src/java/foundation/pEp/jniadapter/AbstractEngine.java diff --git a/src/foundation/pEp/jniadapter/Blob.java b/src/java/foundation/pEp/jniadapter/Blob.java similarity index 100% rename from src/foundation/pEp/jniadapter/Blob.java rename to src/java/foundation/pEp/jniadapter/Blob.java diff --git a/src/foundation/pEp/jniadapter/CommType.java b/src/java/foundation/pEp/jniadapter/CommType.java similarity index 100% rename from src/foundation/pEp/jniadapter/CommType.java rename to src/java/foundation/pEp/jniadapter/CommType.java diff --git a/src/foundation/pEp/jniadapter/Identity.java b/src/java/foundation/pEp/jniadapter/Identity.java similarity index 100% rename from src/foundation/pEp/jniadapter/Identity.java rename to src/java/foundation/pEp/jniadapter/Identity.java diff --git a/src/foundation/pEp/jniadapter/Pair.java b/src/java/foundation/pEp/jniadapter/Pair.java similarity index 100% rename from src/foundation/pEp/jniadapter/Pair.java rename to src/java/foundation/pEp/jniadapter/Pair.java diff --git a/src/foundation/pEp/jniadapter/Sync.java b/src/java/foundation/pEp/jniadapter/Sync.java similarity index 100% rename from src/foundation/pEp/jniadapter/Sync.java rename to src/java/foundation/pEp/jniadapter/Sync.java diff --git a/src/foundation/pEp/jniadapter/UniquelyIdentifiable.java b/src/java/foundation/pEp/jniadapter/UniquelyIdentifiable.java similarity index 100% rename from src/foundation/pEp/jniadapter/UniquelyIdentifiable.java rename to src/java/foundation/pEp/jniadapter/UniquelyIdentifiable.java diff --git a/src/foundation/pEp/jniadapter/Utils.java b/src/java/foundation/pEp/jniadapter/Utils.java similarity index 100% rename from src/foundation/pEp/jniadapter/Utils.java rename to src/java/foundation/pEp/jniadapter/Utils.java diff --git a/src/foundation/pEp/jniadapter/_Blob.java b/src/java/foundation/pEp/jniadapter/_Blob.java similarity index 100% rename from src/foundation/pEp/jniadapter/_Blob.java rename to src/java/foundation/pEp/jniadapter/_Blob.java diff --git a/src/foundation/pEp/jniadapter/_Identity.java b/src/java/foundation/pEp/jniadapter/_Identity.java similarity index 100% rename from src/foundation/pEp/jniadapter/_Identity.java rename to src/java/foundation/pEp/jniadapter/_Identity.java diff --git a/src/foundation/pEp/jniadapter/decrypt_message_Return.java b/src/java/foundation/pEp/jniadapter/decrypt_message_Return.java similarity index 100% rename from src/foundation/pEp/jniadapter/decrypt_message_Return.java rename to src/java/foundation/pEp/jniadapter/decrypt_message_Return.java diff --git a/src/foundation/pEp/jniadapter/interfaces/AbstractEngineInterface.java b/src/java/foundation/pEp/jniadapter/interfaces/AbstractEngineInterface.java similarity index 100% rename from src/foundation/pEp/jniadapter/interfaces/AbstractEngineInterface.java rename to src/java/foundation/pEp/jniadapter/interfaces/AbstractEngineInterface.java diff --git a/src/foundation/pEp/jniadapter/interfaces/BlobInterface.java b/src/java/foundation/pEp/jniadapter/interfaces/BlobInterface.java similarity index 100% rename from src/foundation/pEp/jniadapter/interfaces/BlobInterface.java rename to src/java/foundation/pEp/jniadapter/interfaces/BlobInterface.java diff --git a/src/foundation/pEp/jniadapter/interfaces/IdentityInterface.java b/src/java/foundation/pEp/jniadapter/interfaces/IdentityInterface.java similarity index 100% rename from src/foundation/pEp/jniadapter/interfaces/IdentityInterface.java rename to src/java/foundation/pEp/jniadapter/interfaces/IdentityInterface.java From b8b52978f05bd02a7826dd5ebebdd297ab746859 Mon Sep 17 00:00:00 2001 From: heck Date: Thu, 9 Jul 2020 00:37:14 +0200 Subject: [PATCH 30/94] add new public method to AbstractEngineInterface "public void setPassphraseRequiredCallback(Sync.PassphraseRequiredCallback passphraseRequiredCallback);" --- .../pEp/jniadapter/interfaces/AbstractEngineInterface.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/java/foundation/pEp/jniadapter/interfaces/AbstractEngineInterface.java b/src/java/foundation/pEp/jniadapter/interfaces/AbstractEngineInterface.java index 9e3630f..cdfca76 100644 --- a/src/java/foundation/pEp/jniadapter/interfaces/AbstractEngineInterface.java +++ b/src/java/foundation/pEp/jniadapter/interfaces/AbstractEngineInterface.java @@ -24,5 +24,7 @@ public interface AbstractEngineInterface { public void setNeedsFastPollCallback(Sync.NeedsFastPollCallback needsFastPollCallback); + public void setPassphraseRequiredCallback(Sync.PassphraseRequiredCallback passphraseRequiredCallback); + public Message incomingMessageFromPGPText(String pgpText, Message.EncFormat encFormat); } From de22d6aad3ee76ad32378d15d7a43714b6c357ae Mon Sep 17 00:00:00 2001 From: heck Date: Thu, 30 Jul 2020 01:15:08 +0200 Subject: [PATCH 31/94] Generate all Exceptions fixed --- .hgignore | 2 +- src/Makefile | 4 +++- src/codegen/Makefile | 4 ++-- src/codegen/gen_java_Message.ysl2 | 11 +++++++++++ 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/.hgignore b/.hgignore index 3fadd4c..1364052 100644 --- a/.hgignore +++ b/.hgignore @@ -21,6 +21,7 @@ foundation_pEp_jniadapter_Engine.* foundation_pEp_jniadapter_Message.* foundation_pEp_jniadapter_Identity.h throw_pEp_exception.* +src/java/foundation/pEp/jniadapter/exceptions/*.java CipherSuite.java Color.java @@ -30,7 +31,6 @@ EngineInterface.java IdentityFlags.java Message.java MessageInterface.java -pEp*.java Rating.java Status.java SyncHandshakeResult.java diff --git a/src/Makefile b/src/Makefile index 9f479e6..bba68cc 100644 --- a/src/Makefile +++ b/src/Makefile @@ -67,7 +67,8 @@ GENERATED_JAVA=\ $(JAVA_PKG_ROOT)/SyncHandshakeResult.java \ $(JAVA_PKG_ROOT)/SyncHandshakeSignal.java \ $(JAVA_PKG_ROOT)/interfaces/EngineInterface.java \ - $(JAVA_PKG_ROOT)/interfaces/MessageInterface.java + $(JAVA_PKG_ROOT)/interfaces/MessageInterface.java \ + $(JAVA_PKG_ROOT)/exceptions/*.java # files to compile which will be be generated GENERATED_CC=\ @@ -159,6 +160,7 @@ create-dirs: 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: diff --git a/src/codegen/Makefile b/src/codegen/Makefile index 907426c..16ca8bd 100644 --- a/src/codegen/Makefile +++ b/src/codegen/Makefile @@ -9,9 +9,9 @@ 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 need to be "compiled" separately, needs to generate a "marker" file +# 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" +# 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= \ diff --git a/src/codegen/gen_java_Message.ysl2 b/src/codegen/gen_java_Message.ysl2 index 04224e1..7007f6f 100644 --- a/src/codegen/gen_java_Message.ysl2 +++ b/src/codegen/gen_java_Message.ysl2 @@ -6,6 +6,17 @@ tstylesheet { 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") > "" } From 1db1aead612f1ac5539782341428df5587341f34 Mon Sep 17 00:00:00 2001 From: heck Date: Thu, 30 Jul 2020 01:29:40 +0200 Subject: [PATCH 32/94] move the new .hh files to new src/cxx/ --- src/cxx/passphrase_callback.hh | 8 +++++++- src/{ => cxx}/passphrase_callback.hxx | 0 2 files changed, 7 insertions(+), 1 deletion(-) rename src/{ => cxx}/passphrase_callback.hxx (100%) diff --git a/src/cxx/passphrase_callback.hh b/src/cxx/passphrase_callback.hh index 357b2c6..8482077 100644 --- a/src/cxx/passphrase_callback.hh +++ b/src/cxx/passphrase_callback.hh @@ -1,3 +1,5 @@ +#pragma once +#include namespace pEp { @@ -5,5 +7,9 @@ namespace pEp { char* passphraseRequiredCallback(); + template PEP_STATUS passphraseWrap( + PEP_STATUS f(PEP_SESSION, A...), PEP_SESSION session, A... a); }; -}; \ No newline at end of file +}; + +#include "passphrase_callback.hxx" \ No newline at end of file diff --git a/src/passphrase_callback.hxx b/src/cxx/passphrase_callback.hxx similarity index 100% rename from src/passphrase_callback.hxx rename to src/cxx/passphrase_callback.hxx From 476011d7744f8f19e425e6e50f61f92f958cd326 Mon Sep 17 00:00:00 2001 From: heck Date: Tue, 18 Aug 2020 21:57:06 +0200 Subject: [PATCH 34/94] use passphraseWrap() in CodeGen template too. --- ...oundation_pEp_jniadapter_AbstractEngine.cc | 1 - src/gen_cpp_Engine.ysl2 | 30 ++----------------- 2 files changed, 2 insertions(+), 29 deletions(-) diff --git a/src/foundation_pEp_jniadapter_AbstractEngine.cc b/src/foundation_pEp_jniadapter_AbstractEngine.cc index e5714ba..624b233 100644 --- a/src/foundation_pEp_jniadapter_AbstractEngine.cc +++ b/src/foundation_pEp_jniadapter_AbstractEngine.cc @@ -3,7 +3,6 @@ #include #include #include -#include #include #include #include diff --git a/src/gen_cpp_Engine.ysl2 b/src/gen_cpp_Engine.ysl2 index d4e2e90..466e0db 100644 --- a/src/gen_cpp_Engine.ysl2 +++ b/src/gen_cpp_Engine.ysl2 @@ -9,6 +9,7 @@ tstylesheet { template "interface" document("foundation_pEp_jniadapter_{@name}.cc", "text") || + #include #include #include #include @@ -70,34 +71,7 @@ tstylesheet { choose { when "@cached = 'true'" { || - pEpLog("cached passphrase mode"); - bool retryAgain = false; - int maxRetries = 3; - int retryCount = 0; - PEP_STATUS status; - do { - // the actual target function - pEpLog("calling passphrase_cache.api(::«@name»())"); - status = passphrase_cache.api(::«@name»,session()`apply "parm", mode=call`); - pEpLog("PEP_STATUS:" << status); - if(status == PEP_PASSPHRASE_REQUIRED || status == PEP_WRONG_PASSPHRASE || status == PEP_PASSPHRASE_FOR_NEW_KEYS_REQUIRED) { - pEpLog("none of the cached passphrases worked"); - if(retryCount < maxRetries) { - // call the app - char* _passphrase = passphraseRequiredCallback(status); - pEpLog("callback returned, config_passphrase() with new passphrase"); - PEP_STATUS status = ::config_passphrase(session(),passphrase_cache.add(_passphrase)); - retryAgain = true; - retryCount++; - } else { - pEpLog("max retries reached:" << maxRetries); - retryAgain = false; - } - } else { - retryAgain = false; - } - } while (retryAgain); - + PEP_STATUS status = passphraseWrap(::«@name», session()`apply "parm", mode=call`); || } otherwise { || From c1fc4fb5cae3f2930ebf7a42e884b370d91bb61f Mon Sep 17 00:00:00 2001 From: Hussein Kasem Date: Wed, 26 Aug 2020 12:35:50 +0200 Subject: [PATCH 35/94] JNI-106 Android build: update to use current Makefile and api. --- android/build.gradle | 2 +- android/jni/Android.mk | 16 ++++++++-------- .../foundation/pEp/jniadapter/AndroidHelper.java | 2 ++ 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index f058512..c5f0960 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -94,7 +94,7 @@ android { // call source generation makefile target task genSources(type:Exec, dependsOn: 'genpEpEngineAsn1Sources') { workingDir '../src' - commandLine 'make', "-j${threadsToUse}", 'pEp.jar' + commandLine 'make', "-j${threadsToUse}", 'lib-java' } task genpEpEngineSyncSources(type:Exec) { diff --git a/android/jni/Android.mk b/android/jni/Android.mk index 24a635b..abc0209 100644 --- a/android/jni/Android.mk +++ b/android/jni/Android.mk @@ -47,14 +47,14 @@ LOCAL_STATIC_LIBRARIES := pEpEngine libetpan libiconv libuuid pEpAdapter libsequ LOCAL_CPP_FEATURES += exceptions LOCAL_CPPFLAGS += -std=c++11 -DANDROID_STL=c++_shared -DHAVE_PTHREADS -DDISABLE_SYNC -fuse-ld=lld LOCAL_SRC_FILES := \ - ../../src/foundation_pEp_jniadapter_AbstractEngine.cc \ - ../../src/foundation_pEp_jniadapter_Engine.cc \ - ../../src/foundation_pEp_jniadapter_Message.cc \ - ../../src/foundation_pEp_jniadapter__Blob.cc \ - ../../src/throw_pEp_exception.cc \ - ../../src/basic_api.cc \ - ../../src/identity_api.cc \ - ../../src/jniutils.cc + ../../src/cxx/foundation_pEp_jniadapter_AbstractEngine.cc \ + ../../src/cxx/foundation_pEp_jniadapter_Engine.cc \ + ../../src/cxx/foundation_pEp_jniadapter_Message.cc \ + ../../src/cxx/foundation_pEp_jniadapter__Blob.cc \ + ../../src/cxx/throw_pEp_exception.cc \ + ../../src/cxx/basic_api.cc \ + ../../src/cxx/identity_api.cc \ + ../../src/cxx/jniutils.cc LOCAL_C_INCLUDES += $(GPGBUILD)/$(TARGET_ARCH_ABI)/include LOCAL_C_INCLUDES += $(LIB_PEP_ADAPTER_PATH)/build-android/include $(SRC_PATH)/libpEpAdapter diff --git a/android/src/foundation/pEp/jniadapter/AndroidHelper.java b/android/src/foundation/pEp/jniadapter/AndroidHelper.java index f9e71b8..eaa52b0 100644 --- a/android/src/foundation/pEp/jniadapter/AndroidHelper.java +++ b/android/src/foundation/pEp/jniadapter/AndroidHelper.java @@ -10,6 +10,8 @@ import java.io.*; import java.lang.reflect.Method; import java.util.Scanner; +import foundation.pEp.jniadapter.exceptions.pEpException; + public class AndroidHelper { static { System.loadLibrary("pEpJNIAndroidHelper"); From 1f95274051332d33c0e000b6a51ae7623f017a5d Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 26 Aug 2020 23:15:26 +0200 Subject: [PATCH 36/94] remove stale file from merge --- src/passphrase_callback.hh | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 src/passphrase_callback.hh diff --git a/src/passphrase_callback.hh b/src/passphrase_callback.hh deleted file mode 100644 index e0f9804..0000000 --- a/src/passphrase_callback.hh +++ /dev/null @@ -1,14 +0,0 @@ -#pragma once -#include - - -namespace pEp { - namespace JNIAdapter { - - char* passphraseRequiredCallback(const PEP_STATUS status); - - template PEP_STATUS passphraseWrap(PEP_STATUS f(PEP_SESSION, A...), PEP_SESSION session, A... a); - } -} - -#include "passphrase_callback.hxx" \ No newline at end of file From 432bb50dc5c39366706f28d7876406728dd3cb9f Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 26 Aug 2020 23:47:02 +0200 Subject: [PATCH 37/94] sensible build defaults --- Makefile.conf | 6 +++--- local.conf.example | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Makefile.conf b/Makefile.conf index cc24c6f..2166eac 100644 --- a/Makefile.conf +++ b/Makefile.conf @@ -9,9 +9,9 @@ PLATFORM:=$(shell uname | tr A-Z a-z) # DEV ENV PATHS & CFG # The dev environment paths and configs are set to a default value which can be overridden by ./local.conf and overridden again by /local.conf ######### Build Config Defaults ######### -DEBUG=1 -PREFIX=$(HOME)/local -YML2_PATH=$(HOME)/yml2 +DEBUG=0 +PREFIX=$(HOME) +YML2_PATH=$(PREFIX)/src/yml2 YML2_PROC=$(YML2_PATH)/yml2proc $(YML2_OPTS) YML2_OPTS=--encoding=utf8 ENGINE_LIB_PATH=$(PREFIX)/lib diff --git a/local.conf.example b/local.conf.example index d550ae5..310de4b 100644 --- a/local.conf.example +++ b/local.conf.example @@ -5,7 +5,7 @@ # These example values here reflect the defaults ############ Install ########### -# PREFIX=$(HOME)/local +# PREFIX=$(HOME) ######### C++ Compiler ######### # Should work with clang and g++ @@ -16,7 +16,7 @@ # JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home ############ YML2 ############## -# YML2_PATH=$(HOME)/code/yml2 +# YML2_PATH=$(HOME)/src/yml2 ########### Engine ############# # ENGINE_LIB_PATH=$(PREFIX)/lib From 9a2c6d9bd2e11440f4e9f53a0da91476e66ed2af Mon Sep 17 00:00:00 2001 From: heck Date: Thu, 27 Aug 2020 11:54:35 +0200 Subject: [PATCH 38/94] move AutoCloseable to top level interface AbstractEngineInterface --- src/java/foundation/pEp/jniadapter/AbstractEngine.java | 2 +- .../pEp/jniadapter/interfaces/AbstractEngineInterface.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/java/foundation/pEp/jniadapter/AbstractEngine.java b/src/java/foundation/pEp/jniadapter/AbstractEngine.java index 1b18fca..b7aba8b 100644 --- a/src/java/foundation/pEp/jniadapter/AbstractEngine.java +++ b/src/java/foundation/pEp/jniadapter/AbstractEngine.java @@ -8,7 +8,7 @@ import foundation.pEp.jniadapter.interfaces.*; import foundation.pEp.jniadapter.exceptions.*; -abstract class AbstractEngine extends UniquelyIdentifiable implements AbstractEngineInterface, AutoCloseable { +abstract class AbstractEngine extends UniquelyIdentifiable implements AbstractEngineInterface { static { System.loadLibrary("pEpJNI"); } diff --git a/src/java/foundation/pEp/jniadapter/interfaces/AbstractEngineInterface.java b/src/java/foundation/pEp/jniadapter/interfaces/AbstractEngineInterface.java index cdfca76..63fb399 100644 --- a/src/java/foundation/pEp/jniadapter/interfaces/AbstractEngineInterface.java +++ b/src/java/foundation/pEp/jniadapter/interfaces/AbstractEngineInterface.java @@ -3,7 +3,7 @@ package foundation.pEp.jniadapter.interfaces; import foundation.pEp.jniadapter.Message; import foundation.pEp.jniadapter.Sync; -public interface AbstractEngineInterface { +public interface AbstractEngineInterface extends AutoCloseable { public String getVersion(); public String getProtocolVersion(); From 242bdb073c234009b27249e51be33b426d1eb5da Mon Sep 17 00:00:00 2001 From: heck Date: Mon, 7 Sep 2020 18:40:18 +0200 Subject: [PATCH 40/94] And suddenly my linux box javac needs "-encoding UTF-8", well, cant hurtbeing explicit about that in general. --- Makefile.conf | 2 ++ src/Makefile | 10 +++++----- .../java/foundation/pEp/jniadapter/test/basic/Makefile | 2 +- .../foundation/pEp/jniadapter/test/jni100/Makefile | 2 +- .../foundation/pEp/jniadapter/test/jni111/Makefile | 2 +- .../foundation/pEp/jniadapter/test/jni114/Makefile | 2 +- .../foundation/pEp/jniadapter/test/jni115/Makefile | 2 +- .../java/foundation/pEp/jniadapter/test/jni88/Makefile | 2 +- .../java/foundation/pEp/jniadapter/test/jni91/Makefile | 2 +- .../java/foundation/pEp/jniadapter/test/jni92/Makefile | 2 +- .../java/foundation/pEp/jniadapter/test/jni94/Makefile | 2 +- .../java/foundation/pEp/jniadapter/test/jni96/Makefile | 2 +- .../java/foundation/pEp/jniadapter/test/jni98/Makefile | 2 +- .../foundation/pEp/jniadapter/test/regression/Makefile | 2 +- .../foundation/pEp/jniadapter/test/speedtest/Makefile | 2 +- .../pEp/jniadapter/test/templateAlice/Makefile | 2 +- .../pEp/jniadapter/test/templateAliceBob/Makefile | 2 +- .../pEp/jniadapter/test/templateAliceBobCarol/Makefile | 2 +- test/java/foundation/pEp/pitytest/Makefile | 2 +- 19 files changed, 24 insertions(+), 22 deletions(-) diff --git a/Makefile.conf b/Makefile.conf index 2166eac..02e0872 100644 --- a/Makefile.conf +++ b/Makefile.conf @@ -31,6 +31,8 @@ ifeq ($(.SHELLSTATUS),0) OLD_JAVA=true endif +JAVAC_CMD=javac -encoding UTF-8 + ######### Overrides from the config file(s) ######### ifneq ("$(wildcard $(HERE)local.conf)","") $(info including: $(HERE)local.conf) diff --git a/src/Makefile b/src/Makefile index 325fee2..08dc37b 100644 --- a/src/Makefile +++ b/src/Makefile @@ -81,7 +81,7 @@ GENERATED_CC=\ GENERATED_HH=\ $(CXX_DIR)/throw_pEp_exception.hh -# Generated JNI headers (javac -h) +# Generated JNI headers JNI_GENERATED_HH=\ $(CXX_DIR)/foundation_pEp_jniadapter_AbstractEngine.h \ $(CXX_DIR)/foundation_pEp_jniadapter__Blob.h \ @@ -128,9 +128,9 @@ $(LIB_CXX_STATIC): compile-cxx # -------------- Compile ----------------- compile-java: create-dirs codegen - 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 - cd $(JAVA_DIR);$(JAVA_BIN_DIR)/javac -d ../$(JAVA_BUILD_ROOT) $(JAVA_PKG_BASENAME)/interfaces/*.java + cd $(JAVA_DIR);$(JAVA_BIN_DIR)/$(JAVAC_CMD) -d ../$(JAVA_BUILD_ROOT) $(JAVA_PKG_BASENAME)/*.java + cd $(JAVA_DIR);$(JAVA_BIN_DIR)/$(JAVAC_CMD) -d ../$(JAVA_BUILD_ROOT) $(JAVA_PKG_BASENAME)/exceptions/*.java + cd $(JAVA_DIR);$(JAVA_BIN_DIR)/$(JAVAC_CMD) -d ../$(JAVA_BUILD_ROOT) $(JAVA_PKG_BASENAME)/interfaces/*.java compile-cxx: create-dirs gen-jni-headers $(OBJECTS) @@ -146,7 +146,7 @@ $(JNI_GENERATED_HH): ifdef OLD_JAVA cd $(JAVA_DIR);$(JAVA_BIN_DIR)/javah -d ../$(JAVA_BUILD_ROOT) $(subst /,.,$(subst .java,,$<)) else - cd $(JAVA_DIR);$(JAVA_BIN_DIR)/javac -d ../$(JAVA_BUILD_ROOT) -h ../$(CXX_DIR)/ $(JAVA_PKG_BASENAME)/*.java + cd $(JAVA_DIR);$(JAVA_BIN_DIR)/$(JAVAC_CMD) -d ../$(JAVA_BUILD_ROOT) -h ../$(CXX_DIR)/ $(JAVA_PKG_BASENAME)/*.java endif diff --git a/test/java/foundation/pEp/jniadapter/test/basic/Makefile b/test/java/foundation/pEp/jniadapter/test/basic/Makefile index 0b1c12a..1366beb 100644 --- a/test/java/foundation/pEp/jniadapter/test/basic/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/basic/Makefile @@ -23,7 +23,7 @@ run: compile clean-pep-home compile: $(JAVA_CLASSES) pitytest %.class: %.java - cd $(JAVA_CWD);javac -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< + cd $(JAVA_CWD);$(JAVAC_CMD) -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< clean: rm -f $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/jniadapter/test/jni100/Makefile b/test/java/foundation/pEp/jniadapter/test/jni100/Makefile index caec686..abc46e1 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni100/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/jni100/Makefile @@ -22,7 +22,7 @@ run: compile clean-pep-home compile: $(JAVA_CLASSES) pitytest %.class: %.java - cd $(JAVA_CWD);javac -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< + cd $(JAVA_CWD);$(JAVAC_CMD) -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< clean: rm -f $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/jniadapter/test/jni111/Makefile b/test/java/foundation/pEp/jniadapter/test/jni111/Makefile index 542cbb0..c2d0437 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni111/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/jni111/Makefile @@ -22,7 +22,7 @@ alice: compile clean-pep-home-alice compile: $(JAVA_CLASSES) pitytest %.class: %.java - cd $(JAVA_CWD);javac -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< + cd $(JAVA_CWD);$(JAVAC_CMD) -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< clean: rm -f $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/jniadapter/test/jni114/Makefile b/test/java/foundation/pEp/jniadapter/test/jni114/Makefile index 5180dc1..36d6ce8 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni114/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/jni114/Makefile @@ -22,7 +22,7 @@ alice: compile clean-pep-home-alice compile: $(JAVA_CLASSES) pitytest %.class: %.java - cd $(JAVA_CWD);javac -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< + cd $(JAVA_CWD);$(JAVAC_CMD) -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< clean: rm -f $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/jniadapter/test/jni115/Makefile b/test/java/foundation/pEp/jniadapter/test/jni115/Makefile index cbf5351..3ae14c6 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni115/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/jni115/Makefile @@ -22,7 +22,7 @@ alice: compile clean-pep-home-alice compile: $(JAVA_CLASSES) pitytest %.class: %.java - cd $(JAVA_CWD);javac -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< + cd $(JAVA_CWD);$(JAVAC_CMD) -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< clean: rm -f $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/jniadapter/test/jni88/Makefile b/test/java/foundation/pEp/jniadapter/test/jni88/Makefile index 9b8b4bf..5c70341 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni88/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/jni88/Makefile @@ -20,7 +20,7 @@ run: compile clean-pep-home compile: $(JAVA_CLASSES) pitytest %.class: %.java - cd $(JAVA_CWD);javac -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< + cd $(JAVA_CWD);$(JAVAC_CMD) -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< clean: rm -f $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/jniadapter/test/jni91/Makefile b/test/java/foundation/pEp/jniadapter/test/jni91/Makefile index d9a904c..e2f5fb6 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni91/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/jni91/Makefile @@ -20,7 +20,7 @@ run: compile clean-pep-home compile: $(JAVA_CLASSES) pitytest %.class: %.java - cd $(JAVA_CWD);javac -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< + cd $(JAVA_CWD);$(JAVAC_CMD) -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< clean: rm -f $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/jniadapter/test/jni92/Makefile b/test/java/foundation/pEp/jniadapter/test/jni92/Makefile index 290268b..745f3a3 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni92/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/jni92/Makefile @@ -21,7 +21,7 @@ run: compile clean-pep-home compile: $(JAVA_CLASSES) pitytest %.class: %.java - cd $(JAVA_CWD);javac -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< + cd $(JAVA_CWD);$(JAVAC_CMD) -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< clean: rm -f $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/jniadapter/test/jni94/Makefile b/test/java/foundation/pEp/jniadapter/test/jni94/Makefile index 1d3819a..9c7363b 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni94/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/jni94/Makefile @@ -20,7 +20,7 @@ run: compile clean-pep-home compile: $(JAVA_CLASSES) pitytest %.class: %.java - cd $(JAVA_CWD);javac -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< + cd $(JAVA_CWD);$(JAVAC_CMD) -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< clean: rm -f $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/jniadapter/test/jni96/Makefile b/test/java/foundation/pEp/jniadapter/test/jni96/Makefile index 101e87d..14cc8f6 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni96/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/jni96/Makefile @@ -22,7 +22,7 @@ alice: compile clean-pep-home-alice compile: $(JAVA_CLASSES) pitytest %.class: %.java - cd $(JAVA_CWD);javac -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< + cd $(JAVA_CWD);$(JAVAC_CMD) -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< clean: rm -f $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/jniadapter/test/jni98/Makefile b/test/java/foundation/pEp/jniadapter/test/jni98/Makefile index 0243a27..903216b 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni98/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/jni98/Makefile @@ -21,7 +21,7 @@ run: compile clean-pep-home compile: $(JAVA_CLASSES) pitytest %.class: %.java - cd $(JAVA_CWD);javac -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< + cd $(JAVA_CWD);$(JAVAC_CMD) -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< clean: rm -f $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/jniadapter/test/regression/Makefile b/test/java/foundation/pEp/jniadapter/test/regression/Makefile index 2271f45..56226c4 100644 --- a/test/java/foundation/pEp/jniadapter/test/regression/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/regression/Makefile @@ -21,7 +21,7 @@ run: compile clean-pep-home compile: $(JAVA_CLASSES) pitytest %.class: %.java - cd $(JAVA_CWD);javac -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< + cd $(JAVA_CWD);$(JAVAC_CMD) -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< clean: rm -f $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/jniadapter/test/speedtest/Makefile b/test/java/foundation/pEp/jniadapter/test/speedtest/Makefile index 9b9204d..8506bd1 100644 --- a/test/java/foundation/pEp/jniadapter/test/speedtest/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/speedtest/Makefile @@ -23,7 +23,7 @@ alice: compile clean-pep-home-alice compile: $(JAVA_CLASSES) pitytest %.class: %.java - cd $(JAVA_CWD);javac -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< + cd $(JAVA_CWD);$(JAVAC_CMD) -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< clean: rm -f $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/jniadapter/test/templateAlice/Makefile b/test/java/foundation/pEp/jniadapter/test/templateAlice/Makefile index 5a4c801..e0799fa 100644 --- a/test/java/foundation/pEp/jniadapter/test/templateAlice/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/templateAlice/Makefile @@ -22,7 +22,7 @@ alice: compile clean-pep-home-alice compile: $(JAVA_CLASSES) pitytest %.class: %.java - cd $(JAVA_CWD);javac -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< + cd $(JAVA_CWD);$(JAVAC_CMD) -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< clean: rm -f $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/jniadapter/test/templateAliceBob/Makefile b/test/java/foundation/pEp/jniadapter/test/templateAliceBob/Makefile index ceb822f..7cb17b3 100644 --- a/test/java/foundation/pEp/jniadapter/test/templateAliceBob/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/templateAliceBob/Makefile @@ -29,7 +29,7 @@ bob: compile clean-pep-home-bob compile: $(JAVA_CLASSES) pitytest %.class: %.java - cd $(JAVA_CWD);javac -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< + cd $(JAVA_CWD);$(JAVAC_CMD) -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< clean: rm -f $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/jniadapter/test/templateAliceBobCarol/Makefile b/test/java/foundation/pEp/jniadapter/test/templateAliceBobCarol/Makefile index 644a79e..63cc519 100644 --- a/test/java/foundation/pEp/jniadapter/test/templateAliceBobCarol/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/templateAliceBobCarol/Makefile @@ -30,7 +30,7 @@ carol: compile clean-pep-home-carol compile: $(JAVA_CLASSES) pitytest %.class: %.java - cd $(JAVA_CWD);javac -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< + cd $(JAVA_CWD);$(JAVAC_CMD) -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< clean: rm -f $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/pitytest/Makefile b/test/java/foundation/pEp/pitytest/Makefile index bb49978..203bfab 100644 --- a/test/java/foundation/pEp/pitytest/Makefile +++ b/test/java/foundation/pEp/pitytest/Makefile @@ -14,7 +14,7 @@ all: compile compile: $(JAVA_CLASSES) %.class: %.java - cd $(JAVA_CWD);javac -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(PKGNAME)/$< + cd $(JAVA_CWD);$(JAVAC_CMD) -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(PKGNAME)/$< clean: rm -f $(JAVA_CLASSES) From 49caf7ecccb6d329991bf25a6667f7f38396b3f5 Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 9 Sep 2020 16:18:11 +0200 Subject: [PATCH 41/94] replace the rest of javac invocations with $(JAVAC_CMD) --- .../test/utils/transport/fsmqmanager/test/identities/Makefile | 2 +- .../utils/transport/fsmqmanager/test/stateless_ping/Makefile | 2 +- .../utils/transport/fsmqmanager/test/stateless_rxtx/Makefile | 2 +- .../test/utils/transport/fsmsgqueue/test/regression/Makefile | 2 +- test/java/foundation/pEp/pitytest/Makefile.conf | 2 ++ test/java/foundation/pEp/pitytest/examples/ctxinitfail/Makefile | 2 +- test/java/foundation/pEp/pitytest/examples/ctxmembers/Makefile | 2 +- test/java/foundation/pEp/pitytest/examples/helloworld/Makefile | 2 +- test/java/foundation/pEp/pitytest/examples/testsuite/Makefile | 2 +- 9 files changed, 10 insertions(+), 8 deletions(-) diff --git a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/identities/Makefile b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/identities/Makefile index 0d73d43..408c8b9 100644 --- a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/identities/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/identities/Makefile @@ -22,7 +22,7 @@ run: compile compile: $(JAVA_CLASSES) pitytest %.class: %.java - cd $(JAVA_CWD);pwd;javac $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< + cd $(JAVA_CWD);pwd;$(JAVAC_CMD) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< clean: rm -f $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_ping/Makefile b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_ping/Makefile index 7f67743..5702d25 100644 --- a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_ping/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_ping/Makefile @@ -25,7 +25,7 @@ bob: compile compile: $(JAVA_CLASSES) pitytest %.class: %.java - cd $(JAVA_CWD);pwd;javac $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< + cd $(JAVA_CWD);pwd;$(JAVAC_CMD) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< clean: rm -f $(JAVA_CLASSES) \ No newline at end of file diff --git a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx/Makefile b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx/Makefile index 566a944..cfa1548 100644 --- a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx/Makefile @@ -23,7 +23,7 @@ run: compile compile: $(JAVA_CLASSES) pitytest %.class: %.java - cd $(JAVA_CWD);pwd;javac $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< + cd $(JAVA_CWD);pwd;$(JAVAC_CMD) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< clean: rm -f $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmsgqueue/test/regression/Makefile b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmsgqueue/test/regression/Makefile index ebfd10e..e02b539 100644 --- a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmsgqueue/test/regression/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmsgqueue/test/regression/Makefile @@ -22,7 +22,7 @@ run: compile compile: $(JAVA_CLASSES) pitytest %.class: %.java - cd $(JAVA_CWD);pwd;javac $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< + cd $(JAVA_CWD);pwd;$(JAVAC_CMD) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< clean: rm -f $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/pitytest/Makefile.conf b/test/java/foundation/pEp/pitytest/Makefile.conf index 51eae4a..6a7df96 100644 --- a/test/java/foundation/pEp/pitytest/Makefile.conf +++ b/test/java/foundation/pEp/pitytest/Makefile.conf @@ -1,9 +1,11 @@ JAVA_PKG_BASENAME=foundation.pEp JAVA_PKG_BASEPATH=foundation/pEp CLASSPATH=. +JAVAC_CMD=javac -encoding UTF-8 JAVA=java -enableassertions JAVA_CWD=../../../ + JAVA_CLASSES_PITYTEST= \ TestSuite.class \ TestUnit.class \ diff --git a/test/java/foundation/pEp/pitytest/examples/ctxinitfail/Makefile b/test/java/foundation/pEp/pitytest/examples/ctxinitfail/Makefile index 5586816..d36de9d 100644 --- a/test/java/foundation/pEp/pitytest/examples/ctxinitfail/Makefile +++ b/test/java/foundation/pEp/pitytest/examples/ctxinitfail/Makefile @@ -23,7 +23,7 @@ run: compile compile: $(JAVA_CLASSES) pitytest %.class: %.java - cd $(JAVA_CWD);pwd;javac $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< + cd $(JAVA_CWD);pwd;$(JAVAC_CMD) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< clean: rm -f $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/pitytest/examples/ctxmembers/Makefile b/test/java/foundation/pEp/pitytest/examples/ctxmembers/Makefile index 27efb57..035fab6 100644 --- a/test/java/foundation/pEp/pitytest/examples/ctxmembers/Makefile +++ b/test/java/foundation/pEp/pitytest/examples/ctxmembers/Makefile @@ -23,7 +23,7 @@ run: compile compile: $(JAVA_CLASSES) pitytest %.class: %.java - cd $(JAVA_CWD);pwd;javac $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< + cd $(JAVA_CWD);pwd;$(JAVAC_CMD) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< clean: rm -f $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/pitytest/examples/helloworld/Makefile b/test/java/foundation/pEp/pitytest/examples/helloworld/Makefile index 4e02f47..2431ab4 100644 --- a/test/java/foundation/pEp/pitytest/examples/helloworld/Makefile +++ b/test/java/foundation/pEp/pitytest/examples/helloworld/Makefile @@ -23,7 +23,7 @@ run: compile compile: $(JAVA_CLASSES) pitytest %.class: %.java - cd $(JAVA_CWD);pwd;javac $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< + cd $(JAVA_CWD);pwd;$(JAVAC_CMD) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< clean: rm -f $(JAVA_CLASSES) diff --git a/test/java/foundation/pEp/pitytest/examples/testsuite/Makefile b/test/java/foundation/pEp/pitytest/examples/testsuite/Makefile index 987f50b..66009d0 100644 --- a/test/java/foundation/pEp/pitytest/examples/testsuite/Makefile +++ b/test/java/foundation/pEp/pitytest/examples/testsuite/Makefile @@ -23,7 +23,7 @@ run: compile compile: $(JAVA_CLASSES) pitytest %.class: %.java - cd $(JAVA_CWD);pwd;javac $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< + cd $(JAVA_CWD);pwd;$(JAVAC_CMD) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< clean: rm -f $(JAVA_CLASSES) From f48ff02e24ec7b4e16d08cc67633327c81e3389d Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 9 Sep 2020 16:33:25 +0200 Subject: [PATCH 42/94] update SpeedTest: decrypt_message_Return not an inner class anymore --- .../foundation/pEp/jniadapter/test/speedtest/SpeedTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/java/foundation/pEp/jniadapter/test/speedtest/SpeedTest.java b/test/java/foundation/pEp/jniadapter/test/speedtest/SpeedTest.java index 6b2f81e..21f49f2 100644 --- a/test/java/foundation/pEp/jniadapter/test/speedtest/SpeedTest.java +++ b/test/java/foundation/pEp/jniadapter/test/speedtest/SpeedTest.java @@ -28,7 +28,7 @@ public class SpeedTest { try { Message[] msgs = codec.decode(testDataEnc); Vector keys = new Vector(); - Engine.decrypt_message_Return ret = eng.decrypt_message(msgs[0], keys, 0); + decrypt_message_Return ret = eng.decrypt_message(msgs[0], keys, 0); String txt = ret.dst.getLongmsg(); } catch (ParseException ex) { System.err.println("error: parsing test data"); From 05e6884917fc5e18ad7a233ec028655c918fbc6e Mon Sep 17 00:00:00 2001 From: heck Date: Fri, 11 Sep 2020 02:30:04 +0200 Subject: [PATCH 43/94] Add Java Remote Debugger to tests. --- test/java/foundation/pEp/jniadapter/test/Makefile.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/java/foundation/pEp/jniadapter/test/Makefile.conf b/test/java/foundation/pEp/jniadapter/test/Makefile.conf index 71ee752..79ac8d4 100644 --- a/test/java/foundation/pEp/jniadapter/test/Makefile.conf +++ b/test/java/foundation/pEp/jniadapter/test/Makefile.conf @@ -18,7 +18,7 @@ PEP_HOME_DIR=$(PEP_HOME_DIR_ALICE) CLASSPATH=.:$(DIST_DIR)/pEp.jar LD_LIB_PATH=.:$(DIST_DIR) -JAVA=java -enableassertions -Xcheck:jni -cp $(CLASSPATH) -Djava.library.path=$(LD_LIB_PATH) +JAVA=java -enableassertions -Xcheck:jni -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -cp $(CLASSPATH) -Djava.library.path=$(LD_LIB_PATH) PITYTEST_DIR=../../../pitytest From c0e2a9157803acda6202b68009dbca2bf4cbad32 Mon Sep 17 00:00:00 2001 From: heck Date: Fri, 11 Sep 2020 04:22:57 +0200 Subject: [PATCH 44/94] CodeGen: New enhanced enums, now all enums got .toString(), all enums can have .getInternalStringValue() (This was needed to avoid mapping table in the app, for "casting" Ratings to Engine internal string values for X-Opts .e.g) --- src/codegen/Makefile | 9 +- src/codegen/gen_java_Message.ysl2 | 38 +++++- src/codegen/pEp.yml2 | 126 +++++++++--------- src/codegen/textutils.ysl2 | 6 + ...des_from_engine.sh => gen_status_codes.sh} | 27 ++-- 5 files changed, 118 insertions(+), 88 deletions(-) rename utils/{extract_pEp_status_codes_from_engine.sh => gen_status_codes.sh} (73%) mode change 100755 => 100644 diff --git a/src/codegen/Makefile b/src/codegen/Makefile index 556aae4..3f8fd95 100644 --- a/src/codegen/Makefile +++ b/src/codegen/Makefile @@ -38,13 +38,8 @@ 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 $< > $@ +gen-status-codes: pEp.yml2 + bash ../../utils/gen_status_codes.sh "$(PEP_HEADER)" # ------------- Housekeeping --------------- create-dirs: diff --git a/src/codegen/gen_java_Message.ysl2 b/src/codegen/gen_java_Message.ysl2 index 7007f6f..9bbee42 100644 --- a/src/codegen/gen_java_Message.ysl2 +++ b/src/codegen/gen_java_Message.ysl2 @@ -113,7 +113,7 @@ tstylesheet { || // CodeGen template enum, mode=inner public enum «$jname» { - `` apply "*", mode=value + `` apply "enumitem" ; public final int value; @@ -319,9 +319,39 @@ tstylesheet { || } - template "*", mode=value { - const "name" call "toJava" with "type", "name(.)"; - | «$name» («.»)`if "position()!=last()" > , ` + + template "enumitem" { + const "name_hyphenized" call "hyphenize" with "text", "@name"; + const "javaname" call "toJava" with "type", "$name_hyphenized"; + const "enum_index", "."; + || + «$javaname» («$enum_index») { + public String toString() { + || + choose { + when "@toString" { + || + return "«@toString»"; + || + } otherwise { + || + return "«$javaname»"; + || + } + } + || + } + || + choose { + when "@int_str_val" { + || + public String getInternalStringValue() { + return "«@int_str_val»"; + } + || + } + } + | }`if "position()!=last()" > , ` } } diff --git a/src/codegen/pEp.yml2 b/src/codegen/pEp.yml2 index d446b3a..920d714 100644 --- a/src/codegen/pEp.yml2 +++ b/src/codegen/pEp.yml2 @@ -1,5 +1,6 @@ decl namespace @name; decl enum @name; +decl enumitem @name; decl interface @name; decl exception @name; decl method @name; @@ -16,77 +17,74 @@ namespace pEp { }; enum Color { - PEP_color_no_color > 0 - PEP_color_yellow > 1 - PEP_color_green > 2 - PEP_color_red > -1 + enumitem PEP_color_no_color toString="None" > 0 + enumitem PEP_color_yellow toString="Yellow" > 1 + enumitem PEP_color_green toString="Green" > 2 + enumitem PEP_color_red toString="Red" > -1 }; + enum Rating { - pEp_rating_undefined > 0 - pEp_rating_cannot_decrypt > 1 - pEp_rating_have_no_key > 2 - pEp_rating_unencrypted > 3 - pEp_rating_unencrypted_for_some > 4 - pEp_rating_unreliable > 5 - pEp_rating_reliable > 6 - pEp_rating_trusted > 7 - pEp_rating_trusted_and_anonymized > 8 - pEp_rating_fully_anonymous > 9 - - pEp_rating_mistrust > -1 - pEp_rating_b0rken > -2 - pEp_rating_under_attack > -3 + enumitem pEp_rating_undefined int_str_val=undefined toString="undefined" > 0 + enumitem pEp_rating_cannot_decrypt int_str_val=cannot_decrypt toString="cannot decrypt" > 1 + enumitem pEp_rating_have_no_key int_str_val=have_no_key toString="have no key" > 2 + enumitem pEp_rating_unencrypted int_str_val=unencrypted toString="unencrypted" > 3 + enumitem pEp_rating_unencrypted_for_some int_str_val=unencrypted_for_some toString="unencrypted for some" > 4 + enumitem pEp_rating_unreliable int_str_val=unreliable toString="unreliable" > 5 + enumitem pEp_rating_reliable int_str_val=reliable toString="reliable" > 6 + enumitem pEp_rating_trusted int_str_val=trusted toString="trusted" > 7 + enumitem pEp_rating_trusted_and_anonymized int_str_val=trusted_and_anonymized toString="trusted and anonymized" > 8 + enumitem pEp_rating_fully_anonymous int_str_val=fully_anonymous toString="fully anonymous" > 9 + enumitem pEp_rating_mistrust int_str_val=mistrust toString="mistrust" > -1 + enumitem pEp_rating_b0rken int_str_val=b0rken toString="b0rken" > -2 + enumitem pEp_rating_under_attack int_str_val=under_attack toString="under attack" > -3 }; enum DecryptFlags { - pEp_decrypt_flag_own_private_key > 1 - pEp_decrypt_flag_consumed > 2 - pEp_decrypt_flag_ignored > 4 - pEp_decrypt_flag_src_modified > 8 - pEp_decrypt_flag_untrusted_server > 0x100 - pEp_decrypt_flag_dont_trigger_sync > 0x200 + enumitem pEp_decrypt_flag_own_private_key > 1 + enumitem pEp_decrypt_flag_consumed > 2 + enumitem pEp_decrypt_flag_ignored > 4 + enumitem pEp_decrypt_flag_src_modified > 8 + enumitem pEp_decrypt_flag_untrusted_server > 0x100 + enumitem pEp_decrypt_flag_dont_trigger_sync > 0x200 }; enum IdentityFlags { - pEp_idf_not_for_sync > 1 - pEp_idf_list > 2 - pEp_idf_devicegroup > 256 + enumitem pEp_idf_not_for_sync > 1 + enumitem pEp_idf_list > 2 + enumitem pEp_idf_devicegroup > 256 }; enum SyncHandshakeResult { - sync_handshake_cancel > -1 - sync_handshake_accepted > 0 - sync_handshake_rejected > 1 + enumitem sync_handshake_cancel > -1 + enumitem sync_handshake_accepted > 0 + enumitem sync_handshake_rejected > 1 }; enum SyncHandshakeSignal { - sync_notify_undefined > 0 - sync_notify_init_add_our_device > 1 - sync_notify_init_add_other_device > 2 - sync_notify_init_form_group > 3 - // sync_notify_init_move_our_device > 4 - sync_notify_timeout > 5 - sync_notify_accepted_device_added > 6 - sync_notify_accepted_group_created > 7 - sync_notify_accepted_device_accepted > 8 - // sync_notify_overtaken > 9 - // sync_notify_forming_group > 10 - sync_passphrase_required > 128 - sync_notify_sole > 254 - sync_notify_in_group > 255 + enumitem sync_notify_undefined > 0 + enumitem sync_notify_init_add_our_device > 1 + enumitem sync_notify_init_add_other_device > 2 + enumitem sync_notify_init_form_group > 3 + enumitem sync_notify_timeout > 5 + enumitem sync_notify_accepted_device_added > 6 + enumitem sync_notify_accepted_group_created > 7 + enumitem sync_notify_accepted_device_accepted > 8 + enumitem sync_passphrase_required > 128 + enumitem sync_notify_sole > 254 + enumitem sync_notify_in_group > 255 }; enum CipherSuite { - pEp_cipher_suite_default > 0 - pEp_cipher_suite_cv25519 > 1 - pEp_cipher_suite_p256 > 2 - pEp_cipher_suite_p384 > 3 - pEp_cipher_suite_p521 > 4 - pEp_cipher_suite_rsa2k > 5 - pEp_cipher_suite_rsa3k > 6 - pEp_cipher_suite_rsa4k > 7 - pEp_cipher_suite_rsa8k > 8 + enumitem pEp_cipher_suite_default > 0 + enumitem pEp_cipher_suite_cv25519 > 1 + enumitem pEp_cipher_suite_p256 > 2 + enumitem pEp_cipher_suite_p384 > 3 + enumitem pEp_cipher_suite_p521 > 4 + enumitem pEp_cipher_suite_rsa2k > 5 + enumitem pEp_cipher_suite_rsa3k > 6 + enumitem pEp_cipher_suite_rsa4k > 7 + enumitem pEp_cipher_suite_rsa8k > 8 }; interface Engine { @@ -275,23 +273,23 @@ namespace pEp { struct message { enum TextFormat { - plain > 0 - html > 1 - other > 255 + enumitem plain > 0 + enumitem html > 1 + enumitem other > 255 } enum direction { - incoming > 0 - outgoing > 1 + enumitem incoming > 0 + enumitem outgoing > 1 } enum EncFormat { - none > 0 - inline > 1 - SMIME > 2 - PGPMIME > 3 - PEP > 4 - PEP_enc_inline_EA > 6 + enumitem none > 0 + enumitem inline > 1 + enumitem SMIME > 2 + enumitem PGPMIME > 3 + enumitem PEP > 4 + enumitem PEP_enc_inline_EA > 6 } direction dir; diff --git a/src/codegen/textutils.ysl2 b/src/codegen/textutils.ysl2 index a8b7798..a531cd3 100644 --- a/src/codegen/textutils.ysl2 +++ b/src/codegen/textutils.ysl2 @@ -10,6 +10,12 @@ function "lcase" { value "translate($text, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ-', 'abcdefghijklmnopqrstuvwxyz_')"; } +function "hyphenize" { + param "text"; + + value "translate($text, '_', '-')"; +} + function "CamelCase" { param "text"; const "tokens", "str:tokenize($text, '-')"; diff --git a/utils/extract_pEp_status_codes_from_engine.sh b/utils/gen_status_codes.sh old mode 100755 new mode 100644 similarity index 73% rename from utils/extract_pEp_status_codes_from_engine.sh rename to utils/gen_status_codes.sh index 112d200..238db98 --- a/utils/extract_pEp_status_codes_from_engine.sh +++ b/utils/gen_status_codes.sh @@ -6,15 +6,14 @@ if [ ! -f $1 ]; then echo -e "\e[1m\e[31mInput file not found!\e[0m" fi -if [ -z "$2" ]; then - echo -e "\e[1m\e[31mNo output file supplied\e[0m" -fi - -if [ "$#" -ne 2 ]; then - echo "Expected use is: $0 input_file output_file" +if [ "$#" -ne 1 ]; then + echo "Expected use is: $0 input_file" exit 1 fi +STAT_FILE=status_list.yml2 +PASS_FILE=passphrase_status_list.yml2 + ################################################################################ # Select GNU SED # ################################################################################ @@ -33,15 +32,17 @@ esac # Transform input file PEP_STATUS to yml2 status # ################################################################################ -$SED -n '/} PEP_STATUS/q;p' $1 > $2 -$SED -i -n '/STATUS_OK/,$p' $2 -$SED -i -e 's/\(.*\)/\L\1/' $2 -$SED -i "-e s/ pep/ pEp/g" $2 -$SED -i s/=/\>/g $2 -$SED -i s/,//g $2 +$SED -n '/} PEP_STATUS/q;p' $1 > $STAT_FILE +$SED -i -n '/STATUS_OK/,$p' $STAT_FILE +$SED -i -e 's/\(.*\)/\L\1/' $STAT_FILE +$SED -i "-e s/ pep/ pEp/g" $STAT_FILE +$SED -i s/=/\>/g $STAT_FILE +$SED -i s/,//g $STAT_FILE +grep -i passphrase $STAT_FILE | sed -e 's/^/enumitem/' > $PASS_FILE ################################################################################ # Show results # ################################################################################ -cat $2 +cat $STAT_FILE +cat $PASS_FILE From 29705b475606b34879491bd1797fbf99f834012e Mon Sep 17 00:00:00 2001 From: heck Date: Fri, 11 Sep 2020 04:52:59 +0200 Subject: [PATCH 45/94] Add the Enum default method getInternalStringValue() when "has_int_str_val" is set (TODO: Query this using XPath, fdik how do i do this? in ysl2?) --- src/codegen/gen_java_Message.ysl2 | 13 ++++++++++++- src/codegen/pEp.yml2 | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/codegen/gen_java_Message.ysl2 b/src/codegen/gen_java_Message.ysl2 index 9bbee42..f8e83f1 100644 --- a/src/codegen/gen_java_Message.ysl2 +++ b/src/codegen/gen_java_Message.ysl2 @@ -136,9 +136,20 @@ tstylesheet { } return null; } - } || + choose { + when "@has_int_str_val = 'true'" { + || + public String getInternalStringValue() { + return "Unimplemented"; + } + || + } + } + || + } + || } function "exception" { diff --git a/src/codegen/pEp.yml2 b/src/codegen/pEp.yml2 index 920d714..12033e8 100644 --- a/src/codegen/pEp.yml2 +++ b/src/codegen/pEp.yml2 @@ -24,7 +24,7 @@ namespace pEp { }; - enum Rating { + enum has_int_str_val=true Rating { enumitem pEp_rating_undefined int_str_val=undefined toString="undefined" > 0 enumitem pEp_rating_cannot_decrypt int_str_val=cannot_decrypt toString="cannot decrypt" > 1 enumitem pEp_rating_have_no_key int_str_val=have_no_key toString="have no key" > 2 From 3334007c6fa324adab3c56718393ee62bfde2add Mon Sep 17 00:00:00 2001 From: heck Date: Fri, 11 Sep 2020 17:24:52 +0200 Subject: [PATCH 46/94] Add "public String Identity.toXKeyList(List ids)" for creating OptField X-KeyList --- src/java/foundation/pEp/jniadapter/Identity.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/java/foundation/pEp/jniadapter/Identity.java b/src/java/foundation/pEp/jniadapter/Identity.java index 2b0cdde..8b69007 100644 --- a/src/java/foundation/pEp/jniadapter/Identity.java +++ b/src/java/foundation/pEp/jniadapter/Identity.java @@ -2,6 +2,7 @@ package foundation.pEp.jniadapter; import foundation.pEp.jniadapter.interfaces.*; import java.io.Serializable; +import java.util.List; public class Identity implements IdentityInterface, Serializable { public String address; @@ -40,11 +41,22 @@ public class Identity implements IdentityInterface, Serializable { private native int _getRating(int commType); + public static String toXKeyList(List ids) { + String ret = ""; + if(ids.size() > 0) { + for (Identity id : ids) { + ret += id.fpr; + ret += ","; + } + ret = ret.substring(0, ret.length() - 1); + } + return ret; + } + @Override public String toString() { return address + "::" + username + "\n" + user_id + "::" + fpr; } - } From 41eb100c9684d6c15a84369a31bb2b626472137e Mon Sep 17 00:00:00 2001 From: heck Date: Fri, 11 Sep 2020 17:25:49 +0200 Subject: [PATCH 47/94] .toStrin() for the 2 independent Pair classes (PityTest framework should not depend on jniAdapter) --- src/java/foundation/pEp/jniadapter/Pair.java | 6 ++++++ test/java/foundation/pEp/pitytest/utils/Pair.java | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/src/java/foundation/pEp/jniadapter/Pair.java b/src/java/foundation/pEp/jniadapter/Pair.java index 9db1afe..7e9c4d4 100644 --- a/src/java/foundation/pEp/jniadapter/Pair.java +++ b/src/java/foundation/pEp/jniadapter/Pair.java @@ -10,5 +10,11 @@ public class Pair { first = f; second = s; } + + public String toString() { + String ret=""; + ret += "'" + first.toString() + "' : '" + second.toString() + "'"; + return ret; + } } diff --git a/test/java/foundation/pEp/pitytest/utils/Pair.java b/test/java/foundation/pEp/pitytest/utils/Pair.java index 220775b..146a286 100644 --- a/test/java/foundation/pEp/pitytest/utils/Pair.java +++ b/test/java/foundation/pEp/pitytest/utils/Pair.java @@ -24,5 +24,11 @@ public class Pair { key = f; value = s; } + + public String toString() { + String ret=""; + ret += "'" + key.toString() + "' : '" + value.toString() + "'"; + return ret; + } } From 7f2391ad609aebddf33e03b5aeaf2c45736a6b83 Mon Sep 17 00:00:00 2001 From: heck Date: Sun, 13 Sep 2020 01:58:10 +0200 Subject: [PATCH 48/94] PityTest Framework improvements: - copy constructor for TestUnit, so you can add the same TestUnit multiple times, with e.g. different context - TestUnit.setContext() so you can add the same TestUnit multiple times, with e.g. different context - TestUnit throws RuntimeException instead of Throwable --- .../pEp/jniadapter/test/jni111/TestAlice.java | 2 +- .../pEp/jniadapter/test/jni115/TestAlice.java | 2 +- .../test/utils/AdapterBaseTestContext.java | 31 ++++++++------- .../foundation/pEp/pitytest/TestSuite.java | 2 +- .../foundation/pEp/pitytest/TestUnit.java | 38 +++++++++++++++++-- 5 files changed, 55 insertions(+), 20 deletions(-) diff --git a/test/java/foundation/pEp/jniadapter/test/jni111/TestAlice.java b/test/java/foundation/pEp/jniadapter/test/jni111/TestAlice.java index 52f0f04..550c2c3 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni111/TestAlice.java +++ b/test/java/foundation/pEp/jniadapter/test/jni111/TestAlice.java @@ -16,7 +16,7 @@ import java.util.Vector; class JNI111TestContext extends AdapterBaseTestContext { @Override - public void init() throws Throwable { + public void init() throws RuntimeException { super.init(); alice = null; bob = null; diff --git a/test/java/foundation/pEp/jniadapter/test/jni115/TestAlice.java b/test/java/foundation/pEp/jniadapter/test/jni115/TestAlice.java index fb82385..2aba549 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni115/TestAlice.java +++ b/test/java/foundation/pEp/jniadapter/test/jni115/TestAlice.java @@ -19,7 +19,7 @@ class Jni115TestContext extends AdapterBaseTestContext { public List messagesToBob; @Override - public void init() throws Throwable { + public void init() throws RuntimeException { super.init(); messagesToBobSmall = new ArrayList<>(); messagesToBobBig = new ArrayList<>(); diff --git a/test/java/foundation/pEp/jniadapter/test/utils/AdapterBaseTestContext.java b/test/java/foundation/pEp/jniadapter/test/utils/AdapterBaseTestContext.java index 5c3fa10..311c2e5 100644 --- a/test/java/foundation/pEp/jniadapter/test/utils/AdapterBaseTestContext.java +++ b/test/java/foundation/pEp/jniadapter/test/utils/AdapterBaseTestContext.java @@ -63,7 +63,7 @@ public class AdapterBaseTestContext extends AbstractTestContext { public Vector vID; public Vector vStr; - public void init() throws Throwable { + public void init() throws RuntimeException { vID = new Vector(); vStr = new Vector(); @@ -74,7 +74,7 @@ public class AdapterBaseTestContext extends AbstractTestContext { TestLogger.logH2("Machine directory: "); TestLogger.log(engine.getMachineDirectory()); - TestLogger.logH2("User directory:" ); + TestLogger.logH2("User directory:"); TestLogger.log(engine.getUserDirectory()); @@ -96,22 +96,27 @@ public class AdapterBaseTestContext extends AbstractTestContext { Path path; path = Paths.get(filenameBobPub); - keyBobPub = Files.readAllBytes(path); + try { + keyBobPub = Files.readAllBytes(path); - path = Paths.get(filenameBobSec); - keyBobSec = Files.readAllBytes(path); + path = Paths.get(filenameBobSec); + keyBobSec = Files.readAllBytes(path); - path = Paths.get(filenameAlicePub); - keyAlicePub = Files.readAllBytes(path); + path = Paths.get(filenameAlicePub); + keyAlicePub = Files.readAllBytes(path); - path = Paths.get(filenameAliceSec); - keyAliceSec = Files.readAllBytes(path); + path = Paths.get(filenameAliceSec); + keyAliceSec = Files.readAllBytes(path); - path = Paths.get(filenameAlicePubPassphrase); - keyAlicePubPassphrase = Files.readAllBytes(path); + path = Paths.get(filenameAlicePubPassphrase); + keyAlicePubPassphrase = Files.readAllBytes(path); + + path = Paths.get(filenameAliceSecPassphrase); + keyAliceSecPassphrase = Files.readAllBytes(path); + } catch (Throwable e) { + throw new RuntimeException(e); + } - path = Paths.get(filenameAliceSecPassphrase); - keyAliceSecPassphrase = Files.readAllBytes(path); } } \ No newline at end of file diff --git a/test/java/foundation/pEp/pitytest/TestSuite.java b/test/java/foundation/pEp/pitytest/TestSuite.java index f44d355..e5e5920 100644 --- a/test/java/foundation/pEp/pitytest/TestSuite.java +++ b/test/java/foundation/pEp/pitytest/TestSuite.java @@ -75,7 +75,7 @@ public class TestSuite { } public void add(TestUnit t) { - tests.add(t); + tests.add(t.copy()); } public void run() { diff --git a/test/java/foundation/pEp/pitytest/TestUnit.java b/test/java/foundation/pEp/pitytest/TestUnit.java index a14b4f0..1e4429d 100644 --- a/test/java/foundation/pEp/pitytest/TestUnit.java +++ b/test/java/foundation/pEp/pitytest/TestUnit.java @@ -44,20 +44,45 @@ public class TestUnit implements Runnable { add(TestSuite.getDefault()); } + //Shallow Copy + public TestUnit(TestUnit orig) { + testUnitName = orig.testUnitName; + ctx = orig.ctx; + lambda = orig.lambda; + result = orig.result; + state = orig.state; + lastException = orig.lastException; + verboseMode = orig.verboseMode; + testColor = orig.testColor; + logFmtPadding = orig.logFmtPadding; + logFmtMsgLen = orig.logFmtMsgLen; + logFmtTestDuration = orig.logFmtTestDuration; + lineWidthMin = orig.lineWidthMin; + logFmtTestNameLen = orig.logFmtTestNameLen; + logFmtCtxNameLen = orig.logFmtCtxNameLen; + } + + //Shallow Copy + public TestUnit copy() { + return new TestUnit<>(this); + } + public boolean isVerboseMode() { return verboseMode; } - public void setVerboseMode(boolean verboseMode) { + public TestUnit setVerboseMode(boolean verboseMode) { this.verboseMode = verboseMode; + return this; } public TermColor getTestColor() { return testColor; } - public void setTestColor(TermColor testColor) { + public TestUnit setTestColor(TermColor testColor) { this.testColor = testColor; + return this; } public TestState getResult() { @@ -82,6 +107,11 @@ public class TestUnit implements Runnable { return ctx; } + public TestUnit setContext(T ctx) { + this.ctx = ctx; + return this; + } + public void run() { TestUtils.standardOutErrEnabled(verboseMode); if (ctx.isUninitializable()) { @@ -154,7 +184,7 @@ public class TestUnit implements Runnable { } private void setTestResult(TestState r) { - assert (r == TestState.SKIPPED || r == TestState.FAILED || r == TestState.SUCCESS || r == TestState.UNEVALUATED ): "PityTest Internal: illegal result value '" + r +"'"; + assert (r == TestState.SKIPPED || r == TestState.FAILED || r == TestState.SUCCESS || r == TestState.UNEVALUATED) : "PityTest Internal: illegal result value '" + r + "'"; result = r; TestUtils.standardOutErrEnabled(true); logH1(makeLogString()); @@ -193,7 +223,7 @@ public class TestUnit implements Runnable { DecimalFormat f = new DecimalFormat("0.000"); String durationFmtd = f.format(testDuration.toMillis() / 1000.0); strTestDuration = TestUtils.padOrClipString(" [" + durationFmtd + " sec] ", "=", logFmtTestDuration, TestUtils.Alignment.Right, ".. "); - } else { + } else { strTestDuration = TestUtils.padOrClipString("", "=", logFmtTestDuration, TestUtils.Alignment.Right, ".. "); } From c843a3a30e519ad1e62ed987ee15cb9859b681eb Mon Sep 17 00:00:00 2001 From: heck Date: Sun, 13 Sep 2020 14:45:12 +0200 Subject: [PATCH 49/94] Tests: Add speedtest to Main test Makefile --- test/java/foundation/pEp/jniadapter/test/Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/java/foundation/pEp/jniadapter/test/Makefile b/test/java/foundation/pEp/jniadapter/test/Makefile index 5d18cf1..6271115 100644 --- a/test/java/foundation/pEp/jniadapter/test/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/Makefile @@ -7,6 +7,7 @@ run: compile $(MAKE) -C templateAliceBob run $(MAKE) -C basic run $(MAKE) -C regression run + $(MAKE) -C speedtest run $(MAKE) -C jni88 run $(MAKE) -C jni91 run $(MAKE) -C jni92 run @@ -23,6 +24,7 @@ compile: $(MAKE) -C templateAliceBob compile $(MAKE) -C basic compile $(MAKE) -C regression compile + $(MAKE) -C speedtest compile $(MAKE) -C jni88 compile $(MAKE) -C jni91 compile $(MAKE) -C jni92 compile @@ -39,6 +41,7 @@ clean: $(MAKE) -C templateAliceBob clean $(MAKE) -C basic clean $(MAKE) -C regression clean + $(MAKE) -C speedtest clean $(MAKE) -C jni88 clean $(MAKE) -C jni91 clean $(MAKE) -C jni92 clean From 3028e1af4f1f59706be1c22c9149e2070db5bc4f Mon Sep 17 00:00:00 2001 From: heck Date: Sun, 13 Sep 2020 14:46:07 +0200 Subject: [PATCH 50/94] Tests: vStr and vID not basic enough for AdapterBaseTestContext (formatting of interface, just formatting) --- .../pEp/jniadapter/test/jni100/TestMain.java | 4 +++- .../foundation/pEp/jniadapter/test/jni98/TestMain.java | 4 +++- .../jniadapter/test/utils/AdapterBaseTestContext.java | 10 ---------- .../foundation/pEp/pitytest/TestContextInterface.java | 6 ++++++ 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/test/java/foundation/pEp/jniadapter/test/jni100/TestMain.java b/test/java/foundation/pEp/jniadapter/test/jni100/TestMain.java index 2a0ddd8..28e4df0 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni100/TestMain.java +++ b/test/java/foundation/pEp/jniadapter/test/jni100/TestMain.java @@ -3,6 +3,8 @@ import foundation.pEp.pitytest.*; import foundation.pEp.jniadapter.*; import foundation.pEp.jniadapter.test.utils.*; +import java.util.Vector; + class TestMain { public static void main(String[] args) throws Exception { @@ -15,7 +17,7 @@ class TestMain { ctx.alice = ctx.engine.myself(ctx.alice); TestLogger.log(AdapterTestUtils.identityToString(ctx.alice, true)); - Message msg1 = ctx.engine.encrypt_message(ctx.msgToBob, ctx.vStr, Message.EncFormat.PEP); + Message msg1 = ctx.engine.encrypt_message(ctx.msgToBob, new Vector(), Message.EncFormat.PEP); ctx.engine.key_reset_all_own_keys(); diff --git a/test/java/foundation/pEp/jniadapter/test/jni98/TestMain.java b/test/java/foundation/pEp/jniadapter/test/jni98/TestMain.java index aad0166..75cd06f 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni98/TestMain.java +++ b/test/java/foundation/pEp/jniadapter/test/jni98/TestMain.java @@ -5,6 +5,8 @@ import foundation.pEp.jniadapter.Message; import foundation.pEp.pitytest.TestUnit; import foundation.pEp.jniadapter.test.utils.AdapterBaseTestContext; +import java.util.Vector; + import static foundation.pEp.pitytest.TestLogger.log; import static foundation.pEp.pitytest.TestLogger.logH2; import static foundation.pEp.jniadapter.test.utils.AdapterTestUtils.msgToString; @@ -45,7 +47,7 @@ class TestMain { logH2("Verify msg2"); decrypt_message_Return result = null; - result = ctx.engine.decrypt_message(msg2, ctx.vStr, 0); + result = ctx.engine.decrypt_message(msg2, new Vector(), 0); log("\n" + msgToString(result.dst, false)); }).run(); diff --git a/test/java/foundation/pEp/jniadapter/test/utils/AdapterBaseTestContext.java b/test/java/foundation/pEp/jniadapter/test/utils/AdapterBaseTestContext.java index 311c2e5..74980c0 100644 --- a/test/java/foundation/pEp/jniadapter/test/utils/AdapterBaseTestContext.java +++ b/test/java/foundation/pEp/jniadapter/test/utils/AdapterBaseTestContext.java @@ -59,14 +59,7 @@ public class AdapterBaseTestContext extends AbstractTestContext { public Message msgToSelf; public Message msgToBob; - // Misc - public Vector vID; - public Vector vStr; - public void init() throws RuntimeException { - vID = new Vector(); - vStr = new Vector(); - callbacks = new TestCallbacks(); engine = new Engine(); engine.setMessageToSendCallback(callbacks); @@ -91,9 +84,6 @@ public class AdapterBaseTestContext extends AbstractTestContext { msgToSelf = AdapterTestUtils.makeNewTestMessage(alice, alice, Message.Direction.Outgoing); msgToBob = AdapterTestUtils.makeNewTestMessage(alice, bob, Message.Direction.Outgoing); - vID.add(bob); - vStr.add("StringItem"); - Path path; path = Paths.get(filenameBobPub); try { diff --git a/test/java/foundation/pEp/pitytest/TestContextInterface.java b/test/java/foundation/pEp/pitytest/TestContextInterface.java index 177bbb5..eadd972 100644 --- a/test/java/foundation/pEp/pitytest/TestContextInterface.java +++ b/test/java/foundation/pEp/pitytest/TestContextInterface.java @@ -2,10 +2,16 @@ package foundation.pEp.pitytest; public interface TestContextInterface { void init() throws Throwable; + boolean isInitialized(); + void setInitialized(boolean initialized); + boolean isUninitializable(); + void setUninitializable(boolean uninitializable); + String getTestContextName(); + void setTestContextName(String name); } From 969267d21d8dca724388d442a7a6f81459598b12 Mon Sep 17 00:00:00 2001 From: heck Date: Sun, 13 Sep 2020 19:19:34 +0200 Subject: [PATCH 51/94] PityTest.TestUtils - add randomInt(), and randomASCIIString() featuring CharClass and len --- .../pEp/pitytest/utils/TestUtils.java | 102 +++++++++++++++++- 1 file changed, 98 insertions(+), 4 deletions(-) diff --git a/test/java/foundation/pEp/pitytest/utils/TestUtils.java b/test/java/foundation/pEp/pitytest/utils/TestUtils.java index f18d6b4..159ee34 100644 --- a/test/java/foundation/pEp/pitytest/utils/TestUtils.java +++ b/test/java/foundation/pEp/pitytest/utils/TestUtils.java @@ -7,10 +7,7 @@ import java.io.PrintStream; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; +import java.util.*; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -330,5 +327,102 @@ public class TestUtils { return Math.max(min, Math.min(max, val)); } + /* + Random data generators + */ + + public static int randomInt(int min, int max) { + int ret = 0; + int range = max - min; + if (range <= 0) { + range = 1; + } + Random rand = new Random(); + ret = rand.nextInt(range) + min; + return ret; + } + + public static String randomASCIIString(CharClass charClass, int len) { + byte[] array = new byte[len]; // length is bounded by 7 + int rangeMin = 0; + int rangeMax = 0; + + switch (charClass) { + case Unbounded: { + rangeMin = 0; + rangeMax = 255; + break; + } + case Alpha: { + rangeMin = 65; + rangeMax = 122; + break; + } + case Numeric: { + rangeMin = 48; + rangeMax = 57; + break; + } + case Alphanumeric: { + rangeMin = 48; + rangeMax = 122; + break; + } + } + new Random().nextBytes(array); + for (int i = 0; i < array.length; i++) { + array[i] = (byte)clip(randomInt(rangeMin, rangeMax),0,255); + } + String generatedString = new String(array, Charset.forName("UTF-8")); + return generatedString; + } + + public enum CharClass { + Unbounded(0) { + @Override + public String toString() { + return "Unbounded"; + } + }, + Alpha(1) { + @Override + public String toString() { + return "Alpha"; + } + }, + Numeric(2) { + @Override + public String toString() { + return "Numeric"; + } + }, + Alphanumeric(3) { + @Override + public String toString() { + return "Alphanumeric"; + } + }; + + public final int value; + + private static HashMap intMap; + + private CharClass(int value) { + this.value = value; + } + + public static CharClass getByInt(int value) { + if (intMap == null) { + intMap = new HashMap(); + for (CharClass s : CharClass.values()) { + intMap.put(s.value, s); + } + } + if (intMap.containsKey(value)) { + return intMap.get(value); + } + return null; + } + } } From fc40f29be26025676d4275a2f3f08602949897ba Mon Sep 17 00:00:00 2001 From: heck Date: Sun, 13 Sep 2020 19:30:38 +0200 Subject: [PATCH 52/94] PityTest: TestContext.init() return "this", so you can chain calls. --- .../java/foundation/pEp/jniadapter/test/basic/TestMain.java | 5 +++++ .../foundation/pEp/jniadapter/test/jni111/TestAlice.java | 3 ++- .../foundation/pEp/jniadapter/test/jni115/TestAlice.java | 3 ++- .../pEp/jniadapter/test/templateAliceBob/MultiPeerCTX.java | 3 ++- .../pEp/jniadapter/test/utils/AdapterBaseTestContext.java | 4 ++-- .../fsmqmanager/test/ctx/FsMQManagerBaseTestContext.java | 3 ++- .../fsmqmanager/test/ctx/FsMQManagerTestContext.java | 3 ++- .../transport/fsmqmanager/test/identities/TestMain.java | 3 ++- .../transport/fsmqmanager/test/stateless_rxtx/TestMain.java | 4 ++-- .../transport/fsmsgqueue/test/regression/TestMain.java | 4 +++- test/java/foundation/pEp/pitytest/TestContextInterface.java | 2 +- .../pEp/pitytest/examples/ctxinitfail/TestMain.java | 6 +++++- .../pEp/pitytest/examples/ctxmembers/TestMain.java | 3 ++- .../pEp/pitytest/examples/helloworld/TestMain.java | 3 ++- .../pEp/pitytest/examples/testsuite/TestMain.java | 3 ++- 15 files changed, 36 insertions(+), 16 deletions(-) diff --git a/test/java/foundation/pEp/jniadapter/test/basic/TestMain.java b/test/java/foundation/pEp/jniadapter/test/basic/TestMain.java index 12dc192..ef46b34 100644 --- a/test/java/foundation/pEp/jniadapter/test/basic/TestMain.java +++ b/test/java/foundation/pEp/jniadapter/test/basic/TestMain.java @@ -17,6 +17,11 @@ class BasicTestContext extends AdapterBaseTestContext { public BasicTestContext() { setTestContextName("BasicTestContext"); } + + public BasicTestContext init() throws Throwable{ + super.init(); + return this; + } } class TestMain { diff --git a/test/java/foundation/pEp/jniadapter/test/jni111/TestAlice.java b/test/java/foundation/pEp/jniadapter/test/jni111/TestAlice.java index 550c2c3..4adf7df 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni111/TestAlice.java +++ b/test/java/foundation/pEp/jniadapter/test/jni111/TestAlice.java @@ -16,10 +16,11 @@ import java.util.Vector; class JNI111TestContext extends AdapterBaseTestContext { @Override - public void init() throws RuntimeException { + public JNI111TestContext init() throws Throwable { super.init(); alice = null; bob = null; + return this; } } diff --git a/test/java/foundation/pEp/jniadapter/test/jni115/TestAlice.java b/test/java/foundation/pEp/jniadapter/test/jni115/TestAlice.java index 2aba549..9a4678a 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni115/TestAlice.java +++ b/test/java/foundation/pEp/jniadapter/test/jni115/TestAlice.java @@ -19,7 +19,7 @@ class Jni115TestContext extends AdapterBaseTestContext { public List messagesToBob; @Override - public void init() throws RuntimeException { + public Jni115TestContext init() throws Throwable { super.init(); messagesToBobSmall = new ArrayList<>(); messagesToBobBig = new ArrayList<>(); @@ -52,6 +52,7 @@ class Jni115TestContext extends AdapterBaseTestContext { messagesToBobHuge.add(tmp); } logRaw("\n"); + return this; } } diff --git a/test/java/foundation/pEp/jniadapter/test/templateAliceBob/MultiPeerCTX.java b/test/java/foundation/pEp/jniadapter/test/templateAliceBob/MultiPeerCTX.java index 4206abc..3a5c9d5 100644 --- a/test/java/foundation/pEp/jniadapter/test/templateAliceBob/MultiPeerCTX.java +++ b/test/java/foundation/pEp/jniadapter/test/templateAliceBob/MultiPeerCTX.java @@ -51,7 +51,7 @@ class MultiPeerCTX extends FsMQManagerTestContext { super(selfAddress); } - public void init() throws Throwable { + public MultiPeerCTX init() throws Throwable { super.init(); vID = new Vector(); vStr = new Vector(); @@ -97,5 +97,6 @@ class MultiPeerCTX extends FsMQManagerTestContext { log("pEp PER_USER_DIR : " + engine.getUserDirectory()); log("pEp ProtocolVersion: " + engine.getProtocolVersion()); log("pEp Version : " + engine.getVersion()); + return this; } } diff --git a/test/java/foundation/pEp/jniadapter/test/utils/AdapterBaseTestContext.java b/test/java/foundation/pEp/jniadapter/test/utils/AdapterBaseTestContext.java index 74980c0..5470d41 100644 --- a/test/java/foundation/pEp/jniadapter/test/utils/AdapterBaseTestContext.java +++ b/test/java/foundation/pEp/jniadapter/test/utils/AdapterBaseTestContext.java @@ -59,7 +59,7 @@ public class AdapterBaseTestContext extends AbstractTestContext { public Message msgToSelf; public Message msgToBob; - public void init() throws RuntimeException { + public AdapterBaseTestContext init() throws Throwable { callbacks = new TestCallbacks(); engine = new Engine(); engine.setMessageToSendCallback(callbacks); @@ -106,7 +106,7 @@ public class AdapterBaseTestContext extends AbstractTestContext { } catch (Throwable e) { throw new RuntimeException(e); } - + return this; } } \ No newline at end of file diff --git a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/ctx/FsMQManagerBaseTestContext.java b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/ctx/FsMQManagerBaseTestContext.java index 0542b35..dc64485 100644 --- a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/ctx/FsMQManagerBaseTestContext.java +++ b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/ctx/FsMQManagerBaseTestContext.java @@ -23,7 +23,7 @@ public class FsMQManagerBaseTestContext extends AbstractTestContext { } @Override - public void init() throws Throwable { + public FsMQManagerBaseTestContext init() throws Throwable { peerNames = new ArrayList<>(); peerNames.add("Alice"); peerNames.add("Bob"); @@ -31,6 +31,7 @@ public class FsMQManagerBaseTestContext extends AbstractTestContext { createPeerMapAndPeerList(); defineSelfAndUpdatePeers(); messages = FsMQManagerTestUtils.createTestMessages(self.getAddress(), MSG_COUNT); + return this; } private void createPeerMapAndPeerList() { diff --git a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/ctx/FsMQManagerTestContext.java b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/ctx/FsMQManagerTestContext.java index 261ecb3..6d10bca 100644 --- a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/ctx/FsMQManagerTestContext.java +++ b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/ctx/FsMQManagerTestContext.java @@ -10,10 +10,11 @@ public class FsMQManagerTestContext extends FsMQManagerBaseTestContext { } @Override - public void init() throws Throwable { + public FsMQManagerTestContext init() throws Throwable { super.init(); qm = new FsMQManager(self); qm.identities.addAll(peerList); + return this; } } \ No newline at end of file diff --git a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/identities/TestMain.java b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/identities/TestMain.java index 70f23b8..76ddb3b 100644 --- a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/identities/TestMain.java +++ b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/identities/TestMain.java @@ -31,8 +31,9 @@ class FsMQManagerIdentitiesTestContext extends AbstractTestContext { List messages; @Override - public void init() throws Throwable { + public FsMQManagerIdentitiesTestContext init() throws Throwable { messages = FsMQManagerTestUtils.createTestMessages(ownAddress, MSG_COUNT); + return this; } } diff --git a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx/TestMain.java b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx/TestMain.java index 3dd3070..f8aafe2 100644 --- a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx/TestMain.java +++ b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx/TestMain.java @@ -14,13 +14,13 @@ class FsMQManagerBaseTestContext extends AbstractTestContext { Entity carol; @Override - public void init() throws Throwable { + public FsMQManagerBaseTestContext init() throws Throwable { alice = new Entity("Alice"); bob = new Entity("Bob"); carol = new Entity("Carol"); alice.add(bob); alice.add(carol); - + return this; } class Entity { diff --git a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmsgqueue/test/regression/TestMain.java b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmsgqueue/test/regression/TestMain.java index 2dd38c2..3dfe994 100644 --- a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmsgqueue/test/regression/TestMain.java +++ b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmsgqueue/test/regression/TestMain.java @@ -20,9 +20,10 @@ class FsMsgQueueTestContext extends AbstractTestContext { FsMsgQueue queue; @Override - public void init() throws Throwable { + public FsMsgQueueTestContext init() throws Throwable { deleteQDir(); messages = createTestMessages(msgCount); + return this; } public void deleteQDir() { @@ -32,6 +33,7 @@ class FsMsgQueueTestContext extends AbstractTestContext { deleteRecursively(qDir); if (qDir.exists()) throw new RuntimeException("Cant delete Dir:" + qDirPath); } + } public ArrayList createTestMessages(int count) { diff --git a/test/java/foundation/pEp/pitytest/TestContextInterface.java b/test/java/foundation/pEp/pitytest/TestContextInterface.java index eadd972..cd75f46 100644 --- a/test/java/foundation/pEp/pitytest/TestContextInterface.java +++ b/test/java/foundation/pEp/pitytest/TestContextInterface.java @@ -1,7 +1,7 @@ package foundation.pEp.pitytest; public interface TestContextInterface { - void init() throws Throwable; + TestContextInterface init() throws Throwable; boolean isInitialized(); diff --git a/test/java/foundation/pEp/pitytest/examples/ctxinitfail/TestMain.java b/test/java/foundation/pEp/pitytest/examples/ctxinitfail/TestMain.java index 8f787de..125c2a2 100644 --- a/test/java/foundation/pEp/pitytest/examples/ctxinitfail/TestMain.java +++ b/test/java/foundation/pEp/pitytest/examples/ctxinitfail/TestMain.java @@ -10,9 +10,13 @@ class CtxInitFailContext extends AbstractTestContext { int result; @Override - public void init() throws Throwable { + public CtxInitFailContext init() throws RuntimeException { name = "PityTest"; + log("Hello World from: " + name); +// throw new RuntimeException("regddjkl"); result = 50 / 0; + + return this; } } diff --git a/test/java/foundation/pEp/pitytest/examples/ctxmembers/TestMain.java b/test/java/foundation/pEp/pitytest/examples/ctxmembers/TestMain.java index 7fcce08..11228c9 100644 --- a/test/java/foundation/pEp/pitytest/examples/ctxmembers/TestMain.java +++ b/test/java/foundation/pEp/pitytest/examples/ctxmembers/TestMain.java @@ -18,12 +18,13 @@ class CtxMembersTestContext extends AbstractTestContext { ExampleCtxMember incorrect = new ExampleCtxMember(false); // WRONG @Override - public void init() throws Throwable { + public CtxMembersTestContext init() throws Throwable { log("=== OUTPUT FROM TEST CONTEXT INIT BEGIN ==="); log(getTestContextName()+ " - init() called"); correct = new ExampleCtxMember(true); name = "PityTest"; log("=== OUTPUT FROM TEST CONTEXT INIT END ==="); + return this; } } diff --git a/test/java/foundation/pEp/pitytest/examples/helloworld/TestMain.java b/test/java/foundation/pEp/pitytest/examples/helloworld/TestMain.java index 1924aee..16044b1 100644 --- a/test/java/foundation/pEp/pitytest/examples/helloworld/TestMain.java +++ b/test/java/foundation/pEp/pitytest/examples/helloworld/TestMain.java @@ -7,8 +7,9 @@ class HelloWorldTestContext extends AbstractTestContext { String name; @Override - public void init() throws Throwable { + public HelloWorldTestContext init() throws Throwable { name = "PityTest"; + return this; } } diff --git a/test/java/foundation/pEp/pitytest/examples/testsuite/TestMain.java b/test/java/foundation/pEp/pitytest/examples/testsuite/TestMain.java index 06d2485..af96af1 100644 --- a/test/java/foundation/pEp/pitytest/examples/testsuite/TestMain.java +++ b/test/java/foundation/pEp/pitytest/examples/testsuite/TestMain.java @@ -6,8 +6,9 @@ class TestSuiteContext extends AbstractTestContext { String name; @Override - public void init() throws Throwable { + public TestSuiteContext init() throws Throwable { name = "PityTest"; + return this; } } From 3cfe31f3e42b6b68f6fe548a6be9f3f47342f91b Mon Sep 17 00:00:00 2001 From: heck Date: Sun, 13 Sep 2020 19:32:19 +0200 Subject: [PATCH 53/94] PityTest: TestUnit fix bug, not displaying exception on CTX_FAIL --- test/java/foundation/pEp/pitytest/TestUnit.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/test/java/foundation/pEp/pitytest/TestUnit.java b/test/java/foundation/pEp/pitytest/TestUnit.java index 1e4429d..d195cbb 100644 --- a/test/java/foundation/pEp/pitytest/TestUnit.java +++ b/test/java/foundation/pEp/pitytest/TestUnit.java @@ -90,7 +90,11 @@ public class TestUnit implements Runnable { } public Throwable getLastException() { - return lastException; + Throwable ret = new Throwable("No Exception caught"); + if(lastException != null) { + ret = lastException; + } + return ret; } public TestUnit add(TestSuite suite) { @@ -115,7 +119,7 @@ public class TestUnit implements Runnable { public void run() { TestUtils.standardOutErrEnabled(verboseMode); if (ctx.isUninitializable()) { - setTestState(TestState.CTX_FAIL); + setTestState(TestState.SKIPPED); TestUtils.standardOutErrEnabled(true); } else { try { @@ -177,7 +181,6 @@ public class TestUnit implements Runnable { } case CTX_FAIL: { setTestResult(TestState.SKIPPED); -// logH1(makeLogString()); break; } } @@ -188,7 +191,7 @@ public class TestUnit implements Runnable { result = r; TestUtils.standardOutErrEnabled(true); logH1(makeLogString()); - if (result == TestState.FAILED || result == TestState.CTX_FAIL) { + if (result == TestState.FAILED || state == TestState.CTX_FAIL) { log("ERROR: " + getLastException().toString()); } if (verboseMode) logRaw("\n\n"); From 611e06ba479a0805f43e52dd6ffd60f107ea8f8b Mon Sep 17 00:00:00 2001 From: heck Date: Sun, 13 Sep 2020 21:11:42 +0200 Subject: [PATCH 54/94] Test: JNI-118 basic --- .../pEp/jniadapter/test/jni118/Makefile | 37 ++++++ .../pEp/jniadapter/test/jni118/TestAlice.java | 107 ++++++++++++++++++ 2 files changed, 144 insertions(+) create mode 100644 test/java/foundation/pEp/jniadapter/test/jni118/Makefile create mode 100644 test/java/foundation/pEp/jniadapter/test/jni118/TestAlice.java diff --git a/test/java/foundation/pEp/jniadapter/test/jni118/Makefile b/test/java/foundation/pEp/jniadapter/test/jni118/Makefile new file mode 100644 index 0000000..d9d921c --- /dev/null +++ b/test/java/foundation/pEp/jniadapter/test/jni118/Makefile @@ -0,0 +1,37 @@ +include ../../../../../../../Makefile.conf +include ../Makefile.conf + +TEST_UNIT_NAME=jni118 + +JAVA_CLASSES = \ + TestAlice.class \ + ../utils/AdapterBaseTestContext.class \ + ../utils/AdapterTestUtils.class \ + ../utils/TestCallbacks.class + +.PHONY: pitytest compile alice test clean + +all: alice compile + +pitytest: + $(MAKE) -C $(PITYTEST_DIR) + +alice: compile clean-pep-home-alice + cd $(JAVA_CWD);pwd;HOME=$(JAVA_PEP_HOME_DIR_ALICE) $(JAVA) $(JAVA_PKG_BASENAME).$(TEST_UNIT_NAME).TestAlice + +compile: $(JAVA_CLASSES) pitytest + +%.class: %.java + cd $(JAVA_CWD);$(JAVAC_CMD) -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: clean-pep-home-alice + +clean-pep-home-alice: + rm -rf $(PEP_HOME_DIR_ALICE)/.pEp diff --git a/test/java/foundation/pEp/jniadapter/test/jni118/TestAlice.java b/test/java/foundation/pEp/jniadapter/test/jni118/TestAlice.java new file mode 100644 index 0000000..7f3380d --- /dev/null +++ b/test/java/foundation/pEp/jniadapter/test/jni118/TestAlice.java @@ -0,0 +1,107 @@ +package foundation.pEp.jniadapter.test.jni118; + +import static foundation.pEp.pitytest.TestLogger.*; + +import foundation.pEp.jniadapter.*; +import foundation.pEp.pitytest.*; +import foundation.pEp.pitytest.utils.TestUtils; +import foundation.pEp.jniadapter.test.utils.*; + +import java.util.ArrayList; +import java.util.Vector; + +// re_evaluate_message_rating(Message m) +// needs a msg that holds the OptFields: +// * X-EncStatus - containing the pEpEngine internal string value of the rating +// * X-KeyList - containing the FPR's of all the receivers of the msg +// +// Handling of PEP_Rating +// When app needs to add optional fields like X-EncStatus, the value has to be the string rep for a rating. +// These internal string representations can be obtained with the method: +// * Rating.getInternalStringValue() - returning the pEpEngine internal string value +// For human readable description of all the enums, use: +// * Rating.toString() +// +// A convenience method Message.addRatingToOptFields(Rating r) would be desirable +// +// X-KeyList +// New method to generate X-Keylist formatted FPR list: +// * String Identity.toXKeyList(List ids) +// +// A convenience method for adding X-KeyList for a message would be desirable +// * method Message.addIdentitiesToOptFields() + +// Test objectives +// re_evaluate_message_rating() equal to decrypt_message_result.rating when Message has correct OptFields +// re_evaluate_message_rating() equal to decrypt_message_result.rating when Message has random rating string on XEncStatus + + + +class JNI1118Context extends AdapterBaseTestContext { + public Message msgToBobEncrypted; + public Message msgToBobDecrypted; + public decrypt_message_Return msgToBobDecryptResult; + + @Override + public JNI1118Context init() throws Throwable { + super.init(); + alice = engine.myself(alice); + engine.importKey(keyBobPub); + + Vector msgToBobRcpts = new Vector<>(); + msgToBobRcpts.add(bob); + msgToBob.setTo(msgToBobRcpts); + + msgToBobEncrypted = engine.encrypt_message(msgToBob, null, Message.EncFormat.PEP); + msgToBobDecrypted = msgToBobEncrypted; + msgToBobDecryptResult = engine.decrypt_message(msgToBobDecrypted, new Vector(), 0); + if (msgToBobEncrypted == null) { + throw new RuntimeException("Context failure, error decrypting message"); + } + return this; + } + + public void addRatingToOptFields(Message msg, String ratingStr) { + ArrayList> opts = msg.getOptFields(); + opts.add(new Pair("X-EncStatus",ratingStr)); + msg.setOptFields(opts); + } + + public void addRcptsToOptFields(Message msg, String fprs) { + ArrayList> opts = msg.getOptFields(); + opts.add(new Pair("X-KeyList", fprs)); + msg.setOptFields(opts); + } + +} + +class TestAlice { + public static void main(String[] args) throws Throwable { + TestSuite.getDefault().setVerbose(true); + TestSuite.getDefault().setTestColor(TestUtils.TermColor.GREEN); + + new TestUnit("re_evaluate_message_rating() equal to decrypt_message_result.rating when Message has correct OptFields", new JNI1118Context(), ctx -> { + ctx.addRatingToOptFields(ctx.msgToBobDecrypted,ctx.msgToBobDecryptResult.rating.getInternalStringValue()); + ctx.addRcptsToOptFields(ctx.msgToBobDecrypted,Identity.toXKeyList(ctx.msgToBobDecrypted.getTo())); + log("running re_evaluate_message_rating() on:\n" + AdapterTestUtils.msgToString(ctx.msgToBobDecrypted, false)); + Rating rat = ctx.engine.re_evaluate_message_rating(ctx.msgToBobDecrypted); + log("re_evaluate_message_rating() result: " + rat.toString()); + assert rat == ctx.msgToBobDecryptResult.rating : "Rating is " + rat.toString() + ",but should be " + ctx.msgToBobDecryptResult.rating.toString(); + }); + + new TestUnit("re_evaluate_message_rating() equal to decrypt_message_result.rating when Message has random rating string on XEncStatus", new JNI1118Context(), ctx -> { + ctx.addRatingToOptFields(ctx.msgToBobDecrypted, TestUtils.randomASCIIString(TestUtils.CharClass.Unbounded, TestUtils.randomInt(0,42))); + ctx.addRcptsToOptFields(ctx.msgToBobDecrypted,Identity.toXKeyList(ctx.msgToBobDecrypted.getTo())); + log("running re_evaluate_message_rating() on:\n" + AdapterTestUtils.msgToString(ctx.msgToBobDecrypted, false)); + Rating rat = ctx.engine.re_evaluate_message_rating(ctx.msgToBobDecrypted); + log("re_evaluate_message_rating() result: " + rat.toString()); + assert rat == ctx.msgToBobDecryptResult.rating : "Rating is " + rat.toString() + ",but should be " + ctx.msgToBobDecryptResult.rating.toString(); + }); + + + + TestSuite.getDefault().run(); + } +} + + From bf886a2afbbda3302e78326299c2bfffc660341c Mon Sep 17 00:00:00 2001 From: heck Date: Sun, 13 Sep 2020 21:19:13 +0200 Subject: [PATCH 55/94] Tests: regression, fix re_evaluate_message_rating(), move repetition into contexts --- .../jniadapter/test/regression/TestMain.java | 226 ++++++++++-------- 1 file changed, 129 insertions(+), 97 deletions(-) diff --git a/test/java/foundation/pEp/jniadapter/test/regression/TestMain.java b/test/java/foundation/pEp/jniadapter/test/regression/TestMain.java index cbaceb9..d59393d 100644 --- a/test/java/foundation/pEp/jniadapter/test/regression/TestMain.java +++ b/test/java/foundation/pEp/jniadapter/test/regression/TestMain.java @@ -3,268 +3,300 @@ import foundation.pEp.pitytest.*; import foundation.pEp.jniadapter.test.utils.*; import foundation.pEp.jniadapter.*; -class RegTestContext extends AdapterBaseTestContext { - // enhance the context +import java.util.ArrayList; +import java.util.Vector; +import static foundation.pEp.pitytest.TestLogger.log; + +class CTXAlice extends AdapterBaseTestContext { + @Override + public CTXAlice init() throws Throwable { + super.init(); + alice = engine.myself(alice); + return this; + } +} + +class CTXAlice2 extends CTXAlice { @Override - public void init() throws Throwable { + public CTXAlice2 init() throws Throwable { super.init(); - // init the enhancements + engine.importKey(keyBobSec); + bob = engine.updateIdentity(bob); + return this; } } +// Almost exact copy of JNI1118Context, we need a shared context hierarchy +class CTXReEvaluateMessageRating extends AdapterBaseTestContext { + public Message msgToBobEncrypted; + public Message msgToBobDecrypted; + public decrypt_message_Return msgToBobDecryptResult; + + @Override + public CTXReEvaluateMessageRating init() throws Throwable { + super.init(); + alice = engine.myself(alice); + engine.importKey(keyBobPub); + + Vector msgToBobRcpts = new Vector<>(); + msgToBobRcpts.add(bob); + msgToBob.setTo(msgToBobRcpts); + + msgToBobEncrypted = engine.encrypt_message(msgToBob, null, Message.EncFormat.PEP); + msgToBobDecrypted = msgToBobEncrypted; + msgToBobDecryptResult = engine.decrypt_message(msgToBobDecrypted, new Vector(), 0); + if (msgToBobEncrypted == null) { + throw new RuntimeException("Context failure, error decrypting message"); + } + + addRatingToOptFields(msgToBobDecrypted, msgToBobDecryptResult.rating.getInternalStringValue()); + addRcptsToOptFields(msgToBobDecrypted, Identity.toXKeyList(msgToBobDecrypted.getTo())); + return this; + } + + public void addRatingToOptFields(Message msg, String ratingStr) { + ArrayList> opts = msg.getOptFields(); + opts.add(new Pair("X-EncStatus",ratingStr)); + msg.setOptFields(opts); + } + + public void addRcptsToOptFields(Message msg, String fprs) { + ArrayList> opts = msg.getOptFields(); + opts.add(new Pair("X-KeyList", fprs)); + msg.setOptFields(opts); + } + +} + class TestMain { public static void main(String[] args) { TestSuite.getDefault().setVerbose(false); - new TestUnit("Engine.myself", new RegTestContext(), ctx -> { + new TestUnit("Engine.myself", new AdapterBaseTestContext(), ctx -> { ctx.alice = ctx.engine.myself(ctx.alice); }); - new TestUnit("Engine.encrypt_message", new RegTestContext(), ctx -> { + new TestUnit("Engine.encrypt_message", new AdapterBaseTestContext(), ctx -> { ctx.engine.encrypt_message(ctx.msgToBob, null, Message.EncFormat.PEP); }); - new TestUnit("Engine.encrypt_message_and_add_priv_key", new RegTestContext(), ctx -> { - ctx.alice = ctx.engine.myself(ctx.alice); + new TestUnit("Engine.encrypt_message_and_add_priv_key", new CTXAlice(), ctx -> { ctx.engine.encrypt_message_and_add_priv_key(ctx.msgToSelf, ctx.alice.fpr); }); - new TestUnit("Engine.encrypt_message_for_self", new RegTestContext(), ctx -> { - ctx.alice = ctx.engine.myself(ctx.alice); + new TestUnit("Engine.encrypt_message_for_self", new CTXAlice(), ctx -> { ctx.engine.encrypt_message_for_self(ctx.alice, ctx.msgToSelf, null); }); - new TestUnit("Engine.decrypt_message", new RegTestContext(), ctx -> { - ctx.engine.decrypt_message(ctx.msgToSelf, ctx.vStr, 0); + new TestUnit("Engine.decrypt_message", new AdapterBaseTestContext(), ctx -> { + ctx.engine.decrypt_message(ctx.msgToSelf, new Vector(), 0); }); - //TODO: Coredump -// new TestUnit("Engine.re_evaluate_message_rating", new RegTestContext(), ctx -> { -// ctx.alice = ctx.engine.myself(ctx.alice); -// ctx.bob = ctx.engine.myself(ctx.bob); -// Message msg = ctx.engine.encrypt_message(ctx.msgToBob,null, Message.EncFormat.PEP); -// ctx.engine.re_evaluate_message_rating(msg); -// }); + new TestUnit("Engine.re_evaluate_message_rating", new CTXReEvaluateMessageRating(), ctx -> { + ctx.engine.re_evaluate_message_rating(ctx.msgToBobDecrypted); + }); - new TestUnit("Engine.outgoing_message_rating", new RegTestContext(), ctx -> { + new TestUnit("Engine.outgoing_message_rating", new AdapterBaseTestContext(), ctx -> { ctx.engine.outgoing_message_rating(ctx.msgToBob); }); - new TestUnit("Engine.outgoing_message_rating_preview", new RegTestContext(), ctx -> { + new TestUnit("Engine.outgoing_message_rating_preview", new AdapterBaseTestContext(), ctx -> { ctx.engine.outgoing_message_rating_preview(ctx.msgToBob); }); - new TestUnit("Engine.get_identity", new RegTestContext(), ctx -> { - ctx.alice = ctx.engine.myself(ctx.alice); + new TestUnit("Engine.get_identity", new CTXAlice(), ctx -> { ctx.engine.get_identity(ctx.alice.address, ctx.alice.user_id); }); - new TestUnit("Engine.identity_rating", new RegTestContext(), ctx -> { - ctx.alice = ctx.engine.myself(ctx.alice); + new TestUnit("Engine.identity_rating", new CTXAlice(), ctx -> { ctx.engine.identity_rating(ctx.alice); }); - new TestUnit("Engine.blacklist_retrieve", new RegTestContext(), ctx -> { + new TestUnit("Engine.blacklist_retrieve", new AdapterBaseTestContext(), ctx -> { ctx.engine.blacklist_retrieve(); }); - //FAIL - new TestUnit("Engine.own_message_private_key_details", new RegTestContext(), ctx -> { - ctx.alice = ctx.engine.myself(ctx.alice); - ctx.bob = ctx.engine.myself(ctx.bob); - - ctx.engine.encrypt_message(ctx.msgToBob, null, Message.EncFormat.PEP); - ctx.engine.own_message_private_key_details(ctx.msgToBob); - }); +// TODO: FAILS +// new TestUnit("Engine.own_message_private_key_details", new CTXAlice2(), ctx -> { +// ctx.engine.own_message_private_key_details(ctx.msgToSelf); +// }); - new TestUnit("Engine.OpenPGP_list_keyinfo", new RegTestContext(), ctx -> { + new TestUnit("Engine.OpenPGP_list_keyinfo", new AdapterBaseTestContext(), ctx -> { ctx.engine.OpenPGP_list_keyinfo(""); }); - new TestUnit("Engine.set_identity_flags", new RegTestContext(), ctx -> { + new TestUnit("Engine.set_identity_flags", new AdapterBaseTestContext(), ctx -> { ctx.engine.set_identity_flags(ctx.alice, 0); }); - new TestUnit("Engine.unset_identity_flags", new RegTestContext(), ctx -> { + new TestUnit("Engine.unset_identity_flags", new AdapterBaseTestContext(), ctx -> { ctx.engine.unset_identity_flags(ctx.alice, 0); }); - new TestUnit("Engine.own_identities_retrieve", new RegTestContext(), ctx -> { + new TestUnit("Engine.own_identities_retrieve", new AdapterBaseTestContext(), ctx -> { ctx.engine.own_identities_retrieve(); }); - new TestUnit("Engine.get_trustwords", new RegTestContext(), ctx -> { - ctx.alice = ctx.engine.myself(ctx.alice); - ctx.bob = ctx.engine.myself(ctx.bob); + new TestUnit("Engine.get_trustwords", new CTXAlice2(), ctx -> { ctx.engine.get_trustwords(ctx.alice, ctx.bob, "en", false); }); - new TestUnit("Engine.get_trustwords_for_fprs", new RegTestContext(), ctx -> { - ctx.alice = ctx.engine.myself(ctx.alice); - ctx.bob = ctx.engine.myself(ctx.bob); - + new TestUnit("Engine.get_trustwords_for_fprs", new CTXAlice2(), ctx -> { ctx.engine.get_trustwords_for_fprs(ctx.alice.fpr, ctx.bob.fpr, "en", false); }); - new TestUnit("Engine.get_message_trustwords", new RegTestContext(), ctx -> { + new TestUnit("Engine.get_message_trustwords", new AdapterBaseTestContext(), ctx -> { ctx.engine.get_message_trustwords(ctx.msgToBob, null, ctx.bob, "en", false); }); - new TestUnit("Engine.get_languagelist", new RegTestContext(), ctx -> { + new TestUnit("Engine.get_languagelist", new AdapterBaseTestContext(), ctx -> { ctx.engine.get_languagelist(); }); - new TestUnit("Engine.key_reset_trust", new RegTestContext(), ctx -> { - ctx.alice = ctx.engine.myself(ctx.alice); + new TestUnit("Engine.key_reset_trust", new CTXAlice(), ctx -> { ctx.engine.key_reset_trust(ctx.alice); }); - new TestUnit("Engine.key_reset_identity", new RegTestContext(), ctx -> { - ctx.alice = ctx.engine.myself(ctx.alice); + new TestUnit("Engine.key_reset_identity", new CTXAlice(), ctx -> { ctx.engine.key_reset_identity(ctx.alice, ""); }); - new TestUnit("Engine.key_reset_user", new RegTestContext(), ctx -> { - ctx.alice = ctx.engine.myself(ctx.alice); + new TestUnit("Engine.key_reset_user", new CTXAlice(), ctx -> { ctx.engine.key_reset_user("fsdjugsh", ctx.alice.fpr); }); - new TestUnit("Engine.key_reset_all_own_keys", new RegTestContext(), ctx -> { + new TestUnit("Engine.key_reset_all_own_keys", new AdapterBaseTestContext(), ctx -> { ctx.engine.key_reset_all_own_keys(); }); - new TestUnit("Engine.deliverHandshakeResult", new RegTestContext(), ctx -> { - ctx.engine.deliverHandshakeResult(SyncHandshakeResult.SyncHandshakeCancel, ctx.vID); - }); - +// TODO: FAILS +// new TestUnit("Engine.deliverHandshakeResult", new AdapterBaseTestContext(), ctx -> { +// ctx.engine.deliverHandshakeResult(SyncHandshakeResult.SyncHandshakeCancel, ctx.vID); +// }); - //[17:51] < heck> | this one fails since: 4665:f067c9e95455 - //[17:52] < heck> | i confirmed it still works in the parent revision 4662:71147c43e31b - //[17:52] < heck> | the error i get is: - //[17:53] < heck> | *** send message KeySync Beacon service KeySync_fsm.c:234 - //[17:53] < heck> | Assertion failed: (msg->from && msg->from->fpr), function attach_own_key, file message_api.c, line 1581. -// new TestUnit("Engine.leave_device_group", new RegTestContext(), ctx -> { +// TODO: FAILS +// [17:51] < heck> | this one fails since: 4665:f067c9e95455 +// [17:52] < heck> | i confirmed it still works in the parent revision 4662:71147c43e31b +// [17:52] < heck> | the error i get is: +// [17:53] < heck> | *** send message KeySync Beacon service KeySync_fsm.c:234 +// [17:53] < heck> | Assertion failed: (msg->from && msg->from->fpr), function attach_own_key, file message_api.c, line 1581. +// new TestUnit("Engine.leave_device_group", new AdapterBaseTestContext(), ctx -> { // ctx.engine.startSync(); // ctx.engine.leave_device_group(); // }); - new TestUnit("Engine.enable_identity_for_sync", new RegTestContext(), ctx -> { - ctx.alice = ctx.engine.myself(ctx.alice); + new TestUnit("Engine.enable_identity_for_sync", new CTXAlice(), ctx -> { ctx.engine.enable_identity_for_sync(ctx.alice); }); - new TestUnit("Engine.disable_identity_for_sync", new RegTestContext(), ctx -> { - ctx.alice = ctx.engine.myself(ctx.alice); + new TestUnit("Engine.disable_identity_for_sync", new CTXAlice(), ctx -> { ctx.engine.disable_identity_for_sync(ctx.alice); }); - new TestUnit("Engine.config_cipher_suite", new RegTestContext(), ctx -> { + new TestUnit("Engine.config_cipher_suite", new AdapterBaseTestContext(), ctx -> { ctx.engine.config_cipher_suite(CipherSuite.pEpCipherSuiteDefault); }); - new TestUnit("Engine.trustwords", new RegTestContext(), ctx -> { + new TestUnit("Engine.trustwords", new AdapterBaseTestContext(), ctx -> { ctx.engine.trustwords(ctx.alice); }); - new TestUnit("Engine.updateIdentity", new RegTestContext(), ctx -> { + new TestUnit("Engine.updateIdentity", new AdapterBaseTestContext(), ctx -> { ctx.engine.updateIdentity(ctx.alice); }); - new TestUnit("Engine.setOwnKey", new RegTestContext(), ctx -> { - ctx.alice = ctx.engine.myself(ctx.alice); + new TestUnit("Engine.setOwnKey", new CTXAlice(), ctx -> { ctx.engine.setOwnKey(ctx.alice, ctx.alice.fpr); }); - new TestUnit("Engine.keyMistrusted", new RegTestContext(), ctx -> { - ctx.alice = ctx.engine.myself(ctx.alice); + new TestUnit("Engine.keyMistrusted", new CTXAlice(), ctx -> { ctx.engine.keyMistrusted(ctx.alice); }); - new TestUnit("Engine.keyResetTrust", new RegTestContext(), ctx -> { + new TestUnit("Engine.keyResetTrust", new AdapterBaseTestContext(), ctx -> { ctx.engine.keyResetTrust(ctx.alice); }); - new TestUnit("Engine.trustPersonalKey", new RegTestContext(), ctx -> { + new TestUnit("Engine.trustPersonalKey", new AdapterBaseTestContext(), ctx -> { ctx.engine.trustPersonalKey(ctx.alice); }); - new TestUnit("Engine.trustOwnKey", new RegTestContext(), ctx -> { - ctx.alice = ctx.engine.myself(ctx.alice); + new TestUnit("Engine.trustOwnKey", new CTXAlice(), ctx -> { ctx.engine.trustOwnKey(ctx.alice); }); - new TestUnit("Engine.importKey", new RegTestContext(), ctx -> { + new TestUnit("Engine.importKey", new AdapterBaseTestContext(), ctx -> { ctx.engine.importKey(ctx.keyBobPub); }); - new TestUnit("Engine.blacklist_add", new RegTestContext(), ctx -> { + new TestUnit("Engine.blacklist_add", new AdapterBaseTestContext(), ctx -> { ctx.engine.blacklist_add("43"); }); - new TestUnit("Engine.blacklist_delete", new RegTestContext(), ctx -> { + new TestUnit("Engine.blacklist_delete", new AdapterBaseTestContext(), ctx -> { ctx.engine.blacklist_delete("43"); }); - new TestUnit("Engine.blacklist_is_listed", new RegTestContext(), ctx -> { + new TestUnit("Engine.blacklist_is_listed", new AdapterBaseTestContext(), ctx -> { ctx.engine.blacklist_is_listed("43"); }); - new TestUnit("Engine.config_passive_mode", new RegTestContext(), ctx -> { + new TestUnit("Engine.config_passive_mode", new AdapterBaseTestContext(), ctx -> { ctx.engine.config_passive_mode(false); }); - new TestUnit("Engine.config_unencrypted_subject", new RegTestContext(), ctx -> { + new TestUnit("Engine.config_unencrypted_subject", new AdapterBaseTestContext(), ctx -> { ctx.engine.config_unencrypted_subject(false); }); - new TestUnit("Engine.getCrashdumpLog", new RegTestContext(), ctx -> { + new TestUnit("Engine.getCrashdumpLog", new AdapterBaseTestContext(), ctx -> { ctx.engine.getCrashdumpLog(0); }); - new TestUnit("Engine.getUserDirectory", new RegTestContext(), ctx -> { + new TestUnit("Engine.getUserDirectory", new AdapterBaseTestContext(), ctx -> { ctx.engine.getUserDirectory(); }); - new TestUnit("Engine.getMachineDirectory", new RegTestContext(), ctx -> { + new TestUnit("Engine.getMachineDirectory", new AdapterBaseTestContext(), ctx -> { ctx.engine.getMachineDirectory(); }); // AbstractEngine.java - new TestUnit("Engine.close", new RegTestContext(), ctx -> { + new TestUnit("Engine.close", new AdapterBaseTestContext(), ctx -> { ctx.engine.close(); }); - new TestUnit("Engine.getVersion", new RegTestContext(), ctx -> { + new TestUnit("Engine.getVersion", new AdapterBaseTestContext(), ctx -> { ctx.engine.getVersion(); }); - new TestUnit("Engine.getProtocolVersion", new RegTestContext(), ctx -> { + new TestUnit("Engine.getProtocolVersion", new AdapterBaseTestContext(), ctx -> { ctx.engine.getProtocolVersion(); }); - new TestUnit("Engine.startKeyserverLookup", new RegTestContext(), ctx -> { + new TestUnit("Engine.startKeyserverLookup", new AdapterBaseTestContext(), ctx -> { ctx.engine.startKeyserverLookup(); }); - new TestUnit("Engine.startSync", new RegTestContext(), ctx -> { + new TestUnit("Engine.startSync", new AdapterBaseTestContext(), ctx -> { ctx.engine.startSync(); }); - new TestUnit("Engine.stopSync", new RegTestContext(), ctx -> { + new TestUnit("Engine.stopSync", new AdapterBaseTestContext(), ctx -> { ctx.engine.stopSync(); }); - new TestUnit("Engine.isSyncRunning", new RegTestContext(), ctx -> { + new TestUnit("Engine.isSyncRunning", new AdapterBaseTestContext(), ctx -> { ctx.engine.isSyncRunning(); }); - new TestUnit("Engine.config_passphrase",new RegTestContext() , ctx -> { + new TestUnit("Engine.config_passphrase",new AdapterBaseTestContext() , ctx -> { ctx.engine.config_passphrase("SUPERCOMPLICATEDPASSPHRASE"); }); - new TestUnit("Engine.config_passphrase_for_new_keys",new RegTestContext() , ctx -> { + new TestUnit("Engine.config_passphrase_for_new_keys",new AdapterBaseTestContext() , ctx -> { ctx.engine.config_passphrase_for_new_keys(true, "SUPERCOMPLICATEDPASSPHRASE"); }); From 6346f86484cc07256463aa60049907103fafdea5 Mon Sep 17 00:00:00 2001 From: heck Date: Sun, 13 Sep 2020 21:29:43 +0200 Subject: [PATCH 56/94] Test: JNI-118 added to main test Makefile --- test/java/foundation/pEp/jniadapter/test/Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/java/foundation/pEp/jniadapter/test/Makefile b/test/java/foundation/pEp/jniadapter/test/Makefile index 6271115..f2dd0b5 100644 --- a/test/java/foundation/pEp/jniadapter/test/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/Makefile @@ -18,6 +18,7 @@ run: compile $(MAKE) -C jni111 run $(MAKE) -C jni114 run $(MAKE) -C jni115 run + $(MAKE) -C jni118 run compile: $(MAKE) -C templateAlice compile @@ -35,6 +36,7 @@ compile: $(MAKE) -C jni111 compile $(MAKE) -C jni114 compile $(MAKE) -C jni115 compile + $(MAKE) -C jni118 compile clean: $(MAKE) -C templateAlice clean @@ -52,6 +54,7 @@ clean: $(MAKE) -C jni111 clean $(MAKE) -C jni114 clean $(MAKE) -C jni115 clean + $(MAKE) -C jni118 clean clean-pep-home: $(MAKE) -C basic clean-pep-home From 5070920c81b9968ef0c1255c10494b0fc51cad32 Mon Sep 17 00:00:00 2001 From: heck Date: Sun, 13 Sep 2020 23:12:19 +0200 Subject: [PATCH 57/94] Add enter_device_group() --- src/codegen/pEp.yml2 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/codegen/pEp.yml2 b/src/codegen/pEp.yml2 index 12033e8..dbec115 100644 --- a/src/codegen/pEp.yml2 +++ b/src/codegen/pEp.yml2 @@ -246,6 +246,9 @@ namespace pEp { in CipherSuite suite ); + method enter_device_group( + in identitylist identities const + ); // "basic" methods are generated on the java side, but // on the C++ side, manually implemented in basic_api.cc From 35861db3b77d52f5bc3c548fe734288ffa527961 Mon Sep 17 00:00:00 2001 From: heck Date: Sun, 13 Sep 2020 23:12:57 +0200 Subject: [PATCH 58/94] Tests: Add JNI-119 - enter_device_group() --- .../pEp/jniadapter/test/jni119/Makefile | 37 +++++++++++++++++++ .../pEp/jniadapter/test/jni119/TestAlice.java | 37 +++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 test/java/foundation/pEp/jniadapter/test/jni119/Makefile create mode 100644 test/java/foundation/pEp/jniadapter/test/jni119/TestAlice.java diff --git a/test/java/foundation/pEp/jniadapter/test/jni119/Makefile b/test/java/foundation/pEp/jniadapter/test/jni119/Makefile new file mode 100644 index 0000000..329571b --- /dev/null +++ b/test/java/foundation/pEp/jniadapter/test/jni119/Makefile @@ -0,0 +1,37 @@ +include ../../../../../../../Makefile.conf +include ../Makefile.conf + +TEST_UNIT_NAME=jni119 + +JAVA_CLASSES = \ + TestAlice.class \ + ../utils/AdapterBaseTestContext.class \ + ../utils/AdapterTestUtils.class \ + ../utils/TestCallbacks.class + +.PHONY: pitytest compile alice test clean + +all: alice compile + +pitytest: + $(MAKE) -C $(PITYTEST_DIR) + +alice: compile clean-pep-home-alice + cd $(JAVA_CWD);pwd;HOME=$(JAVA_PEP_HOME_DIR_ALICE) $(JAVA) $(JAVA_PKG_BASENAME).$(TEST_UNIT_NAME).TestAlice + +compile: $(JAVA_CLASSES) pitytest + +%.class: %.java + cd $(JAVA_CWD);$(JAVAC_CMD) -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: clean-pep-home-alice + +clean-pep-home-alice: + rm -rf $(PEP_HOME_DIR_ALICE)/.pEp diff --git a/test/java/foundation/pEp/jniadapter/test/jni119/TestAlice.java b/test/java/foundation/pEp/jniadapter/test/jni119/TestAlice.java new file mode 100644 index 0000000..304732b --- /dev/null +++ b/test/java/foundation/pEp/jniadapter/test/jni119/TestAlice.java @@ -0,0 +1,37 @@ +package foundation.pEp.jniadapter.test.jni119; + +import foundation.pEp.jniadapter.Identity; +import foundation.pEp.jniadapter.test.utils.AdapterBaseTestContext; +import foundation.pEp.pitytest.TestSuite; +import foundation.pEp.pitytest.TestUnit; +import foundation.pEp.pitytest.utils.TestUtils; + +import java.util.Vector; + + +class TestAlice { + public static void main(String[] args) throws Throwable { + TestSuite.getDefault().setVerbose(true); + TestSuite.getDefault().setTestColor(TestUtils.TermColor.GREEN); + + new TestUnit("enter_device_group() no exception with no identities", new AdapterBaseTestContext(), ctx -> { + ctx.alice = ctx.engine.myself(ctx.alice); + ctx.engine.enter_device_group(new Vector()); + }); + + new TestUnit("enter_device_group() no exception with 2 identities", new AdapterBaseTestContext(), ctx -> { + ctx.alice = ctx.engine.myself(ctx.alice); + ctx.bob = ctx.engine.myself(ctx.bob); + + Vector grpIdents = new Vector(); + grpIdents.add(ctx.alice); + grpIdents.add(ctx.bob); + + ctx.engine.enter_device_group(grpIdents); + }); + + TestSuite.getDefault().run(); + } +} + + From 9586c9d0dc73644c3894a60d51a68479bd003baf Mon Sep 17 00:00:00 2001 From: heck Date: Tue, 15 Sep 2020 23:34:36 +0200 Subject: [PATCH 60/94] javah, fix build using java 8 (javah instead of javac -h) --- Makefile.conf | 24 ++++++++++++++++++------ src/Makefile | 10 ++++++---- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/Makefile.conf b/Makefile.conf index 02e0872..8e567e0 100644 --- a/Makefile.conf +++ b/Makefile.conf @@ -25,13 +25,8 @@ ifeq ($(PLATFORM),linux) 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 - JAVAC_CMD=javac -encoding UTF-8 +JAVAH_CMD=javah -encoding UTF-8 ######### Overrides from the config file(s) ######### ifneq ("$(wildcard $(HERE)local.conf)","") @@ -51,6 +46,12 @@ ifndef JAVA_HOME $(error JAVA_HOME is not set!) 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 + JAVA_BIN_DIR=$(JAVA_HOME)/bin ######### C and C++ ######### @@ -75,3 +76,14 @@ endif ### YML_PATH is needed in the environment of every call to a program of the YML2 distribution export YML_PATH=$(YML2_PATH) +# BEGIN // kryptic hack to to replace a space with a newline +# $(subst ${ },${space}, whatever) +null := +space := ${null} ${null} +${space} := ${space} + +define \n + + +endef +# END // kryptic hack to to replace a space with a newline diff --git a/src/Makefile b/src/Makefile index 08dc37b..926d660 100644 --- a/src/Makefile +++ b/src/Makefile @@ -50,9 +50,9 @@ CXX_DIR=cxx/ JAVA_DIR=java/ JAVA_PKG_BASENAME=foundation/pEp/jniadapter/ -JAVA_PKG_ROOT=$(JAVA_DIR)/$(JAVA_PKG_BASENAME) -JAVA_BUILD_ROOT=$(BUILD_ROOT)/$(JAVA_DIR) -OBJ_DIR=$(BUILD_ROOT)/$(CXX_DIR) +JAVA_PKG_ROOT=$(JAVA_DIR)$(JAVA_PKG_BASENAME) +JAVA_BUILD_ROOT=$(BUILD_ROOT)$(JAVA_DIR) +OBJ_DIR=$(BUILD_ROOT)$(CXX_DIR) # for "make clean" only @@ -142,9 +142,11 @@ $(OBJECTS): $(BUILD_ROOT)%.o: %.cc # --------- Generate JNI headers ---------- gen-jni-headers: codegen $(JNI_GENERATED_HH) +# "new" javac -h accepts list of java files +# While "old" (Java 8) javah needs a list of java classes (e.g. foundation.pEp.jniadapter.Message) $(JNI_GENERATED_HH): ifdef OLD_JAVA - cd $(JAVA_DIR);$(JAVA_BIN_DIR)/javah -d ../$(JAVA_BUILD_ROOT) $(subst /,.,$(subst .java,,$<)) + cd $(JAVA_BUILD_ROOT)/;$(JAVA_BIN_DIR)/$(JAVAH_CMD) -d ../../src/$(CXX_DIR) $(subst ${ },${space}\${\n}, $(subst /,.,$(subst $(JAVA_BUILD_ROOT),,$(basename $(sort $(wildcard $(JAVA_BUILD_ROOT)$(JAVA_PKG_BASENAME)*.class/)))))) else cd $(JAVA_DIR);$(JAVA_BIN_DIR)/$(JAVAC_CMD) -d ../$(JAVA_BUILD_ROOT) -h ../$(CXX_DIR)/ $(JAVA_PKG_BASENAME)/*.java endif From 6d43f1745fc2e919df4a942cd7565406a22d2615 Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 16 Sep 2020 18:19:08 +0200 Subject: [PATCH 62/94] added build option: USE_JAVAH - explicitly enable/disable use of javah over javac -h (if autodetect doesnt work correctly) --- Makefile.conf | 22 ++++++++++++++-------- local.conf.example | 1 + src/Makefile | 3 ++- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/Makefile.conf b/Makefile.conf index 8e567e0..d202643 100644 --- a/Makefile.conf +++ b/Makefile.conf @@ -5,10 +5,12 @@ HERE:=$(dir $(lastword $(MAKEFILE_LIST))) PLATFORM:=$(shell uname | tr A-Z a-z) +JAVAC_CMD=javac -encoding UTF-8 +JAVAH_CMD=javah -encoding UTF-8 # DEV ENV PATHS & CFG -# The dev environment paths and configs are set to a default value which can be overridden by ./local.conf and overridden again by /local.conf -######### Build Config Defaults ######### +# The build settings are set to a default value which can be overridden by using ./local.conf +######### DEFAULTS ######### DEBUG=0 PREFIX=$(HOME) YML2_PATH=$(PREFIX)/src/yml2 @@ -19,14 +21,13 @@ ENGINE_INC_PATH=$(PREFIX)/include AD_LIB_PATH=$(PREFIX)/lib AD_INC_PATH=$(PREFIX)/include + ### Guessing JAVA_HOME ifeq ($(PLATFORM),linux) JAVA_HOME=$(subst /bin,,$(dir $(realpath /usr/bin/javac))) endif -JAVAC_CMD=javac -encoding UTF-8 -JAVAH_CMD=javah -encoding UTF-8 ######### Overrides from the config file(s) ######### ifneq ("$(wildcard $(HERE)local.conf)","") @@ -46,10 +47,15 @@ ifndef JAVA_HOME $(error JAVA_HOME is not set!) 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 +# Guessing USE_JAVAH +# cant be guessed earlier, because we depend on JAVA_HOME which can be set in the local.conf +# Old versions of a Java distribution have a `javah` binary, new version do not and the replacement is "javac -h" +# TODO: dont check for presence of javah, but check if javac -h is supported, because some java (RHEL) has javah but supports javac -h +ifndef USE_JAVAH + DUMMY:=$(shell which $(JAVA_HOME)/bin/javah) + ifeq ($(.SHELLSTATUS),0) + USE_JAVAH=1 + endif endif JAVA_BIN_DIR=$(JAVA_HOME)/bin diff --git a/local.conf.example b/local.conf.example index 310de4b..6cc3be8 100644 --- a/local.conf.example +++ b/local.conf.example @@ -14,6 +14,7 @@ ############ JAVA ############## # JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home +# USE_JAVAH=0 # keep the build from using javah ############ YML2 ############## # YML2_PATH=$(HOME)/src/yml2 diff --git a/src/Makefile b/src/Makefile index 926d660..477f6cc 100644 --- a/src/Makefile +++ b/src/Makefile @@ -33,6 +33,7 @@ $(info PLATFORM: $(PLATFORM)) $(info DEBUG: $(DEBUG)) $(info CXX: $(CXX)) $(info JAVA_HOME: $(JAVA_HOME)) +$(info USE_JAVAH: $(USE_JAVAH)) $(info ENGINE_LIB_PATH: $(ENGINE_LIB_PATH)) $(info ENGINE_INC_PATH: $(ENGINE_INC_PATH)) $(info AD_LIB_PATH: $(AD_LIB_PATH)) @@ -145,7 +146,7 @@ gen-jni-headers: codegen $(JNI_GENERATED_HH) # "new" javac -h accepts list of java files # While "old" (Java 8) javah needs a list of java classes (e.g. foundation.pEp.jniadapter.Message) $(JNI_GENERATED_HH): -ifdef OLD_JAVA +ifeq ($(USE_JAVAH),1) cd $(JAVA_BUILD_ROOT)/;$(JAVA_BIN_DIR)/$(JAVAH_CMD) -d ../../src/$(CXX_DIR) $(subst ${ },${space}\${\n}, $(subst /,.,$(subst $(JAVA_BUILD_ROOT),,$(basename $(sort $(wildcard $(JAVA_BUILD_ROOT)$(JAVA_PKG_BASENAME)*.class/)))))) else cd $(JAVA_DIR);$(JAVA_BIN_DIR)/$(JAVAC_CMD) -d ../$(JAVA_BUILD_ROOT) -h ../$(CXX_DIR)/ $(JAVA_PKG_BASENAME)/*.java From 59cc0b45962e2ba0097ed898ece8f29ed144c5db Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 16 Sep 2020 18:33:51 +0200 Subject: [PATCH 63/94] fix javah (still works on debian jdk8u265-b01 at least) --- src/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile b/src/Makefile index 477f6cc..deaa63a 100644 --- a/src/Makefile +++ b/src/Makefile @@ -147,7 +147,7 @@ gen-jni-headers: codegen $(JNI_GENERATED_HH) # While "old" (Java 8) javah needs a list of java classes (e.g. foundation.pEp.jniadapter.Message) $(JNI_GENERATED_HH): ifeq ($(USE_JAVAH),1) - cd $(JAVA_BUILD_ROOT)/;$(JAVA_BIN_DIR)/$(JAVAH_CMD) -d ../../src/$(CXX_DIR) $(subst ${ },${space}\${\n}, $(subst /,.,$(subst $(JAVA_BUILD_ROOT),,$(basename $(sort $(wildcard $(JAVA_BUILD_ROOT)$(JAVA_PKG_BASENAME)*.class/)))))) + cd $(JAVA_DIR)/;$(JAVA_BIN_DIR)/$(JAVAH_CMD) -d ../../src/$(CXX_DIR) $(subst ${ },${space}\${\n},$(subst /,.,$(patsubst %.java,%, $(subst java/,,$(sort $(wildcard java/foundation/pEp/jniadapter/*.java)))))) else cd $(JAVA_DIR);$(JAVA_BIN_DIR)/$(JAVAC_CMD) -d ../$(JAVA_BUILD_ROOT) -h ../$(CXX_DIR)/ $(JAVA_PKG_BASENAME)/*.java endif From 3f57838c735b14aaddcbce131b52bf7f31ee7cf4 Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 16 Sep 2020 18:39:34 +0200 Subject: [PATCH 64/94] and replace the hardcoded prototype with the appropriate vars --- src/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile b/src/Makefile index deaa63a..55da741 100644 --- a/src/Makefile +++ b/src/Makefile @@ -147,7 +147,7 @@ gen-jni-headers: codegen $(JNI_GENERATED_HH) # While "old" (Java 8) javah needs a list of java classes (e.g. foundation.pEp.jniadapter.Message) $(JNI_GENERATED_HH): ifeq ($(USE_JAVAH),1) - cd $(JAVA_DIR)/;$(JAVA_BIN_DIR)/$(JAVAH_CMD) -d ../../src/$(CXX_DIR) $(subst ${ },${space}\${\n},$(subst /,.,$(patsubst %.java,%, $(subst java/,,$(sort $(wildcard java/foundation/pEp/jniadapter/*.java)))))) + cd $(JAVA_DIR)/;$(JAVA_BIN_DIR)/$(JAVAH_CMD) -d ../$(CXX_DIR) $(subst ${ },${space}\${\n},$(subst /,.,$(patsubst %.java,%, $(subst $(JAVA_DIR),,$(sort $(wildcard $(JAVA_DIR)$(JAVA_PKG_BASENAME)*.java)))))) else cd $(JAVA_DIR);$(JAVA_BIN_DIR)/$(JAVAC_CMD) -d ../$(JAVA_BUILD_ROOT) -h ../$(CXX_DIR)/ $(JAVA_PKG_BASENAME)/*.java endif From 9eb92f27b69d9b4576ae833838204635263aaf84 Mon Sep 17 00:00:00 2001 From: heck Date: Thu, 17 Sep 2020 11:47:13 +0200 Subject: [PATCH 66/94] no explicit toString() values for enum Rating --- src/codegen/pEp.yml2 | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/codegen/pEp.yml2 b/src/codegen/pEp.yml2 index dbec115..b5dff19 100644 --- a/src/codegen/pEp.yml2 +++ b/src/codegen/pEp.yml2 @@ -25,19 +25,19 @@ namespace pEp { enum has_int_str_val=true Rating { - enumitem pEp_rating_undefined int_str_val=undefined toString="undefined" > 0 - enumitem pEp_rating_cannot_decrypt int_str_val=cannot_decrypt toString="cannot decrypt" > 1 - enumitem pEp_rating_have_no_key int_str_val=have_no_key toString="have no key" > 2 - enumitem pEp_rating_unencrypted int_str_val=unencrypted toString="unencrypted" > 3 - enumitem pEp_rating_unencrypted_for_some int_str_val=unencrypted_for_some toString="unencrypted for some" > 4 - enumitem pEp_rating_unreliable int_str_val=unreliable toString="unreliable" > 5 - enumitem pEp_rating_reliable int_str_val=reliable toString="reliable" > 6 - enumitem pEp_rating_trusted int_str_val=trusted toString="trusted" > 7 - enumitem pEp_rating_trusted_and_anonymized int_str_val=trusted_and_anonymized toString="trusted and anonymized" > 8 - enumitem pEp_rating_fully_anonymous int_str_val=fully_anonymous toString="fully anonymous" > 9 - enumitem pEp_rating_mistrust int_str_val=mistrust toString="mistrust" > -1 - enumitem pEp_rating_b0rken int_str_val=b0rken toString="b0rken" > -2 - enumitem pEp_rating_under_attack int_str_val=under_attack toString="under attack" > -3 + enumitem pEp_rating_undefined int_str_val=undefined > 0 + enumitem pEp_rating_cannot_decrypt int_str_val=cannot_decrypt > 1 + enumitem pEp_rating_have_no_key int_str_val=have_no_key > 2 + enumitem pEp_rating_unencrypted int_str_val=unencrypted > 3 + enumitem pEp_rating_unencrypted_for_some int_str_val=unencrypted_for_some > 4 + enumitem pEp_rating_unreliable int_str_val=unreliable > 5 + enumitem pEp_rating_reliable int_str_val=reliable > 6 + enumitem pEp_rating_trusted int_str_val=trusted > 7 + enumitem pEp_rating_trusted_and_anonymized int_str_val=trusted_and_anonymized > 8 + enumitem pEp_rating_fully_anonymous int_str_val=fully_anonymous > 9 + enumitem pEp_rating_mistrust int_str_val=mistrust > -1 + enumitem pEp_rating_b0rken int_str_val=b0rken > -2 + enumitem pEp_rating_under_attack int_str_val=under_attack > -3 }; enum DecryptFlags { From 3e71c765150ce47ae279fd24e5f2c09eddf08608 Mon Sep 17 00:00:00 2001 From: heck Date: Mon, 30 Nov 2020 22:05:23 +0100 Subject: [PATCH 69/94] JNI-123 - "get rid of c-style casts" --- src/codegen/gen_cpp_Engine.ysl2 | 16 ++--- src/codegen/gen_cpp_Message.ysl2 | 16 ++--- src/cxx/basic_api.cc | 18 +++--- ...oundation_pEp_jniadapter_AbstractEngine.cc | 60 ++++++++--------- src/cxx/foundation_pEp_jniadapter__Blob.cc | 6 +- src/cxx/identity_api.cc | 2 +- src/cxx/jniutils.cc | 64 +++++++++---------- 7 files changed, 90 insertions(+), 92 deletions(-) diff --git a/src/codegen/gen_cpp_Engine.ysl2 b/src/codegen/gen_cpp_Engine.ysl2 index 50a4d0f..4e61e12 100644 --- a/src/codegen/gen_cpp_Engine.ysl2 +++ b/src/codegen/gen_cpp_Engine.ysl2 @@ -206,8 +206,8 @@ tstylesheet { jfieldID field_value = env->GetFieldID(clazz_«$ljtype», "value", "I"); assert(field_value); - jobjectArray values = (jobjectArray) env->CallStaticObjectMethod(clazz_«$ljtype», - method_values); + jobjectArray values = static_cast(env->CallStaticObjectMethod(clazz_«$ljtype», + method_values)); assert(values); if (env->ExceptionCheck()) { return nullptr; // handle exception in Java @@ -218,7 +218,7 @@ tstylesheet { jobject element = env->GetObjectArrayElement(values, i); assert(element); jint value = env->GetIntField(element, field_value); - if (value == (jint) _«$name») { + if (value == static_cast(_«$name»)) { «$name»_ = element; break; } @@ -235,7 +235,7 @@ tstylesheet { assert(clazz_«$name»_); jmethodID constructor_«$name»_ = env->GetMethodID(clazz_«$name»_, "", "(J)V"); assert(constructor_«$name»_); - «$name»_ = env->NewObject(clazz_«$name»_, constructor_«$name»_, (jlong) _«$name»); + «$name»_ = env->NewObject(clazz_«$name»_, constructor_«$name»_, reinterpret_cast(_«$name»)); } || @@ -251,15 +251,15 @@ tstylesheet { choose { when "$type = 'message'" - | message *_«$name» = (message *) callLongMethod(env, «$name», "getHandle"); + | message *_«$name» = reinterpret_cast(callLongMethod(env, «$name», "getHandle")); when "$type='EncFormat' or $type='SyncHandshakeResult' or $type='CipherSuite'" | √$type _«$name» = to_«$type»(env, «$name»); when "$type='bool'" - | bool _«$name» = (bool) «$name»; + | bool _«$name» = «$name»; when "$type='int'" - | int _«$name» = (int) «$name»; + | int _«$name» = «$name»; when "$type='uint'" - | auto _«$name» = (unsigned int) «$name»; + | unsigned int _«$name» = «$name»; when "$type='string'" | const char *_«$name» = to_string(env, «$name»); otherwise { diff --git a/src/codegen/gen_cpp_Message.ysl2 b/src/codegen/gen_cpp_Message.ysl2 index 10672ef..a53688e 100644 --- a/src/codegen/gen_cpp_Message.ysl2 +++ b/src/codegen/gen_cpp_Message.ysl2 @@ -37,7 +37,7 @@ tstylesheet { return NULL; } - return (::«@name» *) (intptr_t) (int64_t) env->GetLongField(me, handle); + return reinterpret_cast<::«@name» *>(env->GetLongField(me, handle)); } }; }; @@ -52,16 +52,16 @@ tstylesheet { ::«@name» * _obj = ::new_«@name»(PEP_dir_incoming); if (!_obj) { outOfMemory(env); - return (jlong) 0; + return 0; } - return (jlong) (int64_t) (intptr_t) _obj; + return reinterpret_cast(_obj); } JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_«$jname»_release(JNIEnv *env, jobject obj, jlong value) { pEpLog("called"); if (value) { - ::«@name» *_obj = (::«@name» *) (intptr_t) (int64_t) value; + ::«@name» *_obj = reinterpret_cast<::«@name» *>(value); ::free_«@name»(_obj); } } @@ -70,13 +70,13 @@ tstylesheet { { pEpLog("called"); char *_mime_text = to_string(env, mime_text); - size_t _size = (size_t) env->GetArrayLength(mime_text); + size_t _size = env->GetArrayLength(mime_text); ::«@name» *_msg = nullptr; PEP_STATUS status = mime_decode_«@name»(_mime_text, _size, &_msg, NULL); if (status) throw_pEp_Exception(env, status); - return (jlong) (int64_t) (intptr_t) _msg; + return reinterpret_cast(_msg); } JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_«$jname»__1encodeMIME(JNIEnv *env, jobject msg) @@ -141,7 +141,7 @@ tstylesheet { || choose { when "../enum[@name=$type]" - |> return (jint) _obj->«$cname»; + |> return _obj->«$cname»; otherwise |> return from_«$type»(env, _obj->«$cname»); } @@ -155,7 +155,7 @@ tstylesheet { || choose { when "../enum[@name=$type]" - |> _obj->«$cname» = («$ctype») (int) value; + |> _obj->«$cname» = static_cast<«$ctype»>(value); otherwise { choose { when "$type = 'string'" { diff --git a/src/cxx/basic_api.cc b/src/cxx/basic_api.cc index 3d8d14d..e014a8d 100644 --- a/src/cxx/basic_api.cc +++ b/src/cxx/basic_api.cc @@ -60,7 +60,7 @@ JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_Engine__1trustwords( lang = "en"; status = passphraseWrap(::trustwords, - session(), (const char *) _ident->fpr, lang, &words, &wsize, 10); + session(), static_cast(_ident->fpr), lang, &words, &wsize, 10); if (status != PEP_STATUS_OK) { throw_pEp_Exception(env, status); @@ -298,8 +298,8 @@ JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Engine__1importKey( } std::lock_guard l(*mutex_local); - size_t _size = (size_t) env->GetArrayLength(key); - const char *_key = (char *) env->GetByteArrayElements(key, NULL); + size_t _size = static_cast(env->GetArrayLength(key)); + jbyte* _key = env->GetByteArrayElements(key, NULL); if(_key == NULL){ throw_pEp_Exception(env, PEP_OUT_OF_MEMORY); @@ -308,7 +308,7 @@ JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Engine__1importKey( identity_list *_identities; - PEP_STATUS status = passphraseWrap(::import_key, session(), _key, _size, &_identities); + PEP_STATUS status = passphraseWrap(::import_key, session(), reinterpret_cast(_key), _size, &_identities); if (status != PEP_STATUS_OK && status != PEP_KEY_IMPORTED) { throw_pEp_Exception(env, status); return NULL; @@ -319,7 +319,7 @@ JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Engine__1importKey( identities_ = from_identitylist(env, _identities); } - env->ReleaseByteArrayElements(key, (jbyte *) _key, JNI_ABORT); + env->ReleaseByteArrayElements(key, _key, JNI_ABORT); return identities_; } @@ -338,7 +338,7 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1config_1passive_1 } std::lock_guard l(*mutex_local); - ::config_passive_mode(session(), (bool)enable); + ::config_passive_mode(session(), static_cast(enable)); } @@ -356,7 +356,7 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1config_1unencrypt } std::lock_guard l(*mutex_local); - ::config_unencrypted_subject(session(), (bool)enable); + ::config_unencrypted_subject(session(), static_cast(enable)); } JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1blacklist_1add( @@ -463,7 +463,7 @@ JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_Engine__1getCrashdum } std::lock_guard l(*mutex_local); - int _maxlines = (int) maxlines; + int _maxlines = static_cast(maxlines); char *_logdata; PEP_STATUS status = passphraseWrap(::get_crashdump_log, session(), _maxlines, &_logdata); @@ -545,7 +545,7 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1config_1passphras } std::lock_guard l(*mutex_local); - bool _enable = (bool) enable; + bool _enable = static_cast(enable); const char *_passphrase = to_string(env, passphrase); PEP_STATUS status = ::config_passphrase_for_new_keys(session(),_enable,passphrase_cache.add_stored(_passphrase)); diff --git a/src/cxx/foundation_pEp_jniadapter_AbstractEngine.cc b/src/cxx/foundation_pEp_jniadapter_AbstractEngine.cc index bdbf80e..0ef7a30 100644 --- a/src/cxx/foundation_pEp_jniadapter_AbstractEngine.cc +++ b/src/cxx/foundation_pEp_jniadapter_AbstractEngine.cc @@ -42,12 +42,12 @@ jclass passphraseTypeClass = nullptr; namespace JNISync { JNIEnv* env() { JNIEnv *thread_env = nullptr; - int status = jvm->GetEnv((void**)&thread_env, JNI_VERSION_1_6); + int status = jvm->GetEnv(reinterpret_cast(&thread_env), JNI_VERSION_1_6); if (status < 0) { #ifdef ANDROID status = jvm->AttachCurrentThread(&thread_env, nullptr); #else - status = jvm->AttachCurrentThread((void **) &thread_env, nullptr); + status = jvm->AttachCurrentThread(reinterpret_cast(&thread_env), nullptr); #endif } assert(status >= 0); @@ -69,15 +69,15 @@ namespace JNISync { void jni_init() { JNIEnv *_env = JNISync::env(); - messageClass = reinterpret_cast( + messageClass = static_cast( _env->NewGlobalRef(findClass(_env, "foundation/pEp/jniadapter/Message"))); - identityClass = reinterpret_cast( + identityClass = static_cast( _env->NewGlobalRef(findClass(_env, "foundation/pEp/jniadapter/_Identity"))); - signalClass = reinterpret_cast( + signalClass = static_cast( _env->NewGlobalRef(findClass(_env, "foundation/pEp/jniadapter/SyncHandshakeSignal"))); - passphraseTypeClass = reinterpret_cast( + passphraseTypeClass = static_cast( _env->NewGlobalRef(findClass(_env, "foundation/pEp/jniadapter/PassphraseType"))); - engineClass = reinterpret_cast(_env->NewGlobalRef(findClass(_env, "foundation/pEp/jniadapter/Engine"))); + engineClass = static_cast(_env->NewGlobalRef(findClass(_env, "foundation/pEp/jniadapter/Engine"))); messageConstructorMethodID = _env->GetMethodID(messageClass, "", "(J)V"); messageToSendMethodID = _env->GetMethodID( @@ -113,8 +113,8 @@ char* JNIAdapter::passphraseRequiredCallback(const PEP_STATUS status) { assert(passphrase_status_values); assert(passphrase_type_field_value); - jobjectArray values = (jobjectArray) JNISync::env()->CallStaticObjectMethod(passphraseTypeClass, - passphrase_status_values); + jobjectArray values = static_cast(JNISync::env()->CallStaticObjectMethod(passphraseTypeClass, + passphrase_status_values)); if (JNISync::env()->ExceptionCheck()) { JNISync::env()->ExceptionClear(); @@ -126,7 +126,7 @@ char* JNIAdapter::passphraseRequiredCallback(const PEP_STATUS status) { jobject element = JNISync::env()->GetObjectArrayElement(values, i); assert(element); jint value = JNISync::env()->GetIntField(element, passphrase_type_field_value); - if (value == (jint) status) { + if (value == static_cast(status)) { status_ = element; break; } @@ -141,7 +141,7 @@ char* JNIAdapter::passphraseRequiredCallback(const PEP_STATUS status) { JNISync::env()->ExceptionClear(); } - jbyteArray ppJBA = reinterpret_cast(ppJO); + jbyteArray ppJBA = static_cast(ppJO); char* passphrase_ = to_string( JNISync::env(), ppJBA); return passphrase_; @@ -166,7 +166,7 @@ PEP_STATUS messageToSend(message *msg) jobject msg_ = nullptr; assert(messageClass && messageConstructorMethodID && objj && messageToSendMethodID); - msg_ = JNISync::env()->NewObject(messageClass, messageConstructorMethodID, (jlong) msg); + msg_ = JNISync::env()->NewObject(messageClass, messageConstructorMethodID, reinterpret_cast(msg)); PEP_STATUS status = (PEP_STATUS) JNISync::env()->CallIntMethod(objj, messageToSendMethodID, msg_); if (JNISync::env()->ExceptionCheck()) { @@ -196,8 +196,8 @@ PEP_STATUS notifyHandshake(pEp_identity *me, pEp_identity *partner, sync_handsha assert(sync_handshake_signal_values); assert(signal_field_value); - jobjectArray values = (jobjectArray) JNISync::env()->CallStaticObjectMethod(signalClass, - sync_handshake_signal_values); + jobjectArray values = static_cast(JNISync::env()->CallStaticObjectMethod(signalClass, + sync_handshake_signal_values)); if (JNISync::env()->ExceptionCheck()) { JNISync::env()->ExceptionClear(); return PEP_UNKNOWN_ERROR; @@ -208,7 +208,7 @@ PEP_STATUS notifyHandshake(pEp_identity *me, pEp_identity *partner, sync_handsha jobject element = JNISync::env()->GetObjectArrayElement(values, i); assert(element); jint value = JNISync::env()->GetIntField(element, signal_field_value); - if (value == (jint) signal) { + if (value == static_cast(signal)) { signal_ = element; break; } @@ -298,7 +298,7 @@ JNIEXPORT jstring JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1getPro int examine_identity(pEp_identity *ident, void *arg) { - locked_queue< pEp_identity * > *queue = (locked_queue< pEp_identity * > *) arg; + locked_queue< pEp_identity * > *queue = static_cast*>(arg); queue->push_back(identity_dup(ident)); return 0; } @@ -306,7 +306,7 @@ int examine_identity(pEp_identity *ident, void *arg) pEp_identity *retrieve_next_identity(void *arg) { pEpLog("called"); - locked_queue< pEp_identity * > *queue = (locked_queue< pEp_identity * > *) arg; + locked_queue< pEp_identity * > *queue = static_cast*>(arg); while (!queue->size()) usleep(100000); @@ -319,7 +319,7 @@ pEp_identity *retrieve_next_identity(void *arg) static void *keyserver_thread_routine(void *arg) { PEP_STATUS status = do_keymanagement(retrieve_next_identity, arg); - locked_queue< pEp_identity * > *queue = (locked_queue< pEp_identity * > *) arg; + locked_queue< pEp_identity * > *queue = static_cast*>(arg); while (queue->size()) { pEp_identity *ident = queue->front(); @@ -328,7 +328,7 @@ static void *keyserver_thread_routine(void *arg) } delete queue; - return (void *) status; + return reinterpret_cast(status); } JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1startKeyserverLookup( @@ -359,20 +359,20 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1startKeys return; } - thread = (pthread_t *) env->GetLongField(obj, thread_handle); + thread = reinterpret_cast(env->GetLongField(obj, thread_handle)); if (thread) return; - thread = (pthread_t *) calloc(1, sizeof(pthread_t)); + thread = static_cast(calloc(1, sizeof(pthread_t))); assert(thread); - env->SetLongField(obj, thread_handle, (jlong) thread); + env->SetLongField(obj, thread_handle, reinterpret_cast(thread)); queue = new locked_queue< pEp_identity * >(); - env->SetLongField(obj, queue_handle, (jlong) queue); + env->SetLongField(obj, queue_handle, reinterpret_cast(queue)); - register_examine_function(Adapter::session(), examine_identity, (void *) queue); + register_examine_function(Adapter::session(), examine_identity,static_cast(queue)); - pthread_create(thread, nullptr, keyserver_thread_routine, (void *) queue); + pthread_create(thread, nullptr, keyserver_thread_routine, static_cast(queue)); } JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1stopKeyserverLookup( @@ -403,14 +403,14 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1stopKeyse return; } - thread = (pthread_t *) env->GetLongField(obj, thread_handle); + thread = reinterpret_cast(env->GetLongField(obj, thread_handle)); if (!thread) return; - queue = (locked_queue< pEp_identity * > *) env->GetLongField(obj, queue_handle); + queue = reinterpret_cast*>(env->GetLongField(obj, queue_handle)); - env->SetLongField(obj, queue_handle, (jlong) 0); - env->SetLongField(obj, thread_handle, (jlong) 0); + env->SetLongField(obj, queue_handle, 0); + env->SetLongField(obj, thread_handle, 0); register_examine_function(Adapter::session(), nullptr, nullptr); @@ -471,7 +471,7 @@ JNIEXPORT jboolean JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1isSyn } std::lock_guard l(*mutex_local); - return (jboolean) Adapter::is_sync_running(); + return static_cast(Adapter::is_sync_running()); } } // extern "C" diff --git a/src/cxx/foundation_pEp_jniadapter__Blob.cc b/src/cxx/foundation_pEp_jniadapter__Blob.cc index 8dfbf43..a817fae 100644 --- a/src/cxx/foundation_pEp_jniadapter__Blob.cc +++ b/src/cxx/foundation_pEp_jniadapter__Blob.cc @@ -20,7 +20,7 @@ namespace pEp { return NULL; } - return (::bloblist_t *) (intptr_t) (int64_t) env->GetLongField(me, handle); + return reinterpret_cast<::bloblist_t*>(env->GetLongField(me, handle)); } }; }; @@ -38,7 +38,7 @@ JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter__1Blob__1dataToXER(J // RFC 1049 / RFC 2045 : The type, subtype, and parameter names are not case sensitive. if(strcasecmp(b->mime_type, "application/pEp.sync") == 0) { - PEP_STATUS status = ::PER_to_XER_Sync_msg(b->value, (size_t) b->size, &out); + PEP_STATUS status = ::PER_to_XER_Sync_msg(b->value, static_cast(b->size), &out); if (status) throw_pEp_Exception(env, status); @@ -49,7 +49,7 @@ JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter__1Blob__1dataToXER(J // RFC 1049 / RFC 2045 : The type, subtype, and parameter names are not case sensitive. if(strcasecmp(b->mime_type, "application/pEp.keyreset") == 0) { - PEP_STATUS status = ::PER_to_XER_Distribution_msg(b->value, (size_t) b->size, &out); + PEP_STATUS status = ::PER_to_XER_Distribution_msg(b->value, static_cast(b->size), &out); if (status) throw_pEp_Exception(env, status); diff --git a/src/cxx/identity_api.cc b/src/cxx/identity_api.cc index eb8521e..12fb3d1 100644 --- a/src/cxx/identity_api.cc +++ b/src/cxx/identity_api.cc @@ -9,7 +9,7 @@ extern "C" { JNIEXPORT jint JNICALL Java_foundation_pEp_jniadapter_Identity__1getRating(JNIEnv *env, jobject thiz, jint comm_type) { pEpLog("called"); - return ::rating_from_comm_type((PEP_comm_type) comm_type); + return ::rating_from_comm_type(static_cast(comm_type)); } } // extern "C" diff --git a/src/cxx/jniutils.cc b/src/cxx/jniutils.cc index 6a98a70..262e6d9 100644 --- a/src/cxx/jniutils.cc +++ b/src/cxx/jniutils.cc @@ -20,7 +20,7 @@ namespace pEp { jobject obj ) { - long engine_obj_id = (long)callLongMethod(env, obj, "getId"); + long engine_obj_id = static_cast(callLongMethod(env, obj, "getId")); assert(engine_obj_id); pEpLog("for java object id: " << engine_obj_id); std::mutex *engine_obj_mutex = engine_objid_mutex.at(engine_obj_id); @@ -34,7 +34,7 @@ namespace pEp { jobject obj ) { - long engine_obj_id = (long)callLongMethod(env, obj, "getId"); + long engine_obj_id = static_cast(callLongMethod(env, obj, "getId")); assert(engine_obj_id); std::mutex *engine_obj_mutex = new std::mutex(); pEpLog(engine_obj_mutex << " with native_handle: " << engine_obj_mutex->native_handle() << " for java object id: " << engine_obj_id); @@ -51,7 +51,7 @@ namespace pEp { jobject obj ) { - long engine_obj_id = (long)callLongMethod(env, obj, "getId"); + long engine_obj_id = static_cast(callLongMethod(env, obj, "getId")); assert(engine_obj_id); std::mutex *engine_obj_mutex = engine_objid_mutex.at(engine_obj_id); pEpLog(engine_obj_mutex << " with native_handle: " << engine_obj_mutex->native_handle() << " for java object id: " << engine_obj_id); @@ -278,7 +278,7 @@ namespace pEp { return NULL; size_t l = env->GetArrayLength(str); - char *_str = (char *) calloc(1,l+1); + char *_str = static_cast(calloc(1,l+1)); assert(_str); env->GetByteArrayRegion(str, 0, l, (jbyte*)_str); return _str; @@ -320,7 +320,7 @@ namespace pEp { jint i; for (_sl = sl, i = 0; i < (int) size; i++) { jobject o = callObjectMethod(env, obj, "get", i); - jbyteArray a = reinterpret_cast(o); + jbyteArray a = static_cast(o); char * str = to_string(env, a); _sl = stringlist_add(_sl, str); env->DeleteLocalRef(o); @@ -391,10 +391,10 @@ namespace pEp { for (_sl = sl, i = 0; i < (int) size; i++) { jobject pair = callObjectMethod(env, obj, "get", i); jbyteArray first = - reinterpret_cast(env->GetObjectField(pair, + static_cast(env->GetObjectField(pair, first_id)); jbyteArray second = - reinterpret_cast(env->GetObjectField(pair, + static_cast(env->GetObjectField(pair, second_id)); char *first_str = to_string(env, first); @@ -413,7 +413,7 @@ namespace pEp { jobject from_timestamp(JNIEnv *env, timestamp *ts) { if (!ts) - return (jobject) NULL; + return NULL; //LOGD("/* Seconds (0-60) */ FROM :%d", ts->tm_sec); //LOGD("/* Minutes (0-59) */ :%d", ts->tm_min); @@ -443,7 +443,7 @@ namespace pEp { jlong t = callLongMethod(env, date, "getTime"); //LOGD( "Set Time to : %lld", t); - timestamp *ts = (timestamp*)calloc(1, sizeof(timestamp)); + timestamp *ts = static_cast(calloc(1, sizeof(timestamp))); assert(ts); if (ts == NULL) return NULL; @@ -468,8 +468,7 @@ namespace pEp { { if (value) { jfieldID fieldID = getFieldID(env, classname, name, "[B"); - env->SetObjectField(obj, fieldID, - reinterpret_cast(from_string(env, value))); + env->SetObjectField(obj, fieldID, static_cast(from_string(env, value))); } } @@ -480,8 +479,7 @@ namespace pEp { { if (value) { jfieldID fieldID = getFieldID(env, classname, name, "[B", clazz); - env->SetObjectField(obj, fieldID, - reinterpret_cast(from_string(env, value))); + env->SetObjectField(obj, fieldID, static_cast(from_string(env, value))); } } @@ -506,15 +504,15 @@ namespace pEp { _setStringField(env, classname, obj, "username", ident->username); jfieldID comm_type_id = getFieldID(env, classname, "comm_type", "I"); - env->SetIntField(obj, comm_type_id, (jint) (int) ident->comm_type); + env->SetIntField(obj, comm_type_id, static_cast(ident->comm_type)); _setStringField(env, classname, obj, "lang", ident->lang); jfieldID me_id = getFieldID(env, classname, "me", "Z"); - env->SetBooleanField(obj, me_id, (jboolean) ident->me); + env->SetBooleanField(obj, me_id, static_cast(ident->me)); jfieldID flags_id = getFieldID(env, classname, "flags", "I"); - env->SetIntField(obj, flags_id, (jint) (int) ident->flags); + env->SetIntField(obj, flags_id, static_cast(ident->flags)); } return obj; @@ -538,15 +536,15 @@ namespace pEp { _setStringField(env, classname, obj, "username", ident->username, identityClass); jfieldID comm_type_id = getFieldID(env, classname, "comm_type", "I", identityClass); - env->SetIntField(obj, comm_type_id, (jint) (int) ident->comm_type); + env->SetIntField(obj, comm_type_id, static_cast(ident->comm_type)); _setStringField(env, classname, obj, "lang", ident->lang, identityClass); jfieldID me_id = getFieldID(env, classname, "me", "Z", identityClass); - env->SetBooleanField(obj, me_id, (jboolean) ident->me); + env->SetBooleanField(obj, me_id, static_cast(ident->me)); jfieldID flags_id = getFieldID(env, classname, "flags", "I", identityClass); - env->SetIntField(obj, flags_id, (jint) (int) ident->flags); + env->SetIntField(obj, flags_id, static_cast(ident->flags)); } return obj; @@ -558,7 +556,7 @@ namespace pEp { jfieldID fieldID = getFieldID(env, classname, name, "[B"); jobject fobj = env->GetObjectField(obj, fieldID); - char *res = to_string(env, reinterpret_cast(fobj)); + char *res = to_string(env, static_cast(fobj)); env->DeleteLocalRef(fobj); return res; @@ -578,7 +576,7 @@ namespace pEp { ident->username = _getStringField(env, classname, obj, "username"); jfieldID comm_type_id = getFieldID(env, classname, "comm_type", "I"); - ident->comm_type = (PEP_comm_type) (int) env->GetIntField(obj, comm_type_id); + ident->comm_type = static_cast(env->GetIntField(obj, comm_type_id)); char *lang = _getStringField(env, classname, obj, "lang"); if (lang && lang[0]) { @@ -588,10 +586,10 @@ namespace pEp { free(lang); jfieldID me_id = getFieldID(env, classname, "me", "Z"); - ident->me = (bool) env->GetBooleanField(obj, me_id); + ident->me = static_cast(env->GetBooleanField(obj, me_id)); jfieldID flags_id = getFieldID(env, classname, "flags", "I"); - ident->flags = (identity_flags_t) (int) env->GetIntField(obj, flags_id); + ident->flags = static_cast(env->GetIntField(obj, flags_id)); return ident; } @@ -654,9 +652,9 @@ namespace pEp { env->DeleteLocalRef(clazz); jfieldID fieldID = getFieldID(env, classname, "data", "[B"); - jbyteArray _data = env->NewByteArray((jsize) b->size); - env->SetByteArrayRegion(_data, 0, b->size, (jbyte*)b->value); - env->SetObjectField(obj, fieldID, reinterpret_cast(_data)); + jbyteArray _data = env->NewByteArray(static_cast(b->size)); + env->SetByteArrayRegion(_data, 0, b->size, reinterpret_cast(b->value)); + env->SetObjectField(obj, fieldID, static_cast(_data)); _setStringField(env, classname, obj, "mime_type", b->mime_type); _setStringField(env, classname, obj, "filename", b->filename); @@ -698,12 +696,12 @@ namespace pEp { char *filename = _getStringField(env, classname, obj, "filename"); jfieldID data_id = getFieldID(env, classname, "data", "[B"); - jbyteArray _data = reinterpret_cast(env->GetObjectField(obj, data_id)); - size_t size = (size_t) env->GetArrayLength(_data); - char *b = (char *) malloc(size); + jbyteArray _data = static_cast(env->GetObjectField(obj, data_id)); + size_t size = static_cast(env->GetArrayLength(_data)); + char *b = static_cast(malloc(size)); assert(b); - env->GetByteArrayRegion(_data, 0, size, (jbyte*)b); + env->GetByteArrayRegion(_data, 0, size, reinterpret_cast(b)); bloblist_t *bl = new_bloblist( b, size, mime_type, filename); free(mime_type); @@ -743,7 +741,7 @@ namespace pEp { assert(field_value); env->DeleteLocalRef(clazz_enc_format); - return (PEP_enc_format) env->GetIntField(obj, field_value); + return static_cast(env->GetIntField(obj, field_value)); } PEP_CIPHER_SUITE to_CipherSuite(JNIEnv *env, jobject obj) @@ -754,7 +752,7 @@ namespace pEp { assert(field_value); env->DeleteLocalRef(clazz_enc_format); - return (PEP_CIPHER_SUITE) env->GetIntField(obj, field_value); + return static_cast(env->GetIntField(obj, field_value)); } sync_handshake_result to_SyncHandshakeResult(JNIEnv *env, jobject obj) @@ -765,7 +763,7 @@ namespace pEp { assert(field_value); env->DeleteLocalRef(clazz_enc_format); - return (sync_handshake_result) env->GetIntField(obj, field_value); + return static_cast(env->GetIntField(obj, field_value)); } }; }; From a255490628515e28fd346049087ac775da6a2f2e Mon Sep 17 00:00:00 2001 From: heck Date: Mon, 30 Nov 2020 23:57:34 +0100 Subject: [PATCH 70/94] formatting and code style only --- src/codegen/gen_cpp_Engine.ysl2 | 22 +- src/codegen/gen_cpp_Message.ysl2 | 63 +- src/cxx/basic_api.cc | 161 +- ...oundation_pEp_jniadapter_AbstractEngine.cc | 168 +- src/cxx/foundation_pEp_jniadapter__Blob.cc | 45 +- src/cxx/identity_api.cc | 6 +- src/cxx/jniutils.cc | 1535 +++++++++-------- src/cxx/jniutils.hh | 231 +-- src/cxx/passphrase_callback.hh | 9 +- src/cxx/passphrase_callback.hxx | 68 +- 10 files changed, 1157 insertions(+), 1151 deletions(-) diff --git a/src/codegen/gen_cpp_Engine.ysl2 b/src/codegen/gen_cpp_Engine.ysl2 index 4e61e12..d316923 100644 --- a/src/codegen/gen_cpp_Engine.ysl2 +++ b/src/codegen/gen_cpp_Engine.ysl2 @@ -51,10 +51,8 @@ tstylesheet { } || - JNIEXPORT «$CretType» JNICALL «$mangled»( - JNIEnv *env, - jobject obj`apply "parm[in|inout]", mode=sig` - ) + JNIEXPORT «$CretType» JNICALL «$mangled»(JNIEnv *env, + jobject obj`apply "parm[in|inout]", mode=sig`) { std::mutex *mutex_local = nullptr; { @@ -83,13 +81,11 @@ tstylesheet { } } || - if ((status > PEP_STATUS_OK && status < PEP_UNENCRYPTED) |`> |` - status < PEP_STATUS_OK |`> |` - status >= PEP_TRUSTWORD_NOT_FOUND) { + + if ((status > PEP_STATUS_OK && status < PEP_UNENCRYPTED) |`> |` status < PEP_STATUS_OK |`> |` status >= PEP_TRUSTWORD_NOT_FOUND) { throw_pEp_Exception(env, status); return «$CretDefault»; } - || apply "parm[returns|creates]", mode=return; @@ -188,9 +184,9 @@ tstylesheet { } || «$jnitype» «$name»_ = NULL; - if (_«$name») + if (_«$name») { «$name»_ = «$from_type»(env, _«$name»); - + } || } when "ancestor::namespace/child::enum[@name=$type]" { @@ -200,14 +196,12 @@ tstylesheet { { jclass clazz_«$ljtype» = findClass(env, "foundation/pEp/jniadapter/«$jtype»"); assert(clazz_«$ljtype»); - jmethodID method_values = env->GetStaticMethodID(clazz_«$ljtype», "values", - "()[Lfoundation/pEp/jniadapter/«$jtype»;"); + jmethodID method_values = env->GetStaticMethodID(clazz_«$ljtype», "values", "()[Lfoundation/pEp/jniadapter/«$jtype»;"); assert(method_values); jfieldID field_value = env->GetFieldID(clazz_«$ljtype», "value", "I"); assert(field_value); - jobjectArray values = static_cast(env->CallStaticObjectMethod(clazz_«$ljtype», - method_values)); + jobjectArray values = static_cast(env->CallStaticObjectMethod(clazz_«$ljtype», method_values)); assert(values); if (env->ExceptionCheck()) { return nullptr; // handle exception in Java diff --git a/src/codegen/gen_cpp_Message.ysl2 b/src/codegen/gen_cpp_Message.ysl2 index a53688e..13ee28f 100644 --- a/src/codegen/gen_cpp_Message.ysl2 +++ b/src/codegen/gen_cpp_Message.ysl2 @@ -25,28 +25,28 @@ tstylesheet { using namespace std; namespace pEp { - namespace JNIAdapter { - static ::«@name» *«@name»_ptr(JNIEnv *env, jobject me) { - jfieldID handle; - - try { - handle = getFieldID(env, "foundation/pEp/jniadapter/«$jname»", "handle", "J"); - } - catch (std::exception& ex) { - assert(0); - return NULL; - } + namespace JNIAdapter { + static ::«@name» *«@name»_ptr(JNIEnv *env, jobject me) { + jfieldID handle; + + try { + handle = getFieldID(env, "foundation/pEp/jniadapter/«$jname»", "handle", "J"); + } catch (std::exception& ex) { + assert(0); + return NULL; + } + return reinterpret_cast<::«@name» *>(env->GetLongField(me, handle)); + } - return reinterpret_cast<::«@name» *>(env->GetLongField(me, handle)); - } - }; + }; }; extern "C" { using namespace pEp::JNIAdapter; - JNIEXPORT jlong JNICALL Java_foundation_pEp_jniadapter_«$jname»_init(JNIEnv *env, jobject obj) + JNIEXPORT jlong JNICALL Java_foundation_pEp_jniadapter_«$jname»_init(JNIEnv *env, + jobject obj) { pEpLog("called"); ::«@name» * _obj = ::new_«@name»(PEP_dir_incoming); @@ -57,7 +57,9 @@ tstylesheet { return reinterpret_cast(_obj); } - JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_«$jname»_release(JNIEnv *env, jobject obj, jlong value) + JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_«$jname»_release(JNIEnv *env, + jobject obj, + jlong value) { pEpLog("called"); if (value) { @@ -66,7 +68,9 @@ tstylesheet { } } - JNIEXPORT jlong JNICALL Java_foundation_pEp_jniadapter_«$jname»__1«$jname»(JNIEnv *env, jobject msg, jbyteArray mime_text) + JNIEXPORT jlong JNICALL Java_foundation_pEp_jniadapter_«$jname»__1«$jname»(JNIEnv *env, + jobject msg, + jbyteArray mime_text) { pEpLog("called"); char *_mime_text = to_string(env, mime_text); @@ -74,21 +78,26 @@ tstylesheet { ::«@name» *_msg = nullptr; PEP_STATUS status = mime_decode_«@name»(_mime_text, _size, &_msg, NULL); - if (status) + if (status) { throw_pEp_Exception(env, status); + } + return reinterpret_cast(_msg); } - JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_«$jname»__1encodeMIME(JNIEnv *env, jobject msg) + JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_«$jname»__1encodeMIME(JNIEnv *env, + jobject msg) { pEpLog("called"); «@name» *_obj = «@name»_ptr(env, msg); char *mime_text = nullptr; PEP_STATUS status = ::mime_encode_«@name»(_obj, false, &mime_text, false); - if (status) + if (status) { throw_pEp_Exception(env, status); + } jbyteArray result = from_string(env, mime_text); free(mime_text); + return result; } @@ -134,7 +143,8 @@ tstylesheet { with "name", "concat('set', $jname)"; } || - JNIEXPORT `call "jni_type" with "type", "name(.)"` JNICALL «$getname»(JNIEnv *env, jobject obj) + JNIEXPORT `call "jni_type" with "type", "name(.)"` JNICALL «$getname»(JNIEnv *env, + jobject obj) { pEpLog("called"); «$name» *_obj = «$name»_ptr(env, obj); @@ -148,7 +158,10 @@ tstylesheet { || } - JNIEXPORT void JNICALL «$setname»(JNIEnv *env, jobject obj, `call "jni_type" with "type", "name(.)"` value) + JNIEXPORT void JNICALL «$setname»(JNIEnv *env, + jobject obj, + `call "jni_type" with "type", "name(.)"` + value) { pEpLog("called"); «$name» *_obj = «$name»_ptr(env, obj); @@ -171,7 +184,7 @@ tstylesheet { |> free_«$free»(_obj->«$cname»); } } - |> if(value){ + |> if(value) { choose { when "$type = 'string'" { |>> _obj->«$cname» = to_«$type»(env, value); @@ -180,9 +193,9 @@ tstylesheet { |>> _obj->«$cname» = to_«$type»(env, value); } } - |> }else{ + |> } else { |> _obj->«$cname» = NULL; - |> } + |> } } } || diff --git a/src/cxx/basic_api.cc b/src/cxx/basic_api.cc index e014a8d..49c3b2f 100644 --- a/src/cxx/basic_api.cc +++ b/src/cxx/basic_api.cc @@ -12,15 +12,14 @@ #include "passphrase_callback.hh" extern "C" { - using namespace pEp::JNIAdapter; - using pEp::Adapter::session; - using pEp::passphrase_cache; -JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_Engine__1trustwords( - JNIEnv *env, +using namespace pEp::JNIAdapter; +using pEp::Adapter::session; +using pEp::passphrase_cache; + +JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_Engine__1trustwords(JNIEnv *env, jobject obj, - jobject ident - ) + jobject ident) { std::mutex *mutex_local = nullptr; { @@ -37,10 +36,11 @@ JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_Engine__1trustwords( PEP_STATUS status = PEP_STATUS_OK; if (_ident->fpr == NULL || _ident->fpr[0] == 0) { - if (_ident->me) + if (_ident->me) { status = passphraseWrap(::myself, session(), _ident); - else + } else { status = passphraseWrap(::update_identity, session(), _ident); + } } if (status != PEP_STATUS_OK) { @@ -54,13 +54,13 @@ JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_Engine__1trustwords( } const char *lang; - if (_ident->lang[0]) + if (_ident->lang[0]) { lang = _ident->lang; - else + } else { lang = "en"; + } - status = passphraseWrap(::trustwords, - session(), static_cast(_ident->fpr), lang, &words, &wsize, 10); + status = passphraseWrap(::trustwords, session(), static_cast(_ident->fpr), lang, &words, &wsize, 10); if (status != PEP_STATUS_OK) { throw_pEp_Exception(env, status); @@ -70,11 +70,9 @@ JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_Engine__1trustwords( return from_string(env, words); } -JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Engine__1myself( - JNIEnv *env, +JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Engine__1myself(JNIEnv *env, jobject obj, - jobject ident - ) + jobject ident) { std::mutex *mutex_local = nullptr; { @@ -96,11 +94,9 @@ JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Engine__1myself( return from_identity(env, _ident); } -JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Engine__1updateIdentity( - JNIEnv *env, +JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Engine__1updateIdentity(JNIEnv *env, jobject obj, - jobject ident - ) + jobject ident) { std::mutex *mutex_local = nullptr; { @@ -111,18 +107,15 @@ JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Engine__1updateIdentity std::lock_guard l(*mutex_local); pEp_identity *_ident = to_identity(env, ident); - passphraseWrap(::update_identity, session(), _ident); return from_identity(env, _ident); } -JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Engine__1setOwnKey( - JNIEnv *env, +JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Engine__1setOwnKey(JNIEnv *env, jobject obj, jobject ident, - jbyteArray fpr - ) + jbyteArray fpr) { std::mutex *mutex_local = nullptr; { @@ -146,11 +139,9 @@ JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Engine__1setOwnKey( return from_identity(env, _ident); } -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1keyMistrusted( - JNIEnv *env, +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1keyMistrusted(JNIEnv *env, jobject obj, - jobject ident - ) + jobject ident) { std::mutex *mutex_local = nullptr; { @@ -184,11 +175,9 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1keyMistrusted( passphraseWrap(::key_mistrusted, session(), _ident); } -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1keyResetTrust( - JNIEnv *env, +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1keyResetTrust(JNIEnv *env, jobject obj, - jobject ident - ) + jobject ident) { std::mutex *mutex_local = nullptr; { @@ -203,10 +192,11 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1keyResetTrust( PEP_STATUS status = PEP_STATUS_OK; if (_ident->fpr == NULL || _ident->fpr[0] == 0) { - if (_ident->me) + if (_ident->me) { status = passphraseWrap(::myself, session(), _ident); - else + } else { status = passphraseWrap(::update_identity, session(), _ident); + } } if (status != PEP_STATUS_OK) { @@ -222,11 +212,9 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1keyResetTrust( passphraseWrap(::key_reset_trust, session(), _ident); } -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1trustPersonalKey( - JNIEnv *env, +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1trustPersonalKey(JNIEnv *env, jobject obj, - jobject ident - ) + jobject ident) { std::mutex *mutex_local = nullptr; { @@ -241,10 +229,11 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1trustPersonalKey( PEP_STATUS status = PEP_STATUS_OK; if (_ident->fpr == NULL || _ident->fpr[0] == 0) { - if (_ident->me) + if (_ident->me) { status = passphraseWrap(::myself, session(), _ident); - else + } else { status = passphraseWrap(::update_identity, session(), _ident); + } } if (status != PEP_STATUS_OK) { @@ -260,11 +249,9 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1trustPersonalKey( passphraseWrap(::trust_personal_key, session(), _ident); } -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1trustOwnKey( - JNIEnv *env, +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1trustOwnKey(JNIEnv *env, jobject obj, - jobject ident - ) + jobject ident) { std::mutex *mutex_local = nullptr; { @@ -284,11 +271,9 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1trustOwnKey( passphraseWrap(::trust_own_key, session(), _ident); } -JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Engine__1importKey( - JNIEnv *env, +JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Engine__1importKey(JNIEnv *env, jobject obj, - jbyteArray key - ) + jbyteArray key) { std::mutex *mutex_local = nullptr; { @@ -301,7 +286,7 @@ JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Engine__1importKey( size_t _size = static_cast(env->GetArrayLength(key)); jbyte* _key = env->GetByteArrayElements(key, NULL); - if(_key == NULL){ + if(_key == NULL) { throw_pEp_Exception(env, PEP_OUT_OF_MEMORY); return NULL; } @@ -324,11 +309,9 @@ JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Engine__1importKey( } -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1config_1passive_1mode( - JNIEnv *env, +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1config_1passive_1mode(JNIEnv *env, jobject obj, - jboolean enable - ) + jboolean enable) { std::mutex *mutex_local = nullptr; { @@ -342,11 +325,9 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1config_1passive_1 } -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1config_1unencrypted_1subject( - JNIEnv *env, +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1config_1unencrypted_1subject(JNIEnv *env, jobject obj, - jboolean enable - ) + jboolean enable) { std::mutex *mutex_local = nullptr; { @@ -359,8 +340,7 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1config_1unencrypt ::config_unencrypted_subject(session(), static_cast(enable)); } -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1blacklist_1add( - JNIEnv *env, +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1blacklist_1add(JNIEnv *env, jobject obj, jbyteArray fpr ) @@ -385,14 +365,11 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1blacklist_1add( throw_pEp_Exception(env, status); return; } - } -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1blacklist_1delete( - JNIEnv *env, +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1blacklist_1delete(JNIEnv *env, jobject obj, - jbyteArray fpr - ) + jbyteArray fpr) { std::mutex *mutex_local = nullptr; { @@ -417,11 +394,9 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1blacklist_1delete } -JNIEXPORT jboolean JNICALL Java_foundation_pEp_jniadapter_Engine__1blacklist_1is_1listed( - JNIEnv *env, +JNIEXPORT jboolean JNICALL Java_foundation_pEp_jniadapter_Engine__1blacklist_1is_1listed(JNIEnv *env, jobject obj, - jbyteArray fpr - ) + jbyteArray fpr) { std::mutex *mutex_local = nullptr; { @@ -448,12 +423,10 @@ JNIEXPORT jboolean JNICALL Java_foundation_pEp_jniadapter_Engine__1blacklist_1is return (jboolean)_listed; } -JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_Engine__1getCrashdumpLog( - JNIEnv *env, +JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_Engine__1getCrashdumpLog(JNIEnv *env, jobject obj, jint dummy, - jint maxlines - ) + jint maxlines) { std::mutex *mutex_local = nullptr; { @@ -477,40 +450,24 @@ JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_Engine__1getCrashdum return from_string(env, _logdata); } -JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_Engine__1getUserDirectory( - JNIEnv *env, - jobject obj - ) +JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_Engine__1getUserDirectory(JNIEnv *env, + jobject obj) { pEpLog("called"); return from_string(env, ::per_user_directory()); } -JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_Engine__1getMachineDirectory( - JNIEnv *env, - jobject obj - ) +JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_Engine__1getMachineDirectory(JNIEnv *env, + jobject obj) { pEpLog("called"); return from_string(env, ::per_machine_directory()); } -//void logPassphraseCache() { -// try { -//// while(true) { -// pEpLog("Cache: '" << cache.latest_passphrase() << "'"); -//// } -// } catch(pEp::PassphraseCache::Empty e) { -// pEpLog(e.what()); -// } catch(pEp::PassphraseCache::Exhausted ex) { -// pEpLog(ex.what()); -// } -//} - -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1config_1passphrase - (JNIEnv * env, - jobject obj, - jbyteArray passphrase) + +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1config_1passphrase(JNIEnv * env, + jobject obj, + jbyteArray passphrase) { std::mutex *mutex_local = nullptr; { @@ -530,12 +487,10 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1config_1passphras } -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1config_1passphrase_1for_1new_1keys( - JNIEnv *env, +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1config_1passphrase_1for_1new_1keys(JNIEnv *env, jobject obj, jboolean enable, - jbyteArray passphrase - ) + jbyteArray passphrase) { std::mutex *mutex_local = nullptr; { @@ -555,8 +510,6 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1config_1passphras throw_pEp_Exception(env, status); return ; } - - } } // extern "C" diff --git a/src/cxx/foundation_pEp_jniadapter_AbstractEngine.cc b/src/cxx/foundation_pEp_jniadapter_AbstractEngine.cc index 0ef7a30..87641ff 100644 --- a/src/cxx/foundation_pEp_jniadapter_AbstractEngine.cc +++ b/src/cxx/foundation_pEp_jniadapter_AbstractEngine.cc @@ -15,9 +15,7 @@ using namespace pEp::JNIAdapter; using namespace utility; // for libpEpAdapter locked queue impl. TODO:rename bool first = true; - JavaVM *jvm= nullptr; - std::mutex mutex_obj; jfieldID signal_field_value = nullptr; @@ -67,45 +65,60 @@ namespace JNISync { void jni_init() { - JNIEnv *_env = JNISync::env(); - - messageClass = static_cast( - _env->NewGlobalRef(findClass(_env, "foundation/pEp/jniadapter/Message"))); - identityClass = static_cast( - _env->NewGlobalRef(findClass(_env, "foundation/pEp/jniadapter/_Identity"))); - signalClass = static_cast( - _env->NewGlobalRef(findClass(_env, "foundation/pEp/jniadapter/SyncHandshakeSignal"))); - passphraseTypeClass = static_cast( - _env->NewGlobalRef(findClass(_env, "foundation/pEp/jniadapter/PassphraseType"))); + JNIEnv * _env = JNISync::env(); + + messageClass = static_cast(_env->NewGlobalRef(findClass(_env, "foundation/pEp/jniadapter/Message"))); + identityClass = static_cast(_env->NewGlobalRef(findClass(_env, "foundation/pEp/jniadapter/_Identity"))); + signalClass = static_cast(_env->NewGlobalRef(findClass(_env, "foundation/pEp/jniadapter/SyncHandshakeSignal"))); + passphraseTypeClass = static_cast(_env->NewGlobalRef(findClass(_env, "foundation/pEp/jniadapter/PassphraseType"))); engineClass = static_cast(_env->NewGlobalRef(findClass(_env, "foundation/pEp/jniadapter/Engine"))); - messageConstructorMethodID = _env->GetMethodID(messageClass, "", "(J)V"); + messageConstructorMethodID = _env->GetMethodID( + messageClass, + "", + "(J)V"); + messageToSendMethodID = _env->GetMethodID( - engineClass, - "messageToSendCallFromC", - "(Lfoundation/pEp/jniadapter/Message;)I"); + engineClass, + "messageToSendCallFromC", + "(Lfoundation/pEp/jniadapter/Message;)I"); + needsFastPollMethodID = _env->GetMethodID( - engineClass, - "needsFastPollCallFromC", - "(Z)I"); + engineClass, + "needsFastPollCallFromC", + "(Z)I"); + notifyHandShakeMethodID = _env->GetMethodID( - engineClass, - "notifyHandshakeCallFromC", - "(Lfoundation/pEp/jniadapter/_Identity;Lfoundation/pEp/jniadapter/_Identity;Lfoundation/pEp/jniadapter/SyncHandshakeSignal;)I"); + engineClass, + "notifyHandshakeCallFromC", + "(Lfoundation/pEp/jniadapter/_Identity;Lfoundation/pEp/jniadapter/_Identity;Lfoundation/pEp/jniadapter/SyncHandshakeSignal;)I"); + passphraseRequiredMethodID = _env->GetMethodID( - engineClass, - "passphraseRequiredFromC", - "(Lfoundation/pEp/jniadapter/PassphraseType;)[B"); - - sync_handshake_signal_values = JNISync::env()->GetStaticMethodID(signalClass, "values", - "()[Lfoundation/pEp/jniadapter/SyncHandshakeSignal;"); - passphrase_status_values = JNISync::env()->GetStaticMethodID(passphraseTypeClass, "values", - "()[Lfoundation/pEp/jniadapter/PassphraseType;"); - signal_field_value = JNISync::env()->GetFieldID(signalClass, "value", "I"); - passphrase_type_field_value = JNISync::env()->GetFieldID(passphraseTypeClass, "value", "I"); + engineClass, + "passphraseRequiredFromC", + "(Lfoundation/pEp/jniadapter/PassphraseType;)[B"); + + sync_handshake_signal_values = JNISync::env()->GetStaticMethodID( + signalClass, + "values", + "()[Lfoundation/pEp/jniadapter/SyncHandshakeSignal;"); + + passphrase_status_values = JNISync::env()->GetStaticMethodID( + passphraseTypeClass, + "values", + "()[Lfoundation/pEp/jniadapter/PassphraseType;"); + + signal_field_value = JNISync::env()->GetFieldID( + signalClass, + "value", + "I"); + + passphrase_type_field_value = JNISync::env()->GetFieldID(passphraseTypeClass, "value", "I"); } -char* JNIAdapter::passphraseRequiredCallback(const PEP_STATUS status) { +char* JNIAdapter::passphraseRequiredCallback( + const PEP_STATUS status) +{ pEpLog("called"); jobject status_ = nullptr; { @@ -113,8 +126,7 @@ char* JNIAdapter::passphraseRequiredCallback(const PEP_STATUS status) { assert(passphrase_status_values); assert(passphrase_type_field_value); - jobjectArray values = static_cast(JNISync::env()->CallStaticObjectMethod(passphraseTypeClass, - passphrase_status_values)); + jobjectArray values = static_cast(JNISync::env()->CallStaticObjectMethod(passphraseTypeClass, passphrase_status_values)); if (JNISync::env()->ExceptionCheck()) { JNISync::env()->ExceptionClear(); @@ -149,19 +161,21 @@ char* JNIAdapter::passphraseRequiredCallback(const PEP_STATUS status) { PEP_STATUS messageToSend(message *msg) { - std::lock_guard l(mutex_obj); + std::lock_guard l(mutex_obj); pEpLog("called"); // Passphrase // When a protocol implementation of the p≡p engine using messageToSend() cannot sign or encrypt with an // empty passphrase and not with the configured passphrase it is calling messageToSend() with a NULL instead // of a struct _message object. - if (Adapter::on_sync_thread() && !msg) + if (Adapter::on_sync_thread() && !msg) { return pEp::PassphraseCache::config_next_passphrase(); + } // reset passphrase iterator - if (Adapter::on_sync_thread()) + if (Adapter::on_sync_thread()) { pEp::PassphraseCache::config_next_passphrase(true); + } jobject msg_ = nullptr; assert(messageClass && messageConstructorMethodID && objj && messageToSendMethodID); @@ -175,11 +189,12 @@ PEP_STATUS messageToSend(message *msg) JNISync::env()->ExceptionClear(); } - return status; } -PEP_STATUS notifyHandshake(pEp_identity *me, pEp_identity *partner, sync_handshake_signal signal) +PEP_STATUS notifyHandshake(pEp_identity *me, + pEp_identity *partner, + sync_handshake_signal signal) { std::lock_guard l(mutex_obj); pEpLog("called"); @@ -196,8 +211,7 @@ PEP_STATUS notifyHandshake(pEp_identity *me, pEp_identity *partner, sync_handsha assert(sync_handshake_signal_values); assert(signal_field_value); - jobjectArray values = static_cast(JNISync::env()->CallStaticObjectMethod(signalClass, - sync_handshake_signal_values)); + jobjectArray values = static_cast(JNISync::env()->CallStaticObjectMethod(signalClass, sync_handshake_signal_values)); if (JNISync::env()->ExceptionCheck()) { JNISync::env()->ExceptionClear(); return PEP_UNKNOWN_ERROR; @@ -231,10 +245,8 @@ PEP_STATUS notifyHandshake(pEp_identity *me, pEp_identity *partner, sync_handsha extern "C" { using namespace pEp; -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_init( - JNIEnv *env, - jobject obj - ) +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_init(JNIEnv *env, + jobject obj) { std::lock_guard l(global_mutex); // global mutex for write access to pEpLog("called"); @@ -253,10 +265,8 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_init( Adapter::session(); } -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_release( - JNIEnv *env, - jobject obj - ) +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_release(JNIEnv *env, + jobject obj) { std::lock_guard l(global_mutex); // global mutex for write access to pEpLog("called"); @@ -264,10 +274,8 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine_release( Adapter::session(pEp::Adapter::release); } -JNIEXPORT jstring JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1getVersion( - JNIEnv *env, - jobject obj - ) +JNIEXPORT jstring JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1getVersion(JNIEnv *env, + jobject obj) { std::mutex *mutex_local = nullptr; { @@ -280,10 +288,8 @@ JNIEXPORT jstring JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1getVer return env->NewStringUTF(::get_engine_version()); } -JNIEXPORT jstring JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1getProtocolVersion( - JNIEnv *env, - jobject obj - ) +JNIEXPORT jstring JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1getProtocolVersion(JNIEnv *env, + jobject obj) { std::mutex *mutex_local = nullptr; { @@ -296,9 +302,10 @@ JNIEXPORT jstring JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1getPro return env->NewStringUTF(::get_protocol_version()); } -int examine_identity(pEp_identity *ident, void *arg) +int examine_identity(pEp_identity *ident, + void *arg) { - locked_queue< pEp_identity * > *queue = static_cast*>(arg); + locked_queue < pEp_identity * > *queue = static_cast * > (arg); queue->push_back(identity_dup(ident)); return 0; } @@ -306,10 +313,11 @@ int examine_identity(pEp_identity *ident, void *arg) pEp_identity *retrieve_next_identity(void *arg) { pEpLog("called"); - locked_queue< pEp_identity * > *queue = static_cast*>(arg); + locked_queue < pEp_identity * > *queue = static_cast * > (arg); - while (!queue->size()) + while (!queue->size()) { usleep(100000); + } pEp_identity *ident = queue->front(); queue->pop_front(); @@ -319,7 +327,7 @@ pEp_identity *retrieve_next_identity(void *arg) static void *keyserver_thread_routine(void *arg) { PEP_STATUS status = do_keymanagement(retrieve_next_identity, arg); - locked_queue< pEp_identity * > *queue = static_cast*>(arg); + locked_queue < pEp_identity * > *queue = static_cast * > (arg); while (queue->size()) { pEp_identity *ident = queue->front(); @@ -328,13 +336,11 @@ static void *keyserver_thread_routine(void *arg) } delete queue; - return reinterpret_cast(status); + return reinterpret_cast(status); } -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1startKeyserverLookup( - JNIEnv *env, - jobject obj - ) +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1startKeyserverLookup(JNIEnv *env, + jobject obj) { std::mutex *mutex_local = nullptr; { @@ -375,10 +381,8 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1startKeys pthread_create(thread, nullptr, keyserver_thread_routine, static_cast(queue)); } -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1stopKeyserverLookup( - JNIEnv *env, - jobject obj - ) +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1stopKeyserverLookup(JNIEnv *env, + jobject obj) { std::mutex *mutex_local = nullptr; { @@ -419,10 +423,8 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1stopKeyse free(thread); } -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1startSync( - JNIEnv *env, - jobject obj - ) +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1startSync(JNIEnv *env, + jobject obj) { std::mutex *mutex_local = nullptr; { @@ -434,17 +436,14 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1startSync try { CallbackDispatcher::start_sync(); -// Adapter::startup(messageToSend, notifyHandshake, &o, &JNISync::onSyncStartup, &JNISync::onSyncShutdown); } catch (RuntimeError& ex) { throw_pEp_Exception(env, ex.status); return; } } -JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1stopSync( - JNIEnv *env, - jobject obj - ) +JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1stopSync(JNIEnv *env, + jobject obj) { std::mutex *mutex_local = nullptr; { @@ -455,13 +454,10 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1stopSync( std::lock_guard l(*mutex_local); CallbackDispatcher::stop_sync(); -// Adapter::shutdown(); } -JNIEXPORT jboolean JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1isSyncRunning( - JNIEnv *env, - jobject obj - ) +JNIEXPORT jboolean JNICALL Java_foundation_pEp_jniadapter_AbstractEngine__1isSyncRunning(JNIEnv *env, + jobject obj) { std::mutex *mutex_local = nullptr; { diff --git a/src/cxx/foundation_pEp_jniadapter__Blob.cc b/src/cxx/foundation_pEp_jniadapter__Blob.cc index a817fae..713d2d6 100644 --- a/src/cxx/foundation_pEp_jniadapter__Blob.cc +++ b/src/cxx/foundation_pEp_jniadapter__Blob.cc @@ -8,39 +8,43 @@ #include "foundation_pEp_jniadapter__Blob.h" namespace pEp { - namespace JNIAdapter { - static ::bloblist_t *bloblist_ptr(JNIEnv *env, jobject me) { - jfieldID handle; +namespace JNIAdapter { - try { - handle = getFieldID(env, "foundation/pEp/jniadapter/Blob", "mime_type", "Ljava/lang/String"); - } - catch (std::exception& ex) { - assert(0); - return NULL; - } +static ::bloblist_t *bloblist_ptr(JNIEnv *env, jobject me) { + jfieldID handle; - return reinterpret_cast<::bloblist_t*>(env->GetLongField(me, handle)); - } - }; -}; + try { + handle = getFieldID(env, "foundation/pEp/jniadapter/Blob", "mime_type", "Ljava/lang/String"); + } catch (std::exception &ex) { + assert(0); + return NULL; + } + + return reinterpret_cast<::bloblist_t *>(env->GetLongField(me, handle)); +} + +}; //namespace JNIAdapter +}; //namespace pEp extern "C" { using namespace std; using namespace pEp::JNIAdapter; -JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter__1Blob__1dataToXER(JNIEnv *env, jobject obj) + +JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter__1Blob__1dataToXER(JNIEnv *env, + jobject obj) { pEpLog("called"); bloblist_t *b = to_blob(env, obj); char *out = nullptr; // RFC 1049 / RFC 2045 : The type, subtype, and parameter names are not case sensitive. - if(strcasecmp(b->mime_type, "application/pEp.sync") == 0) { + if (strcasecmp(b->mime_type, "application/pEp.sync") == 0) { PEP_STATUS status = ::PER_to_XER_Sync_msg(b->value, static_cast(b->size), &out); - if (status) + if (status) { throw_pEp_Exception(env, status); + } jbyteArray result = from_string(env, out); free(out); @@ -48,17 +52,18 @@ JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter__1Blob__1dataToXER(J } // RFC 1049 / RFC 2045 : The type, subtype, and parameter names are not case sensitive. - if(strcasecmp(b->mime_type, "application/pEp.keyreset") == 0) { + if (strcasecmp(b->mime_type, "application/pEp.keyreset") == 0) { PEP_STATUS status = ::PER_to_XER_Distribution_msg(b->value, static_cast(b->size), &out); - if (status) + if (status) { throw_pEp_Exception(env, status); + } jbyteArray result = from_string(env, out); free(out); return result; } - return from_string(env,b->value); + return from_string(env, b->value); } }; // extern "C" diff --git a/src/cxx/identity_api.cc b/src/cxx/identity_api.cc index 12fb3d1..c9b850f 100644 --- a/src/cxx/identity_api.cc +++ b/src/cxx/identity_api.cc @@ -3,10 +3,12 @@ #include "jniutils.hh" - extern "C" { -JNIEXPORT jint JNICALL Java_foundation_pEp_jniadapter_Identity__1getRating(JNIEnv *env, jobject thiz, jint comm_type) +JNIEXPORT jint JNICALL Java_foundation_pEp_jniadapter_Identity__1getRating( + JNIEnv *env, + jobject thiz, + jint comm_type) { pEpLog("called"); return ::rating_from_comm_type(static_cast(comm_type)); diff --git a/src/cxx/jniutils.cc b/src/cxx/jniutils.cc index 262e6d9..27f2438 100644 --- a/src/cxx/jniutils.cc +++ b/src/cxx/jniutils.cc @@ -1,8 +1,11 @@ #include #include "jniutils.hh" #include + #ifndef __LP64__ + #include + #define time_t time64_t #define timegm timegm64 #define gmtime_r gmtime64_r @@ -11,760 +14,782 @@ #endif namespace pEp { - namespace JNIAdapter { - std::mutex global_mutex; - std::unordered_map engine_objid_mutex; - - std::mutex* get_engine_java_object_mutex( - JNIEnv *env, - jobject obj - ) - { - long engine_obj_id = static_cast(callLongMethod(env, obj, "getId")); - assert(engine_obj_id); - pEpLog("for java object id: " << engine_obj_id); - std::mutex *engine_obj_mutex = engine_objid_mutex.at(engine_obj_id); - pEpLog("found mutex: " << engine_obj_mutex << " with native_handle: " << engine_obj_mutex->native_handle()); - assert(engine_obj_mutex); - return engine_obj_mutex; - } - - void create_engine_java_object_mutex( - JNIEnv *env, - jobject obj - ) - { - long engine_obj_id = static_cast(callLongMethod(env, obj, "getId")); - assert(engine_obj_id); - std::mutex *engine_obj_mutex = new std::mutex(); - pEpLog(engine_obj_mutex << " with native_handle: " << engine_obj_mutex->native_handle() << " for java object id: " << engine_obj_id); - assert(engine_obj_mutex); - if(engine_objid_mutex.count(engine_obj_id) > 0) { - pEpLog("Fatal: mutex already existing for object id: " << engine_obj_id); - assert(0); - } - engine_objid_mutex.insert(std::make_pair(engine_obj_id, engine_obj_mutex )); - } - - void release_engine_java_object_mutex( - JNIEnv *env, - jobject obj - ) - { - long engine_obj_id = static_cast(callLongMethod(env, obj, "getId")); - assert(engine_obj_id); - std::mutex *engine_obj_mutex = engine_objid_mutex.at(engine_obj_id); - pEpLog(engine_obj_mutex << " with native_handle: " << engine_obj_mutex->native_handle() << " for java object id: " << engine_obj_id); - assert(engine_obj_mutex); - engine_objid_mutex.erase(engine_obj_id); - delete engine_obj_mutex; - } - - jclass findClass(JNIEnv *env, const char *classname) - { - jclass clazz = env->FindClass(classname); - if (!clazz) - fprintf(stderr, "class not found: %s\n", classname); - assert(clazz); - - if (clazz == NULL) { - jclass ex = env->FindClass("java/lang/NoClassDefFoundError"); - assert(ex); - env->ThrowNew(ex, classname); - throw std::bad_cast(); - } - - return clazz; - } - - jfieldID getFieldID( - JNIEnv *env, - const char *classname, - const char *fieldname, - const char *signature - ) - { - jclass clazz = findClass(env, classname); - assert(clazz); - - jfieldID field = env->GetFieldID(clazz, fieldname, signature); - assert(field); - - if (field == NULL) { - jclass ex = env->FindClass("java/lang/NoSuchFieldError"); - assert(ex); - env->ThrowNew(ex, fieldname); - throw std::invalid_argument(std::string(fieldname)); - } - - env->DeleteLocalRef(clazz); - - return field; - } - - //TODO: fix/generalize/clean patch added to make keysync work using globalref to class - jfieldID getFieldID( - JNIEnv *env, - const char *classname, - const char *fieldname, - const char *signature, - const jclass clazz - ) - { - - jfieldID field = env->GetFieldID(clazz, fieldname, signature); - assert(field); - - if (field == NULL) { - jclass ex = env->FindClass("java/lang/NoSuchFieldError"); - assert(ex); - env->ThrowNew(ex, fieldname); - throw std::invalid_argument(std::string(fieldname)); - } - - - return field; - } - - jint callIntMethod( - JNIEnv *env, - jobject obj, - const char *methodname - ) - { - jclass clazz = env->GetObjectClass(obj); - assert(clazz); - - jmethodID method = env->GetMethodID(clazz, methodname, "()I"); - if (method == NULL) { - jclass ex = env->FindClass("java/lang/NoSuchMethodError"); - assert(ex); - env->ThrowNew(ex, methodname); - throw std::invalid_argument(std::string(methodname)); - } - - env->DeleteLocalRef(clazz); - - jint result = env->CallIntMethod(obj, method); - env->ExceptionCheck(); // handle exception in Java - return result; - } - - jlong callLongMethod( - JNIEnv *env, - jobject obj, - const char *methodname - ) - { - jclass clazz = env->GetObjectClass(obj); - assert(clazz); - - jmethodID method = env->GetMethodID(clazz, methodname, "()J"); - if (method == NULL) { - jclass ex = env->FindClass("java/lang/NoSuchMethodError"); - assert(ex); - env->ThrowNew(ex, methodname); - throw std::invalid_argument(std::string(methodname)); - } - - env->DeleteLocalRef(clazz); - - jlong result = env->CallLongMethod(obj, method); - env->ExceptionCheck(); // handle exception in Java - return result; - } - - jobject callObjectMethod( - JNIEnv *env, - jobject obj, - const char *methodname, - jint index - ) - { - jclass clazz = env->GetObjectClass(obj); - assert(clazz); - - jmethodID method = env->GetMethodID(clazz, methodname, - "(I)Ljava/lang/Object;"); - if (method == NULL) { - jclass ex = env->FindClass("java/lang/NoSuchMethodError"); - assert(ex); - env->ThrowNew(ex, methodname); - throw std::invalid_argument(std::string(methodname)); - } - - env->DeleteLocalRef(clazz); - - jobject result = env->CallObjectMethod(obj, method, index); - env->ExceptionCheck(); // handle exception in Java - return result; - } - - jboolean callBooleanMethod( - JNIEnv *env, - jobject obj, - const char *methodname, - jobject o - ) - { - jclass clazz = env->GetObjectClass(obj); - assert(clazz); - - jmethodID method = env->GetMethodID(clazz, methodname, - "(Ljava/lang/Object;)Z"); - if (method == NULL) { - jclass ex = env->FindClass("java/lang/NoSuchMethodError"); - assert(ex); - env->ThrowNew(ex, methodname); - throw std::invalid_argument(std::string(methodname)); - } - - env->DeleteLocalRef(clazz); - - jboolean result = env->CallBooleanMethod(obj, method, o); - env->ExceptionCheck(); // handle exception in Java - return result; - } - - jint outOfMemory(JNIEnv *env) - { - jclass ex; - const char *ex_name = "java/lang/OutOfMemoryError"; - - ex = env->FindClass(ex_name); - assert(ex); - return env->ThrowNew(ex, ex_name); - } - - jobject from_Integer(JNIEnv *env, int val) - { - assert(env); - jclass clazz = findClass(env, "java/lang/Integer"); - - jmethodID constructor = env->GetMethodID(clazz, "", "(I)V"); - assert(constructor); - - jobject obj = env->NewObject(clazz, constructor, val); - assert(obj); - return obj; - } - - int to_Integer(JNIEnv *env, jobject obj) - { - assert(env && obj); - int _val = callIntMethod(env, obj, "intValue"); - return _val; - } - - jbyteArray from_string(JNIEnv *env, const char *str) - { - if (str && str[0]) { - jboolean isCopy; - size_t l = strlen(str); - jbyteArray _str = env->NewByteArray(l); - env->SetByteArrayRegion(_str, 0, l, (jbyte*)str); - return _str; - } - else if (str) { - return env->NewByteArray(0); - } else { - return (jbyteArray) NULL; - } - } - - char *to_string(JNIEnv *env, jbyteArray str) - { - if (str == NULL) - return NULL; - - size_t l = env->GetArrayLength(str); - char *_str = static_cast(calloc(1,l+1)); - assert(_str); - env->GetByteArrayRegion(str, 0, l, (jbyte*)_str); - return _str; - } - - jobject from_stringlist(JNIEnv *env, stringlist_t *sl) - { - if (!sl) - return (jobject) NULL; - - jclass clazz = findClass(env, "java/util/Vector"); - jmethodID constructor = env->GetMethodID(clazz, "", "()V"); - assert(constructor); - jobject obj = env->NewObject(clazz, constructor); - assert(obj); - - stringlist_t *_sl; - for (_sl = sl; _sl && _sl->value; _sl = _sl->next) { - jobject o = from_string(env, _sl->value); - callBooleanMethod(env, obj, "add", o); - } - - env->DeleteLocalRef(clazz); - - return obj; - } - - stringlist_t *to_stringlist(JNIEnv *env, jobject obj) - { - if (!obj) - return NULL; - - jint size = callIntMethod(env, obj, "size"); - if (size == 0) - return NULL; - - stringlist_t *sl = new_stringlist(NULL); - stringlist_t *_sl; - jint i; - for (_sl = sl, i = 0; i < (int) size; i++) { - jobject o = callObjectMethod(env, obj, "get", i); - jbyteArray a = static_cast(o); - char * str = to_string(env, a); - _sl = stringlist_add(_sl, str); - env->DeleteLocalRef(o); - free(str); - } - - return sl; - } - - jobject from_stringpairlist(JNIEnv *env, stringpair_list_t *sl) - { - if (!sl) - return (jobject) NULL; - - jclass clazz = findClass(env, "java/util/ArrayList"); - jclass clazz_pair = findClass(env, "foundation/pEp/jniadapter/Pair"); - jmethodID constructor = env->GetMethodID(clazz, "", "()V"); - assert(constructor); - jmethodID constructor_pair = env->GetMethodID(clazz_pair, "", - "(Ljava/lang/Object;Ljava/lang/Object;)V"); - assert(constructor_pair); - - jobject obj = env->NewObject(clazz, constructor); - assert(obj); - - stringpair_list_t *_sl; - for (_sl = sl; _sl && _sl->value; _sl = _sl->next) { - assert(_sl->value->key); - assert(_sl->value->value); - - jbyteArray first = from_string(env, _sl->value->key); - jbyteArray second = from_string(env, _sl->value->value); - jobject pair = env->NewObject(clazz_pair, constructor_pair, - first, second); - callBooleanMethod(env, obj, "add", pair); - - env->DeleteLocalRef(first); - env->DeleteLocalRef(second); - env->DeleteLocalRef(pair); - - - } - - env->DeleteLocalRef(clazz); - env->DeleteLocalRef(clazz_pair); - - return obj; - } - - stringpair_list_t *to_stringpairlist(JNIEnv *env, jobject obj) - { - if (!obj) - return NULL; - - jint size = callIntMethod(env, obj, "size"); - if (size == 0) - return NULL; - - jfieldID first_id = getFieldID(env, "foundation/pEp/jniadapter/Pair", - "first", "Ljava/lang/Object;"); - jfieldID second_id = getFieldID(env, "foundation/pEp/jniadapter/Pair", - "second", "Ljava/lang/Object;"); - - stringpair_list_t *sl = new_stringpair_list(NULL); - stringpair_list_t *_sl; - jint i; - - for (_sl = sl, i = 0; i < (int) size; i++) { - jobject pair = callObjectMethod(env, obj, "get", i); - jbyteArray first = - static_cast(env->GetObjectField(pair, - first_id)); - jbyteArray second = - static_cast(env->GetObjectField(pair, - second_id)); - - char *first_str = to_string(env, first); - char *second_str = to_string(env, second); - stringpair_t *sp = new_stringpair(first_str, second_str); - env->DeleteLocalRef(pair); - free(first_str); - free(second_str); - - _sl = stringpair_list_add(_sl, sp); - } - - return sl; - } - - jobject from_timestamp(JNIEnv *env, timestamp *ts) - { - if (!ts) - return NULL; - - //LOGD("/* Seconds (0-60) */ FROM :%d", ts->tm_sec); - //LOGD("/* Minutes (0-59) */ :%d", ts->tm_min); - //LOGD("/* Hours (0-23) */ :%d", ts->tm_hour); - //LOGD("/* Day of the month (1-31) */:%d", ts->tm_mday); - //LOGD("/* Month (0-11) */ :%d", ts->tm_mon); - //LOGD("/* Year - 1900 */ :%d", ts->tm_year); - - time_t t = timegm(ts)*1000; - //LOGD( "TimeGM returns : %lld", t); - jclass clazz = findClass(env, "java/util/Date"); - jmethodID constructor = env->GetMethodID(clazz, "", "(J)V"); - assert(constructor); - - jobject result = env->NewObject(clazz, constructor, (jlong) t); - - env->DeleteLocalRef(clazz); - - return result; - - } - - timestamp *to_timestamp(JNIEnv *env, jobject date) - { - if (!date) - return NULL; - - jlong t = callLongMethod(env, date, "getTime"); - //LOGD( "Set Time to : %lld", t); - timestamp *ts = static_cast(calloc(1, sizeof(timestamp))); - assert(ts); - if (ts == NULL) - return NULL; - - if (t){ - time_t clock = t/1000; - gmtime_r(&clock, ts); - - //LOGD("/* Seconds (0-60) */ TO :%d", ts->tm_sec); - //LOGD("/* Minutes (0-59) */ :%d", ts->tm_min); - //LOGD("/* Hours (0-23) */ :%d", ts->tm_hour); - //LOGD("/* Day of the month (1-31) */:%d", ts->tm_mday); - //LOGD("/* Month (0-11) */ :%d", ts->tm_mon); - //LOGD("/* Year - 1900 */ :%d", ts->tm_year); - } - - return ts; - } - - static void _setStringField(JNIEnv *env, const char *classname, - jobject obj, const char *name, const char *value) - { - if (value) { - jfieldID fieldID = getFieldID(env, classname, name, "[B"); - env->SetObjectField(obj, fieldID, static_cast(from_string(env, value))); - - } - } - - //TODO: fix/generalize/clean patch added to make keysync work using globalref to class - static void _setStringField(JNIEnv *env, const char *classname, - jobject obj, const char *name, const char *value, const jclass clazz) - { - if (value) { - jfieldID fieldID = getFieldID(env, classname, name, "[B", clazz); - env->SetObjectField(obj, fieldID, static_cast(from_string(env, value))); - - } - } - - jobject from_identity(JNIEnv *env, pEp_identity *ident) - { - if (!ident) - return (jobject) NULL; - - static const char *classname = "foundation/pEp/jniadapter/_Identity"; - jclass clazz = findClass(env, classname); - jmethodID constructor = env->GetMethodID(clazz, "", "()V"); - assert(constructor); - jobject obj = env->NewObject(clazz, constructor); - - env->DeleteLocalRef(clazz); - - if (ident) { - _setStringField(env, classname, obj, "address", ident->address); - _setStringField(env, classname, obj, "fpr", ident->fpr); - _setStringField(env, classname, obj, "user_id", ident->user_id); - _setStringField(env, classname, obj, "username", ident->username); - - jfieldID comm_type_id = getFieldID(env, classname, "comm_type", "I"); - env->SetIntField(obj, comm_type_id, static_cast(ident->comm_type)); - - _setStringField(env, classname, obj, "lang", ident->lang); - - jfieldID me_id = getFieldID(env, classname, "me", "Z"); - env->SetBooleanField(obj, me_id, static_cast(ident->me)); - - jfieldID flags_id = getFieldID(env, classname, "flags", "I"); - env->SetIntField(obj, flags_id, static_cast(ident->flags)); - } - - return obj; - } - - //TODO: fix/generalize/clean patch added to make keysync work using globalref to class - jobject from_identity(JNIEnv *env, pEp_identity *ident, jclass identityClass) - { - if (!ident) - return (jobject) NULL; - - static const char *classname = "foundation/pEp/jniadapter/_Identity"; - jmethodID constructor = env->GetMethodID(identityClass, "", "()V"); - assert(constructor); - jobject obj = env->NewObject(identityClass, constructor); - - if (ident) { - _setStringField(env, classname, obj, "address", ident->address, identityClass); - _setStringField(env, classname, obj, "fpr", ident->fpr, identityClass); - _setStringField(env, classname, obj, "user_id", ident->user_id, identityClass); - _setStringField(env, classname, obj, "username", ident->username, identityClass); - - jfieldID comm_type_id = getFieldID(env, classname, "comm_type", "I", identityClass); - env->SetIntField(obj, comm_type_id, static_cast(ident->comm_type)); - - _setStringField(env, classname, obj, "lang", ident->lang, identityClass); - - jfieldID me_id = getFieldID(env, classname, "me", "Z", identityClass); - env->SetBooleanField(obj, me_id, static_cast(ident->me)); - - jfieldID flags_id = getFieldID(env, classname, "flags", "I", identityClass); - env->SetIntField(obj, flags_id, static_cast(ident->flags)); - } - - return obj; - } - - char *_getStringField(JNIEnv *env, const char *classname, jobject obj, - const char *name) - { - jfieldID fieldID = getFieldID(env, classname, name, "[B"); - jobject fobj = env->GetObjectField(obj, fieldID); - - char *res = to_string(env, static_cast(fobj)); - - env->DeleteLocalRef(fobj); - return res; - } - - pEp_identity *to_identity(JNIEnv *env, jobject obj) - { - if (!obj) - return NULL; - - static const char *classname = "foundation/pEp/jniadapter/_Identity"; - pEp_identity *ident = new_identity(NULL, NULL, NULL, NULL); - - ident->address = _getStringField(env, classname, obj, "address"); - ident->fpr = _getStringField(env, classname, obj, "fpr"); - ident->user_id = _getStringField(env, classname, obj, "user_id"); - ident->username = _getStringField(env, classname, obj, "username"); - - jfieldID comm_type_id = getFieldID(env, classname, "comm_type", "I"); - ident->comm_type = static_cast(env->GetIntField(obj, comm_type_id)); - - char *lang = _getStringField(env, classname, obj, "lang"); - if (lang && lang[0]) { - ident->lang[0] = lang[0]; - ident->lang[1] = lang[1]; - } - free(lang); - - jfieldID me_id = getFieldID(env, classname, "me", "Z"); - ident->me = static_cast(env->GetBooleanField(obj, me_id)); - - jfieldID flags_id = getFieldID(env, classname, "flags", "I"); - ident->flags = static_cast(env->GetIntField(obj, flags_id)); - - return ident; - } - - jobject from_identitylist(JNIEnv *env, identity_list *il) - { - if (!il) - return (jobject) NULL; - - jclass clazz = findClass(env, "java/util/Vector"); - jmethodID constructor = env->GetMethodID(clazz, "", "()V"); - assert(constructor); - jobject obj = env->NewObject(clazz, constructor); - assert(obj); - - identity_list *_il; - for (_il = il; _il && _il->ident; _il = _il->next) { - jobject o = from_identity(env, _il->ident); - callBooleanMethod(env, obj, "add", o); - } - - env->DeleteLocalRef(clazz); - - return obj; - } - - identity_list *to_identitylist(JNIEnv *env, jobject obj) - { - if (!obj) - return NULL; - - jint size = callIntMethod(env, obj, "size"); - if (size == 0) - return NULL; - - identity_list *il = new_identity_list(NULL); - identity_list *_il; - jint i; - for (_il = il, i = 0; i < (int) size; i++) { - jobject o = callObjectMethod(env, obj, "get", i); - pEp_identity* ident = to_identity(env, o); - _il = identity_list_add(_il, ident); - env->DeleteLocalRef(o); - } - - return il; - } - - jobject _from_blob(JNIEnv *env, bloblist_t *b) - { - if (!b) - return (jobject) NULL; - - static const char *classname = "foundation/pEp/jniadapter/_Blob"; - jclass clazz = findClass(env, classname); - jmethodID constructor = env->GetMethodID(clazz, "", "()V"); - assert(constructor); - jobject obj = env->NewObject(clazz, constructor); - - env->DeleteLocalRef(clazz); - - jfieldID fieldID = getFieldID(env, classname, "data", "[B"); - jbyteArray _data = env->NewByteArray(static_cast(b->size)); - env->SetByteArrayRegion(_data, 0, b->size, reinterpret_cast(b->value)); - env->SetObjectField(obj, fieldID, static_cast(_data)); - _setStringField(env, classname, obj, "mime_type", b->mime_type); - _setStringField(env, classname, obj, "filename", b->filename); - - return obj; - } - - jobject from_bloblist(JNIEnv *env, bloblist_t *bl) - { - if (!bl) - return (jobject) NULL; - - jclass clazz = findClass(env, "java/util/Vector"); - jmethodID constructor = env->GetMethodID(clazz, "", "()V"); - assert(constructor); - jobject obj = env->NewObject(clazz, constructor); - assert(obj); - - env->DeleteLocalRef(clazz); - - bloblist_t *_bl; - for (_bl = bl; _bl && _bl->value; _bl = _bl->next) { - jobject o = _from_blob(env, _bl); - if(o) - callBooleanMethod(env, obj, "add", o); - } - - return obj; - } - - bloblist_t *to_blob(JNIEnv *env, jobject obj) - { - if (!obj) - return NULL; - - static const char *classname = "foundation/pEp/jniadapter/_Blob"; - jclass clazz = findClass(env, classname); - - char *mime_type = _getStringField(env, classname, obj, "mime_type"); - char *filename = _getStringField(env, classname, obj, "filename"); - - jfieldID data_id = getFieldID(env, classname, "data", "[B"); - jbyteArray _data = static_cast(env->GetObjectField(obj, data_id)); - size_t size = static_cast(env->GetArrayLength(_data)); - char *b = static_cast(malloc(size)); - assert(b); - - env->GetByteArrayRegion(_data, 0, size, reinterpret_cast(b)); - bloblist_t *bl = new_bloblist( b, size, mime_type, filename); - - free(mime_type); - free(filename); - return bl; - } - - - bloblist_t *to_bloblist(JNIEnv *env, jobject obj) - { - if (!obj) - return NULL; - - jint size = callIntMethod(env, obj, "size"); - if (size == 0) - return NULL; - - bloblist_t *bl = new_bloblist(NULL, 0, NULL, NULL); - bloblist_t *_bl; - _bl = bl; - jint i; - for (i = 0; i < (int) size; i++) { - jobject o = callObjectMethod(env, obj, "get", i); - bloblist_t *b = to_blob(env, o); - _bl = bloblist_add(_bl, b->value, b->size, b->mime_type, b->filename); - env->DeleteLocalRef(o); - } - - return bl; - } - - PEP_enc_format to_EncFormat(JNIEnv *env, jobject obj) - { - static const char *classname = "foundation/pEp/jniadapter/Message$EncFormat"; - jclass clazz_enc_format = findClass(env, classname); - jfieldID field_value = env->GetFieldID(clazz_enc_format, "value", "I"); - assert(field_value); - - env->DeleteLocalRef(clazz_enc_format); - return static_cast(env->GetIntField(obj, field_value)); - } - - PEP_CIPHER_SUITE to_CipherSuite(JNIEnv *env, jobject obj) - { - static const char *classname = "foundation/pEp/jniadapter/CipherSuite"; - jclass clazz_enc_format = findClass(env, classname); - jfieldID field_value = env->GetFieldID(clazz_enc_format, "value", "I"); - assert(field_value); - - env->DeleteLocalRef(clazz_enc_format); - return static_cast(env->GetIntField(obj, field_value)); - } - - sync_handshake_result to_SyncHandshakeResult(JNIEnv *env, jobject obj) - { - static const char *classname = "foundation/pEp/jniadapter/SyncHandshakeResult"; - jclass clazz_enc_format = findClass(env, classname); - jfieldID field_value = env->GetFieldID(clazz_enc_format, "value", "I"); - assert(field_value); - - env->DeleteLocalRef(clazz_enc_format); - return static_cast(env->GetIntField(obj, field_value)); - } - }; +namespace JNIAdapter { + +std::mutex global_mutex; +std::unordered_map engine_objid_mutex; + +std::mutex *get_engine_java_object_mutex(JNIEnv *env, + jobject obj) +{ + long engine_obj_id = static_cast(callLongMethod(env, obj, "getId")); + assert(engine_obj_id); + pEpLog("for java object id: " << engine_obj_id); + std::mutex *engine_obj_mutex = engine_objid_mutex.at(engine_obj_id); + pEpLog("found mutex: " << engine_obj_mutex << " with native_handle: " << engine_obj_mutex->native_handle()); + assert(engine_obj_mutex); + return engine_obj_mutex; +} + +void create_engine_java_object_mutex(JNIEnv *env, + jobject obj) +{ + long engine_obj_id = static_cast(callLongMethod(env, obj, "getId")); + assert(engine_obj_id); + std::mutex *engine_obj_mutex = new std::mutex(); + pEpLog(engine_obj_mutex << " with native_handle: " << engine_obj_mutex->native_handle() << " for java object id: " << engine_obj_id); + assert(engine_obj_mutex); + if (engine_objid_mutex.count(engine_obj_id) > 0) { + pEpLog("Fatal: mutex already existing for object id: " << engine_obj_id); + assert(0); + } + engine_objid_mutex.insert(std::make_pair(engine_obj_id, engine_obj_mutex)); +} + +void release_engine_java_object_mutex(JNIEnv *env, + jobject obj) +{ + long engine_obj_id = static_cast(callLongMethod(env, obj, "getId")); + assert(engine_obj_id); + std::mutex *engine_obj_mutex = engine_objid_mutex.at(engine_obj_id); + pEpLog(engine_obj_mutex << " with native_handle: " << engine_obj_mutex->native_handle() << " for java object id: " << engine_obj_id); + assert(engine_obj_mutex); + engine_objid_mutex.erase(engine_obj_id); + delete engine_obj_mutex; +} + +jclass findClass(JNIEnv *env, + const char *classname) +{ + jclass clazz = env->FindClass(classname); + if (!clazz) { + fprintf(stderr, "class not found: %s\n", classname); + } + assert(clazz); + + if (clazz == NULL) { + jclass ex = env->FindClass("java/lang/NoClassDefFoundError"); + assert(ex); + env->ThrowNew(ex, classname); + throw std::bad_cast(); + } + + return clazz; +} + +jfieldID getFieldID(JNIEnv *env, + const char *classname, + const char *fieldname, + const char *signature) +{ + jclass clazz = findClass(env, classname); + assert(clazz); + + jfieldID field = env->GetFieldID(clazz, fieldname, signature); + assert(field); + + if (field == NULL) { + jclass ex = env->FindClass("java/lang/NoSuchFieldError"); + assert(ex); + env->ThrowNew(ex, fieldname); + throw std::invalid_argument(std::string(fieldname)); + } + + env->DeleteLocalRef(clazz); + + return field; +} + +//TODO: fix/generalize/clean patch added to make keysync work using globalref to class +jfieldID getFieldID(JNIEnv *env, + const char *classname, + const char *fieldname, + const char *signature, + const jclass clazz) +{ + jfieldID field = env->GetFieldID(clazz, fieldname, signature); + assert(field); + + if (field == NULL) { + jclass ex = env->FindClass("java/lang/NoSuchFieldError"); + assert(ex); + env->ThrowNew(ex, fieldname); + throw std::invalid_argument(std::string(fieldname)); + } + + + return field; +} + +jint callIntMethod(JNIEnv *env, + jobject obj, + const char *methodname) +{ + jclass clazz = env->GetObjectClass(obj); + assert(clazz); + + jmethodID method = env->GetMethodID(clazz, methodname, "()I"); + if (method == NULL) { + jclass ex = env->FindClass("java/lang/NoSuchMethodError"); + assert(ex); + env->ThrowNew(ex, methodname); + throw std::invalid_argument(std::string(methodname)); + } + + env->DeleteLocalRef(clazz); + + jint result = env->CallIntMethod(obj, method); + env->ExceptionCheck(); // handle exception in Java + return result; +} + +jlong callLongMethod(JNIEnv *env, + jobject obj, + const char *methodname) +{ + jclass clazz = env->GetObjectClass(obj); + assert(clazz); + + jmethodID method = env->GetMethodID(clazz, methodname, "()J"); + if (method == NULL) { + jclass ex = env->FindClass("java/lang/NoSuchMethodError"); + assert(ex); + env->ThrowNew(ex, methodname); + throw std::invalid_argument(std::string(methodname)); + } + + env->DeleteLocalRef(clazz); + + jlong result = env->CallLongMethod(obj, method); + env->ExceptionCheck(); // handle exception in Java + return result; +} + +jobject callObjectMethod(JNIEnv *env, + jobject obj, + const char *methodname, + jint index) +{ + jclass clazz = env->GetObjectClass(obj); + assert(clazz); + + jmethodID method = env->GetMethodID(clazz, methodname, "(I)Ljava/lang/Object;"); + if (method == NULL) { + jclass ex = env->FindClass("java/lang/NoSuchMethodError"); + assert(ex); + env->ThrowNew(ex, methodname); + throw std::invalid_argument(std::string(methodname)); + } + + env->DeleteLocalRef(clazz); + + jobject result = env->CallObjectMethod(obj, method, index); + env->ExceptionCheck(); // handle exception in Java + return result; +} + +jboolean callBooleanMethod(JNIEnv *env, + jobject obj, + const char *methodname, + jobject o) +{ + jclass clazz = env->GetObjectClass(obj); + assert(clazz); + + jmethodID method = env->GetMethodID(clazz, methodname, "(Ljava/lang/Object;)Z"); + if (method == NULL) { + jclass ex = env->FindClass("java/lang/NoSuchMethodError"); + assert(ex); + env->ThrowNew(ex, methodname); + throw std::invalid_argument(std::string(methodname)); + } + + env->DeleteLocalRef(clazz); + + jboolean result = env->CallBooleanMethod(obj, method, o); + env->ExceptionCheck(); // handle exception in Java + return result; +} + +jint outOfMemory(JNIEnv *env) +{ + jclass ex; + const char *ex_name = "java/lang/OutOfMemoryError"; + + ex = env->FindClass(ex_name); + assert(ex); + return env->ThrowNew(ex, ex_name); +} + +jobject from_Integer(JNIEnv *env, + int val) +{ + assert(env); + jclass clazz = findClass(env, "java/lang/Integer"); + + jmethodID constructor = env->GetMethodID(clazz, "", "(I)V"); + assert(constructor); + + jobject obj = env->NewObject(clazz, constructor, val); + assert(obj); + return obj; +} + +int to_Integer(JNIEnv *env, + jobject obj) +{ + assert(env && obj); + int _val = callIntMethod(env, obj, "intValue"); + return _val; +} + +jbyteArray from_string(JNIEnv *env, + const char *str) +{ + if (str && str[0]) { + jboolean isCopy; + size_t l = strlen(str); + jbyteArray _str = env->NewByteArray(l); + env->SetByteArrayRegion(_str, 0, l, (jbyte *) str); + return _str; + } else if (str) { + return env->NewByteArray(0); + } else { + return (jbyteArray) NULL; + } +} + +char *to_string(JNIEnv *env, + jbyteArray str) +{ + if (str == NULL) { + return NULL; + } + + size_t l = env->GetArrayLength(str); + char *_str = static_cast(calloc(1, l + 1)); + assert(_str); + env->GetByteArrayRegion(str, 0, l, (jbyte *) _str); + return _str; +} + +jobject from_stringlist(JNIEnv *env, + stringlist_t *sl) +{ + if (!sl) { + return (jobject) NULL; + } + + jclass clazz = findClass(env, "java/util/Vector"); + jmethodID constructor = env->GetMethodID(clazz, "", "()V"); + assert(constructor); + jobject obj = env->NewObject(clazz, constructor); + assert(obj); + + stringlist_t *_sl; + for (_sl = sl; _sl && _sl->value; _sl = _sl->next) { + jobject o = from_string(env, _sl->value); + callBooleanMethod(env, obj, "add", o); + } + + env->DeleteLocalRef(clazz); + + return obj; +} + +stringlist_t *to_stringlist(JNIEnv *env, + jobject obj) +{ + if (!obj) { + return NULL; + } + + jint size = callIntMethod(env, obj, "size"); + if (size == 0) { + return NULL; + } + + stringlist_t *sl = new_stringlist(NULL); + stringlist_t *_sl; + jint i; + for (_sl = sl, i = 0; i < (int) size; i++) { + jobject o = callObjectMethod(env, obj, "get", i); + jbyteArray a = static_cast(o); + char *str = to_string(env, a); + _sl = stringlist_add(_sl, str); + env->DeleteLocalRef(o); + free(str); + } + + return sl; +} + +jobject from_stringpairlist(JNIEnv *env, + stringpair_list_t *sl) +{ + if (!sl) { + return (jobject) NULL; + } + + jclass clazz = findClass(env, "java/util/ArrayList"); + jclass clazz_pair = findClass(env, "foundation/pEp/jniadapter/Pair"); + jmethodID constructor = env->GetMethodID(clazz, "", "()V"); + assert(constructor); + jmethodID constructor_pair = env->GetMethodID(clazz_pair, "", "(Ljava/lang/Object;Ljava/lang/Object;)V"); + assert(constructor_pair); + + jobject obj = env->NewObject(clazz, constructor); + assert(obj); + + stringpair_list_t *_sl; + for (_sl = sl; _sl && _sl->value; _sl = _sl->next) { + assert(_sl->value->key); + assert(_sl->value->value); + + jbyteArray first = from_string(env, _sl->value->key); + jbyteArray second = from_string(env, _sl->value->value); + jobject pair = env->NewObject(clazz_pair, constructor_pair, first, second); + callBooleanMethod(env, obj, "add", pair); + + env->DeleteLocalRef(first); + env->DeleteLocalRef(second); + env->DeleteLocalRef(pair); + } + + env->DeleteLocalRef(clazz); + env->DeleteLocalRef(clazz_pair); + + return obj; +} + +stringpair_list_t *to_stringpairlist(JNIEnv *env, + jobject obj) +{ + if (!obj) { + return NULL; + } + + jint size = callIntMethod(env, obj, "size"); + if (size == 0) { + return NULL; + } + + jfieldID first_id = getFieldID(env, "foundation/pEp/jniadapter/Pair", "first", "Ljava/lang/Object;"); + jfieldID second_id = getFieldID(env, "foundation/pEp/jniadapter/Pair", "second", "Ljava/lang/Object;"); + + stringpair_list_t *sl = new_stringpair_list(NULL); + stringpair_list_t *_sl; + jint i; + + for (_sl = sl, i = 0; i < (int) size; i++) { + jobject pair = callObjectMethod(env, obj, "get", i); + jbyteArray first = static_cast(env->GetObjectField(pair, first_id)); + jbyteArray second = static_cast(env->GetObjectField(pair, second_id)); + + char *first_str = to_string(env, first); + char *second_str = to_string(env, second); + stringpair_t *sp = new_stringpair(first_str, second_str); + env->DeleteLocalRef(pair); + free(first_str); + free(second_str); + + _sl = stringpair_list_add(_sl, sp); + } + + return sl; +} + +jobject from_timestamp(JNIEnv *env, + timestamp *ts) +{ + if (!ts) { + return NULL; + } + + //LOGD("/* Seconds (0-60) */ FROM :%d", ts->tm_sec); + //LOGD("/* Minutes (0-59) */ :%d", ts->tm_min); + //LOGD("/* Hours (0-23) */ :%d", ts->tm_hour); + //LOGD("/* Day of the month (1-31) */:%d", ts->tm_mday); + //LOGD("/* Month (0-11) */ :%d", ts->tm_mon); + //LOGD("/* Year - 1900 */ :%d", ts->tm_year); + + time_t t = timegm(ts) * 1000; + //LOGD( "TimeGM returns : %lld", t); + jclass clazz = findClass(env, "java/util/Date"); + jmethodID constructor = env->GetMethodID(clazz, "", "(J)V"); + assert(constructor); + + jobject result = env->NewObject(clazz, constructor, (jlong) t); + + env->DeleteLocalRef(clazz); + + return result; +} + +timestamp *to_timestamp(JNIEnv *env, + jobject date) +{ + if (!date) { + return NULL; + } + + jlong t = callLongMethod(env, date, "getTime"); + //LOGD( "Set Time to : %lld", t); + timestamp *ts = static_cast(calloc(1, sizeof(timestamp))); + assert(ts); + if (ts == NULL) { + return NULL; + } + + if (t) { + time_t clock = t / 1000; + gmtime_r(&clock, ts); + + //LOGD("/* Seconds (0-60) */ TO :%d", ts->tm_sec); + //LOGD("/* Minutes (0-59) */ :%d", ts->tm_min); + //LOGD("/* Hours (0-23) */ :%d", ts->tm_hour); + //LOGD("/* Day of the month (1-31) */:%d", ts->tm_mday); + //LOGD("/* Month (0-11) */ :%d", ts->tm_mon); + //LOGD("/* Year - 1900 */ :%d", ts->tm_year); + } + + return ts; +} + +static void _setStringField(JNIEnv *env, + const char *classname, + jobject obj, + const char *name, + const char *value) +{ + if (value) { + jfieldID fieldID = getFieldID(env, classname, name, "[B"); + env->SetObjectField(obj, fieldID, static_cast(from_string(env, value))); + } +} + +//TODO: fix/generalize/clean patch added to make keysync work using globalref to class +static void _setStringField(JNIEnv *env, + const char *classname, + jobject obj, + const char *name, + const char *value, + const jclass clazz) +{ + if (value) { + jfieldID fieldID = getFieldID(env, classname, name, "[B", clazz); + env->SetObjectField(obj, fieldID, static_cast(from_string(env, value))); + } +} + +jobject from_identity(JNIEnv *env, + pEp_identity *ident) +{ + if (!ident) { + return (jobject) NULL; + } + + static const char *classname = "foundation/pEp/jniadapter/_Identity"; + jclass clazz = findClass(env, classname); + jmethodID constructor = env->GetMethodID(clazz, "", "()V"); + assert(constructor); + jobject obj = env->NewObject(clazz, constructor); + + env->DeleteLocalRef(clazz); + + if (ident) { + _setStringField(env, classname, obj, "address", ident->address); + _setStringField(env, classname, obj, "fpr", ident->fpr); + _setStringField(env, classname, obj, "user_id", ident->user_id); + _setStringField(env, classname, obj, "username", ident->username); + + jfieldID comm_type_id = getFieldID(env, classname, "comm_type", "I"); + env->SetIntField(obj, comm_type_id, static_cast(ident->comm_type)); + + _setStringField(env, classname, obj, "lang", ident->lang); + + jfieldID me_id = getFieldID(env, classname, "me", "Z"); + env->SetBooleanField(obj, me_id, static_cast(ident->me)); + + jfieldID flags_id = getFieldID(env, classname, "flags", "I"); + env->SetIntField(obj, flags_id, static_cast(ident->flags)); + } + + return obj; +} + +//TODO: fix/generalize/clean patch added to make keysync work using globalref to class +jobject from_identity(JNIEnv *env, + pEp_identity *ident, + jclass identityClass) +{ + if (!ident) { + return (jobject) NULL; + } + + static const char *classname = "foundation/pEp/jniadapter/_Identity"; + jmethodID constructor = env->GetMethodID(identityClass, "", "()V"); + assert(constructor); + jobject obj = env->NewObject(identityClass, constructor); + + if (ident) { + _setStringField(env, classname, obj, "address", ident->address, identityClass); + _setStringField(env, classname, obj, "fpr", ident->fpr, identityClass); + _setStringField(env, classname, obj, "user_id", ident->user_id, identityClass); + _setStringField(env, classname, obj, "username", ident->username, identityClass); + + jfieldID comm_type_id = getFieldID(env, classname, "comm_type", "I", identityClass); + env->SetIntField(obj, comm_type_id, static_cast(ident->comm_type)); + + _setStringField(env, classname, obj, "lang", ident->lang, identityClass); + + jfieldID me_id = getFieldID(env, classname, "me", "Z", identityClass); + env->SetBooleanField(obj, me_id, static_cast(ident->me)); + + jfieldID flags_id = getFieldID(env, classname, "flags", "I", identityClass); + env->SetIntField(obj, flags_id, static_cast(ident->flags)); + } + + return obj; +} + +char *_getStringField(JNIEnv *env, + const char *classname, + jobject obj, + const char *name) +{ + jfieldID fieldID = getFieldID(env, classname, name, "[B"); + jobject fobj = env->GetObjectField(obj, fieldID); + + char *res = to_string(env, static_cast(fobj)); + + env->DeleteLocalRef(fobj); + return res; +} + +pEp_identity *to_identity(JNIEnv *env, + jobject obj) +{ + if (!obj) { + return NULL; + } + + static const char *classname = "foundation/pEp/jniadapter/_Identity"; + pEp_identity *ident = new_identity(NULL, NULL, NULL, NULL); + + ident->address = _getStringField(env, classname, obj, "address"); + ident->fpr = _getStringField(env, classname, obj, "fpr"); + ident->user_id = _getStringField(env, classname, obj, "user_id"); + ident->username = _getStringField(env, classname, obj, "username"); + + jfieldID comm_type_id = getFieldID(env, classname, "comm_type", "I"); + ident->comm_type = static_cast(env->GetIntField(obj, comm_type_id)); + + char *lang = _getStringField(env, classname, obj, "lang"); + if (lang && lang[0]) { + ident->lang[0] = lang[0]; + ident->lang[1] = lang[1]; + } + free(lang); + + jfieldID me_id = getFieldID(env, classname, "me", "Z"); + ident->me = static_cast(env->GetBooleanField(obj, me_id)); + + jfieldID flags_id = getFieldID(env, classname, "flags", "I"); + ident->flags = static_cast(env->GetIntField(obj, flags_id)); + + return ident; +} + +jobject from_identitylist(JNIEnv *env, + identity_list *il) +{ + if (!il) { + return (jobject) NULL; + } + + jclass clazz = findClass(env, "java/util/Vector"); + jmethodID constructor = env->GetMethodID(clazz, "", "()V"); + assert(constructor); + jobject obj = env->NewObject(clazz, constructor); + assert(obj); + + identity_list *_il; + for (_il = il; _il && _il->ident; _il = _il->next) { + jobject o = from_identity(env, _il->ident); + callBooleanMethod(env, obj, "add", o); + } + + env->DeleteLocalRef(clazz); + + return obj; +} + +identity_list *to_identitylist(JNIEnv *env, + jobject obj) +{ + if (!obj) { + return NULL; + } + + jint size = callIntMethod(env, obj, "size"); + if (size == 0) { + return NULL; + } + + identity_list *il = new_identity_list(NULL); + identity_list *_il; + jint i; + for (_il = il, i = 0; i < (int) size; i++) { + jobject o = callObjectMethod(env, obj, "get", i); + pEp_identity *ident = to_identity(env, o); + _il = identity_list_add(_il, ident); + env->DeleteLocalRef(o); + } + + return il; +} + +jobject _from_blob(JNIEnv *env, + bloblist_t *b) +{ + if (!b) { + return (jobject) NULL; + } + + static const char *classname = "foundation/pEp/jniadapter/_Blob"; + jclass clazz = findClass(env, classname); + jmethodID constructor = env->GetMethodID(clazz, "", "()V"); + assert(constructor); + jobject obj = env->NewObject(clazz, constructor); + + env->DeleteLocalRef(clazz); + + jfieldID fieldID = getFieldID(env, classname, "data", "[B"); + jbyteArray _data = env->NewByteArray(static_cast(b->size)); + env->SetByteArrayRegion(_data, 0, b->size, reinterpret_cast(b->value)); + env->SetObjectField(obj, fieldID, static_cast(_data)); + _setStringField(env, classname, obj, "mime_type", b->mime_type); + _setStringField(env, classname, obj, "filename", b->filename); + + return obj; +} + +jobject from_bloblist(JNIEnv *env, + bloblist_t *bl) +{ + if (!bl) { + return (jobject) NULL; + } + + jclass clazz = findClass(env, "java/util/Vector"); + jmethodID constructor = env->GetMethodID(clazz, "", "()V"); + assert(constructor); + jobject obj = env->NewObject(clazz, constructor); + assert(obj); + + env->DeleteLocalRef(clazz); + + bloblist_t *_bl; + for (_bl = bl; _bl && _bl->value; _bl = _bl->next) { + jobject o = _from_blob(env, _bl); + if (o) { + callBooleanMethod(env, obj, "add", o); + } + } + + return obj; +} + +bloblist_t *to_blob(JNIEnv *env, + jobject obj) +{ + if (!obj) { + return NULL; + } + + static const char *classname = "foundation/pEp/jniadapter/_Blob"; + jclass clazz = findClass(env, classname); + + char *mime_type = _getStringField(env, classname, obj, "mime_type"); + char *filename = _getStringField(env, classname, obj, "filename"); + + jfieldID data_id = getFieldID(env, classname, "data", "[B"); + jbyteArray _data = static_cast(env->GetObjectField(obj, data_id)); + size_t size = static_cast(env->GetArrayLength(_data)); + char *b = static_cast(malloc(size)); + assert(b); + + env->GetByteArrayRegion(_data, 0, size, reinterpret_cast(b)); + bloblist_t *bl = new_bloblist(b, size, mime_type, filename); + + free(mime_type); + free(filename); + return bl; +} + + +bloblist_t *to_bloblist(JNIEnv *env, + jobject obj) +{ + if (!obj) { + return NULL; + } + + jint size = callIntMethod(env, obj, "size"); + if (size == 0) { + return NULL; + } + + bloblist_t *bl = new_bloblist(NULL, 0, NULL, NULL); + bloblist_t *_bl; + _bl = bl; + jint i; + for (i = 0; i < (int) size; i++) { + jobject o = callObjectMethod(env, obj, "get", i); + bloblist_t *b = to_blob(env, o); + _bl = bloblist_add(_bl, b->value, b->size, b->mime_type, b->filename); + env->DeleteLocalRef(o); + } + + return bl; +} + +PEP_enc_format to_EncFormat(JNIEnv *env, + jobject obj) +{ + static const char *classname = "foundation/pEp/jniadapter/Message$EncFormat"; + jclass clazz_enc_format = findClass(env, classname); + jfieldID field_value = env->GetFieldID(clazz_enc_format, "value", "I"); + assert(field_value); + + env->DeleteLocalRef(clazz_enc_format); + return static_cast(env->GetIntField(obj, field_value)); +} + +PEP_CIPHER_SUITE to_CipherSuite(JNIEnv *env, + jobject obj) +{ + static const char *classname = "foundation/pEp/jniadapter/CipherSuite"; + jclass clazz_enc_format = findClass(env, classname); + jfieldID field_value = env->GetFieldID(clazz_enc_format, "value", "I"); + assert(field_value); + + env->DeleteLocalRef(clazz_enc_format); + return static_cast(env->GetIntField(obj, field_value)); +} + +sync_handshake_result to_SyncHandshakeResult(JNIEnv *env, + jobject obj) +{ + static const char *classname = "foundation/pEp/jniadapter/SyncHandshakeResult"; + jclass clazz_enc_format = findClass(env, classname); + jfieldID field_value = env->GetFieldID(clazz_enc_format, "value", "I"); + assert(field_value); + + env->DeleteLocalRef(clazz_enc_format); + return static_cast(env->GetIntField(obj, field_value)); +} +}; }; diff --git a/src/cxx/jniutils.hh b/src/cxx/jniutils.hh index 54fcfb2..747d55a 100644 --- a/src/cxx/jniutils.hh +++ b/src/cxx/jniutils.hh @@ -1,4 +1,5 @@ #pragma once + #include #include #include @@ -19,112 +20,128 @@ #endif namespace pEp { - namespace JNIAdapter { - // Global mutex needs to be locked in all constructors which insert their own mutex object - // into the unordered_map (which is thread safe for read, but not for write) - extern std::mutex global_mutex; - - // Stores mutex per java object - extern std::unordered_map engine_objid_mutex; - - // needs to be called after create_engine_java_object_mutex() - // and before release_engine_java_object_mutex() - // Thread safe - std::mutex* get_engine_java_object_mutex( - JNIEnv *env, - jobject me - ); - - // Needs to be called exactly once per obj, in the constructor of the obj - // You need to lock a global mutex before calling this function (write to unordered_map) - void create_engine_java_object_mutex( - JNIEnv *env, - jobject me - ); - - // Needs to be called exactly once per obj, in the destructor of this obj - // You need to lock a global mutex before calling this function (write to unordered_map) - void release_engine_java_object_mutex( - JNIEnv *env, - jobject me - ); - - - jclass findClass(JNIEnv *env, const char *classname); - - jfieldID getFieldID( - JNIEnv *env, - const char *classname, - const char *fieldname, - const char *signature - ); - - jfieldID getFieldID( - JNIEnv *env, - const char *classname, - const char *fieldname, - const char *signature, - const jclass clazz - ); - - jint callIntMethod( - JNIEnv *env, - jobject obj, - const char *methodname - ); - - jlong callLongMethod( - JNIEnv *env, - jobject obj, - const char *methodname - ); - - jobject callObjectMethod( - JNIEnv *env, - jobject obj, - const char *methodname, - jint index - ); - - jboolean callBooleanMethod( - JNIEnv *env, - jobject obj, - const char *methodname, - jobject o - ); - - jint outOfMemory(JNIEnv *env); - - jobject from_Integer(JNIEnv *env, int val); - int to_Integer(JNIEnv *env, jobject obj); - - jbyteArray from_string(JNIEnv *env, const char *str); - char *to_string(JNIEnv *env, jbyteArray str); - - jobject from_stringlist(JNIEnv *env, stringlist_t *sl); - stringlist_t *to_stringlist(JNIEnv *env, jobject obj); - - jobject from_stringpairlist(JNIEnv *env, stringpair_list_t *sl); - stringpair_list_t *to_stringpairlist(JNIEnv *env, jobject obj); - - jobject from_timestamp(JNIEnv *env, timestamp *ts); - timestamp *to_timestamp(JNIEnv *env, jobject date); - - jobject from_identity(JNIEnv *env, pEp_identity *ident); - jobject from_identity(JNIEnv *env, pEp_identity *ident, jclass identityClass); - pEp_identity *to_identity(JNIEnv *env, jobject obj); - - jobject from_identitylist(JNIEnv *env, identity_list *il); - identity_list *to_identitylist(JNIEnv *env, jobject obj); - - jobject from_bloblist(JNIEnv *env, bloblist_t *bl); - bloblist_t *to_blob(JNIEnv *env, jobject obj); - bloblist_t *to_bloblist(JNIEnv *env, jobject obj); - - PEP_enc_format to_EncFormat(JNIEnv *env, jobject obj); - PEP_CIPHER_SUITE to_CipherSuite(JNIEnv *env, jobject obj); - - sync_handshake_result to_SyncHandshakeResult(JNIEnv *env, jobject obj); - }; +namespace JNIAdapter { +// Global mutex needs to be locked in all constructors which insert their own mutex object +// into the unordered_map (which is thread safe for read, but not for write) +extern std::mutex global_mutex; + +// Stores mutex per java object +extern std::unordered_map engine_objid_mutex; + +// needs to be called after create_engine_java_object_mutex() +// and before release_engine_java_object_mutex() +// Thread safe +std::mutex *get_engine_java_object_mutex(JNIEnv *env, + jobject me); + +// Needs to be called exactly once per obj, in the constructor of the obj +// You need to lock a global mutex before calling this function (write to unordered_map) +void create_engine_java_object_mutex(JNIEnv *env, + jobject me); + +// Needs to be called exactly once per obj, in the destructor of this obj +// You need to lock a global mutex before calling this function (write to unordered_map) +void release_engine_java_object_mutex(JNIEnv *env, + jobject me); + + +jclass findClass(JNIEnv *env, + const char *classname); + +jfieldID getFieldID(JNIEnv *env, + const char *classname, + const char *fieldname, + const char *signature); + +jfieldID getFieldID(JNIEnv *env, + const char *classname, + const char *fieldname, + const char *signature, + const jclass clazz); + +jint callIntMethod(JNIEnv *env, + jobject obj, + const char *methodname); + +jlong callLongMethod(JNIEnv *env, + jobject obj, + const char *methodname); + +jobject callObjectMethod(JNIEnv *env, + jobject obj, + const char *methodname, + jint index); + +jboolean callBooleanMethod(JNIEnv *env, + jobject obj, + const char *methodname, + jobject o); + +jint outOfMemory(JNIEnv *env); + +jobject from_Integer(JNIEnv *env, + int val); + +int to_Integer(JNIEnv *env, + jobject obj); + +jbyteArray from_string(JNIEnv *env, + const char *str); + +char *to_string(JNIEnv *env, + jbyteArray str); + +jobject from_stringlist(JNIEnv *env, + stringlist_t *sl); + +stringlist_t *to_stringlist(JNIEnv *env, + jobject obj); + +jobject from_stringpairlist(JNIEnv *env, + stringpair_list_t *sl); + +stringpair_list_t *to_stringpairlist(JNIEnv *env, + jobject obj); + +jobject from_timestamp(JNIEnv *env, + timestamp *ts); + +timestamp *to_timestamp(JNIEnv *env, + jobject date); + +jobject from_identity(JNIEnv *env, + pEp_identity *ident); + +jobject from_identity(JNIEnv *env, + pEp_identity *ident, + jclass identityClass); + +pEp_identity *to_identity(JNIEnv *env, + jobject obj); + +jobject from_identitylist(JNIEnv *env, + identity_list *il); + +identity_list *to_identitylist(JNIEnv *env, + jobject obj); + +jobject from_bloblist(JNIEnv *env, + bloblist_t *bl); + +bloblist_t *to_blob(JNIEnv *env, + jobject obj); + +bloblist_t *to_bloblist(JNIEnv *env, + jobject obj); + +PEP_enc_format to_EncFormat(JNIEnv *env, + jobject obj); + +PEP_CIPHER_SUITE to_CipherSuite(JNIEnv *env, + jobject obj); + +sync_handshake_result to_SyncHandshakeResult(JNIEnv *env, + jobject obj); +}; }; diff --git a/src/cxx/passphrase_callback.hh b/src/cxx/passphrase_callback.hh index e0f9804..9906491 100644 --- a/src/cxx/passphrase_callback.hh +++ b/src/cxx/passphrase_callback.hh @@ -1,14 +1,15 @@ #pragma once + #include namespace pEp { - namespace JNIAdapter { +namespace JNIAdapter { - char* passphraseRequiredCallback(const PEP_STATUS status); +char *passphraseRequiredCallback(const PEP_STATUS status); +template PEP_STATUS passphraseWrap(PEP_STATUS f(PEP_SESSION, A...), PEP_SESSION session, A... a); - template PEP_STATUS passphraseWrap(PEP_STATUS f(PEP_SESSION, A...), PEP_SESSION session, A... a); - } +} } #include "passphrase_callback.hxx" \ No newline at end of file diff --git a/src/cxx/passphrase_callback.hxx b/src/cxx/passphrase_callback.hxx index e812841..8cc8417 100644 --- a/src/cxx/passphrase_callback.hxx +++ b/src/cxx/passphrase_callback.hxx @@ -3,40 +3,40 @@ #include "passphrase_callback.hh" namespace pEp { - namespace JNIAdapter { +namespace JNIAdapter { - template PEP_STATUS passphraseWrap(PEP_STATUS f(PEP_SESSION, A...), PEP_SESSION session, A... a) { - pEpLog("cached passphrase mode"); - bool retryAgain = false; - int maxRetries = 3; - int retryCount = 0; - PEP_STATUS status; - do { - // the actual target function - pEpLog("calling passphrase_cache.api from basic_api"); - status = passphrase_cache.api(f, session, a...); - pEpLog("PEP_STATUS:" << status); - if (status == PEP_PASSPHRASE_REQUIRED || - status == PEP_WRONG_PASSPHRASE || - status == PEP_PASSPHRASE_FOR_NEW_KEYS_REQUIRED) - { - pEpLog("none of the cached passphrases worked"); - if (retryCount < maxRetries) { - // call the app - char *_passphrase = passphraseRequiredCallback(status); - pEpLog("callback returned, config_passphrase() with new passphrase"); - PEP_STATUS status = ::config_passphrase(session, passphrase_cache.add(_passphrase)); - retryAgain = true; - retryCount++; - } else { - pEpLog("max retries reached:" << maxRetries); - retryAgain = false; - } - } else { - retryAgain = false; - } - } while (retryAgain); - return status; +template PEP_STATUS passphraseWrap(PEP_STATUS f(PEP_SESSION, A...), PEP_SESSION session, A... a) { + pEpLog("cached passphrase mode"); + bool retryAgain = false; + int maxRetries = 3; + int retryCount = 0; + PEP_STATUS status; + do { + // the actual target function + pEpLog("calling passphrase_cache.api from basic_api"); + status = passphrase_cache.api(f, session, a...); + pEpLog("PEP_STATUS:" << status); + if (status == PEP_PASSPHRASE_REQUIRED || + status == PEP_WRONG_PASSPHRASE || + status == PEP_PASSPHRASE_FOR_NEW_KEYS_REQUIRED) + { + pEpLog("none of the cached passphrases worked"); + if (retryCount < maxRetries) { + // call the app + char *_passphrase = passphraseRequiredCallback(status); + pEpLog("callback returned, config_passphrase() with new passphrase"); + PEP_STATUS status = ::config_passphrase(session, passphrase_cache.add(_passphrase)); + retryAgain = true; + retryCount++; + } else { + pEpLog("max retries reached:" << maxRetries); + retryAgain = false; + } + } else { + retryAgain = false; } - } + } while (retryAgain); + return status; +} +} } \ No newline at end of file From bcb119060bcadf18464732ecfd3ebbb608880002 Mon Sep 17 00:00:00 2001 From: heck Date: Tue, 1 Dec 2020 13:51:56 +0100 Subject: [PATCH 72/94] JNI-125 - "EncFormat missing values" --- src/codegen/pEp.yml2 | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/src/codegen/pEp.yml2 b/src/codegen/pEp.yml2 index b5dff19..7d0a645 100644 --- a/src/codegen/pEp.yml2 +++ b/src/codegen/pEp.yml2 @@ -288,33 +288,36 @@ namespace pEp { enum EncFormat { enumitem none > 0 + enumitem pieces > 1 enumitem inline > 1 enumitem SMIME > 2 enumitem PGPMIME > 3 enumitem PEP > 4 + enumitem PGP_MIME_Outlook1 > 5 enumitem PEP_enc_inline_EA > 6 + enumitem PEP_enc_auto > 255 } - direction dir; - string id; - string shortmsg; - string longmsg; - string longmsg_formatted; - bloblist attachments; - timestamp sent; - timestamp recv; - identity from; - identitylist to; - identity recv_by; - identitylist cc; - identitylist bcc; - identitylist reply_to; - stringlist in_reply_to; - stringlist references; - stringlist keywords; - string comments; - stringpairlist opt_fields; - EncFormat enc_format; + direction dir; + string id; + string shortmsg; + string longmsg; + string longmsg_formatted; + bloblist attachments; + timestamp sent; + timestamp recv; + identity from; + identitylist to; + identity recv_by; + identitylist cc; + identitylist bcc; + identitylist reply_to; + stringlist in_reply_to; + stringlist references; + stringlist keywords; + string comments; + stringpairlist opt_fields; + EncFormat enc_format; }; }; From bb8acd99f0812781ebe6df53f208f5170f6edb06 Mon Sep 17 00:00:00 2001 From: heck Date: Tue, 1 Dec 2020 14:46:07 +0100 Subject: [PATCH 74/94] Tests for JNI-125 - "EncFormat missing values" --- .../foundation/pEp/jniadapter/test/Makefile | 4 +- .../pEp/jniadapter/test/basic/TestMain.java | 4 ++ .../pEp/jniadapter/test/jni125/Makefile | 37 ++++++++++++++++ .../pEp/jniadapter/test/jni125/TestAlice.java | 42 +++++++++++++++++++ 4 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 test/java/foundation/pEp/jniadapter/test/jni125/Makefile create mode 100644 test/java/foundation/pEp/jniadapter/test/jni125/TestAlice.java diff --git a/test/java/foundation/pEp/jniadapter/test/Makefile b/test/java/foundation/pEp/jniadapter/test/Makefile index f2dd0b5..67c4354 100644 --- a/test/java/foundation/pEp/jniadapter/test/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/Makefile @@ -19,6 +19,7 @@ run: compile $(MAKE) -C jni114 run $(MAKE) -C jni115 run $(MAKE) -C jni118 run + $(MAKE) -C jni125 run compile: $(MAKE) -C templateAlice compile @@ -37,6 +38,7 @@ compile: $(MAKE) -C jni114 compile $(MAKE) -C jni115 compile $(MAKE) -C jni118 compile + $(MAKE) -C jni125 compile clean: $(MAKE) -C templateAlice clean @@ -54,7 +56,7 @@ clean: $(MAKE) -C jni111 clean $(MAKE) -C jni114 clean $(MAKE) -C jni115 clean - $(MAKE) -C jni118 clean + $(MAKE) -C jni125 clean clean-pep-home: $(MAKE) -C basic clean-pep-home diff --git a/test/java/foundation/pEp/jniadapter/test/basic/TestMain.java b/test/java/foundation/pEp/jniadapter/test/basic/TestMain.java index ef46b34..b96dbb7 100644 --- a/test/java/foundation/pEp/jniadapter/test/basic/TestMain.java +++ b/test/java/foundation/pEp/jniadapter/test/basic/TestMain.java @@ -5,6 +5,7 @@ import foundation.pEp.pitytest.TestSuite; import foundation.pEp.pitytest.TestUnit; import foundation.pEp.jniadapter.test.utils.AdapterBaseTestContext; import foundation.pEp.jniadapter.test.utils.AdapterTestUtils; +import foundation.pEp.pitytest.utils.TestUtils; import java.util.Vector; @@ -61,6 +62,9 @@ class TestMain { }); new TestUnit("Encrypt", btc, ctx -> { + ctx.msgToBob.setEncFormat(Message.EncFormat.PEP); + log(AdapterTestUtils.msgToString(ctx.msgToBob, false)); + TestUtils.readKey(); ctx.enc = ctx.engine.encrypt_message(ctx.msgToBob, null, Message.EncFormat.PEP); log(AdapterTestUtils.msgToString(ctx.enc, false)); }); diff --git a/test/java/foundation/pEp/jniadapter/test/jni125/Makefile b/test/java/foundation/pEp/jniadapter/test/jni125/Makefile new file mode 100644 index 0000000..e97b00d --- /dev/null +++ b/test/java/foundation/pEp/jniadapter/test/jni125/Makefile @@ -0,0 +1,37 @@ +include ../../../../../../../Makefile.conf +include ../Makefile.conf + +TEST_UNIT_NAME=jni125 + +JAVA_CLASSES = \ + TestAlice.class \ + ../utils/AdapterBaseTestContext.class \ + ../utils/AdapterTestUtils.class \ + ../utils/TestCallbacks.class + +.PHONY: pitytest compile alice test clean + +all: alice compile + +pitytest: + $(MAKE) -C $(PITYTEST_DIR) + +alice: compile clean-pep-home-alice + cd $(JAVA_CWD);pwd;HOME=$(JAVA_PEP_HOME_DIR_ALICE) $(JAVA) $(JAVA_PKG_BASENAME).$(TEST_UNIT_NAME).TestAlice + +compile: $(JAVA_CLASSES) pitytest + +%.class: %.java + cd $(JAVA_CWD);$(JAVAC_CMD) -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: clean-pep-home-alice + +clean-pep-home-alice: + rm -rf $(PEP_HOME_DIR_ALICE)/.pEp diff --git a/test/java/foundation/pEp/jniadapter/test/jni125/TestAlice.java b/test/java/foundation/pEp/jniadapter/test/jni125/TestAlice.java new file mode 100644 index 0000000..befe6b3 --- /dev/null +++ b/test/java/foundation/pEp/jniadapter/test/jni125/TestAlice.java @@ -0,0 +1,42 @@ +package foundation.pEp.jniadapter.test.jni125; + +import foundation.pEp.jniadapter.Message; +import foundation.pEp.jniadapter.test.utils.AdapterBaseTestContext; +import foundation.pEp.pitytest.TestSuite; +import foundation.pEp.pitytest.TestUnit; +import foundation.pEp.pitytest.utils.TestUtils; + +class TestAlice { + public static void main(String[] args) throws Exception { + TestSuite.getDefault().setVerbose(false); + TestSuite.getDefault().setTestColor(TestUtils.TermColor.GREEN); + + new TestUnit("enum Message.EncFormat verify .value", new AdapterBaseTestContext(), ctx -> { + //TODO: This is stupid, we need a PityAssert() + assert Message.EncFormat.None.value == 0 : "Message.EncFormat.None == " + Message.EncFormat.None.value + "; expected " + 0; + assert Message.EncFormat.Pieces.value == 1 : "Message.Pieces.None == " + Message.EncFormat.Pieces.value + "; expected " + 1; + assert Message.EncFormat.Inline.value == 1 : "Message.Inline.None == " + Message.EncFormat.Inline.value + "; expected " + 2; + assert Message.EncFormat.SMIME.value == 2 : "Message.SMIME.None == " + Message.EncFormat.SMIME.value + "; expected " + 3; + assert Message.EncFormat.PGPMIME.value == 3 : "Message.PGPMIME.None == " + Message.EncFormat.PGPMIME.value + "; expected " + 3; + assert Message.EncFormat.PEP.value == 4 : "Message.PEP.None == " + Message.EncFormat.PEP.value + "; expected " + 4; + assert Message.EncFormat.PGPMIMEOutlook1.value == 5 : "Message.PGPMIMEOutlook1.None == " + Message.EncFormat.PGPMIMEOutlook1.value + "; expected " + 5; + assert Message.EncFormat.PEPEncInlineEA.value == 6 : "Message.PEPEncInlineEA.None == " + Message.EncFormat.PEPEncInlineEA.value + "; expected " + 6; + assert Message.EncFormat.PEPEncAuto.value == 255 : "Message.PEPEncAuto.None == " + Message.EncFormat.PEPEncAuto.value + "; expected " + 255; + }); + + new TestUnit("enum Message.EncFormat verify getByInt(0)", new AdapterBaseTestContext(), ctx -> { + assert Message.EncFormat.getByInt(0) == Message.EncFormat.None; + assert Message.EncFormat.getByInt(1) == Message.EncFormat.Inline; + assert Message.EncFormat.getByInt(2) == Message.EncFormat.SMIME; + assert Message.EncFormat.getByInt(3) == Message.EncFormat.PGPMIME; + assert Message.EncFormat.getByInt(4) == Message.EncFormat.PEP; + assert Message.EncFormat.getByInt(5) == Message.EncFormat.PGPMIMEOutlook1; + assert Message.EncFormat.getByInt(6) == Message.EncFormat.PEPEncInlineEA; + assert Message.EncFormat.getByInt(255) == Message.EncFormat.PEPEncAuto; + }); + + TestSuite.getDefault().run(); + } +} + + From 06165b08a98fdb3de24efe02aa1152dd2ab651ad Mon Sep 17 00:00:00 2001 From: heck Date: Tue, 1 Dec 2020 14:50:53 +0100 Subject: [PATCH 75/94] revert accidental changes --- .../pEp/jniadapter/test/basic/TestMain.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/test/java/foundation/pEp/jniadapter/test/basic/TestMain.java b/test/java/foundation/pEp/jniadapter/test/basic/TestMain.java index b96dbb7..539b377 100644 --- a/test/java/foundation/pEp/jniadapter/test/basic/TestMain.java +++ b/test/java/foundation/pEp/jniadapter/test/basic/TestMain.java @@ -1,11 +1,13 @@ package foundation.pEp.jniadapter.test.basic; -import foundation.pEp.jniadapter.*; -import foundation.pEp.pitytest.TestSuite; -import foundation.pEp.pitytest.TestUnit; +import foundation.pEp.jniadapter.Blob; +import foundation.pEp.jniadapter.Identity; +import foundation.pEp.jniadapter.Message; +import foundation.pEp.jniadapter.decrypt_message_Return; import foundation.pEp.jniadapter.test.utils.AdapterBaseTestContext; import foundation.pEp.jniadapter.test.utils.AdapterTestUtils; -import foundation.pEp.pitytest.utils.TestUtils; +import foundation.pEp.pitytest.TestSuite; +import foundation.pEp.pitytest.TestUnit; import java.util.Vector; @@ -62,9 +64,6 @@ class TestMain { }); new TestUnit("Encrypt", btc, ctx -> { - ctx.msgToBob.setEncFormat(Message.EncFormat.PEP); - log(AdapterTestUtils.msgToString(ctx.msgToBob, false)); - TestUtils.readKey(); ctx.enc = ctx.engine.encrypt_message(ctx.msgToBob, null, Message.EncFormat.PEP); log(AdapterTestUtils.msgToString(ctx.enc, false)); }); From 45ec5a9701ff6c6d8fc3c36d58cce1e31daf733b Mon Sep 17 00:00:00 2001 From: heck Date: Tue, 1 Dec 2020 21:36:58 +0100 Subject: [PATCH 76/94] Wow, somehow the first make target is not the default make target. (workaround) --- src/Makefile | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/Makefile b/src/Makefile index 55da741..94bbae8 100644 --- a/src/Makefile +++ b/src/Makefile @@ -95,9 +95,9 @@ CXXFLAGS+= -MMD -MP SOURCES=$(wildcard $(CXX_DIR)/*.cc) SOURCES+=$(GENERATED_CC) -tmp=$(SOURCES:.cc=.o) +tmp=$(SOURCES:%.cc=%.o) OBJECTS=$(addprefix $(BUILD_ROOT), $(tmp)) -DEPENDS=$(OBJECTS:.o=.d) +DEPENDS=$(OBJECTS:%.o=%.d) -include $(DEPENDS) VPATH = $(CXX_DIR)/ @@ -108,6 +108,7 @@ $(info SOURCES: $(SOURCES)) $(info OBJECTS: $(OBJECTS)) $(info DEPENDS: $(DEPENDS)) +.DEFAULT_GOAL := all all: lib-java lib-cxx # Build only java lib @@ -126,20 +127,17 @@ $(LIB_CXX_DYN): compile-cxx $(LIB_CXX_STATIC): compile-cxx $(AR) -r $@ $(OBJ_DIR)*.o - # -------------- Compile ----------------- compile-java: create-dirs codegen cd $(JAVA_DIR);$(JAVA_BIN_DIR)/$(JAVAC_CMD) -d ../$(JAVA_BUILD_ROOT) $(JAVA_PKG_BASENAME)/*.java cd $(JAVA_DIR);$(JAVA_BIN_DIR)/$(JAVAC_CMD) -d ../$(JAVA_BUILD_ROOT) $(JAVA_PKG_BASENAME)/exceptions/*.java cd $(JAVA_DIR);$(JAVA_BIN_DIR)/$(JAVAC_CMD) -d ../$(JAVA_BUILD_ROOT) $(JAVA_PKG_BASENAME)/interfaces/*.java - compile-cxx: create-dirs gen-jni-headers $(OBJECTS) -$(OBJECTS): $(BUILD_ROOT)%.o: %.cc +$(OBJECTS) : $(BUILD_ROOT)%.o : %.cc $(CXX) $(CXXFLAGS) -c $< -o $@ - # --------- Generate JNI headers ---------- gen-jni-headers: codegen $(JNI_GENERATED_HH) From 40e8a28ea92c4098cb35ab5c2074bc51634cc8fc Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 13 Jan 2021 18:29:26 +0100 Subject: [PATCH 77/94] Add test for JNI-117 - "Export Key" --- .../pEp/jniadapter/test/jni117/Makefile | 37 +++++++++++++++++++ .../pEp/jniadapter/test/jni117/TestAlice.java | 23 ++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 test/java/foundation/pEp/jniadapter/test/jni117/Makefile create mode 100644 test/java/foundation/pEp/jniadapter/test/jni117/TestAlice.java diff --git a/test/java/foundation/pEp/jniadapter/test/jni117/Makefile b/test/java/foundation/pEp/jniadapter/test/jni117/Makefile new file mode 100644 index 0000000..8c8748e --- /dev/null +++ b/test/java/foundation/pEp/jniadapter/test/jni117/Makefile @@ -0,0 +1,37 @@ +include ../../../../../../../Makefile.conf +include ../Makefile.conf + +TEST_UNIT_NAME=jni117 + +JAVA_CLASSES = \ + TestAlice.class \ + ../utils/AdapterBaseTestContext.class \ + ../utils/AdapterTestUtils.class \ + ../utils/TestCallbacks.class + +.PHONY: pitytest compile alice test clean + +all: alice compile + +pitytest: + $(MAKE) -C $(PITYTEST_DIR) + +alice: compile clean-pep-home-alice + cd $(JAVA_CWD);pwd;HOME=$(JAVA_PEP_HOME_DIR_ALICE) $(JAVA) $(JAVA_PKG_BASENAME).$(TEST_UNIT_NAME).TestAlice + +compile: $(JAVA_CLASSES) pitytest + +%.class: %.java + cd $(JAVA_CWD);$(JAVAC_CMD) -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: clean-pep-home-alice + +clean-pep-home-alice: + rm -rf $(PEP_HOME_DIR_ALICE)/.pEp diff --git a/test/java/foundation/pEp/jniadapter/test/jni117/TestAlice.java b/test/java/foundation/pEp/jniadapter/test/jni117/TestAlice.java new file mode 100644 index 0000000..a2f856d --- /dev/null +++ b/test/java/foundation/pEp/jniadapter/test/jni117/TestAlice.java @@ -0,0 +1,23 @@ +package foundation.pEp.jniadapter.test.jni117; +import foundation.pEp.jniadapter.test.utils.AdapterBaseTestContext; +import foundation.pEp.pitytest.TestSuite; +import foundation.pEp.pitytest.TestUnit; +import foundation.pEp.pitytest.utils.TestUtils; + +import static foundation.pEp.pitytest.TestLogger.log; + +class TestAlice { + public static void main(String[] args) throws Exception { + TestSuite.getDefault().setVerbose(true); + TestSuite.getDefault().setTestColor(TestUtils.TermColor.GREEN); + + new TestUnit("Test Alice",new AdapterBaseTestContext() , ctx -> { + ctx.alice = ctx.engine.myself(ctx.alice); + log(new String(ctx.engine.export_key(ctx.alice.fpr))); + }); + + TestSuite.getDefault().run(); + } +} + + From 5e999db69f5732e68a30959cbbd10dc3f854de3a Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 13 Jan 2021 18:30:17 +0100 Subject: [PATCH 78/94] add export_key as "basic" method (gen on java handwritten in c++) --- src/codegen/pEp.yml2 | 1 + 1 file changed, 1 insertion(+) diff --git a/src/codegen/pEp.yml2 b/src/codegen/pEp.yml2 index 7d0a645..14ef8b8 100644 --- a/src/codegen/pEp.yml2 +++ b/src/codegen/pEp.yml2 @@ -272,6 +272,7 @@ namespace pEp { basic string getMachineDirectory(); basic void config_passphrase(string passphrase); basic void config_passphrase_for_new_keys(bool enable, string passphrase); + basic bytearray export_key(string fpr); }; struct message { From 46ba24e930cd615450b7685b343ad0169ba08693 Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 13 Jan 2021 18:30:57 +0100 Subject: [PATCH 79/94] codegen add support for "basic methods" returning bytearray --- src/codegen/gen_java_Engine.ysl2 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/codegen/gen_java_Engine.ysl2 b/src/codegen/gen_java_Engine.ysl2 index 10efac1..ea9e520 100644 --- a/src/codegen/gen_java_Engine.ysl2 +++ b/src/codegen/gen_java_Engine.ysl2 @@ -70,7 +70,9 @@ tstylesheet { } return ret; || - } otherwise + } when "@type = 'bytearray'" + |> return _«@name»(`apply "parm/*", mode=basic_parm_name`); + otherwise |> return Utils.toUTF16(_«@name»(`apply "parm/*", mode=basic_parm_name`)); } || From 866dc604394ef3a69017650c851ceb43834b8b87 Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 13 Jan 2021 18:31:29 +0100 Subject: [PATCH 80/94] C++ impl of export_key() --- Makefile.conf | 5 +++-- src/cxx/basic_api.cc | 27 +++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/Makefile.conf b/Makefile.conf index d202643..adf9ca8 100644 --- a/Makefile.conf +++ b/Makefile.conf @@ -48,9 +48,9 @@ ifndef JAVA_HOME endif # Guessing USE_JAVAH -# cant be guessed earlier, because we depend on JAVA_HOME which can be set in the local.conf +# cant be guessed earlier, because it depends on JAVA_HOME which can be set in the local.conf # Old versions of a Java distribution have a `javah` binary, new version do not and the replacement is "javac -h" -# TODO: dont check for presence of javah, but check if javac -h is supported, because some java (RHEL) has javah but supports javac -h +# TODO: dont check for presence of javah, but check if javac -h is supported, because some java (RHEL) has javah but supports javac -h (and javac -h is preferred) ifndef USE_JAVAH DUMMY:=$(shell which $(JAVA_HOME)/bin/javah) ifeq ($(.SHELLSTATUS),0) @@ -84,6 +84,7 @@ export YML_PATH=$(YML2_PATH) # BEGIN // kryptic hack to to replace a space with a newline # $(subst ${ },${space}, whatever) +# maybe not well known: define/endef is custom makefile function definition null := space := ${null} ${null} ${space} := ${space} diff --git a/src/cxx/basic_api.cc b/src/cxx/basic_api.cc index 49c3b2f..4f9960c 100644 --- a/src/cxx/basic_api.cc +++ b/src/cxx/basic_api.cc @@ -512,5 +512,32 @@ JNIEXPORT void JNICALL Java_foundation_pEp_jniadapter_Engine__1config_1passphras } } +JNIEXPORT jbyteArray JNICALL Java_foundation_pEp_jniadapter_Engine__1export_1key (JNIEnv *env, + jobject obj, + jbyteArray fpr) +{ + std::mutex *mutex_local = nullptr; + + { + std::lock_guard l(global_mutex); + pEpLog("called with lock_guard"); + mutex_local = get_engine_java_object_mutex(env, obj); + } + std::lock_guard l(*mutex_local); + + const char *_fpr = to_string(env, fpr); + char *buff = nullptr; + size_t size = 0; + + PEP_STATUS status = passphraseWrap(::export_key, session(), _fpr, &buff, &size); + + if (status != PEP_STATUS_OK) { + throw_pEp_Exception(env, status); + return NULL; + } + + return from_string(env, buff); +} + } // extern "C" From 7ec817ab3846dd007fb5f1a8a5b329fd5480196a Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 13 Jan 2021 18:45:26 +0100 Subject: [PATCH 81/94] JNI-117 - "export_key", Improve test --- .../pEp/jniadapter/test/jni117/TestAlice.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/test/java/foundation/pEp/jniadapter/test/jni117/TestAlice.java b/test/java/foundation/pEp/jniadapter/test/jni117/TestAlice.java index a2f856d..597eb74 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni117/TestAlice.java +++ b/test/java/foundation/pEp/jniadapter/test/jni117/TestAlice.java @@ -6,6 +6,13 @@ import foundation.pEp.pitytest.utils.TestUtils; import static foundation.pEp.pitytest.TestLogger.log; +// Test for JNI-117 - Key Export + +// Tests: For an ad-hoc generated identity "alice" using myself()" +// - export_key is not throwing +// - keydata returned is longer than 100 bytes +// - keydata contains header: "-----BEGIN PGP PBLIC KEY BLOCK-----" + class TestAlice { public static void main(String[] args) throws Exception { TestSuite.getDefault().setVerbose(true); @@ -13,7 +20,11 @@ class TestAlice { new TestUnit("Test Alice",new AdapterBaseTestContext() , ctx -> { ctx.alice = ctx.engine.myself(ctx.alice); - log(new String(ctx.engine.export_key(ctx.alice.fpr))); + byte[] keydata = ctx.engine.export_key(ctx.alice.fpr); + String keydataStr = new String(keydata); + log(keydataStr); + assert keydata.length > 100: "returned keydata is too short"; + assert keydataStr.contains("-----BEGIN PGP PUBLIC KEY BLOCK-----") : "Keydata doesnt contain: -----BEGIN PGP PBLIC KEY BLOCK-----"; }); TestSuite.getDefault().run(); From eca1b89027ad5e95f1852ba893baf259f0bf65d2 Mon Sep 17 00:00:00 2001 From: heck Date: Fri, 15 Jan 2021 15:45:33 +0100 Subject: [PATCH 83/94] Rewrite README.md from scratch --- Makefile | 26 +++++++++------- README.md | 93 +++++++++++++++++++++++++++---------------------------- 2 files changed, 61 insertions(+), 58 deletions(-) diff --git a/Makefile b/Makefile index 4acf87e..13c9555 100644 --- a/Makefile +++ b/Makefile @@ -3,32 +3,36 @@ # This file may be used under the terms of the GNU General Public License version 3 # see LICENSE.txt -.PHONY: all src test clean doxy-all doxy-cxx doxy-java doxy-clean install uninstall +.PHONY: all compile test clean doc doc-cxx doc-java clean-doc install uninstall -all: src +all: compile -src: +compile: $(MAKE) -C src -test: src +test: compile $(MAKE) -C test/java/foundation/pEp/jniadapter/test/ compile + +clean-all: clean clean-doc + clean: $(MAKE) -C src clean $(MAKE) -C test/java/foundation/pEp/jniadapter/test/ clean clean-pep-home -# Generate API Documentation -doxy-all: doxy-cxx doxy-java +clean-doc: + rm -rf doc/doxygen/cxx + rm -rf doc/doxygen/java -doxy-cxx: src + # Generate API Documentation +doc: doc-cxx doc-java + +dox-cxx: compile cd doc/doxygen; doxygen doxyfile-cxx -doxy-java: src +doc-java: compile cd doc/doxygen; doxygen doxyfile-java -doxy-clean: - rm -rf doc/doxygen/cxx - rm -rf doc/doxygen/java install: $(MAKE) -C src install diff --git a/README.md b/README.md index 04197e9..3cf4356 100644 --- a/README.md +++ b/README.md @@ -1,67 +1,66 @@ # p≡p JNI Adapter -More complete developer instructions can be found here: [https://dev.pep.foundation/JNI%20Adapter/Tutorial](). -## Prerequisites +Please find the complete build instructions here: +https://dev.pep.foundation/Common%20Adapter%20Documentation/Adapter_Build_Instructions -### yml2 -To set up yml2 properly, consult the documentation of pEp Engine (linked below). yml2 is a build dependency of pEp Engine. +## Build Result +The binary package resulting from the build will be located under `./dist`. +It merely contains: +* pEp.jar - The java library +* libpEpJNI.dylib - The dynamically linkable native library +* libpEpJNI.a - The statically linkable native library -### C and C++ compiler -Any gcc or clang distribution offered by your OS is fine. +## Build Configuration -### pEp Engine -Instructions for obtaining the pEp Engine can be found on [https://pep.foundation/dev/repos/pEpEngine/file/](). +The build configuration file is called `local.conf`. +Use the file `local.conf.example` as a template. -### libpEpAdapter -Instructions for obtaining libpEpAdapter can be found on [https://pep.foundation/dev/repos/libpEpAdapter/file/](). +```bash +cp local.conf.example local.conf +``` -### Java 8 (or newer) JDK -Download Oracle Java from [https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html](). +Then, tweak it to your needs. -OpenJDK can be installed from macports on macOS with one of the following commands: +## Make Targets -~~~ -sudo port install openjdk8 -sudo port install openjdk11 -~~~ +The default make target is `compile`. -## Building +### Build +* `make compile` + Builds the whole adapter under `./build`. + The complete distribution ready adapter will be in `./dist`. -Build configuration will be the result of including these files in the following order: -* `Makefile.conf` - Defaults -* `local.conf` - optional cfg (overwrites existing values) -* `src/local.conf`- optional cfg for src dir (overwrites existing values) +### Test +* `make test` + Builds the complete test-suite under `./test`. -An example `local.conf` looks like this: +### Clean +* `make clean` + Deletes all the derived objects of the adapter build in `./build` and `./dist`. + Also invokes `make clean` which cleans the whole test-suite. + Does not remove the generated API doc. -~~~ -JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk8/Contents/Home +* `make clean-doc` + Removes all the generated API doc. -YML2_PATH=$(HOME)/code/yml2 +* `make clean-all` + Equals `make clean` and `make clean-doc` -ENGINE_INC_PATH=$(HOME)/code/engine/build/include -ENGINE_LIB_PATH=$(HOME)/code/engine/build/lib +### Generate API Documentation +In order to generate the API doc you need to have doxygen installed on your system. -AD_INC_PATH=$(HOME)/code/libad/build/include -AD_LIB_PATH=$(HOME)/code/libad/build/lib -~~~ +* `make doc` + Generates Java and C++ API doc. -The the foo_PATH variables will be turned into compiler directives (-I / -L), which can be directly set by just omitting "\_PATH" (e.g. ENGINE_INC). They will take priority. +* `make doc-cxx` + Generates the API doc for the C++ part of the adapter. -Depending on what is already set in your environment, or can be found in your default include/library paths, setting any of these variables may be optional on your platform. +* `make doc-java` + Generates the API doc for the Java part of the adapter. -Now, build the Adapter with +### Install +* `make install` + Installs the files under `./dist` under $PREFIX (local.conf) -On Linux: - -~~~ -make src -~~~ - -On macOS: - -~~~ -make src -~~~ - -(The GNU Make distributed with macOS might be too old, in this case install GNU Make "gmake" from macPorts). +* `make uninstall` + Removes all the filenames under `./dist` from $PREFIX (local.conf) From 521176bf039b5c49c9e506c9c1f8a13aaf7161f7 Mon Sep 17 00:00:00 2001 From: heck Date: Fri, 15 Jan 2021 15:47:00 +0100 Subject: [PATCH 84/94] Rewrite README.md from scratch --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3cf4356..f41b5b6 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ The default make target is `compile`. * `make clean-all` Equals `make clean` and `make clean-doc` -### Generate API Documentation +### Doc In order to generate the API doc you need to have doxygen installed on your system. * `make doc` From 68a7e8f8425dc4b952c4198c20c45bef2f190ec5 Mon Sep 17 00:00:00 2001 From: heck Date: Fri, 15 Jan 2021 15:48:58 +0100 Subject: [PATCH 85/94] Rewrite README.md from scratch --- README.md | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index f41b5b6..ba4834e 100644 --- a/README.md +++ b/README.md @@ -34,17 +34,12 @@ The default make target is `compile`. * `make test` Builds the complete test-suite under `./test`. -### Clean -* `make clean` - Deletes all the derived objects of the adapter build in `./build` and `./dist`. - Also invokes `make clean` which cleans the whole test-suite. - Does not remove the generated API doc. - -* `make clean-doc` - Removes all the generated API doc. +### Install +* `make install` + Installs the files under `./dist` under $PREFIX (local.conf) -* `make clean-all` - Equals `make clean` and `make clean-doc` +* `make uninstall` + Removes all the filenames under `./dist` from $PREFIX (local.conf) ### Doc In order to generate the API doc you need to have doxygen installed on your system. @@ -58,9 +53,16 @@ In order to generate the API doc you need to have doxygen installed on your syst * `make doc-java` Generates the API doc for the Java part of the adapter. -### Install -* `make install` - Installs the files under `./dist` under $PREFIX (local.conf) +### Clean +* `make clean` + Deletes all the derived objects of the adapter build in `./build` and `./dist`. + Also invokes `make clean` which cleans the whole test-suite. + Does not remove the generated API doc. + +* `make clean-doc` + Removes all the generated API doc. + +* `make clean-all` + Equals `make clean` and `make clean-doc` + -* `make uninstall` - Removes all the filenames under `./dist` from $PREFIX (local.conf) From aa4ff2a51212d049256dfda65215133de3f7183a Mon Sep 17 00:00:00 2001 From: Devan Carpenter Date: Fri, 29 Jan 2021 14:38:25 +0100 Subject: [PATCH 86/94] convert .hgignore to .gitignore used a perl script[0] to convert regexp to glob. [0] https://github.com/devzendo/hgignore-to-gitignore --- .hgignore => .gitignore | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) rename .hgignore => .gitignore (96%) diff --git a/.hgignore b/.gitignore similarity index 96% rename from .hgignore rename to .gitignore index dbbd3a4..2322f9e 100644 --- a/.hgignore +++ b/.gitignore @@ -1,4 +1,3 @@ -syntax: glob # ignore all of them @@ -90,8 +89,7 @@ org.tar.gz *.iml -syntax: regexp -android/external/[^.]* +android/external/[?]* # Default ignored files -.idea/ +?idea/ From 796fe480b376813872296e456af74fee3223595c Mon Sep 17 00:00:00 2001 From: Devan Carpenter Date: Tue, 9 Feb 2021 14:52:24 +0100 Subject: [PATCH 87/94] build-system: add 1st party dependencies file This commit adds a machine-readable file specifying the required versions of all 1st party dependencies. More info: https://dev.pep.foundation/CID/Processes --- DEPENDENCIES | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 DEPENDENCIES diff --git a/DEPENDENCIES b/DEPENDENCIES new file mode 100644 index 0000000..2d377bc --- /dev/null +++ b/DEPENDENCIES @@ -0,0 +1,6 @@ +# 1st Party Dependencies +## Prefer git tags instead of SHA hashes when possible. + +libpEpAdapter=Release_2.1.4 +pEpEngine=Release_2.1.13 +sequoia=365d00a08bec6a5a48d48a7c7893d78c27092b59 From 73e0d639c7a8a635f233301164666b0298f19ce0 Mon Sep 17 00:00:00 2001 From: Devan Carpenter Date: Sun, 14 Feb 2021 15:59:28 +0100 Subject: [PATCH 88/94] CI: add basic gitlab-ci jobs Adds simple jobs for building the the Engine for Debian 10. Pre-built docker images containing des will be pulled down and used to build the Adapter. Upon successful compilation an image containing the build output will be pushed to a docker registry. --- .gitlab-ci-files/common-prepare.yml | 34 +++++++++++++++ .gitlab-ci.yml | 43 +++++++++++++++++++ scripts/debian10/Makefile | 31 +++++++++++++ scripts/debian10/build_pEpJNIAdapter.sh | 28 ++++++++++++ .../pEpJNIAdapter.debian10.Dockerfile | 24 +++++++++++ 5 files changed, 160 insertions(+) create mode 100644 .gitlab-ci-files/common-prepare.yml create mode 100644 .gitlab-ci.yml create mode 100644 scripts/debian10/Makefile create mode 100755 scripts/debian10/build_pEpJNIAdapter.sh create mode 100644 scripts/debian10/pEpJNIAdapter.debian10.Dockerfile diff --git a/.gitlab-ci-files/common-prepare.yml b/.gitlab-ci-files/common-prepare.yml new file mode 100644 index 0000000..14567f1 --- /dev/null +++ b/.gitlab-ci-files/common-prepare.yml @@ -0,0 +1,34 @@ +.ensure_docker: &ensure_docker + # Check for docker and install if missing + - 'which docker || ( sudo apt-get update -y && sudo apt-get install docker.io -y )' + +.ensure_rsync: &ensure_rsync + # Install rsync and deps if missing + - 'which ssh-agent || ( sudo apt-get update -y && sudo apt-get install openssh-client -y )' + - 'which rsync || ( sudo apt-get update -y && sudo apt-get install rsync -y )' + - 'which make || ( sudo apt-get update -y && sudo apt-get install make -y )' + +.enable_insecure_docker_registries: &enable_insecure_docker_registries + # Enable "insecure" docker registries + - | + cat < /tmp/docker-daemon.json + { + "insecure-registries" : ["${DOCKER_REGISTRY_HOST}"] + } + EOD + - sudo cp /tmp/docker-daemon.json /etc/docker/daemon.json + - sudo systemctl restart docker.service + +.standard_job: + tags: [kvm] + before_script: + - *ensure_docker + - *ensure_rsync + - *enable_insecure_docker_registries + +.make_in_docker: + extends: .standard_job + script: + - docker login -u ${DOCKER_REGISTRY_USER} -p ${DOCKER_REGISTRY_PASS} ${DOCKER_REGISTRY_HOST} + - cd scripts/${CI_DISTRO_TARGET} + - make diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..2344ef3 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,43 @@ +include: + - '.gitlab-ci-files/common-prepare.yml' + +stages: + - build + + +# CentOS/RHEL + +centos8:build: + extends: .make_in_docker + stage: build + variables: + CI_DISTRO_TARGET: "centos8" + +centos8:tagged-build: + extends: .make_in_docker + stage: build + variables: + CI_DISTRO_TARGET: "centos8" + TAGGED_BUILD: "true" + rules: + - if: $CI_COMMIT_TAG + +# Debian + +debian10:build: + extends: .make_in_docker + stage: build + variables: + CI_DISTRO_TARGET: "debian10" + DEBIAN_FRONTEND: "noninteractive" + +debian10:tagged-build: + extends: .make_in_docker + stage: build + variables: + CI_DISTRO_TARGET: "debian10" + DEBIAN_FRONTEND: "noninteractive" + TAGGED_BUILD: "true" + rules: + - if: $CI_COMMIT_TAG + diff --git a/scripts/debian10/Makefile b/scripts/debian10/Makefile new file mode 100644 index 0000000..55e980d --- /dev/null +++ b/scripts/debian10/Makefile @@ -0,0 +1,31 @@ +include ../../DEPENDENCIES +export +LIBPEPADAPTER_VERSION=${libpEpAdapter} +PEPENGINE_VERSION=${pEpEngine} +SEQUOIA_VERSION=${sequoia} +CURRENT_DISTRO=$(shell basename $(shell pwd)) +IMAGE_NAME=${DOCKER_REGISTRY_HOST}/pep-$(CURRENT_DISTRO)-jniadapter +DOCKERFILE=pEpJNIAdapter.$(CURRENT_DISTRO).Dockerfile +IS_TAGGED=${TAGGED_BUILD} +ifeq ($(IS_TAGGED), true) +# $CI_COMMIT_TAG is a predefined environment variable from Gitlab + PEPJNIADAPTER_VERSION=${CI_COMMIT_TAG} +else + PEPJNIADAPTER_VERSION=$(shell git rev-parse --short=8 HEAD) +endif +all: + -docker pull $(IMAGE_NAME):latest + cd ../../ && docker build --build-arg CURRENT_DISTRO=$(CURRENT_DISTRO) \ + --build-arg DOCKER_REGISTRY_HOST=${DOCKER_REGISTRY_HOST} \ + --build-arg PEPJNIADAPTER_VERSION=$(PEPJNIADAPTER_VERSION) \ + --build-arg LIBPEPADAPTER_VERSION=$(LIBPEPADAPTER_VERSION) \ + --build-arg PEPENGINE_VERSION=$(PEPENGINE_VERSION) \ + --build-arg SEQUOIA_VERSION=$(SEQUOIA_VERSION) \ + --cache-from $(IMAGE_NAME):latest \ + --tag=$(IMAGE_NAME):$(PEPJNIADAPTER_VERSION) \ + --tag=$(IMAGE_NAME):$(PEPJNIADAPTER_VERSION)_libpepadapter-$(LIBPEPADAPTER_VERSION)_engine-$(PEPENGINE_VERSION) \ + --tag=$(IMAGE_NAME):latest \ + -f scripts/${CURRENT_DISTRO}/$(DOCKERFILE) . + docker push $(IMAGE_NAME):$(PEPJNIADAPTER_VERSION) + docker push $(IMAGE_NAME):$(PEPJNIADAPTER_VERSION)_libpepadapter-$(LIBPEPADAPTER_VERSION)_engine-$(PEPENGINE_VERSION) + docker push $(IMAGE_NAME):latest diff --git a/scripts/debian10/build_pEpJNIAdapter.sh b/scripts/debian10/build_pEpJNIAdapter.sh new file mode 100755 index 0000000..225d262 --- /dev/null +++ b/scripts/debian10/build_pEpJNIAdapter.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env sh +set -exo + +export LC_ALL=en_US.UTF-8 && \ + +# JAVA_HOME (only for the pEpJNIAdapter) +if [ $(uname) == "Linux" ]; then { + export JAVA_HOME=$(dirname $(dirname $(readlink -f /usr/bin/javac))); +} fi +if [ $(uname) == "Darwin" ]; then { + export JAVA_HOME=$(dirname $(dirname $(readlink /usr/bin/javac))); +} fi +echo $JAVA_HOME + +cat >local.conf <<__LOCAL__ +PREFIX=${INSTPREFIX} +DEBUG=0 +JAVA_HOME=${JAVA_HOME} +YML2_PATH=${INSTPREFIX}/yml2 +YML2_PROC=${INSTPREFIX}/yml2/yml2proc --encoding=utf8 +#YML2_OPTS=--encoding=utf8 +ENGINE_INC_PATH=${INSTPREFIX}/include +ENGINE_LIB_PATH=${INSTPREFIX}/lib +AD_INC_PATH=${INSTPREFIX}/include +AD_LIB_PATH=${INSTPREFIX}/lib +__LOCAL__ + +make WARN= DEBUG= diff --git a/scripts/debian10/pEpJNIAdapter.debian10.Dockerfile b/scripts/debian10/pEpJNIAdapter.debian10.Dockerfile new file mode 100644 index 0000000..ed7f8bc --- /dev/null +++ b/scripts/debian10/pEpJNIAdapter.debian10.Dockerfile @@ -0,0 +1,24 @@ +ARG DOCKER_REGISTRY_HOST +ARG CURRENT_DISTRO +ARG LIBPEPADAPTER_VERSION +ARG PEPENGINE_VERSION +FROM ${DOCKER_REGISTRY_HOST}/pep-${CURRENT_DISTRO}-libpepadapter:${LIBPEPADAPTER_VERSION}_engine-${PEPENGINE_VERSION} + +ENV BUILDROOT /build +ENV INSTPREFIX /install +ENV OUTDIR /out + +### Setup working directory +RUN mkdir ${BUILDROOT}/pEpJNIAdapter +COPY . ${BUILDROOT}/pEpJNIAdapter +USER root +RUN chown -R pep-builder:pep-builder ${BUILDROOT}/pEpJNIAdapter +USER pep-builder +WORKDIR ${BUILDROOT}/pEpJNIAdapter + +ARG PEPJNIADAPTER_VERSION +ARG CURRENT_DISTRO + +### Build libpEpAdapter +RUN sh ./scripts/${CURRENT_DISTRO}/build_pEpJNIAdapter.sh && \ + rm -rf ${BUILDROOT}/* From f0e227aabe340893c478273c44ee9829006654de Mon Sep 17 00:00:00 2001 From: Devan Carpenter Date: Sun, 14 Feb 2021 20:38:28 +0100 Subject: [PATCH 89/94] CI: specify release tags for tagged jobs run different jobs if there is a new tag matching the "Release_" pattern. --- .gitlab-ci.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2344ef3..8b00745 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -12,6 +12,8 @@ centos8:build: stage: build variables: CI_DISTRO_TARGET: "centos8" + rules: + - if: '$CI_COMMIT_TAG !~ /^Release_[0-9]+\.[0-9]+\.[0-9]+$/' centos8:tagged-build: extends: .make_in_docker @@ -20,7 +22,7 @@ centos8:tagged-build: CI_DISTRO_TARGET: "centos8" TAGGED_BUILD: "true" rules: - - if: $CI_COMMIT_TAG + - if: '$CI_COMMIT_TAG =~ /^Release_[0-9]+\.[0-9]+\.[0-9]+$/' # Debian @@ -30,6 +32,8 @@ debian10:build: variables: CI_DISTRO_TARGET: "debian10" DEBIAN_FRONTEND: "noninteractive" + rules: + - if: '$CI_COMMIT_TAG !~ /^Release_[0-9]+\.[0-9]+\.[0-9]+$/' debian10:tagged-build: extends: .make_in_docker @@ -39,5 +43,5 @@ debian10:tagged-build: DEBIAN_FRONTEND: "noninteractive" TAGGED_BUILD: "true" rules: - - if: $CI_COMMIT_TAG + - if: '$CI_COMMIT_TAG =~ /^Release_[0-9]+\.[0-9]+\.[0-9]+$/' From b0608ccefde5a6e8d452c473cfac232f829e436a Mon Sep 17 00:00:00 2001 From: Devan Carpenter Date: Tue, 16 Feb 2021 12:01:30 +0100 Subject: [PATCH 90/94] CI: remove superfluous bashism --- scripts/debian10/build_pEpJNIAdapter.sh | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/scripts/debian10/build_pEpJNIAdapter.sh b/scripts/debian10/build_pEpJNIAdapter.sh index 225d262..4ac3fe7 100755 --- a/scripts/debian10/build_pEpJNIAdapter.sh +++ b/scripts/debian10/build_pEpJNIAdapter.sh @@ -4,13 +4,8 @@ set -exo export LC_ALL=en_US.UTF-8 && \ # JAVA_HOME (only for the pEpJNIAdapter) -if [ $(uname) == "Linux" ]; then { - export JAVA_HOME=$(dirname $(dirname $(readlink -f /usr/bin/javac))); -} fi -if [ $(uname) == "Darwin" ]; then { - export JAVA_HOME=$(dirname $(dirname $(readlink /usr/bin/javac))); -} fi -echo $JAVA_HOME +export JAVA_HOME=$(dirname $(dirname $(readlink -f /usr/bin/javac))); +echo "$JAVA_HOME" cat >local.conf <<__LOCAL__ PREFIX=${INSTPREFIX} From 2bfb46a98c0bb926ce192145cdf575fb57a04c02 Mon Sep 17 00:00:00 2001 From: Devan Carpenter Date: Sun, 21 Feb 2021 15:24:19 +0100 Subject: [PATCH 91/94] CI: remove incomplete CentOS jobs --- .gitlab-ci.yml | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8b00745..e98ad89 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,26 +4,6 @@ include: stages: - build - -# CentOS/RHEL - -centos8:build: - extends: .make_in_docker - stage: build - variables: - CI_DISTRO_TARGET: "centos8" - rules: - - if: '$CI_COMMIT_TAG !~ /^Release_[0-9]+\.[0-9]+\.[0-9]+$/' - -centos8:tagged-build: - extends: .make_in_docker - stage: build - variables: - CI_DISTRO_TARGET: "centos8" - TAGGED_BUILD: "true" - rules: - - if: '$CI_COMMIT_TAG =~ /^Release_[0-9]+\.[0-9]+\.[0-9]+$/' - # Debian debian10:build: @@ -44,4 +24,3 @@ debian10:tagged-build: TAGGED_BUILD: "true" rules: - if: '$CI_COMMIT_TAG =~ /^Release_[0-9]+\.[0-9]+\.[0-9]+$/' - From fe3469743eb753c3f3dd9b1b6816c0aae63e5d97 Mon Sep 17 00:00:00 2001 From: Devan Carpenter Date: Sun, 21 Feb 2021 15:28:27 +0100 Subject: [PATCH 92/94] DEPS: update to latest pEpEngine 2.1.x release --- DEPENDENCIES | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEPENDENCIES b/DEPENDENCIES index 2d377bc..94f3315 100644 --- a/DEPENDENCIES +++ b/DEPENDENCIES @@ -1,6 +1,6 @@ # 1st Party Dependencies ## Prefer git tags instead of SHA hashes when possible. -libpEpAdapter=Release_2.1.4 +libpEpAdapter=Release_2.1.6 pEpEngine=Release_2.1.13 sequoia=365d00a08bec6a5a48d48a7c7893d78c27092b59 From f2093047b5bd2a333d1523e7e919fb76c48f896e Mon Sep 17 00:00:00 2001 From: Devan Carpenter Date: Sun, 21 Feb 2021 15:40:21 +0100 Subject: [PATCH 93/94] CI: install JDK before building JNIAdapter --- scripts/debian10/pEpJNIAdapter.debian10.Dockerfile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts/debian10/pEpJNIAdapter.debian10.Dockerfile b/scripts/debian10/pEpJNIAdapter.debian10.Dockerfile index ed7f8bc..dd85795 100644 --- a/scripts/debian10/pEpJNIAdapter.debian10.Dockerfile +++ b/scripts/debian10/pEpJNIAdapter.debian10.Dockerfile @@ -8,6 +8,12 @@ ENV BUILDROOT /build ENV INSTPREFIX /install ENV OUTDIR /out +### Install system dependencies +USER root +RUN apt-get update -yqq && \ + apt-get install -yqq default-jdk-headless +USER pep-builder + ### Setup working directory RUN mkdir ${BUILDROOT}/pEpJNIAdapter COPY . ${BUILDROOT}/pEpJNIAdapter From 7cec570df99fe81d2008ce4290062f075ca51b83 Mon Sep 17 00:00:00 2001 From: Devan Carpenter Date: Tue, 23 Feb 2021 10:20:20 +0100 Subject: [PATCH 94/94] CID: don't use insecure docker registries anymore We now have a public registry, so we don't use registries on the LAN with only HTTP anymore. Let's remove the possiblity to use plain HTTP. --- .gitlab-ci-files/common-prepare.yml | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/.gitlab-ci-files/common-prepare.yml b/.gitlab-ci-files/common-prepare.yml index 14567f1..8053794 100644 --- a/.gitlab-ci-files/common-prepare.yml +++ b/.gitlab-ci-files/common-prepare.yml @@ -8,23 +8,11 @@ - 'which rsync || ( sudo apt-get update -y && sudo apt-get install rsync -y )' - 'which make || ( sudo apt-get update -y && sudo apt-get install make -y )' -.enable_insecure_docker_registries: &enable_insecure_docker_registries - # Enable "insecure" docker registries - - | - cat < /tmp/docker-daemon.json - { - "insecure-registries" : ["${DOCKER_REGISTRY_HOST}"] - } - EOD - - sudo cp /tmp/docker-daemon.json /etc/docker/daemon.json - - sudo systemctl restart docker.service - .standard_job: tags: [kvm] before_script: - *ensure_docker - *ensure_rsync - - *enable_insecure_docker_registries .make_in_docker: extends: .standard_job