diff -r 000000000000 -r 7f656887cf89 libraries/iosrv/server/server.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libraries/iosrv/server/server.h Wed Jun 23 15:52:26 2010 +0100 @@ -0,0 +1,176 @@ +// server.h +// +// Copyright (c) 2006 - 2010 Accenture. All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the "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: +// Accenture - Initial contribution +// + +#ifndef __SERVER_H__ +#define __SERVER_H__ + +#ifdef EKA2 +#define RMsg RMessage2 +#else +#define RMsg RMessage +#endif + +#include +#include +#include +#include "iocli.h" +#include "clientserver.h" +#include "log.h" +#include "config.h" + +enum TIoPanicReason + { + EPanicBadDescriptor = 0, + EPanicBadHandle = 1, + EPanicUnknownOpcode = 2, + EPanicReadAlreadyPending = 3, + EPanicReadKeyAlreadyPending = 4, + EPanicReadWhenNotAttached = 5, + EPanicWriteAlreadyPending = 6, + EPanicWriteWhenNotAttached = 7, + EPanicReadKeyWhenNotAttached = 8, + EPanicCursorPosWhenNotAttached = 9, + EPanicSetCursorPosAbsWhenNotAttached = 10, + EPanicSetCursorPosRelWhenNotAttached = 11, + EPanicSetCursorHeightWhenNotAttached = 12, + EPanicSetTitleWhenNotAttached = 13, + EPanicClearScreenWhenNotAttached = 14, + EPanicClearToEndOfLineWhenNotAttached = 15, + EPanicScreenSizeWhenNotAttached = 16, + EPanicInvalidPipeId = 17, + EPanicSetConsoleModeWhenNotAttached = 18, + EPanicNotAnEndPoint = 19, + EPanicNotAPipe = 20, + EPanicNotAConsole = 21, + EPanicNotAReadWriteObject = 22, + EPanicNotAReadObject = 23, + EPanicNotAWriteObject = 24, + EPanicNotAPersistentConsole = 25, + EPanicNotAValidContainerType = 26, + EPanicFindNextWithNoFindFirst = 27, + EPanicOpenFoundWithNoFind = 28, + EPanicSetTitleAlreadyPending = 29, + EPanicCursorPosAlreadyPending = 30, + EPanicSetCursorPosAlreadyPending = 31, + EPanicSetCursorHeightAlreadyPending = 32, + EPanicClearScreenAlreadyPending = 33, + EPanicClearToEndOfLineAlreadyPending = 34, + EPanicScreenSizeAlreadyPending = 35, + EPanicSetReadModeAlreadyPending = 36, + EPanicCannotReadFromUnderlyingConsole = 37, + EPanicSetAttributesWhenNotAttached = 38, + EPanicSetAttributesAlreadyPending = 39, + EPanicSetModeAlreadyPending = 40 + }; + +void PanicClient(const RMsg& aMessage, TIoPanicReason aReason); + +class CIoObject; +class CIoLog; +class CIoPipe; +class CIoConsole; +class CIoFile; +class CIoNull; +class CIoPersistentConsole; +class CIoReadWriteObject; +class CIoReadObject; +class CIoWriteObject; +class MIoWriteEndPoint; + +class CShutdownTimer : public CTimer + { + enum {KShutdownDelay = 0x2000000}; +public: + CShutdownTimer(); + void ConstructL(); + void Start(); +private: + void RunL(); + }; + + +#ifdef EKA2 +class CIoServer : public CServer2 +#else +class CIoServer : public CServer +#endif + { +public: +#ifdef EKA2 + static CServer2* NewLC(); +#else + static CServer* NewLC(); +#endif + ~CIoServer(); + void AddSession(); + void DropSession(); + CIoPipe& CreatePipeLC(); + CIoConsole& CreateConsoleLC(const TDesC& aImplementation, const TDesC& aTitle, TSize aSize, MIoWriteEndPoint* aUnderlyingConsole, TUint aOptions); + CIoFile& CreateFileLC(const TDesC& aName, RIoFile::TMode aMode); + CIoNull& CreateNullLC(); + CIoPersistentConsole& CreatePersistentConsoleLC(const TDesC& aName, const TDesC& aTitle, const RMsg& aMessage); + CIoReadObject& CreateReadObjLC(); + CIoWriteObject& CreateWriteObjLC(); + CIoReadObject* NextReadObj(TThreadId aOwningThread) const; + CIoWriteObject* NextWriteObj(TThreadId aOwningThread) const; + CIoReadObject* LastOpenedReadObj(TThreadId aOwningThread) const; + CIoWriteObject* LastOpenedWriteObj(TThreadId aOwningThread) const; + CIoPersistentConsole& FindPersistentConsoleL(const TDesC& aName); + CIoObject* FindObjectByName(RIoHandle::TType aType, TInt& aFindHandle, const TDesC& aMatch, TName& aName) const; + CIoObject& OpenObjectLC(TInt aFindHandle); + const TIoConfig& Config(); + void PersistentConsoleAddL(const TDesC16& aName, const CIoPersistentConsole& aCons); + void PersistentConsoleRemove(const TDesC16& aName, const CIoPersistentConsole& aCons); +private: + CIoServer(); + void ConstructL(); +#ifdef EKA2 + virtual CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const; +#else + virtual CSharableSession* NewSessionL(const TVersion& aVersion) const; +#endif + TInt RunError(TInt aError); + CIoReadWriteObject* DoFindObj(RIoHandle::TType aType, TThreadId aOwningThread, TBool aNext) const; +private: + RFs iFs; + TInt iSessionCount; + CShutdownTimer iShutdownTimer; + CObjectConIx* iIoObjectContainerIndex; + CObjectCon* iIoObjectContainer; + TUint iNextReadObjId; + TUint iNextWriteObjId; + TIoConfig iConfig; + RPtrHashMap iPersistentConsoleNames; +#ifdef IOSRV_LOGGING + CIoLog* iLog; +#endif + }; + + +TInt DesLengthL(const RMsg& aMessage, TInt aParam); +TInt MaxDesLengthL(const RMsg& aMessage, TInt aParam); +void MessageReadL(const RMsg& aMessage, TInt aParam, TDes8& aDes); +void MessageReadL(const RMsg& aMessage, TInt aParam, TDes8& aDes, TInt aOffset); +void MessageReadL(const RMsg& aMessage, TInt aParam, TDes16& aDes); +void MessageReadL(const RMsg& aMessage, TInt aParam, TDes16& aDes, TInt aOffset); +void MessageWriteL(const RMsg& aMessage, TInt aParam, const TDesC8& aDes); +void MessageWriteL(const RMsg& aMessage, TInt aParam, const TDesC16& aDes); +TInt MessageWrite(const RMsg& aMessage, TInt aParam, const TDesC8& aDes); +TInt MessageWrite(const RMsg& aMessage, TInt aParam, const TDesC16& aDes); +TBool MessagePending(const RMsg& aMessage); +TThreadId ClientThreadIdL(const RMsg& aMessage); +TFullName ClientNameL(const RMsg& aMessage); +void Complete(const RMsg& aMessage, TInt aError); +void CompleteIfPending(const RMsg& aMessage, TInt aError); + +#endif // __SERVER_H__ +