convergedconnectionhandler/cchserver/inc/cchcommdbwatcher.h
branchRCL_3
changeset 22 d38647835c2e
--- /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 <e32std.h>
+#include <e32base.h>
+#include <commdb.h>
+#include <cmmanager.h>
+#include <commsdattypesv1_1.h>
+
+// 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<TUint>& 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<TDestinationData>& 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<TDestinationData>& 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<TDestinationData>   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