diff -r 000000000000 -r bde4ae8d615e os/ossrv/lowlevellibsandfws/pluginfw/Framework/frame/EComServerSession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/ossrv/lowlevellibsandfws/pluginfw/Framework/frame/EComServerSession.h Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,166 @@ +// 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: +// Definition of the CEComServerSession class +// +// + +/** + @internalComponent + @file +*/ + +#ifndef __ECOMSERVERSESSION_H__ +#define __ECOMSERVERSESSION_H__ + +#include +#include "EComServer.h" + +#include "clientrequest.h" + +// __________________________________________________________________________ +// +/** + @internalComponent + @since 7.0 + Provides the server side session which + handles the messages from REComSession, unpacking the input + message parameters, calling the server and packaging the + the returned data as output message parameters. + Warning : The implementation of the ListImplementations + method for returning an arbitrary sized data set + uses a 2 phase collection method that + will not work IF the session is shared and two + client calls on this method are interleaved. + It leads to incorrect results for one of them, + with potentially fatal results. so... + DO NOT SHARE SERVER SIDE SESSIONS BETWEEN CLIENTS + */ + +class CEComServerSession : public CSession2 + { +public: + + CEComServerSession(); + + + void CreateL(); +/** + @fn void CompleteNotifications(TInt aCompletionCode) + Intended Usage : Completes all the outstanding notification requests with the + supplied error code. + @since 7.0 + @param aCompletionCode The code with which to complete the notifications. + @pre REComServerSession is fully constructed. + @post The notifications contained on the iNotificationRequests array + have been completed with aCompletionCode, and the array has + been cleared. + */ + + void CompleteNotifications(TInt aCompletionCode); + +private: + + inline CEComServer& Server(); + + + ~CEComServerSession(); + + + void ServiceL(const RMessage2& aMessage); + + void ServiceL(const TClientRequest& aMessage); + + + inline TBool ReceivePending() const; + + + void DoListImplementationsL(const TClientRequest& aMessage); + + + TBool DoCollectListL(const TClientRequest& aMessage); + + void DoListExtendedInterfacesL(const TClientRequest& aMessage); + + void DoGetResolvedImplementationL(const TClientRequest& aMessage); + void UnpackMatchStrAndExtendedInterfacesFromClientL(const TClientRequest& aMessage, + RExtendedInterfacesArray& aExtendedInterfaces, + RBuf8& aMatchStr); + + void DoSetGetParametersL(const TClientRequest& aMessage); +/** + @fn CleanupInternalList() + Intended Usage : Releases the list of CImplementationInformation pointers + that are stored within the iList variable after a successful + call to the DoListImplementations service. + @since 7.0 + @pre REComServerSession is fully constructed. + @post The resources held by iList are released, and iList is NULL. + */ + + void CleanupInternalList(); + +private: + /** + The externalised data from a ListImplementations service call + held for return, pending the collection service call. + */ + + CBufFlat* iMemoryStore; + + /** The last ListImplementations service request */ + + TInt iListContext; + + /** + A successful ListImplementations service request + generates a list of CImplementationInformation pointers + that are stored within this list. + */ + + RImplInfoArray* iList; + + /** The array of client notification requests outstanding */ + + struct SEComNotification + { + /** Notification status object */ + TInt iRequestStatusHandle; + /** Client identity */ + TClientRequest iMessage; + }; + + RArray iNotificationRequests; + + /** A friend class for testing purposes */ + friend class TEComServer_StateAccessor; + /** A friend class for testing purposes */ + friend class TEComServerSession_StateAccessor; + }; + +/** +@fn PanicClient(const RMessage& aMessage,TInt aPanicCode) +Intended Usage : A global function to complete aMessage with the supplied panic code. +@since 7.0 +@param aPanicCode The error code with which to complete the message. +@pre None. +@post aMessage has been completed. +@internalComponent +*/ +extern void PanicClient(const TClientRequest& aMessage,TInt aPanicCode); + +#include "EComServerSession.inl" + +#endif // __ECOMSERVERSESSION_H__ + +