diff -r 000000000000 -r 4e1aa6a622a0 accessoryservices/remotecontrolfw/server/inc/bulksession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/accessoryservices/remotecontrolfw/server/inc/bulksession.h Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,169 @@ +// Copyright (c) 2008-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 REMCONBULKSESSION_H +#define REMCONBULKSESSION_H + +#include +#include +#include + +class CRemConBulkServer; +class CRemConLogger; +class CBearerManager; +class CRemConMessage; +class CActiveHelper; +class CMessageQueue; + +/** +Rem Con session. +*/ +NONSHARABLE_CLASS(CRemConBulkSession) : public CSession2 + { +public: + /** + Factory method. + @param aServer The server. + @param aMessage Handle on the client message triggering this session creation. + @return Ownership of a new session. + */ + static CRemConBulkSession* NewL(CRemConBulkServer& aServer, + const RMessage2& aMessage); + + ~CRemConBulkSession(); + +public: // called by the server + /** + @return This session's unique identifier. + */ + inline TUint Id() const; + + inline void SetId(TUint aId); + + inline RArray& InterestedAPIs(); + + /** + @return Information about the client using this session. + */ + inline const TClientInfo& ClientInfo() const; + + /** + Writes aMsg to the client's Receive message (NB RMessage2::Write may fail) + and completes the client's Receive message with any error. + @return Error. + */ + TInt WriteMessageToClient(const CRemConMessage& aMsg); + + /** + Accessor for the currently outstanding client Receive message. + @return Handle to client's receive message. + */ + inline const RMessage2& CurrentReceiveMessage() const; + + +private: + /** + @param aServer The server. + @param aLogger The logger. + @param aId The unique ID of the new session. + */ + CRemConBulkSession(CRemConBulkServer& aServer); + + /** + 2nd-phase construction. + @param aMessage The message received from the client. + */ + void ConstructL(const RMessage2& aMessage); + +private: // from CSession2 + /** + Called when a message is received from the client. + @param aMessage Message received from the client. + */ + void ServiceL(const RMessage2& aMessage); + +private: // utility- IPC command handlers + void Send(const RMessage2& aMessage); + void SendUnreliable(const RMessage2& aMessage); + void SendCancel(const RMessage2& aMessage); + void Receive(const RMessage2& aMessage); + void ReceiveCancel(const RMessage2& aMessage); + +private: // utility + void DoSendL(const RMessage2& aMessage); + + /** + Utility to complete the given message with the given error code. + @param aMessage Message to complete. + @param aError Error to complete with. + */ + void CompleteClient(const RMessage2& aMessage, TInt aError); + + CRemConMessage* DoCreateMessageL(const RMessage2& aMessage, TBool aReliable); + TInt SendToServer(CRemConMessage& aMsg); + + +private: // unowned + CRemConBulkServer& iServer; + +private: // message handles for asynchronous IPC requests + RMessage2 iReceiveMsg; + +private: // owned + // The client's process ID, secure ID and caps. + TClientInfo iClientInfo; + + // session identifier - mapped to the control session reference... + TUint iId; + + RArray iInterestedAPIs; // cached from control server. + }; + +// Inlines + +TUint CRemConBulkSession::Id() const + { + return iId; + } + +void CRemConBulkSession::SetId(TUint aId) + { + iId = aId; + } + +const RMessage2& CRemConBulkSession::CurrentReceiveMessage() const + { + return iReceiveMsg; + } + +RArray& CRemConBulkSession::InterestedAPIs() + { + return iInterestedAPIs; + } + +const TClientInfo& CRemConBulkSession::ClientInfo() const + { + return iClientInfo; + } + +#endif // REMCONBULKSESSION_H +