diff -r 000000000000 -r dfb7c4ff071f datacommsserver/esockserver/test/protocols/ipc/IPC_MAIN.H --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/datacommsserver/esockserver/test/protocols/ipc/IPC_MAIN.H Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,187 @@ +// 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: +// + +#if !defined(__IPC_MAIN_H__) +#define __IPC_MAIN_H__ + +#include +#include +#include + +class CIpcProtocolFamily: public CProtocolFamilyBase +/** +@internalComponent +*/ + { +private: + CIpcProtocolFamily(); +public: + static CIpcProtocolFamily * NewL(); + TInt Install(); + TInt Remove(); + CProtocolBase * NewProtocolL(TUint aSockType,TUint aProtocol); + TUint ProtocolList(TServerProtocolDesc *& aProtocolList); + }; + +class CIpcProvdBase; +class CIpcProtocolHolder : public CBase +/** +@internalComponent +*/ + { +friend class CIpcProtocol; +private: + CIpcProtocolHolder(); +public: + static CIpcProtocolHolder* NewL(); +// Protocol internal functions. + void SocketRemoved(TInt aPort); + TInt GetNextFreePort(); + TInt CheckAndAllocatePortNumber(TInt aPort); + void Add(CIpcProvdBase* aSAP); + CIpcProvdBase* FindPeerForConnection(TInt aPort); + ~CIpcProtocolHolder(); +private: + TDblQue iSAPs; + TInt iNumSockets; + CBitMapAllocator* iPortNumbers; + }; + +class CIpcProtocol: public CProtocolBase +/** +@internalComponent +*/ + { +public: + virtual ~CIpcProtocol(); + static CIpcProtocol *NewL(TInt aProtocol); + +// Calls from the socket server which we implement + CServProviderBase *NewSAPL(TUint aProtocol); + void InitL(TDesC& aTag); + void StartL(void); + TBool CanCreateSockets(); + void Identify(TServerProtocolDesc *)const; + +// Calls from the socket server which we don't implement + virtual CHostResolvProvdBase *NewHostResolverL(); + virtual CServiceResolvProvdBase *NewServiceResolverL(); + virtual CNetDBProvdBase* NewNetDatabaseL(); + +// Calls from the socket server and other protocols which we just panic + void BindL(CProtocolBase *aProtocol, TUint anId); + virtual void BindToL(CProtocolBase *protocol); + TInt Send(RMBufChain &,CProtocolBase* aSourceProtocol); + void Process(RMBufChain &,CProtocolBase* aSourceProtocol); + TInt Send(TDes8 &, TSockAddr *to,TSockAddr *from,CProtocolBase* aSourceProtocol); + void Process(TDes8 & ,TSockAddr *from,TSockAddr *to,CProtocolBase* aSourceProtocol); + TInt GetOption(TUint level,TUint name,TDes8 &anOption,CProtocolBase* aSourceProtocol); + TInt SetOption(TUint level,TUint name,const TDesC8& option,CProtocolBase* aSourceProtocol); + void Error(TInt anError,CProtocolBase* aSourceProtocol); +private: + CIpcProtocol(TInt aProtocol); +private: + TInt iProtocol; + CIpcProtocolHolder* iStreamProtocolSAPs; + }; + +class CIpcProvdBase : public CServProviderBase +/** +@internalComponent +*/ + { +friend class CIpcProtocolHolder; +public: + enum TIpcProvdState {ECreated=0,EConnected,EWaitingConnect,EDisconnected}; + virtual void RemName(TSockAddr &anAddr)const; + virtual void LocalName(TSockAddr &anAddr)const; + virtual TInt SetLocalName(TSockAddr &anAddr); + virtual TInt SetRemName(TSockAddr& anAddr); + virtual TInt GetOption(TUint level,TUint name,TDes8 &anOption)const; + virtual TInt SetOption(TUint level,TUint name,const TDesC8 &anOption); + virtual void AutoBind( void ); + virtual void Ioctl(TUint level,TUint name,TDes8 *anOption); + virtual void CancelIoctl(TUint aLevel,TUint aName); + virtual TInt PassiveOpen(TUint aQue,const TDesC8 &aConnectionData); + virtual void Shutdown(TCloseType option,const TDesC8 &aDisconnectData); + virtual void ActiveOpen(const TDesC8 &aConnectionData); + virtual ~CIpcProvdBase(); + virtual void Start(); + virtual void ActiveOpen(void); + virtual void Shutdown(TCloseType option); + virtual TInt PassiveOpen(TUint aQue); + virtual void Disconnect(); + void Connected(CIpcProvdBase& aSocket); +// Pure virtual + virtual CIpcProvdBase* GetCloneSocket()=0; + virtual void NewData(TInt aLen)=0; + virtual void CanSend()=0; +protected: + CIpcProvdBase(CIpcProtocolHolder* aProtocol); +protected: + TIpcProvdState iState; + CIpcProtocolHolder* iProtocol; + TInt iLocalAddr; + TInt iRemoteAddr; + CIpcProvdBase* iConnection; +public: + TDblQueLink iLink; + }; + +class CIpcStreamProvd : public CIpcProvdBase +/** +@internalComponent +*/ + { +public: + void NewData(TInt aLen); + void CanSend(); + virtual TUint Write(const TDesC8& aDesc,TUint options, TSockAddr* anAddr=NULL); + virtual void GetData(TDes8 &aDesc,TUint options,TSockAddr *anAddr=NULL); + static CIpcStreamProvd* NewL(CIpcProtocolHolder* aProtocol); + virtual CIpcProvdBase* GetCloneSocket(); +private: + CIpcStreamProvd(CIpcProtocolHolder* aProtocol); + CCirBuffer iBuffer; + }; + +/** +@internalComponent +*/ +enum TIPCProtPanic + { + ECantBind, + ECantBindTo, + ESendCallCantBind, + EProcessCallCantBind, + EErrorUpCallCantBind, + ESetOptionCallCantBind, + EGetOptionCallCantBind, + ECantCreateNetDatabase, + ECantCreateServiceResolver, + ECantCreateHostResolver, + EBadWriteCall, + EBadGetDataCall, + EReadGetTooMuch, + ECloseWithoutDeleteingAllSockets, + EBMABroken + }; + +/** +@internalComponent +*/ +void Panic(TIPCProtPanic aPanic); + +#endif