diff -r 9f17f914e828 -r 32ba20339036 bluetooth/btstack/eirman/eirmansession.h --- a/bluetooth/btstack/eirman/eirmansession.h Tue May 11 17:15:36 2010 +0300 +++ b/bluetooth/btstack/eirman/eirmansession.h Tue May 25 13:54:55 2010 +0300 @@ -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: + 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); + 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(); - // ServiceL handlers +private: // from MEirManagerNotifiee + virtual void MemnEirBlockAvailable(TEirTag aTag, TUint aSpaceForTag); + +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 RegisterTag(const RMessage2& aMessage); TInt RegisterSpaceAvailableListener(const RMessage2& aMessage, TBool& aComplete); TInt CancelSpaceAvailableListener(); + TInt NewData(const RMessage2& aMessage); TInt SetData(const RMessage2& aMessage); - TInt NewData(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