datacommsserver/networkcontroller/src/CNetworkController.h
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/networkcontroller/src/CNetworkController.h	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,190 @@
+/**
+* Copyright (c) 2003-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:
+*
+*/
+
+
+
+/**
+ @file CNetworkController.h
+ @internalComponent
+*/
+
+#if !defined (__CNETWORKCONTROLLER_H__)
+#define __CNETWORKCONTROLLER_H__
+#include <comms-infras/cnetworkcontrollerbase.h>
+#include <comms-infras/dialogprocessor.h>
+#include "CSelectionRequest.h"
+#include "CReconnectRequest.h"
+
+class MNetConDialogProcAccess;
+class MNetConEnv
+/**
+For upcalls from the requests
+
+@internalComponent
+*/
+	{
+public:
+
+	/**
+	A selection request has been processed - queue another one.
+
+	@param aRequest pointer to the actual selection request
+	@param aError contains the reason for failure of processing the request or KErrNone
+	*/
+	virtual void RequestComplete(const CSelectionRequest* aRequest, TInt aError) = 0;
+
+	/**
+	A reconnect request has been processed - queue another one.
+
+	@param aRequest pointer to the actual reconnect request
+	@param aError contains the reason for failure of processing the request or KErrNone
+	*/
+	virtual void RequestComplete(const CReconnectRequest* aRequest, TInt aError) = 0;
+
+	/**
+	Retrieve the name of the Agent that is used for implicit connection
+	requests - i.e. connection startup from RSocket SendTo()/Connect() or
+	RHostResolver GetByName()
+
+	@returns an Agent name
+	*/
+	virtual const HBufC* ImplicitConnectionAgentName() const = 0;
+
+	/**
+	Retrieve the connection preferences associated with the current
+	implicit connection
+
+	@returns a TConnPref reference
+	*/
+	virtual const TConnPref& ImplicitConnectionPrefs() const = 0;
+
+	/**
+	Searches for an Agent associated with the selected IAP
+	@note that there is a one-to-one relationship between agents and IAPs
+
+	@param aAgent if found a pointer to the CNifAgentBase
+	@return TInt KErrNotFound or KErrNone
+	@pre the selected IAP setting is stored in the DbAccess object.
+	*/
+	virtual TInt FindExistingAgentForSelection(CNifAgentBase*& aAgent, CCommsDbAccess* aDatabase) const = 0;
+
+	/**
+	Check Bearer Availability
+
+	@param aIsReconnect if this is a reconnection then any asynchronous requests are skipped in order to speed things up
+	*/
+	virtual void CheckBearerAvailability(TBool aIsReconnect) = 0;
+
+	/**
+	Check Second Phase Bearer Availability - e.g. signal strength
+
+	@returns KErrNone if the bearer availability is above the threshold stored in CommDB, otherwise KErrNetConInadequateSignalStrengh
+	*/
+	virtual TInt RequestSecondPhaseAvailability() = 0;
+
+	/**
+	Create an association between an Agent and a Network ID.
+
+	@param aAgent pointer to the Agent
+	@param aNetworkId the CommDb ID of the Network
+	*/
+	virtual void AddAgentToNetworkL(CNifAgentBase* aAgent, TUint32 aNetworkId) = 0;
+
+	/**
+	CancelBearerAvailabilityCheck
+	*/
+	virtual void CancelBearerAvailabilityCheck() = 0;
+
+	/**
+	Factory function to provide a database access object.
+	*/
+	virtual CCommsDbAccess* NewDatabaseL() = 0;
+	/**
+	Factory function to proviae a dialog processor
+	*/
+	virtual CNetConDlgProcessor* NewDialogProcessorL() = 0;
+
+	};
+
+const TInt KTelBearerPosition = 0; ///< position of the telephony bearer in the array
+
+NONSHARABLE_CLASS(CNetworkController) : public CNetworkControllerBase, public MNetConEnv
+/**
+The class is responsible for Queing Selection and Reconnection requests received from NIFMAN in a FIFO queue of CNetConRequestBase objects
+
+@internalComponent
+*/
+	{
+public:
+	virtual ~CNetworkController();
+	static CNetworkController* NewL();
+
+	// calls from Nifman 
+	virtual void SelectAgent(MNetworkControllerObserver* aObserver, MServiceChangeObserver* apServiceChangeObserver, TConnStartType aStartType, TInt aConnectionAttempt, TInt aLastConnectionError);
+	virtual void SelectAgent(MNetworkControllerObserver* aObserver, MServiceChangeObserver* apServiceChangeObserver, TConnStartType aStartType, TInt aConnectionAttempt, TInt aLastConnectionError, const TConnPref& aPrefs);
+	virtual void Reconnect(MNetworkControllerObserver* aObserver, CNifAgentBase* aAgent);
+	virtual void Reconnect(MNetworkControllerObserver* aObserver, CNifAgentBase* aAgent, CStoreableOverrideSettings* aOverrides);
+	virtual TInt CancelRequest(MNetworkControllerObserver* aObserver);
+	virtual void AgentConnectionFailure(CNifAgentBase* aAgent, TInt aError);
+	virtual TInt RequestImplicitConnectionNotification(MImplicitConnectionNotify* aObserver);
+	virtual void CancelImplicitConnectionNotification(MImplicitConnectionNotify* aObserver);
+
+	// implementation of MBearerObserver interface 
+	virtual void BearerStateChange(CBearerBase* aBearer);
+
+	virtual CCommsDbAccess* DbAccess();
+
+	// implementation of MNetConEnv interface
+	virtual void RequestComplete(const CSelectionRequest* aRequest, TInt aError);
+	virtual void RequestComplete(const CReconnectRequest* aRequest, TInt aError);
+	virtual const HBufC* ImplicitConnectionAgentName() const;
+	virtual const TConnPref& ImplicitConnectionPrefs() const;
+	virtual TInt FindExistingAgentForSelection(CNifAgentBase*& aAgent, CCommsDbAccess* aDatabase) const;
+	virtual void CheckBearerAvailability(TBool aIsReconnect);
+	virtual TInt RequestSecondPhaseAvailability();
+	virtual void AddAgentToNetworkL(CNifAgentBase* aAgent, TUint32 aNetworkId);
+	virtual void CancelBearerAvailabilityCheck();
+
+	virtual CCommsDbAccess* NewDatabaseL();
+	virtual CNetConDlgProcessor* NewDialogProcessorL();
+
+protected:
+	CNetworkController();
+	void ConstructL();
+
+private:
+	void SelectComplete(TInt aError, const TConnectionSettings& aSettings);
+	static TInt ProcessRequestCb(TAny* aThisPtr);
+	void ProcessRequest();
+	static TInt ImplicitNotificationCb(TAny* aThisPtr);
+	void SendImplicitConnectionNotification(const TDesC8& aConnectionInfo, MImplicitConnectionNotify::TEvent aEvent);
+	TInt GetConnectionInfo(CNifAgentBase* aAgent, TDes8& aConnectionInfo);
+
+private:
+	CNetConRequestBase* iCurrentRequest;
+	CAsyncCallBack* iProcessRequestCb;
+	TSglQue<CNetConRequestBase> iRequestQueue;
+	RPointerArray<MImplicitConnectionNotify> iImplicitNotifyList;
+	TConnPref iImplicitConnectionPrefs;
+	HBufC* iImplicitConnectionAgentName;
+	CAsyncCallBack* iImplicitNotificationCb;
+	TPckgBuf<TSoIfConnectionInfo> iImplicitNotifyInfo;
+	MImplicitConnectionNotify::TEvent iImplicitNotifyEvent;
+	};
+
+#endif
+