datacommsserver/esockserver/core_states/ss_esockactivities.h
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/core_states/ss_esockactivities.h	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,125 @@
+// Copyright (c) 2006-2009 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"
+// 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:
+// ESock Sub Session Activities
+// 
+//
+
+/**
+ @file
+ @internalComponent
+*/
+
+#ifndef SYMBIAN_SS_ESOCKACTIVITIES_H
+#define SYMBIAN_SS_ESOCKACTIVITIES_H
+
+#include <elements/mm_states.h>
+#include <elements/mm_activities.h>
+#include <comms-infras/ss_mmnode.h>
+
+
+#ifdef _DEBUG
+// Panic category for "absolutely impossible!" vanilla ASSERT()-type panics from this module
+// (if it could happen through user error then you should give it an explicit, documented, category + code)
+_LIT(KSpecAssert_ESockCrStaESclAH, "ESockCrStaESclAH");
+#endif
+
+namespace ESock
+{
+	class CMMSockSubSession;
+}
+
+namespace SessActivities
+{
+}
+
+namespace SubSessActivities
+{
+
+//
+//CESockClientActivityBase - client (IPC) originated activity base
+class CESockClientActivityBase : public MeshMachine::CNodeRetryActivity
+  //@internalTechnology
+	{
+public:
+    static MeshMachine::CNodeActivityBase* NewL(const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode);
+
+public:
+	//Remove second parameter after all CSock(Sub)Session calls completing/reading messages have been removed (all sub sessions MM based)
+	void AcquireOwnership(RMessage2& aMessage, CSockSubSession& aSubSession);
+	void PanicClient(TESockPanic aPanic);
+	void ReadL(TInt aSrcParamIndex, TDes8& aDes);
+	void WriteL(TInt aSrcParamIndex, TDes8& aDes);
+	TInt Function();
+	TInt Int0() { return iMessage.Int0(); }
+	TInt Int1() { return iMessage.Int1(); }
+	void HasCapabilityL(TCapability aCapability, const char* aDiagnosticMessage=0);
+	TInt GetDesLengthL(TInt aSrcParamIndex);
+ 	TInt GetDesMaxLengthL(TInt aSrcParamIndex);
+
+protected:
+	CESockClientActivityBase(const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode)
+	:	MeshMachine::CNodeRetryActivity(aActivitySig, aNode)
+		{
+		//Either we are the close activity or there should not be the close activity
+		//running when this activity is being created.
+		__ASSERT_DEBUG(aActivitySig.iId==ESock::ECFActivityDestroy || aNode.CountActivities(ESock::ECFActivityDestroy)==0, User::Panic(KSpecAssert_ESockCrStaESclAH, 1));
+		}
+	virtual ~CESockClientActivityBase();
+	virtual void StartL(MeshMachine::TNodeContextBase& aContext, const Messages::XNodePeerId& aOriginator, const NetStateMachine::TStateTriple& aFirst);
+
+protected:
+	RMessage2 iMessage;
+	CSockSubSession *iSubSession;
+	};
+
+//
+//CPreallocatedESockClientActivity
+NONSHARABLE_CLASS(CPreallocatedESockClientActivity) : public CESockClientActivityBase, protected MeshMachine::APreallocatedOriginators<1>
+	{
+public:
+    static MeshMachine::CNodeActivityBase* New(const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode);
+
+protected:
+	CPreallocatedESockClientActivity(const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode);
+
+	virtual void Destroy();
+private:
+	/*
+	Private NewL with no implementation to hide the CNodeActivityBase::NewL
+	Creation of preallocated activities doesn't fail and hence a non-leaving ::New should be used instead*/
+    static MeshMachine::CNodeActivityBase* NewL(const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode);
+	};
+
+//
+//CCloseActivity
+class CCloseActivity : public CESockClientActivityBase, protected MeshMachine::APreallocatedOriginators<1>
+	{
+public:
+    static MeshMachine::CNodeActivityBase* New(const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode);
+
+protected:
+	CCloseActivity(const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode);
+
+	virtual void Destroy();
+private:
+	/*
+	Private NewL with no implementation to hide the CNodeActivityBase::NewL
+	Creation of preallocated activities doesn't fail and hence a non-leaving ::New should be used instead*/
+    static MeshMachine::CNodeActivityBase* NewL(const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode);
+	};
+
+} //namespace SubSessActivities
+
+#endif //SYMBIAN_SS_ESOCKACTIVITIES_H
+