williamr@4: // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@4: // All rights reserved. williamr@4: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@4: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@4: // williamr@4: // Initial Contributors: williamr@4: // Nokia Corporation - initial contribution. williamr@4: // williamr@4: // Contributors: williamr@4: // williamr@4: // Description: williamr@4: // williamr@4: williamr@4: /** williamr@4: @file williamr@4: @internalComponent williamr@4: */ williamr@4: williamr@4: #ifndef __SS_CONNLEGACY_H__ williamr@4: #define __SS_CONNLEGACY_H__ williamr@4: williamr@4: #include williamr@4: #include williamr@4: #include //TNifProgressBuf & co williamr@4: #include //TConnStartType &co williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: williamr@4: class TSockOpt; williamr@4: class CActivityTimer; williamr@4: williamr@4: const TInt KNifEMCompatibilityLayerEntireSubConnectionUid = 0; williamr@4: const TInt KNifEMCompatibilityLayerFakeSubConnectionId = 1; williamr@4: williamr@4: namespace ConnStates williamr@4: { williamr@4: class TProcessEnumResponse; williamr@4: class TNoTagOrCancelAllInterfaceWorker; williamr@4: class TCancelAllInterfaceNotificationWorker; williamr@4: } williamr@4: williamr@4: namespace AllInterfaceNotificationActivity williamr@4: { williamr@4: class TEnqueueNotification; williamr@4: class TSendErrorToConnection; williamr@4: } williamr@4: williamr@4: namespace EnumerateConnectionsActivity williamr@4: { williamr@4: class TQueryTierStatus; williamr@4: class TCacheConnectionInfo; williamr@4: class TCompleteClient; williamr@4: } williamr@4: williamr@4: namespace ESock williamr@4: { williamr@4: class ADataMonitoringProvider; williamr@4: class CSubConnection; williamr@4: class CConnManager; williamr@4: class CConnectionProviderBase; williamr@4: class CActivityTimer; williamr@4: class TSelectionPrefs; williamr@4: class TLegacyConnectionEnumRequest; williamr@4: class CLegacySubConnectionActiveResponder; williamr@4: williamr@4: /** williamr@4: Server side class representing an RConnection legacy API williamr@4: @internalComponent williamr@4: */ williamr@4: NONSHARABLE_CLASS(AConnectionLegacy) williamr@4: { williamr@4: friend class CConnection; williamr@4: friend class CSockSession; williamr@4: friend class Factories::TFactoryNotify; williamr@4: friend class CActivityTimer; williamr@4: friend class ConnStates::TProcessEnumResponse; williamr@4: friend class TLegacyConnectionEnumRequest; williamr@4: friend class EnumerateConnectionsActivity::TQueryTierStatus; williamr@4: friend class EnumerateConnectionsActivity::TCacheConnectionInfo; williamr@4: friend class EnumerateConnectionsActivity::TCompleteClient; williamr@4: friend class AllInterfaceNotificationActivity::TEnqueueNotification; williamr@4: friend class AllInterfaceNotificationActivity::TSendErrorToConnection; williamr@4: friend class ConnStates::TNoTagOrCancelAllInterfaceWorker; williamr@4: friend class ConnStates::TCancelAllInterfaceNotificationWorker; williamr@4: williamr@4: public: //So that friends of CConnection (transitions) can access it williamr@4: void CompleteAttachL(TSelectionPrefs& aPrefs); williamr@4: void CancelServiceChangeNotification(const Den::RSafeMessage& aMessage); williamr@4: void SubConnectionEvent(const TSubConnectionEvent& aSubConnectionEvent); williamr@4: williamr@4: protected: williamr@4: AConnectionLegacy(CConnection& aConnection) : williamr@4: iConnection(aConnection) williamr@4: { williamr@4: iServiceChangeNotificationPending = EFalse; williamr@4: } williamr@4: williamr@4: ~AConnectionLegacy(); williamr@4: TInt ProcessMessageL(const RMessage2& aMessage); williamr@4: void ReceivedL(const Messages::TRuntimeCtxId& aSender, const Messages::TNodeId& aRecipient, Messages::TSignatureBase& aMessage); //Only called from CConnection::ReceivedL williamr@4: williamr@4: private: williamr@4: // Underlying implementations of individual RConnection methods williamr@4: void StopL(const RMessage2& aMessage); williamr@4: williamr@4: void GetIntSettingL(const Den::RSafeMessage& aMessage); williamr@4: void GetBoolSettingL(const Den::RSafeMessage& aMessage); williamr@4: void GetDes8SettingL(const Den::RSafeMessage& aMessage); williamr@4: void GetDes16SettingL(const Den::RSafeMessage& aMessage); williamr@4: void GetLongDesSettingL(const Den::RSafeMessage& aMessage); williamr@4: void GetConnectionInfoL(const RMessage2& aMessage); williamr@4: williamr@4: void AllInterfaceNotificationL(const RMessage2& aMessage); williamr@4: void CompleteAllInterfaceNotificationL(TInt aError); williamr@4: void CancelAllInterfaceNotification(); williamr@4: williamr@4: void DataTransferredL(const Den::RSafeMessage& aMessage); williamr@4: void DataSentNotificationRequestL(const Den::RSafeMessage& aMessage); williamr@4: void DataSentNotificationCancel(const Den::RSafeMessage& aMessage); williamr@4: void DataReceivedNotificationRequestL(const Den::RSafeMessage& aMessage); williamr@4: void DataReceivedNotificationCancel(const Den::RSafeMessage& aMessage); williamr@4: void DataMonitoringNotificationRequestL(const Den::RSafeMessage& aMessage, TDataMonitoringDirection aDirection); williamr@4: void DataMonitoringNotificationCancel(const Den::RSafeMessage& aMessage, TDataMonitoringDirection aDirection); williamr@4: williamr@4: void IsSubConnectionActiveRequestL(const Den::RSafeMessage& aMessage); williamr@4: void IsSubConnectionActiveCancel(const Den::RSafeMessage& aMessage); williamr@4: williamr@4: void ExtractEnumInfoL(RBuf8& aBuffer, TUint aCount, TInt aSize, TUint aIndex, TDes8& aPckg); williamr@4: void EnumerateConnectionClientsL(); williamr@4: void GetConnectionClientInfoL(); williamr@4: void RequestDataPlaneEnumerationL(TLegacyConnEnumClients aClientType); williamr@4: void EnumerateConnectionSocketsL(); williamr@4: void CompleteDataPlaneEnumeration(const Messages::TNodeId& aPeer, TInt aCount, HBufC8* aInfo, TInt aError); williamr@4: void GetConnectionSocketInfoL(); williamr@4: void ServiceChangeNotification(TUint32 aId, const TDesC& aType); williamr@4: void FinalCompleteAllBlockedMessages(TInt aResult); williamr@4: void CancelProviderRequests(); williamr@4: williamr@4: williamr@4: #ifndef AVAILABILITY_READY williamr@4: void EnumerateConnectionsL(const RMessage2& aMessage); williamr@4: #endif williamr@4: williamr@4: // SubConnection-oriented RConnection method support williamr@4: void EnumerateSubConnectionsL(const Den::RSafeMessage& aMessage); williamr@4: void GetSubConnectionInfoL(const Den::RSafeMessage& aMessage); williamr@4: williamr@4: static TBool DoesConnectionInfoExist(const TDesC8& aInfoBuf, const TConnectionClientInfo& aInfo); williamr@4: protected: williamr@4: ADataMonitoringProvider* FetchConnDataMonitoringProvider() const; williamr@4: ADataMonitoringProvider* FetchSubConnDataMonitoringProvider() const; williamr@4: williamr@4: //global notifications williamr@4: void InterfaceStateChangeNotification(TDesC8& aInfo); williamr@4: void RequestServiceChangeNotificationL(const Den::RSafeMessage& aMessage); williamr@4: void ControlL(TUint aOptionName, TUint aMessageId); williamr@4: williamr@4: // Underlying implementations of individual RConnection methods relating to subconnections williamr@4: void AllSubConnectionNotificationL(); williamr@4: void CancelAllSubConnectionNotification(); williamr@4: williamr@4: private: williamr@4: RMessage2 iAllSubConnectionNotificationMessage; williamr@4: williamr@4: TInterfaceChangeQueue iInterfaceChangeQueue; // queue of interface notifications received williamr@4: williamr@4: TUint iConnectionInfoCount; williamr@4: TUint iConnectionClientCount; williamr@4: RBuf8 iConnectionClientBuf; williamr@4: TUint iConnectionSocketCount; williamr@4: RBuf8 iConnectionSocketBuf; williamr@4: Den::RSafeMessage iEnumConnMsg; //< During a Data plane enum holds blocked client msg williamr@4: TUint* iDPEnumCount; //< During a Data plane enum points to count recipient williamr@4: RBuf8* iDPEnumBuf; //< During a Data plane enum points to data buf williamr@4: RArray iEnumConnSockCandidateSCPRs; //< During a Data plane enum is list of SCPRs for connection williamr@4: williamr@4: RMessage2* iMessage; //current message valid only within ProcessMessageL call williamr@4: CConnection& iConnection; williamr@4: williamr@4: RPointerArray iSubConnections; //client classes servicing sub-connection williamr@4: //related functionality requested via legacy RConnection API. sub-connections williamr@4: //objects are owned by AConnectionLegacy instance and don't have RSubConnection williamr@4: //client side. williamr@4: CConnManager* iConnManager; //client class servicing connection manager williamr@4: //related functionality requested via legacy RConnection API. CConnManager williamr@4: //object is owned by AConnectionLegacy instance and does't have RConnManager williamr@4: //client side. williamr@4: // Flags for pending RConnection requests williamr@4: TBool iServiceChangeNotificationPending; williamr@4: williamr@4: // IsSubConnectionActive support williamr@4: ADataMonitoringProvider* iConnActivityDataMonProv; williamr@4: ESock::CActivityTimer* iActivityTimer; williamr@4: TBool iClientsSubConnectionActiveState; williamr@4: TUint iInitialSentDataVolume; williamr@4: TUint iInitialReceivedDataVolume; williamr@4: TUint iRequestedClientActivityTimerPeriod; williamr@4: TBool iOutstandingIsSubConnectionActiveRequest; williamr@4: RMessage2 iOutstandingIsSubConnectionActiveMessage; williamr@4: williamr@4: TBool iDeferredSubConnectionNotificationEnable; williamr@4: TSubConnectionEventQueue iSubConnectionEventQueue; // queue of subconnection events received williamr@4: williamr@4: // EnumerateConnection and GetConnectionInfo use this. williamr@4: RPointerArray iConnectionInfoPtrArray; williamr@4: williamr@4: // AllInterfaceNotification support williamr@4: RMessage2 iAllInterfaceNotificationMessage; williamr@4: TInterfaceChangeQueue iNotificationQueue; williamr@4: Messages::TNodeId iAllInterfaceNotificationWorker; williamr@4: williamr@4: protected: williamr@4: static const TAnyFn iInterfaceVTableF[]; williamr@4: }; williamr@4: williamr@4: williamr@4: } //namespace ESock williamr@4: williamr@4: #endif williamr@4: // __SS_CONNLEGACY_H__ williamr@4: