C++文件: #include "Action.h"
#include "jni.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
JNIEXPORT jbyteArray JNICALL Java_Action_genReq
(JNIEnv * env, jobject obj, jint hash_algorithm, jbyteArray data)
{
jbyteArray result= NULL;
void *TS_handle;
int error_code;
unsigned char *request;
unsigned int request_len;
unsigned char* raw_data = (unsigned char*)env->GetByteArrayElements(data, 0);
unsigned int raw_data_len =env->GetArrayLength(data);
......
if ( !( request = (unsigned char *)malloc(request_len) ) )
{
......
}
......
result = env->NewByteArray(request_len);
env->SetByteArrayRegion(result,0, request_len, (jbyte*)request);
......
return result;
}
JNIEXPORT jboolean JNICALL Java_Action_verifyRes
(JNIEnv * env, jobject obj, jint hash_algorithm, jbyteArray resp)
{
jboolean result = 0;
void *TS_handle;
int error_code;
unsigned int status_code, info_code_flag, info_code;
......
unsigned char* response_ASN1_encode = (unsigned char*)env->GetByteArrayElements(resp, 0);
unsigned int response_ASN1_encode_len =env->GetArrayLength(resp);
......
result = 1;
......
return result;
}
JNIEXPORT jobject JNICALL Java_Action_getInfo
(JNIEnv * env, jobject obj, jbyteArray resp)
{
jobject result= NULL;
jclass info = env->FindClass("the/path/Info");
jobject ainfo = env->AllocObject(info);
void *A_handle;
int error_code;
unsigned int name_len, time_len;
unsigned char *name, *time;
......
unsigned char* response_ASN1_encode = (unsigned char*)env->GetByteArrayElements(resp, 0);
unsigned int response_ASN1_encode_len =env->GetArrayLength(resp);
......
if (name_len)
{
if ( !(name=(unsigned char *)malloc(name_len)) )
{
......
}
......
jclass strClass = env->FindClass("Ljava/lang/String;");
jmethodID ctorID = env->GetMethodID(strClass, "<init>", "([B)V");
jbyteArray bytes = env->NewByteArray(name_len);
env->SetByteArrayRegion(bytes, 0, name_len, (jbyte*)name);
jstring encoding = env->NewStringUTF("utf-8");
jobject str = env->NewObject(strClass, ctorID, bytes, encoding);
jfieldID fld_name = env->GetFieldID(info, "Name", "Ljava/lang/String;");
env->SetObjectField(info, fld_name, str);
free(name);
}
else{
}
if (time_len)
{
if ( !(time=(unsigned char *)malloc(time_len)) )
{
......
}
......
jclass strClass = env->FindClass("Ljava/lang/String;");
jmethodID ctorID = env->GetMethodID(strClass, "<init>", "([B)V");
jbyteArray bytes = env->NewByteArray(time_len);
env->SetByteArrayRegion(bytes, 0, time_len, (jbyte*)time);
jstring encoding = env->NewStringUTF("utf-8");
jobject str = env->NewObject(strClass, ctorID, bytes, encoding);
jfieldID fld_time = env->GetFieldID(info, "Time", "Ljava/lang/String;");
env->SetObjectField(info, fld_time, str);
free(time);
}
else{
}
result = info;
......
return result;
}