diff -r 000000000000 -r af10295192d8 linklayercontrol/networkinterfacemgr/agentprcore/inc/CAgentAdapter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/linklayercontrol/networkinterfacemgr/agentprcore/inc/CAgentAdapter.h Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,217 @@ +// Copyright (c) 2006-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 + @internalComponent +*/ + + +#ifndef CAGENTADAPTER_H +#define CAGENTADAPTER_H + + +#include +#include //TStateChange +#include +#include +#include +#include +#include + +class CAgentSubConnectionProvider; +class CNifAgentBase; +class CAgentCprDataAccess; +class CAgentAdapterSessionNotifier; + +namespace ESock + { + class MPlatsecApiExt; + } + +/** +This is the Agent Adapter for new style NIFs/SCPRs/CPRs +It is created and owned by Link Layer MCPRs and passed to the left in +the BindTo messages. It is controlled ONLY by the SCPR. + +@internalTechnology +@prototype +*/ +NONSHARABLE_CLASS(CAgentAdapter) : public CBase, private MNifAgentNotify, + public ESock::MLinkCprServiceChangeNotificationApiExt + { + friend class CAgentCprDataAccess; + friend class CAgentConnectionProvider; + friend class CAgentAdapterSessionNotifier; + +public: + enum TAgentState + { + EDisconnected, + EConnecting, + EConnected, + EDisconnecting, + EReconnecting + }; + + static CAgentAdapter* NewL(CAgentSubConnectionProvider& aAgentScpr, const TDesC& aAgentName); + ~CAgentAdapter(); + + void ConnectAgent(TAgentConnectType aConnectType); + void DisconnectAgent(TInt aReason); + void PromptForReconnect(); + void Authenticate(TDes& aUsername, TDes& aPassword); + void CancelAuthenticate(); + + // Database Access Methods + TInt ReadNifName(TDes8& aNifName); + TInt ReadPortName(TDes8& aPortName); + TInt ReadIfParams(TDes8& aIfParams); + TInt ReadIfNetworks(TDes8& aIfNetworks); + + TInt ReadNifName(TDes16& aNifName); + TInt ReadPortName(TDes16& aPortName); + TInt ReadIfParams(TDes16& aIfParams); + TInt ReadIfNetworks(TDes16& aIfNetworks); + + TInt ReadExcessData(TDes8& aBuffer); + TInt QueryIsDialIn(); + + TInt NotificationToAgent(TFlowToAgentEventType aEvent, TAny* aInfo); + + inline const TAgentState AgentState() const; + + TInt Control(TUint aOptionLevel, TUint aOptionName, TDes8& aOption, ESock::MPlatsecApiExt* aPlatsecItf); + void ClientAttachControl(); + + // From MLinkCprServiceChangeNotificationApiExt Interface + void RequestServiceChangeNotificationL(const Messages::TNodeId& aSender, ESock::RLegacyResponseMsg& aResponse); + void CancelServiceChangeNotification(const Messages::TNodeId& aSender); + +#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW + inline CNifAgentBase * Agent() const; +#endif //SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW + +protected: + CAgentAdapter(CAgentSubConnectionProvider& aAgentScpr); + inline CAgentSubConnectionProvider& AgentScpr() const; + +private: + // MNifAgentNotify Interface + virtual void ConnectComplete(TInt aStatus); + virtual void ReconnectComplete(TInt aStatus); + virtual void AuthenticateComplete(TInt aStatus); + virtual void DisconnectComplete(); + virtual void AgentProgress(TInt aStage, TInt aError); + virtual TInt Notification(TAgentToNifEventType aEvent, TAny* aInfo = NULL); + virtual void AgentEvent(TNetworkAdaptorEventType aEventType, TUint aEvent, const TDesC8& aEventData, TAny* aSource=0); + virtual void ServiceStarted(); + + // MNifAgentNotify Interface (Empty implementations) + virtual TInt IncomingConnectionReceived(); + virtual void ServiceClosed(); + virtual void AgentProgress(TSubConnectionUniqueId aSubConnectionUniqueId, TInt aStage, TInt aError); + + CNifFactory* FindOrCreateAgentFactoryL(const TDesC& aFilename); + void CreateAgentL(const TDesC& aAgentName); + +private: + CAgentSubConnectionProvider& iAgentScpr; + CNifAgentBase* iAgent; + CNifAgentFactory* iFactory; + TAgentState iAgentState; + TAgentConnectType iAgentConnectType; + Elements::TStateChange iLastProgress; + RPointerArray iAgentAdapterSessionNotifiers; + }; + + +CAgentSubConnectionProvider& CAgentAdapter::AgentScpr() const + { + return iAgentScpr; + } + + +const CAgentAdapter::TAgentState CAgentAdapter::AgentState() const + { + return iAgentState; + } + +#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW +/** + * Returns the agent + * @param none + * @return Interface of the Nifman/Agent +**/ +CNifAgentBase *CAgentAdapter::Agent() const + { + return iAgent; + } +#endif //SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW + +/** + * This class is an Adapter to allow CAgentBase to Notify for + * ServiceChangeNotification post-399. + * + * @internalTechnology + * @prototype */ +NONSHARABLE_CLASS(CAgentAdapterSessionNotifier) : public CBase, + public MAgentSessionNotify + { +private: + // Phase #1 Constructor + CAgentAdapterSessionNotifier (CAgentAdapter* aCreator, + const Messages::TNodeId& aSender); + + // Phase #2 Constructor + void ConstructL (ESock::RLegacyResponseMsg& aResponseMsg); +public: + // 2-Phase Static Constructor + static CAgentAdapterSessionNotifier* NewL(CAgentAdapter* aCreator, + const Messages::TNodeId& aSender, + ESock::RLegacyResponseMsg& aResponseMsg); + + // 2-Phase Static Constructor. In this case it builds an "empty" Notifier. + static CAgentAdapterSessionNotifier* NewL(CAgentAdapter* aCreator, + const Messages::TNodeId& aSender); + + // Virtual Destructor + virtual ~CAgentAdapterSessionNotifier(); + + // Operator to allow the usage of Find(...) inside a R(Pointer)Array container + virtual TBool operator== (const CAgentAdapterSessionNotifier& aOtherInstanceOfThisClass) const; + + // Return an Id that identify this Agent Session + virtual const Messages::TNodeId& NodeId() const; + + // Implementation of MAgentSessionNotify interface + virtual void ServiceChangeNotification(TUint32 aId, const TDesC& aType); + + virtual void CancelServiceChangeNotification(TInt aReason = KErrCancel); + +private: + /** This identify "who" asked for being notified. */ + Messages::TNodeId iSender; + /** The RResponseMsg to use to answer(notify) the request. */ + ESock::RLegacyResponseMsg* iResponseMsg; + /** The AgentAdapter which has created this object. + * This Pointer allows this CAgentAdapterSessionNotifier to remove + * itself from the Array in the Creator (Queue of S.C. Notifications) */ + CAgentAdapter* iCreator; + }; + +#endif +// CAGENTADAPTER_H +