--- /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
+