From 174fb003c2837db9d30b04eb0f2afc88c781db6b Mon Sep 17 00:00:00 2001 From: Edouard Tisserant Date: Wed, 30 Nov 2016 12:34:56 +0100 Subject: [PATCH 1/2] ENGINE-133 added timeout parameter to retrieve_next_sync_msg --- src/org_pEp_jniadapter_AbstractEngine.cc | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/org_pEp_jniadapter_AbstractEngine.cc b/src/org_pEp_jniadapter_AbstractEngine.cc index 86c99b6..7ccedaa 100644 --- a/src/org_pEp_jniadapter_AbstractEngine.cc +++ b/src/org_pEp_jniadapter_AbstractEngine.cc @@ -208,7 +208,6 @@ extern "C" { // Called by sync thread only PEP_STATUS show_handshake(void *obj, pEp_identity *me, pEp_identity *partner) { - LOGD("ShowHandshake"); jobject me_ = NULL; jobject partner_ = NULL; @@ -223,7 +222,6 @@ extern "C" { // Called by sync thread only PEP_STATUS message_to_send(void *obj, message *msg) { - LOGD("Message To Send"); jobject msg_ = NULL; msg_ = sync_env->NewObject(messageClass, messageConstructorMethodID, (jlong) msg); @@ -245,15 +243,30 @@ extern "C" { return 0; } - void *retrieve_next_sync_msg(void *arg) + void *retrieve_next_sync_msg(void *arg, time_t *timeout) { locked_queue< sync_msg_t * > *queue = (locked_queue< sync_msg_t * > *) arg; - while (!queue->size()) + time_t now, end; + void *msg; + + if(*timeout == 0){ + now = time(NULL); + end = now + *timeout; + } + + while (!queue->size()){ // TODO: add blocking dequeue usleep(100000); - void *msg = queue->front(); + if(*timeout == 0){ + now = time(NULL); + if(now > end) + return NULL; + } + } + + msg = queue->front(); queue->pop_front(); return msg; } From 89509c828744e410cfc7a428a17cd2639d65a4df Mon Sep 17 00:00:00 2001 From: Edouard Tisserant Date: Tue, 6 Dec 2016 16:00:40 +0100 Subject: [PATCH 2/2] ENGINE-133 showHandshake => notifyHandshake --- src/org/pEp/jniadapter/AbstractEngine.java | 12 +++---- src/org/pEp/jniadapter/Sync.java | 4 +-- src/org_pEp_jniadapter_AbstractEngine.cc | 40 ++++++++++++++++++---- src/pEp.yml2 | 11 +++++- 4 files changed, 51 insertions(+), 16 deletions(-) diff --git a/src/org/pEp/jniadapter/AbstractEngine.java b/src/org/pEp/jniadapter/AbstractEngine.java index b2b74f7..b9e8254 100644 --- a/src/org/pEp/jniadapter/AbstractEngine.java +++ b/src/org/pEp/jniadapter/AbstractEngine.java @@ -12,7 +12,7 @@ abstract class AbstractEngine implements AutoCloseable { private Sync.MessageToSendCallback messageToSendCallback; - private Sync.showHandshakeCallback showHandshakeCallback; + private Sync.notifyHandshakeCallback notifyHandshakeCallback; private native void init() throws pEpException; private native void release(); @@ -151,16 +151,16 @@ abstract class AbstractEngine implements AutoCloseable { this.messageToSendCallback = messageToSendCallback; } - public void setShowHandshakeCallback(Sync.showHandshakeCallback showHandshakeCallback) { - this.showHandshakeCallback = showHandshakeCallback; + public void setnotifyHandshakeCallback(Sync.notifyHandshakeCallback notifyHandshakeCallback) { + this.notifyHandshakeCallback = notifyHandshakeCallback; } - public int showHandshakeCallFromC(_Identity _myself, _Identity _partner) { + public int notifyHandshakeCallFromC(_Identity _myself, _Identity _partner, SyncHandshakeSignal _signal) { Identity myself = new Identity(_myself); Identity partner = new Identity(_partner); - if (showHandshakeCallback != null) { - showHandshakeCallback.showHandshake(myself, partner); + if (notifyHandshakeCallback != null) { + notifyHandshakeCallback.notifyHandshake(myself, partner, _signal); } else { throw new RuntimeException("Callback not set"); } diff --git a/src/org/pEp/jniadapter/Sync.java b/src/org/pEp/jniadapter/Sync.java index dc879e3..ef983cb 100644 --- a/src/org/pEp/jniadapter/Sync.java +++ b/src/org/pEp/jniadapter/Sync.java @@ -14,8 +14,8 @@ public interface Sync { void messageToSend(Message message); } - interface showHandshakeCallback { - void showHandshake(Identity myself, Identity partner); + interface notifyHandshakeCallback { + void notifyHandshake(Identity myself, Identity partner, SyncHandshakeSignal signal); } } diff --git a/src/org_pEp_jniadapter_AbstractEngine.cc b/src/org_pEp_jniadapter_AbstractEngine.cc index 7ccedaa..b0962ac 100644 --- a/src/org_pEp_jniadapter_AbstractEngine.cc +++ b/src/org_pEp_jniadapter_AbstractEngine.cc @@ -199,14 +199,14 @@ extern "C" { static jobject sync_obj = NULL; static JNIEnv* sync_env = NULL; - static jmethodID showHandShakeMethodID = NULL; + static jmethodID notifyHandShakeMethodID = NULL; static jmethodID messageToSendMethodID = NULL; static jclass messageClass = NULL; static jclass identityClass = NULL; static jmethodID messageConstructorMethodID = NULL; // Called by sync thread only - PEP_STATUS show_handshake(void *obj, pEp_identity *me, pEp_identity *partner) + PEP_STATUS notify_handshake(void *obj, pEp_identity *me, pEp_identity *partner, sync_handshake_signal signal) { jobject me_ = NULL; jobject partner_ = NULL; @@ -214,7 +214,33 @@ extern "C" { me_ = from_identity(sync_env, me, identityClass); partner_ = from_identity(sync_env, partner, identityClass); - jint result = sync_env->CallIntMethod(sync_obj, showHandShakeMethodID, me_, partner_); + jobject signal_ = NULL; + { + jclass clazz_signal = findClass(sync_env, "org/pEp/jniadapter/SyncHandshakeSignal"); + assert(clazz_signal); + jmethodID method_values = sync_env->GetStaticMethodID(clazz_signal, "values", + "()[Lorg/pEp/jniadapter/SyncHandshakeSignal;"); + assert(method_values); + jfieldID field_value = sync_env->GetFieldID(clazz_signal, "value", "I"); + assert(field_value); + + jobjectArray values = (jobjectArray) sync_env->CallStaticObjectMethod(clazz_signal, + method_values); + assert(values); + + jsize values_size = sync_env->GetArrayLength(values); + for (jsize i = 0; i < values_size; i++) { + jobject element = sync_env->GetObjectArrayElement(values, i); + assert(element); + jint value = sync_env->GetIntField(element, field_value); + if (value == (jint) signal) { + signal_ = element; + break; + } + } + } + + jint result = sync_env->CallIntMethod(sync_obj, notifyHandShakeMethodID, me_, partner_, signal_); return (PEP_STATUS) result; } @@ -286,11 +312,11 @@ extern "C" { jclass clazz = sync_env->GetObjectClass(sync_obj); - showHandShakeMethodID = sync_env->GetMethodID( + notifyHandShakeMethodID = sync_env->GetMethodID( clazz, - "showHandshakeCallFromC", + "notifyHandshakeCallFromC", "(Lorg/pEp/jniadapter/_Identity;Lorg/pEp/jniadapter/_Identity;)I"); - assert(showHandShakeMethodID); + assert(notifyHandShakeMethodID); messageToSendMethodID = sync_env->GetMethodID( clazz, @@ -372,7 +398,7 @@ extern "C" { register_sync_callbacks(session, (void *) queue, message_to_send, - show_handshake, + notify_handshake, inject_sync_msg, retrieve_next_sync_msg); diff --git a/src/pEp.yml2 b/src/pEp.yml2 index 33c2b41..e9eeb94 100644 --- a/src/pEp.yml2 +++ b/src/pEp.yml2 @@ -53,7 +53,7 @@ namespace pEp { pEp_contraints_violated                         > 0x0802 pEp_cannot_encode                               > 0x0803 - pEp_sync_no_trustwords_callback                 > 0x0901 + pEp_sync_no_notify_callback                  > 0x0901 pEp_sync_illegal_message                        > 0x0902 pEp_sync_no_inject_callback                     > 0x0903 @@ -124,6 +124,15 @@ namespace pEp { sync_handshake_rejected > 1 }; + enum SyncHandshakeSignal { + sync_handshake_dismiss_dialog > 0 + sync_handshake_show_dialog > 1 + sync_handshake_success > 2 + sync_handshake_failure > 3 + sync_device_added > 4 + sync_group_created > 5 + }; + interface Engine { method encrypt_message( in message src,