diff -r 000000000000 -r dfb7c4ff071f datacommsserver/esockserver/inc/SS_PMAN.H --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/datacommsserver/esockserver/inc/SS_PMAN.H Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,272 @@ +// Copyright (c) 1997-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 __SS_PMAN_H__ +#define __SS_PMAN_H__ + +#include +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#endif + +#include + +#ifdef SYMBIAN_ZERO_COPY_NETWORKING +#include +#endif + +namespace ESock +{ +class CSocket; +class CHostResolver; +class CServiceResolver; +class CNetDatabase; +} +class CSocketServer; +class CProtocolBase; +class CMBufManager; +class CSockSession; +struct TProtocolDesc; +class CProtocolRef; +class CMBufManager; +class CDeltaTimer; +class CESockIniData; + + // + // Housekeeping structures used internally by the Protocol manager. + // +class CProtocolFamilyBase; +class CProtocolBase; + +typedef TSglQue TProtocolRefList; +NONSHARABLE_CLASS(CProtocolFamilyRef) : public CBase +/** +@internalComponent +*/ + { +#ifdef __FLOG_ACTIVE + friend class TProtocolManagerLogger; +#endif +public: + enum TManagerProtFamilyFlags + { + EInstalled=0x00000001, + }; + TSglQueLink iLink; +public: + ~CProtocolFamilyRef(); + static CProtocolFamilyRef* GetProtocolFamilyL(TDesC& aName); + void LoadL(); + CProtocolFamilyBase& ProtocolFamilyL(TBool aInstall=ETrue); + inline void Close(); + inline void FamilyClosed(); +private: + CProtocolFamilyRef(); +private: + TInt iFlags; + CProtocolFamilyBase* iProtocolFamily; + HBufC* iLibFileName; + }; + +class Nif; +NONSHARABLE_CLASS(CProtocolRef) : public CBase +/** +@internalComponent +*/ + { +friend class Nif; +public: + enum TManagerProtocolFlags + { + EInited=0x00000001, + EStarted=0x00000002, + EBound=0x00000004, + EThreePlaneCommsBased=0x00000008, + }; + TSglQueLink iLink; + +public: + ~CProtocolRef(); + TBool Matches(TUint anAddrFamily,TUint aSocketType,TUint aProtocol); + static CProtocolRef* GetProtocolL(const TDesC& aName); + static CProtocolRef* MakeRefL(const TDesC& aName,CProtocolFamilyRef* aFamily=NULL,TServerProtocolDesc* info=NULL); + static CProtocolRef* MakeRefL(const TDesC& aName, TServerProtocolDesc* info); + inline void LoadAndBindL(); + CProtocolBase* Protocol(); + inline CProtocolFamilyBase* Family(); + TServerProtocolDesc& Info(); + inline void ProtocolClosed(); + inline void Close(); + inline TPtrC Tag(); + inline void SetFlag(TUint aFlag){iFlags=aFlag;}; + inline TUint GetFlag(){return iFlags;}; + +private: + void StartL(); + void ResolveBindingL(); + void LoadL(TBool aLoadForBinding); + CProtocolRef(); + void DoBindingL(const CESockIniData& anIniFile); + void ProcessBindListL(TPtrC aBindList, const CESockIniData& aIniFile); + static void Cleanup(TAny* aFamily); + static CProtocolRef* GetProtocolNoCreate(TProtocolRefList* aProtocolList, const TDesC& aTag); + +private: + TUid iUid; + HBufC* iTag; + TUint iFlags; + TServerProtocolDesc iInfo; + CProtocolBase* iProtocol; + CProtocolFamilyRef* iFamily; + }; + +class SocketServer; +class CSocketServExtBase; +NONSHARABLE_CLASS(CSocketServExtRef) : public CBase +/** +@internalComponent +*/ + { + friend class CSockManData; +public: + CSocketServExtRef(); + virtual ~CSocketServExtRef(); + void InstallL(const TDesC& aDllName, const TDesC& aParam); + void Remove(); + void Close(); +private: + TDblQueLink iExtLink; + RLibrary iLibrary; + CSocketServExtBase* iExtension; + CAsyncCallBack* iDestructor; +public: + inline CSocketServExtBase* Extension() { return iExtension; } + }; + +/** +@internalComponent +*/ +typedef CSocketServExtBase* (*TSocketServExtInstallFn)(); + +#if !defined (__WINS__) +#define VERBOSE +#endif + +#if defined (VERBOSE) +#define VERBOSE_ONLY(x) x +#else +#define VERBOSE_ONLY(x) +#endif + +class CPlayer; +struct TServerProtocolDesc; + +namespace ESock +{ +class CTransportFlowShim; +} + +class CInternalSocketImpl; +class ProtocolManager +/** +@internalComponent +*/ + { + friend class SocketServer; + friend class ESock::CTransportFlowShim; + friend class ESock::CSocket; + friend class CPlayer; + +public: + static void LoadProtocolL(TUint anAddrFamily, TUint aSocketType, TUint aProtocol, CPlayer* aPlayer); + static void UnLoadProtocolL(TUint anAddrFamily, TUint aSocketType, TUint aProtocol, CPlayer* aPlayer); + static ESock::CHostResolver* NewHostResolverL(TUint anAddrFamily, TUint aSocketType, CPlayer* aPlayer, const TSubSessionUniqueId aSubSessionUniqueId); + static ESock::CServiceResolver* NewServiceResolverL(TUint anAddrFamily, TUint aSocketType, TUint aProtocolId, CPlayer* aPlayer, const TSubSessionUniqueId aSubSessionUniqueId); + static ESock::CNetDatabase* NewNetDatabaseL(TUint anAddrFamily, TUint aSocketType, CPlayer* aPlayer, const TSubSessionUniqueId aSubSessionUniqueId); + static TUint NumProtocols(void); + static TInt ProtocolInfo(TUint anIndex,TProtocolDesc& aProtocol); + static TInt ProtocolInfo(const TDesC& aName,TProtocolDesc& aProtocol); + static TInt ProtocolInfo(const TDesC& aName,TServerProtocolDesc& aProtocol); + static CProtocolBase* FindAndLoadProtocolL(const TDesC& aName, TProtocolType aType=ENormalProtocol); + static CProtocolBase* FindAndLoadProtocolL(TUint aAddrFamily,TUint aSockType,TUint aProtocol); + static void TransferSocketL(ESock::CSocket* aSocket, CPlayer* aPlayer); + static TBool GetDependency(const TDesC& aTag,TPtrC& aList); + static void ProcessIniDataL(); + static void InitL(); + static CInternalSocketImpl* NewInternalSocketL ( TAny* aParams, const TDesC& aName ); + static CInternalSocketImpl* NewInternalSocketL ( TAny* aParams, TUint aAddrFamily, TUint aSockType, TUint aProtocol ); +private: + static void ShutDown(void); + static CProtocolRef* FindProtocolL(TInt anAddrFamily,TUint aSocketType,TInt aProtocol); + static void CleanupProtocol(TAny* aProtocol); + static void AddDependencyL(const TDesC& aDependentsList, const TDesC& aModuleToLoad); + static void SafeCleanupProtocol(TAny* aProtocolRef); + }; + +class CWorkerThread; +class SocketServer +/** +@internalComponent +*/ + { +public: + static void InitL(CWorkerThread* aWorker); + static void ShutDown(void); + static RHeap* Heap(); +#ifdef SYMBIAN_ZERO_COPY_NETWORKING + static RCommsBufPond GetCommsBufPond(); +#else + static CMBufManager* GetMBufManager(); +#endif + static CDeltaTimer* GetTimer(); + static CSocketServer* GetSocketServer(); + static void NewSession(); + static void SessionClosing(); + static TBool IsShuttingDown(); + static void ShutdownExtensions(); + static void InstallExtensionL(const TDesC& aDllName, const TDesC& aArgs); + static IMPORT_C void __DbgForceLoadMBufManagerL(); + static IMPORT_C void __DbgForceKillMBufManager(); + }; + +#ifdef __MARM__ +//const TInt KTimerGranularity = 100000; + +/** +@internalComponent +*/ +const TInt KTimerGranularity = 15500; +#else +const TInt KTimerGranularity = 80000; +#endif + +#ifdef __FLOG_ACTIVE +// Dumping out the set of loaded families and protocols aids debugging shutdown hangs +NONSHARABLE_CLASS(TProtocolManagerLogger) + { +public: + static void LogLoadedInfo(); + }; +#endif + + +#include + +#endif