--- 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