wim/Scard/inc/ScardServer.h
changeset 0 164170e6151a
child 11 510c10de8083
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wim/Scard/inc/ScardServer.h	Tue Jan 26 15:20:08 2010 +0200
@@ -0,0 +1,227 @@
+/*
+* 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:  SmartCard server.
+*
+*/
+
+
+
+#ifndef CSCARDSERVER_H
+#define CSCARDSERVER_H
+
+//  INCLUDES
+#include "ScardReaderLauncher.h"
+
+
+//  FORWARD DECLARATIONS
+class CScardAccessControl;
+class CScardAccessControlRegistry;
+class CScardSession;
+class CScardNotifyRegistry;
+class CScardReaderRegistry;
+class CScardResourceRegistry;
+class CScardConnectionRegistry;
+
+
+// CLASS DECLARATION
+
+/**
+*  Server class.
+*  Contains an object container index which provides subsessions with 
+*  object containers.
+*
+*  @lib Scard.lib
+*  @since Series60 2.1
+*/
+class CScardServer : public CServer2, public MScardReaderService
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CScardServer* NewL();
+
+        /**
+        * Destructor.
+        */
+        virtual ~CScardServer();
+
+    public: // New functions
+
+        /**
+        * Panic server
+        * @param aPanic Panic code 
+        * @return void
+        */
+        static void PanicServer( const TInt aPanic );
+        
+        /**
+        * List the readers, which have not opened yet.
+        * @param aStarted Thread parameter
+        * @return TInt
+        */
+        static TInt ThreadFunction( TAny* aStarted );
+    
+        /**
+        * Opens session.
+        * @param aVersion Version of the server
+        * @return Pointer to created session
+        */
+        virtual CSession2* CScardServer::NewSessionL( 
+            const TVersion& aVersion,
+            const RMessage2& aMessage ) const;
+    
+        /**
+        * Return pointers to registries.
+        * @return Pointer to CScardNotifyRegistry object
+        */
+        inline CScardNotifyRegistry* NotifyRegistry() const;
+
+        /**
+        * Return pointer to reader registry.
+        * @return Pointer to CScardReaderRegistry object
+        */
+        inline CScardReaderRegistry* FactoryRegistry() const;
+
+        /**
+        * Return pointer to an access controller.
+        * @param aReaderID Reader ID
+        * @return Pointer to CScardAccessControl object
+        */
+        inline CScardAccessControl* FindAccessControl(
+            const TReaderID aReaderID ) const;
+
+        /**
+        * Scan through the readers to see if this reader is supported 
+        * (so it is usable).
+        * @param aReaderName Name of the reader
+        * @return ETrue if reader is supported else EFalse
+        */
+        inline const TBool ReaderSupported(
+            const TScardReaderName& aReaderName ) const;
+    
+        /**
+        * Scan the access controllers to see if reader is loaded at the moment.
+        * @param aReaderName Name of the reader
+        * @return ETrue if reader is in use, otherwise EFalse
+        */
+        inline const TBool ReaderInUse( 
+            const TScardReaderName& aReaderName ) const;
+        
+        /**
+        * Scan the database to see if group is loaded at the moment.
+        * @param aGroupName Name of the group
+        * @return ETrue if group is in use, otherwise EFalse
+        */
+        inline const TBool GroupInUse(
+            const TScardReaderName& aGroupName ) const;
+
+        /**
+        * Return pointer to notify observer.
+        * @return Pointer to MScardNotifyObserver object
+        */
+        inline MScardNotifyObserver* NotifyObserver();
+
+        /**
+        * Return pointer to access control registry object.
+        * @return Pointer to CScardAccessControlRegistry object
+        */
+        inline CScardAccessControlRegistry* AccessRegistry() const;
+
+        /**
+        * Return pointer to reader registry object.
+        * @return Pointer to CScardReaderRegistry object
+        */
+        inline CScardReaderRegistry* ReaderRegistry() const;
+
+        /**
+        * Return pointer to connection registry object.
+        * @return Pointer to CScardConnectionRegistry object
+        */
+        inline CScardConnectionRegistry* ConnectionRegistry() const;
+
+        /**
+        * Return pointer to Reader service object
+        * @return Pointer to MScardReaderService object
+        */
+        inline MScardReaderService* ReaderService();
+
+        /**
+        * Scan database to see ID belonging to this name.
+        * @param aFriendlyName DB Name
+        * @return Reader ID for given reader name
+        */
+        inline const TReaderID ReaderID(
+            const TScardReaderName& aFriendlyName ) const;
+
+        /**
+        * Scan the database for the name belonging to this ID.
+        * @param aReaderID Reader ID
+        * @return Name of the given reader ID
+        */
+        inline const TScardReaderName FriendlyName(
+            const TReaderID aReaderID ) const;
+
+        /**
+        * Connect to reader.
+        * @param aSession Pointer to session
+        * @param aMessage Message
+        * @return void
+        */
+        inline void ConnectToReaderL( CScardSession* aSession, 
+                                      const RMessage2& aMessage );
+    
+        /**
+        * If a card is inserted / removed, we need to update the list 
+        * of cards in use.
+        * @param aEvent Card event
+        * @param aReaderID Reader ID
+        * @return void
+        */
+        inline void CardEvent( const TScardServiceStatus aEvent,
+                               const TReaderID aReaderID ); 
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CScardServer();
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+    private:    // Data
+        // Pointer to connection registry. Owned.
+        CScardConnectionRegistry*    iConnectionRegistry;
+        // Pointer to access control registry. Owned.
+        CScardAccessControlRegistry* iControlRegistry;
+        // Pointer to notify registry. Owned.
+        CScardNotifyRegistry*        iNotifyRegistry;
+        // Pointer to reader registry. Owned.
+        CScardReaderRegistry*        iReaderFactoryRegistry;
+        // Pointer to resource registry. Owned.
+        CScardResourceRegistry*      iResourceRegistry;
+        // Name of the server. Owned.
+        HBufC*                       iName;
+    };
+
+#include "ScardServer.inl"
+
+#endif      // CSCARDSERVER_H
+
+// End of File