--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/security/src.linux/ocspchecker.cpp Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,129 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+#include "javajniutils.h"
+#include "com_nokia_mj_impl_security_midp_authentication_OcspChecker.h"
+#include "ocspclient.h"
+
+using namespace java::security;
+using namespace std;
+
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_security_midp_authentication_OcspChecker__1createNativeThread
+(JNIEnv *, jobject)
+{
+ return 0;
+}
+
+JNIEXPORT void JNICALL Java_com_nokia_mj_impl_security_midp_authentication_OcspChecker__1destroyNativeThread
+(JNIEnv *, jobject, jint)
+{
+}
+
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_security_midp_authentication_OcspChecker__1createNativePeer
+(JNIEnv * env, jobject, jint aNativeThreadHandle, jlong iap, jlong snap, jstring jOcspDefaultUrl)
+{
+ OcspClient * ocspClient = NULL;
+ const char* ocspDefaultUrl = NULL;
+ if (jOcspDefaultUrl != NULL)
+ {
+ jboolean isCopy;
+ ocspDefaultUrl = env->GetStringUTFChars(jOcspDefaultUrl, &isCopy);
+ ocspClient = OcspClient::createInstance(iap, ocspDefaultUrl);
+ }
+ else
+ {
+ ocspClient = OcspClient::createInstance(iap, NULL);
+ }
+ return reinterpret_cast<int>(ocspClient);
+}
+
+JNIEXPORT void JNICALL Java_com_nokia_mj_impl_security_midp_authentication_OcspChecker__1destroyNativePeer
+(JNIEnv *, jobject, jint aNativeThreadHandle, jint aNativePeerHandle)
+{
+ OcspClient* ocspClient =
+ reinterpret_cast< OcspClient* >(aNativePeerHandle);
+ delete ocspClient;
+}
+
+JNIEXPORT void JNICALL Java_com_nokia_mj_impl_security_midp_authentication_OcspChecker__1ocspChecks
+(JNIEnv * env, jobject, jint aNativeThreadHandle, jint aNativePeerHandle, jobjectArray ocspData)
+{
+ if (ocspData == NULL)
+ {
+ return;
+ }
+ // do the OCSP check for each of the cert chains
+ OcspClient* ocspClient =
+ reinterpret_cast< OcspClient* >(aNativePeerHandle);
+ jint len = env->GetArrayLength(ocspData);
+ jboolean isCopy;
+ for (int i=0; i<len; i++)
+ {
+ jobject jOcspData = env->GetObjectArrayElement(ocspData, i);
+ jclass ocspDataClass = env->GetObjectClass(jOcspData);
+ jmethodID getCertChainMethod = env->GetMethodID(
+ ocspDataClass,"getCertChain", "()[Ljava/lang/String;");
+ jmethodID setIndividualResponsesMethod = env->GetMethodID(
+ ocspDataClass,"setIndividualResponses", "([I)V");
+ jmethodID setSummaryMethod = env->GetMethodID(
+ ocspDataClass,"setSummary", "(I)V");
+ jobjectArray jCertChain = (jobjectArray)env->CallObjectMethod(
+ jOcspData, getCertChainMethod);
+ jint certChainLen = env->GetArrayLength(jCertChain);
+ const char** certChain = new const char* [certChainLen];
+ for (int j=0; j<certChainLen; j++)
+ {
+ jstring jCert = (jstring)env->GetObjectArrayElement(jCertChain, j);
+ const char *cert = env->GetStringUTFChars(jCert, &isCopy);
+ certChain[j] = cert;
+ }
+ // do the actual OCSP check for the current cert chain
+ ocspClient->startOcspCheck(certChain, certChainLen);
+ OcspResponse ocspResponse = ocspClient->getOcspCheckResponse();
+ env->CallVoidMethod(jOcspData, setSummaryMethod, ocspResponse.iSummary);
+ if (ocspResponse.iIndividualResponses.size() > 0)
+ {
+ int size = ocspResponse.iIndividualResponses.size();
+ jint* tmp = new jint[size];
+ for (int j=0; j<size; j++)
+ {
+ tmp[j] = ocspResponse.iIndividualResponses[j];
+ }
+ jintArray individualResponses = (jintArray)env->NewIntArray(size);
+ env->SetIntArrayRegion((jintArray)individualResponses,(jsize)0,(jsize)size,tmp);
+ // set the individual responses
+ env->CallVoidMethod(jOcspData, setIndividualResponsesMethod, individualResponses);
+ delete[] tmp;
+ }
+ // cleanup
+ for (int j=0; j<certChainLen; j++)
+ {
+ jstring jCert = (jstring)env->GetObjectArrayElement(jCertChain, j);
+ env->ReleaseStringUTFChars(jCert,certChain[j]);
+ }
+ delete[] certChain;
+ }
+}
+
+JNIEXPORT void JNICALL Java_com_nokia_mj_impl_security_midp_authentication_OcspChecker__1cancelOcspChecks
+(JNIEnv *, jobject, jint aNativeThreadHandle, jint aNativePeerHandle)
+{
+ OcspClient* ocspClient =
+ reinterpret_cast< OcspClient* >(aNativePeerHandle);
+ ocspClient->cancelOcspCheck(true);
+}