diff -r 000000000000 -r dfb7c4ff071f datacommsserver/networkcontroller/src/CNetworkController.h --- /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 +#include +#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 iRequestQueue; + RPointerArray iImplicitNotifyList; + TConnPref iImplicitConnectionPrefs; + HBufC* iImplicitConnectionAgentName; + CAsyncCallBack* iImplicitNotificationCb; + TPckgBuf iImplicitNotifyInfo; + MImplicitConnectionNotify::TEvent iImplicitNotifyEvent; + }; + +#endif +