diff -r 000000000000 -r 63b37f68c1ce connectivitylayer/isce/p2prouter_dll/inc/p2pkernelchannel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/connectivitylayer/isce/p2prouter_dll/inc/p2pkernelchannel.h Fri Nov 06 17:28:23 2009 +0000 @@ -0,0 +1,179 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: +* +*/ + + + +#ifndef __P2PKERNELCHANNEL_H_ +#define __P2PKERNELCHANNEL_H_ + +#include // For TInt, TAny +#include // For TDesC8, +#include // For TMessageQue; +#include "p2prouterchannelifs.h" // For MP2PRouterChIf + +// Forward declarations +class TDfc; +class MP2PChRouterIf; +class TThreadMessage; +class DMsgQueue; + +/* +* Kernel side P2P channel. +*/ +NONSHARABLE_CLASS( DP2PKernelChannel ) : public MP2PRouterChIf + { + + public: + + /* + * Default constructor + */ + DP2PKernelChannel(); + + /* + * Destructor + */ + ~DP2PKernelChannel(); + + /* + * Handles the thread message. Synchronizes the execution + * from multiple client threads to single thread. + * @param aMsg, thread message + * @return, return value of the operation. + */ + TInt HandleRequest( TThreadMessage& aMsg ); + + // From MP2PRouterChIf start + /* + * See comments from MP2PRouterChIf. + */ + void ConnectionLost(); + + /* + * See comments from MP2PRouterChIf. + */ + void EnqueChannelRequestCompleteDfc( TInt aRequest, TInt aStatusToComplete ); + + /* + * See comments from MP2PRouterChIf. + */ + void ReceiveMsg( const TDesC8& aMessage ); + // From MP2PRouterChIf end + + private: + + void Close( const TUint8 aP2PProtocolId ); + + void Closing( const TUint8 aP2PProtocolId ); + + static void EmptyRxDfc( TAny* aPtr ); + + /* + * iKernelChMsgQue callback function in p2p router + * thread context. + * @param aPtr, pointer to self + */ + static void MsgQDfc( TAny* aPtr ); + + void HandleThreadMsg( TThreadMessage& aMsg ); + + void HandleDfcRequest( TThreadMessage& aMsg ); + + TInt HandleSyncRequest( TThreadMessage& aMsg ); + + void DoCancel( TInt aRequest, TInt aMask ); + + void ResetQueues(); + + /* + * Internal class for handling requests. + */ + NONSHARABLE_CLASS( DP2PKernelAsyncRequests ) : public DBase + { + + public: + + /* + * Constructor + * @param aSize, sife of the request list. + */ + DP2PKernelAsyncRequests( const TInt aSize ); + + /* + * Destructor + */ + ~DP2PKernelAsyncRequests(); + + /* + * Completes the request if it is pending. + * Do not call with FM held. + * @param aRequest, request to complete + * @param aStatusToComplete, completion status to request to complete + */ + void Complete( const TUint aRequest, const TInt aStatusToComplete ); + + /* + * Check does is the request pending. + * Do not call with FM held. + * @param aRequest, request to check + */ + TBool IsPending( const TUint aRequest ); + + /* + * Set the request pending. + * Do not call with FM held. + * @param aRequest, request to set pending + * @param aDfc, pointer to DFC function which is enqued when request is completed + * @param aStatus, pointer to status which is modified when request is completed + */ + void SetPending( const TUint aRequest, TDfc* aDfc, TInt* aStatus ); + + private: + + // Added convention: + // Prefix "iSh" means shared member variable + // Prefix "gSh" means shared global variable + + // Guarding lock. + NFastMutex* iRequestLock; + TDfc** iShDfcFunctionList; + TInt** iShRequestStatusList; + + }; + + private: + + // Protocol id of this channel. + // Only acccessed from p2p router thread. + TUint8 iP2PProtocolId; + // Owned, synhronized internally with fastmutexes + DMsgQueue* iRx; + // Owned + TDfc* iEmptyRxDfc; + // Not owned, just using + // Only acccessed from p2p router thread. + TDes8** iPtrPtrToRxBuf; + MP2PChRouterIf* iRouterIf; + TMessageQue iKernelChMsgQue; + // Synhronized internally with fastmutexes + DP2PKernelAsyncRequests* iRequests; + + }; + + + +#endif /* __P2PKERNELCHANNEL_H_ */