--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/satsa/apdu/src.s60/apduconnectionimpl.cpp Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,223 @@
+/*
+* Copyright (c) 2008 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 "s60commonutils.h"
+#include "javajniutils.h"
+#include "com_nokia_mj_impl_satsa_APDUConnectionImpl.h"
+#include "cstsconnection.h"
+#include "cstsresphandler.h"
+#include "cstsmidletinfo.h"
+#include "javaapduconnection.h"
+#include "logger.h"
+#include "javacommonutils.h"
+
+// CONSTANTS
+
+const TInt KReturnValueArrayLength = 2;
+const TInt KHandleIndex = 0;
+const TInt KConnTypeIndex = 1;
+
+using namespace java::satsa;
+
+/**
+ * JNI function.
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_satsa_APDUConnectionImpl__1doPinMethod(
+ JNIEnv* aJni, jclass aPeer,jint aHandle,
+ jint aPinMethodType, jint aPinID)
+{
+ LOG(ESATSA, EInfo, "+ Entering doPinMethod JNI function");
+ JavaApduConnection* apduConn = reinterpret_cast<JavaApduConnection *>(aHandle);
+ TInt err = apduConn->DoPinMethod(*aJni, aPeer, aHandle, aPinMethodType, aPinID);
+ LOG(ESATSA, EInfo, "Returning from doPinMethod JNI function");
+ //return error code to caller
+ return err;
+}
+
+/**
+ * JNI function.
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_satsa_APDUConnectionImpl__1exchangeAPDU(
+ JNIEnv *aJni, jclass aPeer,jint aHandle,
+ jbyteArray aCommandAPDU)
+{
+ LOG(ESATSA, EInfo, "+ Entering exchangeAPDU JNI function");
+
+ JavaApduConnection* apduConn = reinterpret_cast<JavaApduConnection *>(aHandle);
+ TInt err = 0;
+ err = apduConn->ExchangeAPDU(*aJni, aPeer, aHandle, aCommandAPDU);
+
+ LOG(ESATSA, EInfo, "-- Returning from exchnageAPDU JNI function");
+ //return error code to caller
+ return err;
+}
+
+/**
+ * JNI function.
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_satsa_APDUConnectionImpl__1unblockPin(
+ JNIEnv* aJni, jclass aPeer,jint aHandle,
+ jint aBlockedPinID, jint aUnblockingPinID)
+{
+ LOG(ESATSA, EInfo, "+ Entering UnblockPin JNI function");
+
+ JavaApduConnection* apduConn = reinterpret_cast<JavaApduConnection *>(aHandle);
+ TInt err = apduConn->UnblockPin(*aJni, aPeer, aHandle, aBlockedPinID, aUnblockingPinID);
+ LOG(ESATSA, EInfo, "-- Returning from unblockPin JNI function");
+ //return error code to caller
+ return err;
+}
+
+/**
+ * JNI function.
+ */
+JNIEXPORT jbyteArray JNICALL Java_com_nokia_mj_impl_satsa_APDUConnectionImpl__1getATR(
+ JNIEnv *aJni, jclass /*aPeer*/, jint aHandle,
+ jintArray aErrArray)
+{
+ LOG(ESATSA, EInfo, "GetATR JNI function");
+
+ JavaApduConnection* apduConn = reinterpret_cast<JavaApduConnection *>(aHandle);
+ TInt err = 0;
+ //err = apduConn->GetATR(*aJni, aPeer, aHandle, aCommandAPDU);
+ std::wstring atrData;
+ TRAP(err,
+ atrData = apduConn->GetATR());
+
+ // return null if resp is empty (card has been removed or the connection
+ // has been closed.)
+
+ jbyteArray responseAPDU = NULL;
+
+ if (atrData.length()> 0)
+ {
+ const char* utf8 = java::util::JavaCommonUtils::wstringToUtf8(atrData);
+ int len = strlen(utf8);
+ responseAPDU = aJni->NewByteArray(len);
+ if (responseAPDU != NULL)
+ {
+ aJni->SetByteArrayRegion(responseAPDU, 0, len,
+ (jbyte *)utf8);
+ }
+ else
+ {
+ ELOG(ESATSA,"__1getATR: responseAPDU is NULL");
+ err = KErrNoMemory;
+ }
+ delete[] utf8;
+ }
+
+ //error array contains only one error value
+ jint javaError[ 1 ] =
+ { err};
+ aJni->SetIntArrayRegion(aErrArray, 0, 1, javaError);
+
+ ILOG1(ESATSA, "APDUConnectionImpl::XXX__1getATR::GetATR returned: %d", err);
+ return responseAPDU;
+
+}
+
+/**
+ * JNI function.
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_satsa_APDUConnectionImpl__1create
+(JNIEnv* aJni, jobject aPeer,
+ jstring aURI, jstring aName, jstring aVendor,
+ jstring aVersion,jstring aDomain,jstring aRootCertHash,
+ jstring aSigningCertHash,
+ jintArray aTypeArray)
+{
+ LOG(ESATSA, EInfo, "+ Entering create JNI function");
+
+ //creates array for return values, because ExecuteTrap will accept only
+ //nine parameters at maximum. This array will consist of handle and
+ //connectionType
+ TInt returnValueArray[ KReturnValueArrayLength ] =
+ { 0};
+
+ //get handle to java operationComplete java method
+ jmethodID handleEventMethod =
+ aJni->GetMethodID(aJni->GetObjectClass(aPeer),
+ "operationComplete",
+ "(II[B)V");
+
+ jobject connectionObject = aJni->NewWeakGlobalRef(aPeer);
+
+ JavaApduConnection *apduConn = NULL;
+ try
+ {
+ apduConn = JavaApduConnection::getInstance();
+ }
+ catch (int err)
+ {
+ ELOG1(ESATSA,"Caught an Exception --Value is:%d",err);
+ delete apduConn;
+ apduConn=NULL;
+ }
+
+ TInt connectionHandle = reinterpret_cast<TInt>(apduConn);
+ returnValueArray[ KHandleIndex ] = connectionHandle;
+
+ TInt err = apduConn->Create(*aJni, aURI, aName, aVendor,
+ aVersion, aDomain, aRootCertHash,
+ aSigningCertHash, returnValueArray,
+ connectionObject,handleEventMethod);
+ if (err != KErrNone)
+ {
+ // CreateConnectionL leaved.
+ // Set error code to handle which is returned to Java
+ returnValueArray[ KHandleIndex ] = err;
+ }
+
+ //set type of connection to the "returned" type array
+ jint javaConnType[ 1 ] =
+ { returnValueArray[ KConnTypeIndex ]};
+ aJni->SetIntArrayRegion(aTypeArray, 0, 1, javaConnType);
+
+ ILOG1(ESATSA, "STS::APDUConnectionImpl.cpp::create return value %d", err);
+ // return handle to new connection object or error code
+ return returnValueArray[ KHandleIndex ];
+
+}
+
+/**
+ * JNI function.
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_satsa_APDUConnectionImpl__1open(
+ JNIEnv* aJni, jclass aPeer, jint aHandle)
+{
+ LOG(ESATSA, EInfo, "+ Entering Open JNI function");
+ JavaApduConnection* apduConn = reinterpret_cast<JavaApduConnection *>(aHandle);
+ TInt err = apduConn->Open(*aJni, aPeer, aHandle);
+ LOG(ESATSA, EInfo, "-- Returning from Open JNI function");
+ return err;
+
+}
+
+/**
+ * JNI function.
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_satsa_APDUConnectionImpl__1close(
+ JNIEnv* aJni, jclass aPeer, jint aHandle)
+{
+ LOG(ESATSA, EInfo, "+ Entering close JNI function");
+ JavaApduConnection* apduConn = reinterpret_cast<JavaApduConnection *>(aHandle);
+ TInt err = apduConn->Close(*aJni, aPeer, aHandle);
+ LOG(ESATSA, EInfo, "-- Returning from close JNI function");
+ return err;
+
+}