realtimenetprots/sipfw/ProfileAgent/ApnManager/inc/sipapnconfigurationhandler.h
branchRCL_3
changeset 9 1e1cc61f56c3
child 23 8798b8c7bbfb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/ProfileAgent/ApnManager/inc/sipapnconfigurationhandler.h	Fri Mar 12 15:44:11 2010 +0200
@@ -0,0 +1,198 @@
+// 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:
+// Name        : sipapnconfigurationhandler.h
+// Part of     : SIP Profile Server
+// implementation
+// Version     : 1.0
+//
+
+#ifndef __CSIPAPNCONFIGURATIONHANDLER_H__
+#define __CSIPAPNCONFIGURATIONHANDLER_H__
+
+// INCLUDES
+#include <etelpckt.h>
+#include <es_enum.h>
+#include <es_enum_partner.h>
+#include "sipapnmanager.h"
+
+// CONSTANTS
+const TInt KSecondaryApnMaxRetryCount = 100;
+
+// FORWARD DECLARATIONS
+class CCommsDatabase;
+namespace CommsDat
+    {
+    class CCDRecordBase;
+    }
+
+// CLASS DEFINITION sipapnconfigurationhandler.h
+/**
+ *
+ */
+class CSIPApnConfigurationHandler : public CActive
+	{
+	public:	// Constructors and destructor
+	
+	    enum TSipApnMonitoringState
+	        {
+	        EMonitoringIdle,
+	        EMonitoringConnection,
+	        EMonitoringDatabase
+	        };
+
+		/**
+		 * Static constructor.
+		 *
+		 * @return An initialized instance of this class.
+		 */
+		static CSIPApnConfigurationHandler* NewL( MSIPApnChangeObserver& aObserver,
+                                                        TUint32 aIapId);
+		
+		/**
+		 * Static constructor.
+		 *
+		 * @return An initialized instance of this class.
+		 */
+		static CSIPApnConfigurationHandler* NewLC( MSIPApnChangeObserver& aObserver, 
+                                                        TUint32 aIapId);
+
+		/// Destructor
+		~CSIPApnConfigurationHandler();
+		
+	public:
+	    
+	    /**
+	    * Change APN of specified IAP. If async change is allowed, change
+	    * may be done later if it was not possible at the moment. Once apn
+	    * is changed, observer is notified about change.
+	    */
+	    void SetApnL( const TDesC8& aApn,
+	                  TBool aUseSecureAuthentication,
+	                  TBool aAllowAsync );
+	                   
+	    TBool IsPrimaryApnUsed();
+	    
+		TBool HasPendingTasks() const;
+		
+        TUint32 HandlerIapId() const;
+        
+        TBool IsFailed() const;
+        
+        void SetFailed(TBool aIsFailed, TBool aIsFatalFailure );
+        
+        void UpdateApnL( TBool aIsPrimaryApn, const TDesC8& aApn );
+
+	protected: // From CActive
+
+		void DoCancel();
+		void RunL();
+		TInt RunError( TInt aError );
+		
+    private:
+    
+        TBool IsInUseL( TConnectionInfo& aConnectionInfo );
+
+        void StartMonitoringConnectionL( TConnectionInfo& aConnectionInfo );
+        
+        void WatchConnectionStatusChange();
+        
+        void WatchDatabaseStatusChangeL( TUint32 aIapId );
+        
+        TBool ApnChangeNeededL( const TDesC8& aApn );
+        
+        TBool ChangeApnIfNotInUseL( TBool aAllowAsync = ETrue );
+        
+        TBool IssueApnChangeL( TUint32 aIapId, 
+                               const TDesC8& aApn, 
+                               TBool aUseSecureAuthentication,
+                               TBool aAllowAsync = ETrue );
+        
+        void ChangeApnL( const TDesC8& aApn, 
+                         TBool aUseSecureAuthentication );
+        
+        TBool ClearProtectedRecord( CommsDat::CCDRecordBase& aRecord );
+        
+        void SetMonitoringState( TSipApnMonitoringState aMonitoringState );
+        
+        TSipApnMonitoringState MonitoringState() const;
+        
+        void ConnectionMonitoringCompletedL( TInt aError );
+        
+        void DatabaseMonitoringCompletedL( TInt aError );
+        
+        void SendApnChangedNotificationL( const TDesC8& aApn, TInt aError = KErrNone );
+        
+        TDesC8& PrimaryApn();
+        
+        TDesC8& SecondaryApn();
+        
+        /**
+        * Reads the APN of specified IAP.
+        * @param aIapId IAP id
+        * @return APN or NULL if not found. Ownership is transferred.
+        */
+        HBufC8* ReadCurrentApnL();
+        
+
+	private: // Constructors
+
+		/// Constructor
+		CSIPApnConfigurationHandler( MSIPApnChangeObserver& aObserver,
+                                                            TUint32 aIapId);
+
+		/// 2nd phase constructor
+		void ConstructL();
+
+	private: // Data
+	
+		MSIPApnChangeObserver& iObserver;
+	    
+	    TSipApnMonitoringState iMonitoringState;
+
+		RSocketServ iSocketSrv;
+		
+		RConnection iConnection;
+		
+		TPckgBuf<TConnectionInfo> iConnectionInfo;
+        
+        TNifProgressBuf iProgress;
+        
+        HBufC8* iApnProposal;
+        
+        TUint32 iIapId;
+        
+        CCommsDatabase* iCommsDatabase;
+        
+        TInt iMonitoringRetryCount;
+        
+        HBufC8* iCurrentApn;
+        
+        TBool iApnUseSecureAuthProposal;
+        
+        TBool iIsFailed;
+        
+        TBool iIsFatalFailure;
+        
+        HBufC8* iPrimaryApn;
+        HBufC8* iSecondaryApn;
+        
+#ifdef CPPUNIT_TEST	
+	    friend class CSIPApnManagerTest;
+	    friend class CSIPApnManager;
+#endif
+	
+	};
+
+#endif // __CSIPAPNCONFIGURATIONHANDLER_H__
+