convergedconnectionhandler/cchserver/inc/cchservicehandler.h
branchRCL_3
changeset 22 d38647835c2e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/convergedconnectionhandler/cchserver/inc/cchservicehandler.h	Wed Sep 01 12:29:57 2010 +0100
@@ -0,0 +1,530 @@
+/*
+* Copyright (c) 2007-2009 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:  CCCHServiceHandler declaration
+*
+*/
+
+
+#ifndef C_CCHSERVICEHANDLER_H
+#define C_CCHSERVICEHANDLER_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <mspnotifychangeobserver.h>
+
+#include "cchserviceinfo.h"
+#include "cchsubserviceinfo.h"
+#include "cchservicenotifier.h"
+#include "cchclientserver.h"
+#include "cchcommdbwatcherobserver.h"
+
+// CONSTANTS
+// None
+
+// MACROS
+// None
+
+// FUNCTION PROTOTYPES
+// None
+
+// FORWARD DECLARATIONS
+class CCCHServiceInfo;
+class CCCHServerBase;
+class CCCHSubserviceInfo;
+class CSPNotifyChange;
+class CCchUIHandler;
+class CCchWlanExtension;
+class CCCHCommDbWatcher;
+
+// DATA TYPES
+typedef RPointerArray<CCCHServiceInfo> RServiceArray;
+
+// CLASS DECLARATION
+
+/**
+ *  CCCHServiceHandler declaration
+ *  Handles services and service related components
+ *  @lib cchserver.exe
+ *  @since S60 3.2
+ */
+NONSHARABLE_CLASS( CCCHServiceHandler ) : public CBase,
+                                          private MCCHServiceNotifier,
+                                          private MSPNotifyChangeObserver,
+                                          private MCCHCommDbWatcherObserver
+    {
+
+public: // Constructors and destructor
+
+    /**
+    * Two-phased constructor.
+    */
+    static CCCHServiceHandler* NewL( CCCHServerBase& aServer );
+
+    /**
+     * Two-phased constructor.
+     */
+    static CCCHServiceHandler* NewLC( CCCHServerBase& aServer );
+
+    /**
+     * Destructor.
+     */
+    virtual ~CCCHServiceHandler();
+
+public: // New functions
+
+    /**
+     * Initialize object
+     * @since S60 3.2
+     */
+    void InitServiceHandlerL();
+
+    /**
+     * Update service and subservice's state
+     * @since S60 3.2
+     * @param aReadSettingTable If ETrue class reads and updates 
+     * all services from Service Provider Settings
+     */
+    void UpdateL( TBool aReadSettingTable = EFalse );
+
+    /**
+     * Enables service
+     * @since S60 3.2
+     * @param aServiceSelection Service to enable
+     * @param aConnectivityCheck Is value is True Connectivity Plug-in will
+     * make test call to check is the connection truly working.
+     * @return General symbian error code.
+     */
+    TInt EnableService( const TServiceSelection aServiceSelection,
+                        const TBool aConnectivityCheck );
+
+    /**
+     * Disables service
+     * @since S60 3.2
+     * @param aServiceSelection Service to disable
+     * @return General symbian error code.
+     */
+    TInt DisableService( const TServiceSelection aServiceSelection );
+
+    /**
+     * Set new connection information to Service
+     * @since S60 3.2
+     * @param aServiceConnInfo Connection information
+     * @return General symbian error code.
+     */
+    TInt SetConnectionInfo( const TServiceConnectionInfo aServiceConnInfo );
+
+    /**
+     * Get connection information from Service
+     * @since S60 3.2
+     * @param aServiceSelection Selected Service
+     * @param aServiceConnInfo On completion contains Service's 
+     * connection infomation
+     * @return General symbian error code.
+     */
+    TInt GetConnectionInfo( TServiceConnectionInfo& aServiceConnInfo );
+
+    /**
+     * Is any service's startup-flag set to true
+     * @since S60 3.2
+     * @return ETrue if startup-flag is set to true
+     */
+    TBool IsStartupFlagSet() const;
+    
+    /**
+     * Subservice's enable at startup info setter. 
+     * Method does not change value for permanently. 
+     * CCCHSPSHandler::SetLoadAtStartUpL sets value for permanently. 
+     * @since S60 3.2
+     * @param aServiceSelection Service which owns startup flag
+     * @param aLoadAtStartUp New startup flag
+     * @return KErrNotFound if service or subservice does not exist
+     */
+    TInt SetStartupFlag( const TServiceSelection aServiceSelection, 
+        TBool aLoadAtStartUp ) const;
+    
+    /**
+     * Load Plug-ins
+     * @since S60 3.2
+     */
+    void LoadPluginsL();
+    
+    /**
+     * Unloads Plug-in(s) of certain service; if all
+     * subservices in one plugin are disabled, those are unloaded.
+     * @since S60 3.2
+     */
+    void UnloadDisabledPluginsL( );
+    
+    /**
+     * Checks if certain subservice exists in certain state
+     * @param aType Subservice type
+     * @param aState Subservice state to be checked
+     * @since S60 3.2
+     */
+    TBool Exists( TCCHSubserviceType aType, 
+                  TCCHSubserviceState aState,
+                  TInt aError ) const;
+                                  
+    /**
+     * Count of Services
+     * @since S60 3.2
+     * @param aMessage IPC message;
+     */
+    void ServiceCountL( RMessage2 aMessage ) const;
+    
+    /**
+     * Get all services and subservices.
+     * @since S60 3.2
+     * @param aMessage IPC message
+     */
+    void GetServicesL( RMessage2 aMessage );
+
+    /** 
+     * Get state of service or subservice of a certain service
+     * @since S60 3.2
+     * @param aMessage IPC message
+     * @return General symbian error code.
+     */
+    TInt GetServiceState( const RMessage2 aMessage );
+
+    /** 
+     * Get state of service
+     * @since S60 3.2
+     * @param aServiceId Service which to be checked
+     * @return A state of the service.
+     */
+    TCCHSubserviceState CCCHServiceHandler::ServiceState(
+            const TUint aServiceId );
+    
+    /** 
+     * Get info of service or subservice of a certain service
+     * @since S60 3.2
+     * @param aMessage IPC message
+     * @return General symbian error code.
+     */
+    TInt GetServiceInfo( const RMessage2 aMessage );
+
+    /** 
+     * Reserves the service for exclusive use
+     * @since S60 3.2
+     * @param aMessage IPC message
+     * @return General symbian error code.
+     */
+    TInt ReserveService( const RMessage2 aMessage );
+
+    /** 
+     * Frees the exclusive service reservation
+     * @since S60 3.2
+     * @param aMessage IPC message
+     * @return General symbian error code.
+     */
+    TInt FreeService( const RMessage2& aMessage );
+    
+    /** 
+     * Is the service exclusively reserved?
+     * @since S60 3.2
+     * @param aMessage IPC message
+     * @return ETrue if service is reserved for exclusive use.
+     */
+    void IsReserved( RMessage2 aMessage ) const;
+    
+    /**
+     * Service exist
+     * @since S60 3.2
+     * @param aSelection Checked Service
+     * @return TInt index if found else KErrNotFound 
+     */
+    TInt ServiceExist( TServiceSelection aSelection ) const;
+    
+    /**
+     * Find service by service id
+     * @since S60 3.2
+     * @param serviceId
+     * @return TInt position within the iServices array or KErrNotFound
+     */
+    TInt FindService( TUint32 aServiceId ) const;
+    
+    /**
+     * Subscribe to service change notifies
+     * @since S60 3.2
+     */
+    void EnableNotifyChange();
+    
+    /**
+     * Cancel service change notifies
+     * @since S60 3.2
+     */
+    void DisableNotifyChange();
+        
+    /**
+     * Get all subservice types which uses given Plug-in uid.
+     * @since S60 3.2
+     * @param aServiceId Service which to be checked
+     * @param aSubserviceTypes On completion contains subservice types.
+     */
+    void GetSubserviceTypesL( const TUint aServiceId, 
+        RArray<TCCHSubserviceType>& aSubserviceTypes ) const;
+    
+    /**
+     * Disables Wlan scan if needed
+     */
+    void DisableWlanScan();
+    
+    /**
+     * Handle restart situation, all services and subservices
+     * goes to disabled state.
+     */
+    void HandleRestartL();
+    
+protected: // From base classes
+    
+    /**
+     * Determines if we should start recovery
+     * @since S60 3.2
+     * @param aServiceId Service which state has changed
+     * @param aError Subservice's error. 
+     * @return ETrue if recovery is needed
+     */
+
+    TBool IsRecoveryNeeded( const TCCHSubserviceState aState, 
+                            TInt aError );
+                               
+    /**
+     * Service state notifier.
+     * @since S60 3.2
+     * @param aServiceId Service which state has changed
+     * @param aSubService Subservice's type. 
+     * @param aState A new state of the service.
+     */
+    void StateChangedL( const TUint aServiceId,
+                        const TCCHSubserviceType aSubService,
+                        const TCCHSubserviceState aState,
+                        const TInt aError );
+        
+    /**
+     * Handle notify change event.
+     * From MSPNotifyChangeObserver;
+     *
+     * @since S60 3.2
+     * @param aServiceId The service ID of changed service
+     */
+    void HandleNotifyChange( TServiceId aServiceId );
+    
+    /**
+     * Handle error
+     * 
+     * @since S60 3.2
+     */
+    void HandleError( TInt aError );
+    
+private:
+
+    /**
+     * C++ default constructor.
+     */
+    CCCHServiceHandler( CCCHServerBase& aServer );
+    
+    /**
+     * By default Symbian 2nd phase constructor is private.
+     */
+    void ConstructL();
+
+    /**
+     * Add service to service array
+     * @since S60 3.2
+     * @param aService service information
+     */
+    void AddServiceL( TCCHService& aService );
+    
+    /**
+     * Counts how many Service contains this kind of Subservice
+     * @since S60 3.2
+     * @param aType Subservice's type
+     * @return TInt Count of Service
+     */
+    TInt ServiceCount( const TCCHSubserviceType aType ) const;
+
+    /**
+     * Starts connection recovery timer
+     * @param aFunction The function to call after the time out
+     */
+    void StartConnectionRecoveryTimer( TInt (*aFunction)(TAny* aPtr) );
+
+    /**
+     * Cancels the connection recovery timer
+     */
+    void CancelConnectionRecoveryTimer();
+    
+    /**
+     * Connection recovery callback
+     * @param aSelf this object
+     */
+    static TInt ConnectionRecoveryEvent( TAny* aSelf );
+    
+    /**
+     * Handles connection recovery event
+     */
+    void HandleConnectionRecovery();
+    
+    /**
+     * Starts plugin unload timer
+     * @param aFunction The function to call after the time out
+     */
+    void StartPluginUnloadTimer();
+
+    /**
+     * Cancels the connection recovery timer
+     */
+    void CancelPluginUnloadTimer();
+    
+    /**
+     * Starts handle notify delay timer
+     * @param aFunction The function to call after the time out
+     */
+    void StartHandleNotifyDelayTimer();
+
+    /**
+     * Cancels the handler notify delay timer
+     */
+    void CancelHandleNotifyDelayTimer();
+    
+    /**
+     * Plugin unload callback
+     * @param aSelf this object
+     */
+    static TInt PluginUnloadEvent( TAny* aSelf );
+    
+    /**
+     * Handle notify event callback
+     * @param aSelf this object
+     */
+    static TInt HandleNotifyEvent( TAny* aSelf );
+    
+    /**
+     * Handles plugin unload event
+     */
+    void HandlePluginUnload();
+    
+    /**
+     * Handles delayed notify event
+     */
+    void HandleDelayedNotifyEvent();
+    
+    /**
+     * From MCCHCommDbWatcherObserver, handles commsdb events
+     */
+    void HandleWLANIapAdded( TInt aSNAPId );
+    
+    /**
+     * Checks if there is wlan iap used, second part
+     */
+    TBool UsesWlanIap( const TServiceSelection& aServiceSelection );
+    
+    /**
+     * Checks if there is wlan iap used
+     */
+    TBool HasWlanIap( const TServiceSelection& aServiceSelection );
+    
+    /**
+     * Checks if IAP or SNAP is defined for certain subservice
+     */
+    TBool IsConnectionDefinedL( const TServiceSelection& aServiceSelection );
+    
+    /**
+     * Checks if IAP or SNAP is defined for certain service
+     */
+    TBool IsServiceConnectivityDefinedL( const TServiceSelection& aServiceSelection );
+    
+private: // data
+
+    /**
+     * Handle to server
+     */
+    CCCHServerBase&                 iServer;
+
+    /**
+     * Service array
+     */
+    RServiceArray                   iServices;
+    
+    /**
+     * Pointer to CSPNotifyChange
+     */
+    CSPNotifyChange*                iNotifier;
+    
+    /**
+     * Service id array
+     */
+    RIdArray                        iServiceIds;
+    
+    /**
+     * UI handler to show VoIP small icon etc.
+     */
+    CCchUIHandler*                  iCchUIHandler;
+    
+    /**
+     * Connection recovery timer. Owned.
+     */
+    CPeriodic* iConnectionRecoveryTimer;
+    
+    /**
+     * Plugin unload timer. Owned.
+     */
+    CPeriodic* iPluginUnloadTimer;
+    
+    /**
+     * Handle notify delay timer. Owned.
+     */
+    CPeriodic* iHandleNotifyDelayTimer;
+    
+    /**
+     * Recovery trial counter
+     */
+    TInt iConnectionRecoveryTry;
+    
+    /**
+     * Services that require recovery
+     */
+    RArray<TServiceSelection> iServicesInRecovery;
+    
+    /**
+     * Recovery intervals
+     */
+    RArray<TInt> iRecoveryInterval;
+    
+    /**
+     * WLAN extension
+     */
+    CCchWlanExtension* iWlanExtension;
+    
+    /**
+     * CommsDb watcher
+     */
+    CCCHCommDbWatcher* iCommDbWatcher;
+    
+    /**
+     * Disable SPSettings notifications
+     */
+    TBool iCancelNotify;
+    
+    /**
+     * Service id of delayed handle notify event
+     */
+    TServiceId iDelayedHandleNotifyServiceId;
+    };
+
+#endif // C_CCHSERVICEHANDLER_H
+
+// End of file