|
|
@ -1,8 +1,11 @@ |
|
|
|
#include <cassert> |
|
|
|
#include "jniutils.hh" |
|
|
|
#include <pEp/pEpLog.hh> |
|
|
|
|
|
|
|
#ifndef __LP64__ |
|
|
|
|
|
|
|
#include <time64.h> |
|
|
|
|
|
|
|
#define time_t time64_t |
|
|
|
#define timegm timegm64 |
|
|
|
#define gmtime_r gmtime64_r |
|
|
@ -12,13 +15,12 @@ |
|
|
|
|
|
|
|
namespace pEp { |
|
|
|
namespace JNIAdapter { |
|
|
|
|
|
|
|
std::mutex global_mutex; |
|
|
|
std::unordered_map<long, std::mutex *> engine_objid_mutex; |
|
|
|
|
|
|
|
std::mutex* get_engine_java_object_mutex( |
|
|
|
JNIEnv *env, |
|
|
|
jobject obj |
|
|
|
) |
|
|
|
std::mutex *get_engine_java_object_mutex(JNIEnv *env, |
|
|
|
jobject obj) |
|
|
|
{ |
|
|
|
long engine_obj_id = static_cast<long>(callLongMethod(env, obj, "getId")); |
|
|
|
assert(engine_obj_id); |
|
|
@ -29,10 +31,8 @@ namespace pEp { |
|
|
|
return engine_obj_mutex; |
|
|
|
} |
|
|
|
|
|
|
|
void create_engine_java_object_mutex( |
|
|
|
JNIEnv *env, |
|
|
|
jobject obj |
|
|
|
) |
|
|
|
void create_engine_java_object_mutex(JNIEnv *env, |
|
|
|
jobject obj) |
|
|
|
{ |
|
|
|
long engine_obj_id = static_cast<long>(callLongMethod(env, obj, "getId")); |
|
|
|
assert(engine_obj_id); |
|
|
@ -46,10 +46,8 @@ namespace pEp { |
|
|
|
engine_objid_mutex.insert(std::make_pair(engine_obj_id, engine_obj_mutex)); |
|
|
|
} |
|
|
|
|
|
|
|
void release_engine_java_object_mutex( |
|
|
|
JNIEnv *env, |
|
|
|
jobject obj |
|
|
|
) |
|
|
|
void release_engine_java_object_mutex(JNIEnv *env, |
|
|
|
jobject obj) |
|
|
|
{ |
|
|
|
long engine_obj_id = static_cast<long>(callLongMethod(env, obj, "getId")); |
|
|
|
assert(engine_obj_id); |
|
|
@ -60,11 +58,13 @@ namespace pEp { |
|
|
|
delete engine_obj_mutex; |
|
|
|
} |
|
|
|
|
|
|
|
jclass findClass(JNIEnv *env, const char *classname) |
|
|
|
jclass findClass(JNIEnv *env, |
|
|
|
const char *classname) |
|
|
|
{ |
|
|
|
jclass clazz = env->FindClass(classname); |
|
|
|
if (!clazz) |
|
|
|
if (!clazz) { |
|
|
|
fprintf(stderr, "class not found: %s\n", classname); |
|
|
|
} |
|
|
|
assert(clazz); |
|
|
|
|
|
|
|
if (clazz == NULL) { |
|
|
@ -77,12 +77,10 @@ namespace pEp { |
|
|
|
return clazz; |
|
|
|
} |
|
|
|
|
|
|
|
jfieldID getFieldID( |
|
|
|
JNIEnv *env, |
|
|
|
jfieldID getFieldID(JNIEnv *env, |
|
|
|
const char *classname, |
|
|
|
const char *fieldname, |
|
|
|
const char *signature |
|
|
|
) |
|
|
|
const char *signature) |
|
|
|
{ |
|
|
|
jclass clazz = findClass(env, classname); |
|
|
|
assert(clazz); |
|
|
@ -103,15 +101,12 @@ namespace pEp { |
|
|
|
} |
|
|
|
|
|
|
|
//TODO: fix/generalize/clean patch added to make keysync work using globalref to class
|
|
|
|
jfieldID getFieldID( |
|
|
|
JNIEnv *env, |
|
|
|
jfieldID getFieldID(JNIEnv *env, |
|
|
|
const char *classname, |
|
|
|
const char *fieldname, |
|
|
|
const char *signature, |
|
|
|
const jclass clazz |
|
|
|
) |
|
|
|
const jclass clazz) |
|
|
|
{ |
|
|
|
|
|
|
|
jfieldID field = env->GetFieldID(clazz, fieldname, signature); |
|
|
|
assert(field); |
|
|
|
|
|
|
@ -126,11 +121,9 @@ namespace pEp { |
|
|
|
return field; |
|
|
|
} |
|
|
|
|
|
|
|
jint callIntMethod( |
|
|
|
JNIEnv *env, |
|
|
|
jint callIntMethod(JNIEnv *env, |
|
|
|
jobject obj, |
|
|
|
const char *methodname |
|
|
|
) |
|
|
|
const char *methodname) |
|
|
|
{ |
|
|
|
jclass clazz = env->GetObjectClass(obj); |
|
|
|
assert(clazz); |
|
|
@ -150,11 +143,9 @@ namespace pEp { |
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
jlong callLongMethod( |
|
|
|
JNIEnv *env, |
|
|
|
jlong callLongMethod(JNIEnv *env, |
|
|
|
jobject obj, |
|
|
|
const char *methodname |
|
|
|
) |
|
|
|
const char *methodname) |
|
|
|
{ |
|
|
|
jclass clazz = env->GetObjectClass(obj); |
|
|
|
assert(clazz); |
|
|
@ -174,18 +165,15 @@ namespace pEp { |
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
jobject callObjectMethod( |
|
|
|
JNIEnv *env, |
|
|
|
jobject callObjectMethod(JNIEnv *env, |
|
|
|
jobject obj, |
|
|
|
const char *methodname, |
|
|
|
jint index |
|
|
|
) |
|
|
|
jint index) |
|
|
|
{ |
|
|
|
jclass clazz = env->GetObjectClass(obj); |
|
|
|
assert(clazz); |
|
|
|
|
|
|
|
jmethodID method = env->GetMethodID(clazz, methodname, |
|
|
|
"(I)Ljava/lang/Object;"); |
|
|
|
jmethodID method = env->GetMethodID(clazz, methodname, "(I)Ljava/lang/Object;"); |
|
|
|
if (method == NULL) { |
|
|
|
jclass ex = env->FindClass("java/lang/NoSuchMethodError"); |
|
|
|
assert(ex); |
|
|
@ -200,18 +188,15 @@ namespace pEp { |
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
jboolean callBooleanMethod( |
|
|
|
JNIEnv *env, |
|
|
|
jboolean callBooleanMethod(JNIEnv *env, |
|
|
|
jobject obj, |
|
|
|
const char *methodname, |
|
|
|
jobject o |
|
|
|
) |
|
|
|
jobject o) |
|
|
|
{ |
|
|
|
jclass clazz = env->GetObjectClass(obj); |
|
|
|
assert(clazz); |
|
|
|
|
|
|
|
jmethodID method = env->GetMethodID(clazz, methodname, |
|
|
|
"(Ljava/lang/Object;)Z"); |
|
|
|
jmethodID method = env->GetMethodID(clazz, methodname, "(Ljava/lang/Object;)Z"); |
|
|
|
if (method == NULL) { |
|
|
|
jclass ex = env->FindClass("java/lang/NoSuchMethodError"); |
|
|
|
assert(ex); |
|
|
@ -236,7 +221,8 @@ namespace pEp { |
|
|
|
return env->ThrowNew(ex, ex_name); |
|
|
|
} |
|
|
|
|
|
|
|
jobject from_Integer(JNIEnv *env, int val) |
|
|
|
jobject from_Integer(JNIEnv *env, |
|
|
|
int val) |
|
|
|
{ |
|
|
|
assert(env); |
|
|
|
jclass clazz = findClass(env, "java/lang/Integer"); |
|
|
@ -249,14 +235,16 @@ namespace pEp { |
|
|
|
return obj; |
|
|
|
} |
|
|
|
|
|
|
|
int to_Integer(JNIEnv *env, jobject 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) |
|
|
|
jbyteArray from_string(JNIEnv *env, |
|
|
|
const char *str) |
|
|
|
{ |
|
|
|
if (str && str[0]) { |
|
|
|
jboolean isCopy; |
|
|
@ -264,18 +252,19 @@ namespace pEp { |
|
|
|
jbyteArray _str = env->NewByteArray(l); |
|
|
|
env->SetByteArrayRegion(_str, 0, l, (jbyte *) str); |
|
|
|
return _str; |
|
|
|
} |
|
|
|
else if (str) { |
|
|
|
} else if (str) { |
|
|
|
return env->NewByteArray(0); |
|
|
|
} else { |
|
|
|
return (jbyteArray) NULL; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
char *to_string(JNIEnv *env, jbyteArray str) |
|
|
|
char *to_string(JNIEnv *env, |
|
|
|
jbyteArray str) |
|
|
|
{ |
|
|
|
if (str == NULL) |
|
|
|
if (str == NULL) { |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
|
|
|
|
size_t l = env->GetArrayLength(str); |
|
|
|
char *_str = static_cast<char *>(calloc(1, l + 1)); |
|
|
@ -284,10 +273,12 @@ namespace pEp { |
|
|
|
return _str; |
|
|
|
} |
|
|
|
|
|
|
|
jobject from_stringlist(JNIEnv *env, stringlist_t *sl) |
|
|
|
jobject from_stringlist(JNIEnv *env, |
|
|
|
stringlist_t *sl) |
|
|
|
{ |
|
|
|
if (!sl) |
|
|
|
if (!sl) { |
|
|
|
return (jobject) NULL; |
|
|
|
} |
|
|
|
|
|
|
|
jclass clazz = findClass(env, "java/util/Vector"); |
|
|
|
jmethodID constructor = env->GetMethodID(clazz, "<init>", "()V"); |
|
|
@ -306,14 +297,17 @@ namespace pEp { |
|
|
|
return obj; |
|
|
|
} |
|
|
|
|
|
|
|
stringlist_t *to_stringlist(JNIEnv *env, jobject obj) |
|
|
|
stringlist_t *to_stringlist(JNIEnv *env, |
|
|
|
jobject obj) |
|
|
|
{ |
|
|
|
if (!obj) |
|
|
|
if (!obj) { |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
|
|
|
|
jint size = callIntMethod(env, obj, "size"); |
|
|
|
if (size == 0) |
|
|
|
if (size == 0) { |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
|
|
|
|
stringlist_t *sl = new_stringlist(NULL); |
|
|
|
stringlist_t *_sl; |
|
|
@ -330,17 +324,18 @@ namespace pEp { |
|
|
|
return sl; |
|
|
|
} |
|
|
|
|
|
|
|
jobject from_stringpairlist(JNIEnv *env, stringpair_list_t *sl) |
|
|
|
jobject from_stringpairlist(JNIEnv *env, |
|
|
|
stringpair_list_t *sl) |
|
|
|
{ |
|
|
|
if (!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, "<init>", "()V"); |
|
|
|
assert(constructor); |
|
|
|
jmethodID constructor_pair = env->GetMethodID(clazz_pair, "<init>", |
|
|
|
"(Ljava/lang/Object;Ljava/lang/Object;)V"); |
|
|
|
jmethodID constructor_pair = env->GetMethodID(clazz_pair, "<init>", "(Ljava/lang/Object;Ljava/lang/Object;)V"); |
|
|
|
assert(constructor_pair); |
|
|
|
|
|
|
|
jobject obj = env->NewObject(clazz, constructor); |
|
|
@ -353,15 +348,12 @@ namespace pEp { |
|
|
|
|
|
|
|
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); |
|
|
|
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); |
|
|
@ -370,19 +362,20 @@ namespace pEp { |
|
|
|
return obj; |
|
|
|
} |
|
|
|
|
|
|
|
stringpair_list_t *to_stringpairlist(JNIEnv *env, jobject obj) |
|
|
|
stringpair_list_t *to_stringpairlist(JNIEnv *env, |
|
|
|
jobject obj) |
|
|
|
{ |
|
|
|
if (!obj) |
|
|
|
if (!obj) { |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
|
|
|
|
jint size = callIntMethod(env, obj, "size"); |
|
|
|
if (size == 0) |
|
|
|
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;"); |
|
|
|
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; |
|
|
@ -390,12 +383,8 @@ namespace pEp { |
|
|
|
|
|
|
|
for (_sl = sl, i = 0; i < (int) size; i++) { |
|
|
|
jobject pair = callObjectMethod(env, obj, "get", i); |
|
|
|
jbyteArray first = |
|
|
|
static_cast<jbyteArray>(env->GetObjectField(pair, |
|
|
|
first_id)); |
|
|
|
jbyteArray second = |
|
|
|
static_cast<jbyteArray>(env->GetObjectField(pair, |
|
|
|
second_id)); |
|
|
|
jbyteArray first = static_cast<jbyteArray>(env->GetObjectField(pair, first_id)); |
|
|
|
jbyteArray second = static_cast<jbyteArray>(env->GetObjectField(pair, second_id)); |
|
|
|
|
|
|
|
char *first_str = to_string(env, first); |
|
|
|
char *second_str = to_string(env, second); |
|
|
@ -410,10 +399,12 @@ namespace pEp { |
|
|
|
return sl; |
|
|
|
} |
|
|
|
|
|
|
|
jobject from_timestamp(JNIEnv *env, timestamp *ts) |
|
|
|
jobject from_timestamp(JNIEnv *env, |
|
|
|
timestamp *ts) |
|
|
|
{ |
|
|
|
if (!ts) |
|
|
|
if (!ts) { |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
|
|
|
|
//LOGD("/* Seconds (0-60) */ FROM :%d", ts->tm_sec);
|
|
|
|
//LOGD("/* Minutes (0-59) */ :%d", ts->tm_min);
|
|
|
@ -433,20 +424,22 @@ namespace pEp { |
|
|
|
env->DeleteLocalRef(clazz); |
|
|
|
|
|
|
|
return result; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
timestamp *to_timestamp(JNIEnv *env, jobject date) |
|
|
|
timestamp *to_timestamp(JNIEnv *env, |
|
|
|
jobject date) |
|
|
|
{ |
|
|
|
if (!date) |
|
|
|
if (!date) { |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
|
|
|
|
jlong t = callLongMethod(env, date, "getTime"); |
|
|
|
//LOGD( "Set Time to : %lld", t);
|
|
|
|
timestamp *ts = static_cast<timestamp *>(calloc(1, sizeof(timestamp))); |
|
|
|
assert(ts); |
|
|
|
if (ts == NULL) |
|
|
|
if (ts == NULL) { |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
|
|
|
|
if (t) { |
|
|
|
time_t clock = t / 1000; |
|
|
@ -463,31 +456,38 @@ namespace pEp { |
|
|
|
return ts; |
|
|
|
} |
|
|
|
|
|
|
|
static void _setStringField(JNIEnv *env, const char *classname, |
|
|
|
jobject obj, const char *name, const char *value) |
|
|
|
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<jobject>(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) |
|
|
|
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<jobject>(from_string(env, value))); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
jobject from_identity(JNIEnv *env, pEp_identity *ident) |
|
|
|
jobject from_identity(JNIEnv *env, |
|
|
|
pEp_identity *ident) |
|
|
|
{ |
|
|
|
if (!ident) |
|
|
|
if (!ident) { |
|
|
|
return (jobject) NULL; |
|
|
|
} |
|
|
|
|
|
|
|
static const char *classname = "foundation/pEp/jniadapter/_Identity"; |
|
|
|
jclass clazz = findClass(env, classname); |
|
|
@ -519,10 +519,13 @@ namespace pEp { |
|
|
|
} |
|
|
|
|
|
|
|
//TODO: fix/generalize/clean patch added to make keysync work using globalref to class
|
|
|
|
jobject from_identity(JNIEnv *env, pEp_identity *ident, jclass identityClass) |
|
|
|
jobject from_identity(JNIEnv *env, |
|
|
|
pEp_identity *ident, |
|
|
|
jclass identityClass) |
|
|
|
{ |
|
|
|
if (!ident) |
|
|
|
if (!ident) { |
|
|
|
return (jobject) NULL; |
|
|
|
} |
|
|
|
|
|
|
|
static const char *classname = "foundation/pEp/jniadapter/_Identity"; |
|
|
|
jmethodID constructor = env->GetMethodID(identityClass, "<init>", "()V"); |
|
|
@ -550,7 +553,9 @@ namespace pEp { |
|
|
|
return obj; |
|
|
|
} |
|
|
|
|
|
|
|
char *_getStringField(JNIEnv *env, const char *classname, jobject obj, |
|
|
|
char *_getStringField(JNIEnv *env, |
|
|
|
const char *classname, |
|
|
|
jobject obj, |
|
|
|
const char *name) |
|
|
|
{ |
|
|
|
jfieldID fieldID = getFieldID(env, classname, name, "[B"); |
|
|
@ -562,10 +567,12 @@ namespace pEp { |
|
|
|
return res; |
|
|
|
} |
|
|
|
|
|
|
|
pEp_identity *to_identity(JNIEnv *env, jobject obj) |
|
|
|
pEp_identity *to_identity(JNIEnv *env, |
|
|
|
jobject obj) |
|
|
|
{ |
|
|
|
if (!obj) |
|
|
|
if (!obj) { |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
|
|
|
|
static const char *classname = "foundation/pEp/jniadapter/_Identity"; |
|
|
|
pEp_identity *ident = new_identity(NULL, NULL, NULL, NULL); |
|
|
@ -594,10 +601,12 @@ namespace pEp { |
|
|
|
return ident; |
|
|
|
} |
|
|
|
|
|
|
|
jobject from_identitylist(JNIEnv *env, identity_list *il) |
|
|
|
jobject from_identitylist(JNIEnv *env, |
|
|
|
identity_list *il) |
|
|
|
{ |
|
|
|
if (!il) |
|
|
|
if (!il) { |
|
|
|
return (jobject) NULL; |
|
|
|
} |
|
|
|
|
|
|
|
jclass clazz = findClass(env, "java/util/Vector"); |
|
|
|
jmethodID constructor = env->GetMethodID(clazz, "<init>", "()V"); |
|
|
@ -616,14 +625,17 @@ namespace pEp { |
|
|
|
return obj; |
|
|
|
} |
|
|
|
|
|
|
|
identity_list *to_identitylist(JNIEnv *env, jobject obj) |
|
|
|
identity_list *to_identitylist(JNIEnv *env, |
|
|
|
jobject obj) |
|
|
|
{ |
|
|
|
if (!obj) |
|
|
|
if (!obj) { |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
|
|
|
|
jint size = callIntMethod(env, obj, "size"); |
|
|
|
if (size == 0) |
|
|
|
if (size == 0) { |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
|
|
|
|
identity_list *il = new_identity_list(NULL); |
|
|
|
identity_list *_il; |
|
|
@ -638,10 +650,12 @@ namespace pEp { |
|
|
|
return il; |
|
|
|
} |
|
|
|
|
|
|
|
jobject _from_blob(JNIEnv *env, bloblist_t *b) |
|
|
|
jobject _from_blob(JNIEnv *env, |
|
|
|
bloblist_t *b) |
|
|
|
{ |
|
|
|
if (!b) |
|
|
|
if (!b) { |
|
|
|
return (jobject) NULL; |
|
|
|
} |
|
|
|
|
|
|
|
static const char *classname = "foundation/pEp/jniadapter/_Blob"; |
|
|
|
jclass clazz = findClass(env, classname); |
|
|
@ -661,10 +675,12 @@ namespace pEp { |
|
|
|
return obj; |
|
|
|
} |
|
|
|
|
|
|
|
jobject from_bloblist(JNIEnv *env, bloblist_t *bl) |
|
|
|
jobject from_bloblist(JNIEnv *env, |
|
|
|
bloblist_t *bl) |
|
|
|
{ |
|
|
|
if (!bl) |
|
|
|
if (!bl) { |
|
|
|
return (jobject) NULL; |
|
|
|
} |
|
|
|
|
|
|
|
jclass clazz = findClass(env, "java/util/Vector"); |
|
|
|
jmethodID constructor = env->GetMethodID(clazz, "<init>", "()V"); |
|
|
@ -677,17 +693,20 @@ namespace pEp { |
|
|
|
bloblist_t *_bl; |
|
|
|
for (_bl = bl; _bl && _bl->value; _bl = _bl->next) { |
|
|
|
jobject o = _from_blob(env, _bl); |
|
|
|
if(o) |
|
|
|
if (o) { |
|
|
|
callBooleanMethod(env, obj, "add", o); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return obj; |
|
|
|
} |
|
|
|
|
|
|
|
bloblist_t *to_blob(JNIEnv *env, jobject obj) |
|
|
|
bloblist_t *to_blob(JNIEnv *env, |
|
|
|
jobject obj) |
|
|
|
{ |
|
|
|
if (!obj) |
|
|
|
if (!obj) { |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
|
|
|
|
static const char *classname = "foundation/pEp/jniadapter/_Blob"; |
|
|
|
jclass clazz = findClass(env, classname); |
|
|
@ -710,14 +729,17 @@ namespace pEp { |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bloblist_t *to_bloblist(JNIEnv *env, jobject obj) |
|
|
|
bloblist_t *to_bloblist(JNIEnv *env, |
|
|
|
jobject obj) |
|
|
|
{ |
|
|
|
if (!obj) |
|
|
|
if (!obj) { |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
|
|
|
|
jint size = callIntMethod(env, obj, "size"); |
|
|
|
if (size == 0) |
|
|
|
if (size == 0) { |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
|
|
|
|
bloblist_t *bl = new_bloblist(NULL, 0, NULL, NULL); |
|
|
|
bloblist_t *_bl; |
|
|
@ -733,7 +755,8 @@ namespace pEp { |
|
|
|
return bl; |
|
|
|
} |
|
|
|
|
|
|
|
PEP_enc_format to_EncFormat(JNIEnv *env, jobject obj) |
|
|
|
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); |
|
|
@ -744,7 +767,8 @@ namespace pEp { |
|
|
|
return static_cast<PEP_enc_format>(env->GetIntField(obj, field_value)); |
|
|
|
} |
|
|
|
|
|
|
|
PEP_CIPHER_SUITE to_CipherSuite(JNIEnv *env, jobject obj) |
|
|
|
PEP_CIPHER_SUITE to_CipherSuite(JNIEnv *env, |
|
|
|
jobject obj) |
|
|
|
{ |
|
|
|
static const char *classname = "foundation/pEp/jniadapter/CipherSuite"; |
|
|
|
jclass clazz_enc_format = findClass(env, classname); |
|
|
@ -755,7 +779,8 @@ namespace pEp { |
|
|
|
return static_cast<PEP_CIPHER_SUITE>(env->GetIntField(obj, field_value)); |
|
|
|
} |
|
|
|
|
|
|
|
sync_handshake_result to_SyncHandshakeResult(JNIEnv *env, jobject obj) |
|
|
|
sync_handshake_result to_SyncHandshakeResult(JNIEnv *env, |
|
|
|
jobject obj) |
|
|
|
{ |
|
|
|
static const char *classname = "foundation/pEp/jniadapter/SyncHandshakeResult"; |
|
|
|
jclass clazz_enc_format = findClass(env, classname); |
|
|
|