|
|
@ -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); |
|
|
|
|
|
|
|