1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
JNIEXPORT jobject JNICALL GetAllToken(JNIEnv * env,
object obj,
jbyteArray jhsm_Handle,
jbyteArray jdpx_Handle,
jobject KParms,
jshort jappli_count)
{
jbyteArray type;
jbyteArray allserial[8],allauthmode[8],alldata[8];
jclass cls, objcls;
jfieldID objfid;
jmethodID mid;
TDigipassBlob DPData[8];
aat_int32 retCode=0,i=0,k=0,l=0;
aat_ascii sw_out_type[8] ,
sw_out_serial_No[8][23] ,
sw_out_authmode[8][2] ,
*adpx_Handle = NULL;
TKernelParms *kerParms = NULL;
THSMContext *phsm_Handle= NULL;
for (l=0;l<jappli_count;l++)
{
memset(&DPData[l],0, sizeof(TDigipassBlob));
memset(&sw_out_authmode[l],0, sizeof(sw_out_authmode));
memset(&sw_out_serial_No[l],0, sizeof(sw_out_serial_No));
}
memset(&sw_out_type,0, sizeof(sw_out_type));
if (jhsm_Handle)
phsm_Handle = (THSMContext *) (*env)->GetByteArrayElements (env, jhsm_Handle, 0);
/* first create new jbyteArrays */
for (i=0;i<8;i++)
{
allserial[i] = (*env)->NewByteArray (env,22);
allauthmode[i] = (*env)->NewByteArray (env,2);
alldata[i] = (*env)->NewByteArray (env, 248);
}
type = (*env)->NewByteArray (env, 5);
objcls = (*env)->GetObjectClass (env, obj);
objfid = (*env)->GetFieldID (env, objcls, "retCode", "I");
if (KParms)
kerParms = getKernelParms (env, KParms);
retCode = GetAllToken ((void *)phsm_Handle,
&dpx_Handle,
kerParms,
&jappli_count,
sw_out_serial_No,
sw_out_type,
sw_out_authmode,
DPData);
if (jhsm_Handle)
(*env)->ReleaseByteArrayElements (env, jhsm_Handle, (jbyte *) phsm_Handle, 0);
cls = (*env)->FindClass (env, "xxxxxxxx");
// mid = (*env)->GetMethodID (env, cls, "<init>", "([B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B)V");
mid = (*env)->GetMethodID (env, cls, "<init>", "([[B[[B[[B[B)V");
(*env)->SetIntField (env, obj, objfid, (jint) retCode);
if (retCode != 100)
{
jmethodID void_mid = (*env)->GetMethodID (env, cls, "<init>", "()V");
return(*env)->NewObject (env, cls, void_mid);
}
for(k=0;k<jappli_count;k++)
{
(*env)->SetByteArrayRegion (env, allserial[k], 0, 22, (jbyte *) sw_out_serial_No[k]);
(*env)->SetByteArrayRegion (env, allauthmode[k], 0, 2, (jbyte *) sw_out_authmode[k]);
(*env)->SetByteArrayRegion (env, alldata[k], 0, 248, (jbyte *) &DPData[k]);
}
(*env)->SetByteArrayRegion (env, type, 0, 5, (jbyte *) sw_out_type);
/* return (*env)->NewObject (env, cls, mid,
allserial[0],allserial[1],allserial[2],allserial[3],allserial[4],allserial[5],allserial[6],allserial[7],
allauthmode[0],allauthmode[1],allauthmode[2],allauthmode[3],allauthmode[4],allauthmode[5],allauthmode[6],allauthmode[7],
alldata[0],alldata[1],alldata[2],alldata[3],alldata[4],alldata[5],alldata[6],alldata[7],
type);*/
return (*env)->NewObject (env, cls, mid, allserial, allauthmode, alldata, type);
} |
Partager