javaextensions/satsa/apdu/src.s60/javaapduconnectionimpl.cpp
branchRCL_3
changeset 19 04becd199f91
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/satsa/apdu/src.s60/javaapduconnectionimpl.cpp	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,316 @@
+/*
+* 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 <memory>
+#include <errno.h>
+#include <f32file.h>
+#include <gsmuset.h>
+#include <charconv.h>
+
+#include "logger.h"
+#include "s60commonutils.h"
+#include "jstringutils.h"
+
+#include "javacommonutils.h"
+#include "javaapduconnectionimpl.h"
+#include "com_nokia_mj_impl_satsa_APDUConnectionImpl.h"
+#include "cstsconnection.h"
+#include "cstsresphandler.h"
+#include "cstsmidletinfo.h"
+
+#include "javajniutils.h"
+#include "com_nokia_mj_impl_satsa_APDUConnectionImpl.h"
+#include "fs_methodcall.h"
+
+namespace java
+{
+namespace satsa
+{
+
+const TInt KConnTypeIndex = 1;
+
+JavaApduConnectionImpl::JavaApduConnectionImpl()
+{
+    //Initialize any member to 0 or Null
+}
+
+JavaApduConnectionImpl::~JavaApduConnectionImpl()
+{
+    LOG(ESATSA, EInfo, "+ JavaApduConnectionImpl::~JavaApduConnectionImpl");
+    //Release resource here (delete pointer)
+    if (iConnection)
+    {
+        delete iConnection;
+        iConnection = NULL;
+    }
+    if (mSlotConn)
+    {
+        delete mSlotConn;
+        mSlotConn = NULL;
+    }
+
+}
+
+JavaApduConnectionBase* JavaApduConnectionBase::getInstance()
+{
+    LOG(ESATSA, EInfo, "+ JavaApduConnectionImpl::getInstance ");
+    JavaApduConnectionImpl* mesgConn = new JavaApduConnectionImpl();
+    if (mesgConn == NULL)
+    {
+        throw ENOMEM;
+    }
+    LOG(ESATSA, EInfo, "-- JavaApduConnectionImpl::getInstance ");
+    return mesgConn;
+}
+
+int JavaApduConnectionImpl::CreateSlot(JNIEnv& aJni, jobject aPeer)
+{
+    LOG(ESATSA, EInfo, "+ Entering JavaApduConnectionImpl::CreateSlot");
+    TInt err = 0;
+    TRAP(err, CreateSlotConn(aJni, aPeer));
+    return err;
+}
+
+void JavaApduConnectionImpl::CreateSlotConn(JNIEnv& aJni, jobject aPeer)
+{
+    LOG(ESATSA, EInfo, "+ JavaApduConnectionImpl::CreateSlotConn");
+    CSTSRespHandler* respHandler = NULL;
+    CSTSMidletInfo* midletInfo = NULL;
+    // Create connection object
+    mSlotConn = CSTSConnection::NewL(aJni, aPeer, respHandler, midletInfo);
+    LOG(ESATSA, EInfo, "-- JavaApduConnectionImpl::CreateSlotConn");
+}
+
+int JavaApduConnectionImpl::CreateConn(JNIEnv& aJni, jobject aPeer,
+                                       jmethodID aHandleEventMethod, jstring aUri, jstring aName,
+                                       jstring aVendor, jstring aVersion, jstring aDomain,
+                                       jstring aRootCertHash, jstring aSigningCertHash,
+                                       TInt* aReturnValueArray)
+{
+    LOG(ESATSA, EInfo, "+ Entering JavaApduConnectionImpl::CreateConn");
+    TInt err = 0;
+    TRAP(err, Create(aJni, aPeer, aHandleEventMethod, aUri, aName, aVendor,
+                     aVersion, aDomain, aRootCertHash, aSigningCertHash,
+                     aReturnValueArray));
+    LOG(ESATSA, EInfo, "-- leaving JavaApduConnectionImpl::CreateConn");
+    return err;
+
+}
+
+void JavaApduConnectionImpl::Create(JNIEnv& aJni, jobject aNotifyObject,
+                                    jmethodID aHandleEventMethod, jstring aUri, jstring aName,
+                                    jstring aVendor, jstring aVersion, jstring aDomain,
+                                    jstring aRootCertHash, jstring aSigningCertHash,
+                                    TInt* aReturnValueArray)
+{
+    LOG(ESATSA, EInfo, "+ Entering JavaApduConnectionImpl::Create");
+
+    // Set the URI string contents to Symbian descriptor.
+    JStringUtils aMUri(aJni, aUri);
+    // Set the name string contents to Symbian descriptor.
+    JStringUtils aMName(aJni, aName);
+    // Set the vendor string contents to Symbian descriptor.
+    JStringUtils aMVendor(aJni, aVendor);
+    // Set the version string contents to Symbian descriptor.
+    JStringUtils aMVersion(aJni, aVersion);
+    // Set the version string contents to Symbian descriptor.
+    JStringUtils aMDomain(aJni, aDomain);
+    // Set the version string contents to Symbian descriptor.
+    JStringUtils aMRootCert(aJni, aRootCertHash);
+    // Set the version string contents to Symbian descriptor.
+    JStringUtils aMSignCert(aJni, aSigningCertHash);
+
+    LOG(ESATSA, EInfo, "Initializing the URI");
+    CSTSURI* uri = CSTSURI::NewLC(aMUri);
+
+    LOG(ESATSA, EInfo, "After initializing the URI");
+    //set type of connection for java side
+    if (uri->Type() == CSTSURI::EAID)
+    {
+        LOG(ESATSA, EInfo, "the URI is AID type");
+        aReturnValueArray[KConnTypeIndex]
+        = com_nokia_mj_impl_satsa_APDUConnectionImpl_ENUMERATION_AID;
+    }
+    else
+    {
+        LOG(ESATSA, EInfo, "the URI is SAT type");
+        aReturnValueArray[KConnTypeIndex]
+        = com_nokia_mj_impl_satsa_APDUConnectionImpl_ENUMERATION_SAT;
+    }
+
+    LOG(ESATSA, EInfo, "initialize CSTSMidletInfo");
+    CSTSMidletInfo* midletInfo = CSTSMidletInfo::NewL(aMName, aMVendor,
+                                 aMVersion, aMDomain, aMRootCert, aMSignCert);
+
+    LOG(ESATSA, EInfo, "After initializing CSTSMidletInfo..");
+    CleanupStack::PushL(midletInfo);
+
+    LOG(ESATSA, EInfo, "midletInfo created");
+    CSTSRespHandler* respHandler = CSTSRespHandler::NewL(aJni, aNotifyObject,
+                                   aHandleEventMethod);
+
+    LOG(ESATSA, EInfo, "respHandler created");
+
+    // Connection object will own the midletInfo object
+    CleanupStack::Pop(midletInfo);
+
+    // Create connection object. RespHandler and midletinfo ownership
+    // transferred
+    iConnection = CSTSConnection::NewL(aJni, aNotifyObject, respHandler,
+                                       midletInfo);
+
+    // Connection object will own the uri object
+    CleanupStack::Pop(uri);
+
+    CSTSConnection::WrapSetURI(iConnection, uri);
+
+    LOG(ESATSA, EInfo, "JavaApduConnectionImpl::Create::connection created");
+    LOG(ESATSA, EInfo, "-- leaiving JavaApduConnectionImpl::Create");
+
+}
+
+int JavaApduConnectionImpl::DoPinMethod(JNIEnv& /*aJni*/, jclass /*aPeer*/,
+                                        int /*aHandle*/, int aPinMethodType, int aPinID)
+{
+    LOG(ESATSA, EInfo, "+ JavaApduConnectionImpl::DoPinMethod ");
+    //CSTSConnection* connection = reinterpret_cast< CSTSConnection* >( aHandle );
+    int error = 0;
+    TRAP(error, DoPinMethodL(iConnection, aPinMethodType, aPinID));
+
+    LOG(ESATSA, EInfo, "-- JavaApduConnectionImpl::DoPinMethod ");
+    return error;
+
+}
+
+void JavaApduConnectionImpl::DoPinMethodL(CSTSConnection* aConnection,
+        TInt aPinMethodType, TInt aPinID)
+{
+    LOG(ESATSA, EInfo, "+ JavaApduConnectionImpl::DoPinMethodL ");
+    switch (aPinMethodType)
+    {
+    case com_nokia_mj_impl_satsa_APDUConnectionImpl_ENUMERATION_CHANGE_PIN:
+    {
+        CSTSConnection::WrapChangePinL(aConnection, aPinID);
+        break;
+    }
+    case com_nokia_mj_impl_satsa_APDUConnectionImpl_ENUMERATION_DISABLE_PIN:
+    {
+        CSTSConnection::WrapDisablePinL(aConnection, aPinID);
+        break;
+    }
+    case com_nokia_mj_impl_satsa_APDUConnectionImpl_ENUMERATION_ENABLE_PIN:
+    {
+        CSTSConnection::WrapEnablePinL(aConnection, aPinID);
+        break;
+    }
+    case com_nokia_mj_impl_satsa_APDUConnectionImpl_ENUMERATION_ENTER_PIN:
+    {
+        CSTSConnection::WrapEnterPinL(aConnection, aPinID);
+        break;
+    }
+    default:
+    {
+        ELOG(EWMA, "JavaApduConnectionImpl::DoPinMethodL: parameter error");
+
+        break;
+    }
+    }
+    LOG(ESATSA, EInfo, "-- JavaApduConnectionImpl::DoPinMethodL ");
+}
+
+int JavaApduConnectionImpl::ExchangeAPDU(JNIEnv& aJni, jclass /*aPeer*/,
+        int /*aHandle*/, jbyteArray aCommandAPDU)
+{
+    LOG(ESATSA, EInfo, "+ JavaApduConnectionImpl::ExchangeAPDU ");
+    TInt err = KErrNone;
+    // Convert the command bytes into an 8-bit descriptor...
+    jbyte* byteArray = (aJni).GetByteArrayElements(aCommandAPDU, NULL);
+    TInt numComBytes = (aJni).GetArrayLength(aCommandAPDU);
+    TPtrC8 commandDes(reinterpret_cast<TUint8*>(byteArray), numComBytes);
+
+    TRAP(err, CSTSConnection::WrapExchangeAPDUL(iConnection, commandDes));
+    LOG(ESATSA, EInfo, "-- JavaApduConnectionImpl::ExchangeAPDU ");
+    return err;
+
+}
+
+int JavaApduConnectionImpl::UnblockPin(JNIEnv& /*aJni*/, jclass /*aPeer*/,
+                                       int /*aHandle*/, int aBlockedPinID, int aUnblockingPinID)
+{
+    LOG(ESATSA, EInfo, "+ JavaApduConnectionImpl::UnblockPin ");
+    TInt err = KErrNone;
+    TRAP(err, CSTSConnection::WrapUnblockPinL(iConnection, aBlockedPinID,
+            aUnblockingPinID));
+    LOG(ESATSA, EInfo, "-- JavaApduConnectionImpl::UnblockPin ");
+    //return error code to caller
+    return err;
+}
+
+std::wstring JavaApduConnectionImpl::GetATR()
+{
+    LOG(ESATSA, EInfo, "+ JavaApduConnectionImpl::GetATR ");
+    std::wstring aATR;
+    TRAPD(err, aATR = CSTSConnection::WrapGetATRL(iConnection));
+    if (err != KErrNone)
+    {
+        return std::wstring(L"");
+    }
+    LOG(ESATSA, EInfo, "-- JavaApduConnectionImpl::GetATR ");
+    return aATR;
+}
+
+int JavaApduConnectionImpl::Open(JNIEnv& /*aJni*/, jclass /*aPeer*/, int /*aHandle*/)
+{
+    LOG(ESATSA, EInfo, "+ JavaApduConnectionImpl::Open ");
+    TInt err = KErrNone;
+    TRAP(err,CSTSConnection::WrapOpenL(iConnection));
+    LOG(ESATSA, EInfo, "-- JavaApduConnectionImpl::Open ");
+    //return error code to caller
+    return err;
+}
+
+std::wstring JavaApduConnectionImpl::GetSlot()
+{
+    LOG(ESATSA, EInfo, "+ JavaApduConnectionImpl::GetSLot ");
+    std::wstring slotInfo(L"");
+    TInt err = KErrNone;
+    TRAP(err, slotInfo = CSTSConnection::WrapGetSlotsL(mSlotConn));
+    LOG(ESATSA, EInfo, "-- JavaApduConnectionImpl::GetSlot");
+    if (KErrNone != err)
+    {
+        slotInfo = L"";
+    }
+    //return error code to caller
+    return slotInfo;
+}
+
+int JavaApduConnectionImpl::Close(JNIEnv& /*aJni*/, jclass /*aPeer*/, int /*aHandle*/)
+{
+    LOG(ESATSA, EInfo, "+ JavaApduConnectionImpl::Close ");
+    TInt err = KErrNone;
+    TRAP(err,CSTSConnection::WrapCloseL(iConnection));
+
+    LOG(ESATSA, EInfo, "-- JavaApduConnectionImpl::Close ");
+    //return error code to caller
+    return err;
+}
+
+} // namespace satsa
+} // namespace java
+
+