bluetooth/btstack/eirman/eirmansession.h
branchRCL_3
changeset 17 32ba20339036
parent 0 29b1cd4cb562
child 18 1f10b9300be6
--- 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