diff -r f742655b05bf -r d38647835c2e convergedconnectionhandler/cchserver/inc/cchcommdbwatcher.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/convergedconnectionhandler/cchserver/inc/cchcommdbwatcher.h Wed Sep 01 12:29:57 2010 +0100 @@ -0,0 +1,240 @@ +/* +* Copyright (c) 2007 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: CCCHCommDbWatcher declaration +* +*/ + + +#ifndef C_CCHCOMMDBWATCHER_H +#define C_CCHCOMMDBWATCHER_H + +// INCLUDES +#include +#include +#include +#include +#include + +// CONSTANTS +// Stop requesting new notifications after this many consecutive errors +const TInt KCchConnCenRepErrorThreshold = 80; + +// MACROS +// None + +// DATA TYPES +class TDestinationData + { + public: + inline TDestinationData(): iDestId(0), iIapCount(0), iWlanIaps(0){} + inline TDestinationData(TInt aDestId, TInt aIapCount): + iDestId(aDestId), iIapCount(aIapCount), iWlanIaps(0){} + TInt iDestId; //CMM Destination ID + TInt iIapCount; //Number of IAPs under this destination + TInt iWlanIaps; //Number of WLAN IAPs under this destination + }; + +// FUNCTION PROTOTYPES +// None + +// FORWARD DECLARATIONS +class MCCHCommDbWatcherObserver; +class CRepository; + +// CLASS DECLARATION + +/** + * CCCHCommDbWatcher declaration + * Handles CommsDb changes and notifies CCHServiceHandler at IAP count changes + * @lib cchserver.exe + * @since S60 3.2 + */ +NONSHARABLE_CLASS( CCCHCommDbWatcher ) : public CActive + { + +public: // Constructors and destructor + + static CCCHCommDbWatcher* NewL( MCCHCommDbWatcherObserver& aObserver ); + + static CCCHCommDbWatcher* NewLC( MCCHCommDbWatcherObserver& aObserver ); + + ~CCCHCommDbWatcher(); + +public: // new functions + + /** + * Returns number of IAPs that have WLAN bearer type + * @param aSNAPId ID of SNAP to check. Use value KErrNotFound + * to get number of WLAN IAPS without SNAP binding + * @param aWLANIapsOnly if ETrue, returns WLAN iap count in given SNAP + * @param aUpdateDestinations if ETrue, update destination before checking + * @return number of IAPs in given SNAP. KErrNotFound if no IAPS + * @since Series 60 3.2 + */ + TInt GetIapCountFromSnap( TInt aSNAPId, TBool aWLANIapsOnly, TBool aUpdateDestinations = EFalse ); + + /** + * Checks is IAP's bearer type WLAN AP. + * @param aIapId of IAP to check. + * @return ETrue if given IAP id is WLAN AP, otherwise EFalse. + * @since Series 60 3.2 + */ + TBool IsWlanApL( TInt aIapId ); + + /** + * Checks is IAP's bearer type VPN AP. + * @param aIapId of IAP to check. + * @return ETrue if given IAP id is VPN AP, otherwise EFalse. + */ + TBool IsVpnApL( TInt aIapId ); + + /** + * IAP's bearer getter. + * @param aIapId. + * @return TUint32 bearer type. + */ + TUint32 GetBearerL( TInt aIapId ); + + /** + * Removes IAPs which are not linked to VPN AP. + * @param aIapIds all connected iaps, afterward only linked IAPs. + * @param aIAPId VPN IAP to check. + */ + void RemoveOtherThanVpnIapsL( RArray& aIaps, TUint aIAPId ); + + +protected: // From base classes + + /** + * From CActive + * @since Series 60 3.2 + */ + void RunL(); + + /** + * From CActive + * @since Series 60 3.2 + */ + TInt RunError( TInt aError ); + + /** + * From CActive + * @since Series 60 3.2 + */ + void DoCancel(); + +private: + + /** + * C++ default constructor. + */ + CCCHCommDbWatcher( MCCHCommDbWatcherObserver& aObserver ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + /* + * Request notifications of cenrep changes + * @return KErrNone if succesful + */ + TInt RequestNotifications(); + + /** + * Check changes in IAPs / SNAP configurations + * @param aChanged will be ETrue if there has been changes to + * either total WLAN AP count or SNAP/IAP configuration + * @param aSNAPId will contain ID of the changed SNAP that + * contains now more WLAN Iaps + */ + void CheckIapsL( TBool& aChanged, TInt& aSNAPId ); + + /** + * Count number of Iaps in an array of TDestinationData. + * Helper function to detect new iap additions + * @param aArray Array to count from + * @return total number of IAPs from the given destinations array + * @since S60 3.2 + */ + TInt CountIapsFromArray( RArray& aArray ) const; + + /** + * Updates internal iDestinations store after a SNAP configuration change. + * Determines also the SNAP where WLAN iap(s) were added. + * @param aDestinations current Snap configuration attained from cmmanager + * @param aChanged will be ETrue if there is a new WLAN iap + * @param aSNAPId holds the SNAP id of the added WLAN iap + * @since S60 3.2 + */ + void UpdateDestinationStore( RArray& aDestinations, + TBool& aChanged, + TInt& aSNAPId); + + /** + * Updates IAPs / SNAPs configurations and notifies our client if + * there is some changes. + * @return TInt general symbian error code. + */ + TInt UpdateIapTable(); + + /** + * Open connection to cmmanager + * @return RCmManager reference to cmmanager + */ + RCmManager& CmManagerL(); + + /** + * Initializes destinations. + */ + void InitializeDestination(); + +private: // data + + ///not own: observer to notify when there are changes in WLAN IAP/SNAPs + MCCHCommDbWatcherObserver& iObserver; + + ///own: Commsdb access to get notifications about changes + CCommsDatabase* iCommDb; + + // Central repository to get notifications of commsdat changes + CRepository* iRepository; + + // Table id for iap table + TUint32 iTableId; + + ///own: array holding information about iap count per destination + // index 0 will contain count of iaps not bound to any + // destination + RArray iDestinations; + + //own, connectionmethodmanager + RCmManager iCmm; + + // indicates is cmmanager open + TBool iCmmOpen; + + // Holds the last cmmanager error + TInt iLastError; + + // Error counter for cenrep notification request errors + TInt iErrorCounter; + + // Indicates do we have to use force when asking snap's iap + TBool iUseForce; + }; + +#endif // C_CCHCOMMDBWATCHER_H + +// End of file