--- /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