JNI-167: add Message.decodeASN1XER() / fromXER()

JNI-167
heck 1 year ago
parent 9322e42114
commit 4a8514a6c9

@ -174,6 +174,84 @@ tstylesheet {
return result;
}
JNIEXPORT jobject JNICALL Java_foundation_pEp_jniadapter_Message__1decodeASN1XER(JNIEnv *env,
jclass clazz,
jbyteArray _msg_xer)
{
pEpLog("called");
char *msg_xer = nullptr;
if(_msg_xer) {
msg_xer = to_string(env, _msg_xer);
}
// validate param msg_xer
if (msg_xer == nullptr) {
jclass ex = env->FindClass("java/lang/IllegalStateException");
assert(ex);
env->ThrowNew(ex, nullptr);
return NULL;
}
// convert XER to PER
char *msg_per = nullptr;
size_t msg_per_size = 0;
PEP_STATUS status = ::XER_to_PER_ASN1Message_msg(msg_xer, &msg_per, &msg_per_size);
free(msg_xer);
if (status) {
throw_pEp_Exception(env, status);
return NULL;
}
if (msg_per == nullptr) {
jclass ex = env->FindClass("java/lang/IllegalStateException");
assert(ex);
env->ThrowNew(ex, nullptr);
return NULL;
}
// decode PER to ASN1Message
ASN1Message *msg_asn1 = nullptr;
status = ::decode_ASN1Message_message(msg_per, msg_per_size, &msg_asn1);
free(msg_per);
if (status) {
throw_pEp_Exception(env, status);
return NULL;
}
if (msg_asn1 == nullptr) {
jclass ex = env->FindClass("java/lang/IllegalStateException");
assert(ex);
env->ThrowNew(ex, nullptr);
return NULL;
}
// convert ASN1Message to message
message *msg_out = nullptr;
msg_out = ::ASN1Message_to_message(msg_asn1, NULL, false, 0);
// msg_asn1 gets moved, so dont free it
if (msg_out == nullptr) {
jclass ex = env->FindClass("java/lang/IllegalStateException");
assert(ex);
env->ThrowNew(ex, nullptr);
return NULL;
}
// Convert message to java class Message
jobject msg_ = nullptr;
jclass clazz_dst_ = findClass(env, "foundation/pEp/jniadapter/Message");
assert(clazz_dst_);
jmethodID constructor_dst_ = env->GetMethodID(clazz_dst_, "<init>", "(J)V");
assert(constructor_dst_);
msg_ = env->NewObject(clazz_dst_, constructor_dst_, reinterpret_cast<jlong>(msg_out));
// msg_ will point to msg_out, so dont free it
if (msg_ == nullptr) {
jclass ex = env->FindClass("java/lang/IllegalStateException");
assert(ex);
env->ThrowNew(ex, nullptr);
return NULL;
}
return msg_;
}
||
apply "*[name(.)!='enum']", 0, mode=entry {
with "name", "@name";

@ -76,8 +76,16 @@ tstylesheet {
private native static Message _decodeASN1XER(byte[] msgXER) throws pEpException;
public String encodeASN1XER() {
return Utils.toUTF16(_encodeASN1XER());
public static Message decodeASN1XER(String msgXER) {
byte[] _msgXER = new byte[0];
if (msgXER != null) {
_msgXER = Utils.toUTF8(msgXER);
}
return _decodeASN1XER(_msgXER);
}
public static Message fromXER(String msgXER) {
return decodeASN1XER(msgXER);
}
private «$cname»(long h) {

Loading…
Cancel
Save