javaextensions/satsa/apdu/src.s60/cstsconnection.h
branchRCL_3
changeset 19 04becd199f91
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/satsa/apdu/src.s60/cstsconnection.h	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,321 @@
+/*
+* 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:
+ *
+*/
+
+
+#ifndef CSTSCONNECTION_H
+#define CSTSCONNECTION_H
+
+//  INCLUDES
+#include "functionserver.h"
+#include <e32base.h>
+#include "stsapduconstants.h"   // for TSTSNetworkType
+#include "cstsuri.h"            // for turitype
+#include "mstscloseobserver.h"
+
+using namespace java::util;
+
+namespace java
+{
+namespace satsa
+{
+
+// FORWARD DECLARATIONS
+class CSTSChannelManager;
+class CSTSSlotManager;
+class CSTSPinManager;
+class CSTSApduExchanger;
+class CSTSAccessControl;
+class CSTSCardOperationsFacade;
+class CSTSCardAppManager;
+class MSTSRespHandler;
+class CSTSCmdApdu;
+class CSTSMidletInfo;
+class CSTSBTSapListener;
+class CSTSCardStateListener;
+
+// CLASS DECLARATION
+/**
+ *  SATSA-APDUs native side implementation's interface to JNI side.
+ *  Handels communication with smart card.
+ *
+ *  @since 3.0
+ */
+NONSHARABLE_CLASS(CSTSConnection) : public CBase, public MSTSCloseObserver, public FunctionServer
+{
+
+private: // Type definition
+    enum TAidParserState
+    {
+        EFirstDigit,
+        ESecondDigit,
+        EDot,
+        EERROR
+    };
+
+public:
+    enum TConnectionState
+    {
+        EOpened,
+        EClosed,
+        ECardRemoved,
+        EBTSapInUse
+    };
+
+public: // Constructors and destructor
+
+    /**
+     * Two-phased constructor.
+     * @param aRespHandler When asynchronous exchange is ready, response will
+     * be delivered to response handler. Ownership transferred.
+     * @param aMidletInfo Information about midlet
+     */
+    static CSTSConnection* NewL(JNIEnv& aJni,
+                                jobject aPeer,MSTSRespHandler* aRespHandler,
+                                CSTSMidletInfo* aMidletInfo);
+
+    /**
+     * Destructor.
+     */
+    virtual ~CSTSConnection();
+
+public: // New functions
+
+    /**
+     * Opens a connection to smart card application. URI must be set before
+     * this method is called.
+     * @since 3.0
+     */
+    void OpenL();
+
+    /**
+     * To wrap the CallMethodL()
+     */
+    static void WrapOpenL(CSTSConnection* connection);
+
+    /**
+     * Closes a connection to smart card. Cancels all pending apdu sending.
+     * @since 3.0
+     */
+    void CloseL();
+
+    /**
+     * To wrap the CallMethodL()
+     */
+    static void WrapCloseL(CSTSConnection* connection);
+
+    /**
+     * Pops up a UI that requests the user for an old or existing PIN value
+     * and the new PIN value to change the value of the PIN.
+     * @since 3.0
+     * @param aPinID The type of PIN which is supposed to prompt the user
+     * to change.
+     * @param aResponseAPDU On return contains status word received from
+     * the smart card in byte array. Null if the user cancels the request.
+     */
+    void ChangePinL(TInt aPinID);
+
+    /**
+     * To wrap the CallMethodL()
+     */
+    static void WrapChangePinL(CSTSConnection* connection, TInt aPinID);
+
+    /**
+     * Pops up a UI that requests the user to enter the value for the PIN
+     * that is to be disabled.
+     * @since 3.0
+     * @param aPinID The type of PIN which is required to prompt the user
+     * to enter.
+     */
+    void DisablePinL(TInt aPinID);
+    /**
+     * To wrap the CallMethodL()
+     */
+    static void WrapDisablePinL(CSTSConnection* connection, TInt aPinID);
+
+    /**
+     * Pops up a UI that requests the user to enter the value for the PIN
+     * that is to be enabled.
+     * @since 3.0
+     * @param aPinID The type of PIN which is required to prompt the user
+     * to enter.
+     */
+    void EnablePinL(TInt aPinID);
+    /**
+     * To wrap the CallMethodL()
+     */
+    static void WrapEnablePinL(CSTSConnection* connection, TInt aPinID);
+
+    /**
+     * Asks from the user PIN value for PIN verification purposes and sends
+     * it to the card.
+     * @since 3.0
+     * @param aPinID The type of PIN which is supposed to prompt the user
+     * to enter.
+     */
+    void EnterPinL(TInt aPinID);
+    /**
+     * To wrap the CallMethodL()
+     */
+    static void WrapEnterPinL(CSTSConnection* connection, TInt aPinID);
+
+    /**
+     * Pops up a UI that requests the user to enter the value for the
+     * unblocking PIN and the new value for the blocked PIN.
+     * @since 3.0
+     * @param aBlockedPinID The ID of PIN that is to be unblocked.
+     * @param aUnblockingPinID The ID of unblocking PIN.
+     */
+    void UnblockPinL(TInt aBlockedPinID, TInt aUnblockingPinID);
+    /**
+     * To wrap the CallMethodL()
+     */
+    static void WrapUnblockPinL(CSTSConnection* connection, TInt aBlockedPinID, TInt aUnblockingPinID);
+    /**
+     * Exchanges an APDU command with a smart card application.
+     * @since 3.0
+     * @param aCommandAPDU A byte encoded command for the smart card
+     * application
+     */
+    void ExchangeAPDUL(TPtrC8 aCommandAPDU);
+    /**
+     * To wrap the CallMethodL()
+     */
+    static void WrapExchangeAPDUL(CSTSConnection* connection, TPtrC8 aCommandDes);
+
+    /**
+     * Returns the Answer To Reset (ATR) message sent by the smart card
+     * in response to the reset operation.
+     * @since 3.0
+     * @param aATR On return contains the ATR message if the card
+     * is inserted, or null if the card has been removed or the connection
+     * has been closed.
+     */
+    std::wstring GetATRL();
+    /**
+     * To wrap the CallMethodL()
+     */
+    static std::wstring WrapGetATRL(CSTSConnection* connection);
+
+    /**
+     * Gets information of smart card slots.
+     * @since 3.0
+     * @param aResponseAPDU Return a information of smart cards slots in
+     * string format.
+     */
+
+    std::wstring GetSlotsL();
+    /**
+     * To wrap the CallMethodL()
+     */
+    static std::wstring WrapGetSlotsL(CSTSConnection* connection);
+
+    /**
+     * Sets URI. Ownership transferred.
+     * @since 3.0
+     * @param aURI URI object.
+     */
+    void SetURI(TInt /*CSTSURI& */aURI);
+    /**
+     * To wrap the CallMethodL()
+     */
+    static void WrapSetURI(CSTSConnection* connection, CSTSURI* aURI);
+
+public: // Functions from base classes
+
+    void NotifyClose(TInt aReason);
+
+private:
+
+    // From FunctionServer
+    virtual void vmAttached();
+    virtual void doServerSideInit();
+    void AddToScheduler();
+
+    /**
+     * C++ default constructor.
+     */
+    CSTSConnection(MSTSRespHandler* aRespHandler,
+                   CSTSMidletInfo* aMidletInfo);
+
+    /**
+     * By default Symbian 2nd phase constructor is private.
+     */
+    void ConstructL();
+
+    /**
+     * Closes a connection to smart card. Cancels all pending apdu sending.
+     * For destructor use.
+     * @since 3.0
+     */
+    void Close();
+
+    /**
+     * Checks iState member variable and leaves if connetion is
+     * closed or card is removed. Checks also iTarget member variable
+     * and leaves if SAT connection is used and it is not allowed.
+     */
+    void CheckStateL(TBool aSATNotAllowed = EFalse);
+
+    /**
+     * Opens channel and selects card application. If selection fails
+     * closes the channel and leaves with proper leave code.
+     */
+    void DoSelectApplicationL();
+
+private: // Data
+
+    CSTSChannelManager* iChannelManager;//owned
+    CSTSSlotManager* iSlotManager;//owned
+    CSTSPinManager* iPinManager; //owned
+    CSTSApduExchanger* iApduExchanger; //owned
+    CSTSAccessControl* iAccessControl; //owned
+    CSTSCardOperationsFacade* iCOFacade; //owned
+    CSTSCardAppManager* iCardAppManager; //owned
+
+    TInt iChannel;
+    //Uri, owned
+    CSTSURI* iURI;
+
+    //SAT or AID connection
+    CSTSURI::TURIType iURITarget;
+    //is connection opened succesfully or not
+    TConnectionState iState;
+    //whether the phone is running in GSM or UMTS
+    TSTSNetworkType iNetwork;
+
+    //command apdu, owned
+    CSTSCmdApdu* iCmdApdu;
+    MSTSRespHandler* iRespHandler; //owned
+
+    CSTSMidletInfo* iMidletInfo; //owned
+
+    HBufC8* iATR; //owned
+
+    //Bluetooth remote Sim Access Profile Listener
+    CSTSBTSapListener* iBTSapListener; //owned
+
+    //For listening is card available or not
+    CSTSCardStateListener* iCardStateListener; //owned
+    //JNIEnv* mJni;
+    //jobject mPeer;
+
+};
+
+} // namespace satsa
+} // namespace java
+#endif // CSTSCONNECTION_H
+// End of File