javaextensions/satsa/apdu/src.s60/apduconnectionimpl.cpp
branchRCL_3
changeset 14 04becd199f91
--- /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;
+
+}