--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wim/Scard/inc/ScardChannelManager.h Tue Jan 26 15:20:08 2010 +0200
@@ -0,0 +1,225 @@
+/*
+* 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: Handles individual channels on a singular SC
+* (which equals one SC reader handler) Can be queried
+* for information about channels, controls traffic etc.
+*
+*/
+
+
+
+#ifndef CSCARDCHANNELMANAGER_H
+#define CSCARDCHANNELMANAGER_H
+
+// INCLUDES
+#include "ScardServerBase.h"
+#include "ScardDefs.h"
+
+// FORWARD DECLARATIONS
+class CScardAccessControl;
+class CScardMessageStack;
+class CScardCommandTimer;
+
+// CLASS DECLARATION
+
+/**
+* Scard channel manager.
+* Handles individual channels on a singular Smart card
+* @lib Scard.lib
+* @since Series60 2.1
+*/
+class CScardChannelManager : public CBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CScardChannelManager* NewL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CScardChannelManager();
+
+ public: // New functions
+
+ /**
+ * Give the session the right to use the channel
+ * @param aChannel Channel to be added
+ * @param aSessionID Session ID
+ * @return Always returns ETrue
+ */
+ TBool AddSessionToChannelL( const TInt8 aChannel,
+ const TInt aSessionID );
+
+ /**
+ * Remove session from the given channel
+ * @param aChannel Channel
+ * @param aSessionID Session ID to be removed
+ * @return Always returns EFalse
+ */
+ TBool RemoveSessionL( const TInt8 aChannel,
+ const TInt aSessionID );
+
+ /**
+ * Does the session have permission to the channel
+ * @param aChannel Channel
+ * @param aSessionID SessionID
+ * @return ETrue if session is on channel, otherwise EFalse
+ */
+ TBool SessionIsOnChannel( const TInt8 aChannel,
+ const TInt aSessionID ) const;
+
+ /**
+ * This function returns an int16 that spesifies which channels have
+ * been opened and which of them are reserved
+ * @return Two-byte parameter telling:
+ * b0 - Channel 0 open (should always be set)
+ * b1 - Channel 0 reserved
+ * b2 - Channel 1 open
+ * b3 - Channel 1 reserved
+ * ...
+ * b7 - Channel 3 open
+ * b8 - Channel 3 reserved
+ *
+ * b9-b15 Maximum number of channels available (at the moment always 4)
+ */
+ TUint16 ChannelStatus();
+
+ /**
+ * Is the channel reserved? Return ID of session reserving the channel
+ * @param aChannel Channel
+ * @return Reserver session ID of the channel
+ */
+ TInt ChannelReservedL( const TInt8 aChannel ) const;
+
+ /**
+ * Remove the exclusive access from one channel.
+ * @param aChannel Channel
+ * @param aSessionID Session ID
+ * @return void
+ */
+ void FreeChannelL( const TInt8 aChannel,
+ const TInt aSessionID );
+
+ /**
+ * Remove any exclusive accesses.
+ * @param aChannel Channel
+ * @return void
+ */
+ void FreeChannels( const TInt aSessionID );
+
+ /**
+ * Is the session on the channel, and is the channel number legal.
+ * @param aChannel Channel
+ * @param aSessionID SessionID
+ * @return void
+ */
+ void ValidateChannelL( const TInt8 aChannel,
+ const TInt aSessionID );
+
+ /**
+ * Get the number of the next unreserved logical channel.
+ * @param aChannel Channel
+ * @return Number of next unreserved channel
+ */
+ TInt8 UnreservedLogicalChannel() const;
+
+ /**
+ * Has the channel been opened yet.
+ * @param aChannel Channel
+ * @return ETrue if channel already reserved, otherwise EFalse
+ */
+ TBool ChannelOpenedYet( const TInt8 aChannel );
+
+ /**
+ * Cancels the message.
+ * @param aTimer Pointer to command timer
+ * @return void
+ */
+ void CancelByTimeOut( CScardCommandTimer* aTimer );
+
+ /**
+ * Cancels all the messages for given session.
+ * @param aSessionID SessionID
+ * @return void
+ */
+ void CancelAll( const TInt aSessionID );
+
+ /**
+ * Puts message on bottom of message stack.
+ * @param aMessage Message to be pushed to bottow of stack
+ * @return void
+ */
+ void PushMessageToBottomL( const TMessageHandle& aMessage );
+
+ /**
+ * Puts message on top of message stack.
+ * @param aMessage Message to be pushed
+ * @return void
+ */
+ void PushMessageToTopL( const TMessageHandle& aMessage );
+
+ /**
+ * Get message from top of the message stack.
+ * @return TMessageHandle
+ */
+ const TMessageHandle MessageFromTop();
+
+ /**
+ * Get next message
+ * @return TMessageHandle
+ */
+ const TMessageHandle NextMessageL();
+
+ /**
+ * NextMessageFromFree
+ * @param aChannel Channel
+ * @return TMessageHandle
+ */
+ const TMessageHandle NextMessageFromFree( const TInt8 aChannel );
+
+ /**
+ * Handle channels when card is removed.
+ * @return void
+ */
+ void CardRemoved();
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CScardChannelManager();
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ private:
+ // The messages
+ CScardMessageStack* iMessageStack;
+
+ // The sessions that are joined/channel
+ CArrayPtrFlat< CArrayFixFlat<TInt> >* iChannels;
+
+ // IDs of sessions that are currently reserving the channels
+ TInt iReserverID[KMaxChannels];
+ };
+
+#endif // CSCARDCHANNELMANAGER_H
+
+// End of File