diff -r e5f94a37a5fc -r 230aed0f16aa bluetooth/btstack/eirman/eirmansession.h --- a/bluetooth/btstack/eirman/eirmansession.h Thu Jun 17 22:32:21 2010 +0100 +++ b/bluetooth/btstack/eirman/eirmansession.h Thu Jul 22 16:44:39 2010 +0100 @@ -1,4 +1,4 @@ -// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 2007-2010 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" @@ -27,41 +27,115 @@ #include "eirmanager.h" class CEirManServer; +class CEirManInternalSession; -NONSHARABLE_CLASS(CEirManSession) : public CSession2, public MEirManagerNotifiee +NONSHARABLE_CLASS(MEirSessionNotifier) { public: - static CEirManSession* NewL(CEirManServer& aServer); + virtual void MesnRegisterComplete(TInt aResult) = 0; + virtual void MesnSpaceAvailable(TUint aSpaceForTag) = 0; + }; + +NONSHARABLE_CLASS(MEirInternalSessionNotifier) + { +public: + virtual void MeisnRegisterComplete(TInt aResult) = 0; + virtual void MeisnSpaceAvailable(TUint aSpaceForTag) = 0; + virtual void MeisnSetDataError(TInt aError) = 0; + }; + +NONSHARABLE_CLASS(CEirManSession) : public CBase, public MEirManagerNotifiee + { +public: + static CEirManSession* NewL(CEirManServer& aServer, MEirSessionNotifier& aParent, TBool aInternalSession); ~CEirManSession(); void NotifyEirFeatureState(TInt aResult); + + void RegisterTag(TEirTag aTag); + TInt SetData(const TDesC8& aData, TEirDataMode aMode); + TInt NewData(TInt aRequiredLength); + TEirTag EirTag() const; + private: - CEirManSession(CEirManServer& aServer); + CEirManSession(CEirManServer& aServer, MEirSessionNotifier& aParent, TBool aInternalSession); void ConstructL(); + void DeregisterTag(); + +private: // from MEirManagerNotifiee + virtual void MemnEirBlockAvailable(TEirTag aTag, TUint aSpaceForTag); - // ServiceL handlers - void RegisterTag(const RMessage2& aMessage); - TInt RegisterSpaceAvailableListener(const RMessage2& aMessage, TBool& aComplete); - TInt CancelSpaceAvailableListener(); - TInt SetData(const RMessage2& aMessage); - TInt NewData(const RMessage2& aMessage); +public: + TDblQueLink iLink; +private: + CEirManServer& iEirManServer; // unowned + MEirSessionNotifier& iParent; + TEirTag iEirTag; + TEirTag iPendingEirTag; + TBool iRegisterPending; + TBool iInternalSession; + }; + +NONSHARABLE_CLASS(CEirManExternalSession): public CSession2, public MEirSessionNotifier + { +public: + static CEirManExternalSession* NewL(CEirManServer& aServer); + ~CEirManExternalSession(); + +private: + void ConstructL(CEirManServer& aServer); + CEirManExternalSession(); + void RegisterTagL(const RMessage2& aMessage); + void RegisterSpaceAvailableListenerL(const RMessage2& aMessage); + void CancelSpaceAvailableListenerL(const RMessage2& aMessage); + void NewDataL(const RMessage2& aMessage); + void SetDataL(const RMessage2& aMessage); + +private: void CompleteSpaceAvailableRequest(TUint aBytesAvailable); - void DeregisterTag(); private: // CSession2 virtuals virtual void ServiceL(const RMessage2& aMessage); -private: // from MEirManagerNotifiee - virtual void MemnEirBlockAvailable(TEirTag aTag, TUint aSpaceForTag); - private: - CEirManServer& iEirManServer; // unowned - TEirTag iEirTag; - TEirTag iPendingEirTag; - TUint iLastSpaceOffered; - TBool iSpaceAvailableListenerOutstanding; + virtual void MesnRegisterComplete(TInt aResult); + virtual void MesnSpaceAvailable(TUint aSpaceForTag); + +private: RMessage2 iRegisterMessage; RMessage2 iDataAvailableListenerMessage; + TUint iLastSpaceOffered; + + CEirManSession* iSession; + }; + +NONSHARABLE_CLASS(CEirManInternalSession) : public CBase, public MEirSessionNotifier + { +public: + static CEirManInternalSession* NewL(CEirManServer& aServer, MEirInternalSessionNotifier& aParent); + ~CEirManInternalSession(); + + void RegisterTag(TEirTag aTag); + void SetData(const TDesC8& aData, TEirDataMode aMode); + TInt NewData(TInt aRequiredLength); + +private: + CEirManInternalSession(MEirInternalSessionNotifier& aParent); + void ConstructL(CEirManServer& aServer); + + static TInt SetDataCb(TAny* aThis); + void DoSetData(); + +private: // from MEirManagerNotifiee + virtual void MesnRegisterComplete(TInt aResult); + virtual void MesnSpaceAvailable(TUint aSpaceForTag); + +private: + CEirManSession* iSession; + MEirInternalSessionNotifier& iParent; + CAsyncCallBack* iSetDataCb; + HBufC8* iPendingData; + TEirDataMode iPendingMode; }; #endif // _EIRMANSESSION_H