diff -r 000000000000 -r 164170e6151a wim/Scard/inc/ScardConnector.h --- /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* 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