diff -r f5050f1da672 -r 04becd199f91 javaextensions/satsa/apdu/src.s60/apduconnectionimpl.cpp --- /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(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(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(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(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(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(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(aHandle); + TInt err = apduConn->Close(*aJni, aPeer, aHandle); + LOG(ESATSA, EInfo, "-- Returning from close JNI function"); + return err; + +}