diff -r 000000000000 -r 094583676ce7 PECengine/PresenceServer2/ServerSrc/CPEngCSPSessManager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PECengine/PresenceServer2/ServerSrc/CPEngCSPSessManager.h Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,507 @@ +/* +* Copyright (c) 2002 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: One Session manager of the presence server +* Handles all management concerning one network session +* Opening, closing, ownership handling, updating +* of Session related data to network +* +*/ + + + +#ifndef __CPENGCSPSESSMANAGER_H__ +#define __CPENGCSPSESSMANAGER_H__ + +// INCLUDES +#include + +#include "MPEngRequestHandlerObserver.h" +#include "MPEngSessionStatusObserver.h" + +#include "PEngPresenceEngineConsts2.h" +#include "RPEngStorageAdminSubClient.h" + + +// FORWARD DECLARATIONS +class MPEngRequestHandler; +class CPEngIncomingDataHandler; +class MPEngServer; +class CPEngSessionSlotId; +class CPEngAppAccessContainer; +class MPEngSubSession; +class MPEngTransactionFactory; +class RPEngStorageAdminClient; +class MPEngAccessHandler; +class MPEngPureDataHandler; +class RPEngMessage; + +// CLASS DECLARATION +/** + * One Session manager of the presence server + * Handles all management concerning one network session + * Opening, closing, ownership handling, updating + * of Session related data to network + * + * @lib PEngServer2 + * @since 3.0 + */ +NONSHARABLE_CLASS( CPEngCSPSessManager ): + public CBase, + public MPEngRequestHandlerObserver, + public MPEngSessionStatusObserver + { +public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CPEngCSPSessManager* NewLC( MPEngServer& aServer, + const CPEngSessionSlotId& aSessId, + RPEngStorageAdminClient& aAdmin ); + + /** + * Destructor. + */ + ~CPEngCSPSessManager(); + +private: // new function of MPEngRequestHandlerObserver + /** + * Remove calling request handler from array of pending requests + * + * @see + * @since 3.0 + */ + void CompleteRequestHandler( + MPEngRequestHandler* aRequestHandler ); + + /** + * Set Session slot state to open + * + * @see + * @since 3.0 + */ + void SetCSPSessionOpenedL(); + +private: // ne functions from MPEngSessionStatusObserver + + /** + * Handle Session status change + * + * @since 3.0 + * + * @param new session slot state + * @param session slot event + */ + void StatusChangedL( TPEngNWSessionSlotState aNewState, + TPEngNWSessionSlotEvent aNewEvent ); + +public: // Slot management support + + /** + * Open method for clean up stack support + * + * @since 3.0 + */ + void Open(); + + /** + * Close method for clean up stack support + * + * @since 3.0 + */ + void Close(); + + /** + * Open method for sub-sessions + * Reference to the Sub-session is stored + * for future notifications + * + * @since 3.0 + * @param aServSubSession server sub-session + */ + void OpenL( MPEngSubSession& aServSubSession ); + + /** + * Close method for the sub-session + * + * @since 3.0 + * @param aServSubSession server sub-session + */ + void Close( MPEngSubSession* aServSubSession ); + + /** + * Open reference to the session manager by the app Id + * + * @since 3.0 + * @param aAppId application Id to open reference + */ + void AttachAppIdL( const TDesC& aAppId ); + + /** + * Close reference to the session manager by the app Id + * + * @since 3.0 + * @param aAppId application Id to open reference + */ + void DetachAppId( const TDesC& aAppId ); + + /** + * Check if application Id is active + * + * @since 3.0 + * @param aAppId application Id + */ + void AppIdActiveL( const TDesC& aAppId ); + + /** + * Reserve Session slot for Process Id + * + * @since 3.0 + * @param aAppId application Id + * @param aProcessId process Id to reserve + */ + void ReserveProcessL( const TDesC& aAppId, + const TDesC& aProcessId ); + + /** + * Activate Process id + * Function leaves if there is not such a combination of + * process Id and application id registered + * + * @since 3.0 + * @param aAppId application Id + * @param aProcessId process Id to activate + */ + void ActivateProcessL( const TDesC& aAppId, + const TDesC& aProcessId ); + + /** + * Session slot Id + * + * @since 3.0 + * @return session slot Id + */ + const CPEngSessionSlotId& SessionId() const; + +public: // Request handling + + /** + * Handle asynchronous request + * + * @since 3.0 + * @param aMessage RPEngMessage of the request + * @param aServSubSession server sub-session + * @param aServSessionId server session Id + * @param aServSubSessionId server sub-session Id of the request + */ + void HandleAsynchronousRequestL( + const RPEngMessage& aMessage, + MPEngSubSession& aServSubSession, + TInt32 aServSessionId, + TInt aServSubSessionId ); + + /** + * Handle synchronous request + * + * @since 3.0 + * @param aMessage RPEngMessage of the request + * @param aServSessionId server session Id + * @param aServSubSessionId server sub-session Id of the request + */ + void HandleSynchronousRequestL( + const RPEngMessage& aMessage, + TInt32 aServSessionId, + TInt aServSubSessionId ); + + /** + * Handle Log In Request + * + * @since 3.0 + * @param aMessage RPEngMessage of the request + * @param aServSubSession server sub-session + * @param aServSessionId server session Id + * @param aServSubSessionId server sub-session Id of the request + */ + void HandleLogInRequestL( const RPEngMessage& aMessage, + MPEngSubSession& aSubSession, + TInt32 aServSessionId, + TInt aServSubSessionId ); + + /** + * Handle Log Oout Request + * + * @since 3.0 + * @param aMessage RPEngMessage of the request + * @param aServSubSession server sub-session + * @param aServSessionId server session Id + * @param aServSubSessionId server sub-session Id of the request + */ + void HandleForceLogOutRequestL( const RPEngMessage& aMessage, + MPEngSubSession& aSubSession, + TInt32 aServSessionId, + TInt aServSubSessionId ); + + /** + * Close reference to the session manager by the app Id + * Asynchronous version + * + * @since 3.0 + * @param aMessage RPEngMessage of the request + * @param aServSubSession server sub-session + * @param aServSessionId server session Id + * @param aServSubSessionId server sub-session Id of the request + */ + void HandleDetachAppIdL( const RPEngMessage& aMessage, + MPEngSubSession& aSubSession, + TInt32 aServSessionId, + TInt aServSubSessionId ); + + /** + * Cancel particular asynchronous request + * Cancel all asynchronous request from the Server Session + * Cancel all asynchronous request from the Server Sub-session + * + * @since 3.0 + * @param aMessage RPEngMessage of the request + * @param aServSessionId server session Id + * @param aServSubSessionId server sub-session Id of the request + */ + void CancelAsynchronousRequest( + const RPEngMessage& aMessage, + TInt32 aServSessionId, + TInt aServSubSessionId ); + + void CancelAllSessionRequests( + TInt32 aServSessionId ); + + void CancelAllSubSessionRquests( + TInt32 aServSessionId, + TInt aServSubSessionId ); + +private: // Function for handling of resources + + /** + * Load resources for the online state of the session + * + * @since 3.0 + */ + void LoadResourcesL(); + + /** + * Unloads resources for the offline state of Session slot + * + * @since 3.0 + */ + void UnloadResources(); + +private: // request management + + /** + * Check if request is allowed + * + * + * @since 3.0 + * @param aRequestFunction request function + * @param aServSessionId server session Id of the request + * @param aServSubSessionId server sub-session Id of the request + */ + void CheckRequestValidityL ( + TInt aRequestFunction, + TInt32 aServSessionId, + TInt aServSubSessionId ); + + /** + * Find defined request in session manager + * + * @since 3.0 + * @param aRequestFunction request function to find + * @param aServSessionId session to look in + * @param aServSubSessionId sub-session to look in + * @return index or KerrNotFound + */ + TInt FindRequest( TInt aRequestFunction ); + + TInt FindRequestInSession( + TInt aRequestFunction, + TInt32 aServSessionId ); + + TInt FindRequestInSubSession( + TInt aRequestFunction, + TInt32 aServSessionId, + TInt aServSubSessionId ); + + /** + * Handle Send new data Request + * + * @since 3.0 + * @param aMessage RPEngMessage from Client + * @param aServSubSession server sub-session + * @param aServSessionId server session id + * @param aServSubSessionId server sub-session Id + */ + void HandleUpdateDataRequestL( const RPEngMessage& aMessage, + MPEngSubSession& aServSubSession, + TInt32 aServSessionId, + TInt aServSubSessionId ); + + /** + * Do Log In to the CSP session + * + * @since 3.0 + * @param aMessage RPEngMessage from Client + * @param aServSubSession server sub-session + * @param aServSessionId server session id + * @param aServSubSessionId server sub-session Id + */ + void DoLogInL( const RPEngMessage& aMessage, + MPEngSubSession& aServSubSession, + TInt32 aServSessionId, + TInt aServSubSessionId ); + + /** + * Do log out from the CSP session + * + * @since 3.0 + * @param aMessage RPEngMessage from Client + * @param aServSubSession server sub-session + * @param aServSessionId server session id + * @param aServSubSessionId server sub-session Id + */ + void DoLogOutL( const RPEngMessage& aMessage, + MPEngSubSession& aServSubSession, + TInt32 aServSessionId, + TInt aServSubSessionId ); + +private: // Helping functions + + /** + * Find Access counter + * + * @since 3.0 + * @param aAppId application Id + * @return pointer to access counter if found, NULL if not found + */ + CPEngAppAccessContainer* AccessCounter( const TDesC& aAppId ); + + /** + * Check reference counter and delete this object if needed + * @since 3.0 + */ + void CheckReferenceAccessD(); + + /** + * Unload Transaction factories + * @since 3.0 + */ + void UnloadTransactionFactories(); + + /** + * Reset access Containers + * @since 3.0 + */ + void ResetAccessContainers(); + + /** + * Inform sub-session about app Id disconnection + * @since 3.0 + * @param aAppId disconnected app Id + */ + void NotifyDisconnectedAppId( const TDesC& aAppId ); + + /** + * Inform sub-sessions about CPS close state + * @since 3.0 + */ + void NotifyCPSClose(); + + /** + * Notify Storage Server about new event + * @since 3.0 + * @param aEvent new event to notify + * @param aAppId application id event is related + * @param aAppIdState state of the application id + */ + void NotifyNewEventL( TPEngNWSessionSlotEvent aEvent, + const TDesC& aAppId, + TPEngNWSessionSlotState aAppIdState ); + + /** + * Leaves with error code if not connected. + */ + void LeaveIfNotConnectedL() const; + + + + +private: + + /** + * C++ default constructor. + */ + CPEngCSPSessManager( MPEngServer& aServer ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL( const CPEngSessionSlotId& aSessId, + RPEngStorageAdminClient& aAdmin ); + +private: // Data + + /// OWN: Access Plain Access Count, used by cleanUp support + TInt iAccessCount; + + /// OWN: Session slot Id + CPEngSessionSlotId* iSessionSlotId; + + /// OWN: Session state + TPEngNWSessionSlotState iState; + + /// OWN: Container of Access Counters + CObjectCon* iAccessCounters; + + /// REF: Server + MPEngServer& iServer; + + /// OWN: Server sub-sessions, + /// Elements REFerenced + RPointerArray iServSubSessions; + + /// OWN: Storage Manager admin client + RPEngStorageAdminSubClient iStoreAdmin; + + /// OWN: Array of active request handlers + /// Elements OWNed + RPointerArray iRequestHandlers; + + /// OWN: Transaction factories + RPointerArray iTransFactories; + + /// OWN: Online Plugins loaded + TBool iPluginsLoaded; + + /// OWN: Access handlers + MPEngAccessHandler* iAccessHandler; + + /// OWN: pure data handler + MPEngPureDataHandler* iPureDataHandler; + + /// OWN: list of Incoming Listen Data Handlers + /// Elements OWNed + RPointerArray iIncomingHandlers; + }; + +#endif // __CPENGCSPSESSMANAGER_H__ + +// End of File