wim/Scard/inc/ScardConnector.h
changeset 0 164170e6151a
child 20 63339781d179
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wim/Scard/inc/ScardConnector.h	Tue Jan 26 15:20:08 2010 +0200
@@ -0,0 +1,233 @@
+/*
+* Copyright (c) 2003 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:  A connection to a smart card.
+*
+*/
+
+
+
+#ifndef CSCARDCONNECTOR_H
+#define CSCARDCONNECTOR_H
+
+// INCLUDE FILES
+#include "ScardSession.h"
+#include "ScardEventStack.h"
+
+// CONSTANTS
+const TUint8 KOpenReader = 0x40;
+
+//FORWARD DECLARATIONS
+class CScardAccessControlRegistry;
+class CScardAccessControl;
+class CScardConnectionRegistry;
+class CScardConnectionTimer;
+//class TScardATR;
+
+// STRUCTURES
+struct TConnectionParameter
+    {
+    TPtr*             iReaderName;
+    TScardReaderName* iExcluded;
+    
+    TScardATR*        iATRBytes;
+    TPtr8*            iAIDBytes;
+    
+    TBool             iNewCardOnly;
+    TBool             iNewReaderOnly;
+
+    TConnectionParameter();
+    };
+
+//  Handle to a complete connection attempt
+struct TConnection
+    {
+    //  Access controller for that reader
+    CScardAccessControl* iCtrl;
+    //  The reader object this connection is attached and it's ID
+    MScardReader*        iReader;
+    TReaderID            iReaderID;
+    //  This connection's session id
+    TInt                 iSessionID;
+    //  Constructor added for convenience    
+    TConnection();
+    };
+
+//  Little shortcut to use when comparing two connections
+TBool operator==( const TConnection&, const TConnection& );
+
+//  The states the connection process can be in
+enum TScardConnectionState
+    {
+    EActive = 1,    //  actively pursuing new connections
+    //  all clear, a clean connection was established (or an error occurred)
+    EConnectionComplete,
+    //  one stage completed, waiting for the client to confirm
+    EWaitingForConfirm,
+    EReconnecting,  // Rrunning the while loop inside ReconnectToReaderL()
+    EInitialising,  // Initialising the reader(s)
+    //  connection was established inside the while loop, 
+    //  imminent suicide as soon as possible
+    EDying,
+    ETimedOut       // Hit a timeout. Die ASAP.
+    };
+
+// CLASS DECLARATION
+
+/**
+*  Actual connector class. 
+*
+*  @lib Scard.lib
+*  @since Series60 2.1
+*/
+class CScardConnector : public CScardSession
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        * @param aConnRegistry Pointer to connection registry
+        * @param aClient Client thread
+        * @param aMessage Client message
+        */ 
+        static CScardConnector* NewL( CScardConnectionRegistry* aConnRegistry,
+                                      RThread& aClient, 
+                                      const RMessage2& aMessage );
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CScardConnector();
+
+    public: // New functions
+
+        /**
+        * The timer has sent a signal indicating that this connection 
+        * attempt has timed out
+        * @return void
+        */
+        void ConnectionTimedOut();
+
+        /**
+        * Cancel connection. It appears this connection is not wanted after all.
+        * @return void
+        */
+        void Cancel();
+
+    public: // Functions from base classes
+    
+        /**
+        * From CScardSession Override ConnectToReader.
+        * @return void
+        */
+        void ConnectToReaderL(); 
+
+        /**
+        * From CScardSession Override CardEvent
+        * Handles card events. Panics if there is no connection to reader.
+        * @param aEvent Scard event
+        * @param aATR ATR bytes
+        * @param aReaderID Reader ID
+        * @return void
+        */
+        virtual void CardEvent( const TScardServiceStatus aEvent,
+                                const TScardATR& aATR, 
+                                const TReaderID& aReaderID );
+    
+        /**
+        * From CScardSession All clear, a connection has been established.
+        * @param aReaderID ReaderID
+        * @param aErrorCode Error code
+        * @return void
+        */
+        void ConnectionDone( const TReaderID aReaderID, 
+                             const TInt& aErrorCode );
+        
+
+        /**
+        * From CSharableSession. Return client message.
+        * @return RMessage
+        */
+        RMessage2& Message();
+
+    private:
+
+        /**
+        * C++ default constructor.
+        * @param aConnRegistry Pointer to connection registry
+        * @param aClient Client thread
+        */
+        CScardConnector( CScardConnectionRegistry* aConnRegistry, 
+                         RThread& aClient );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        * @param aMessage Client message
+        */
+        void ConstructL( const RMessage2& aMessage );
+
+        /**
+        * Parse the message to get limiting factors
+        * @return void
+        */
+        void ReadLimitsL();
+
+        /**
+        * Check all conditions set for the new card. This method checks if
+        * ATR bytes and AID bytes match with given values in connection 
+        * requirements. Currently AID and ATR bytes are not supported.
+        * @param aConnection Connection 
+        * @param aATR ATR bytes
+        * @return ETrue if connection conditions are met, else EFalse
+        */
+        TBool CheckConditions( TConnection& aConnection, 
+                               const TScardATR* aATR );
+
+        /**
+        * Make and add to list a new connection.
+        * @param aMessage Client message
+        * @param aReaderID Reader ID
+        * @return ETrue if connectin succesfully created, otherwise EFalse.
+        */
+        TBool NewConnectionL( const RMessage2 aMessage,
+                              const TReaderID aReaderID );
+
+        /**
+        * Find connection for giben reader
+        * @param aReaderID Reader ID
+        * @return Reference to TConnection object
+        */
+        TConnection& FindReaderConnectionL( const TReaderID& aReaderID );
+
+    private:    // Data
+        // Container for all connection attempt handles. Owned.
+        CArrayFixFlat<TConnection>* iConnections;
+        // Pointer to connection registry. Not owned.
+        CScardConnectionRegistry*   iConnectionRegistry;
+        // The message from the client
+        RMessage2*                   iClientMessage;
+        // Storage for card events to be handled later. Owned.
+        CScardEventStack*           iStack;
+        //  Life status indicator
+        TInt                        iState;
+        // Contacting a single reader or many?
+        TBool                       iOneReaderMode;
+        // Timer for this connector. Owned.
+        CScardConnectionTimer*      iTimer;
+        // The parameter block for this connection attempt
+        TConnectionParameter        iParameters;
+    };
+
+#endif      // CSCARDCONNECTOR_H
+
+// End of File