datacommsserver/esockserver/inc/ss_subconn.h
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/inc/ss_subconn.h	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,168 @@
+// Copyright (c) 1997-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:
+//
+
+#ifndef SS_SUBCONN_H
+#define SS_SUBCONN_H
+
+#include <ss_std.h>
+#include <comms-infras/ss_subconnprov.h>
+#include <comms-infras/ss_coreprstates.h>
+#include <comms-infras/ss_platsec_apiext.h>
+#include <comms-infras/ss_mmnode.h>
+#include <comms-infras/ss_mmnode_subsess.h>
+#include <cs_subconevents.h>
+
+using namespace CorePanics;
+
+const int KMaxUidFilterListLen = 10;
+
+namespace SubConnActivities
+{
+	class CRejoin;
+	class CBuildStack;
+	class CSetParameters;
+}
+
+namespace SubConnStates
+{
+	class TJoinCPR;
+	class TRequestServiceProvider;
+	class TJoinTheOtherOwner;
+	class TLeaveCPR;
+	class TSendParamsToServiceProvider;
+	class TStoreParams;
+	class TNoTagOrParamsPresent;
+	class TSendParamRequest;
+	class TWriteSubConnParamsLength;
+	class TWriteSubConnParams;
+	class TFillInEvent;
+	class TNoTagOrWaitForIncoming;
+	class TEnqueueEvent;
+	class TNoTagOrActiveWhenEventEnqued;
+	class TStoreNewParams;
+	class TSendBuildStack;
+	class TRequestServiceProviderFromCPR;
+	class TNoTagOrAttachToDefaultOrWaitForIncoming;
+}
+
+namespace ESock
+{
+
+class ASubConnectionLegacy;
+
+NONSHARABLE_CLASS(CSubConnection) : public CMMSockSubSession, private ASubSessionPlatsecApiExt,
+                                    public ITFHIERARCHY_LINK_1(CSubConnection, MeshMachine::AMMNodeBase, MPlatsecApiExt)
+
+/**
+Handle subconnection-related asynchronous client requests that may not complete immediately
+@internalComponent
+*/
+	{
+	friend class SubConnStates::TJoinCPR;
+	friend class SubConnStates::TRequestServiceProvider;
+	friend class SubConnStates::TJoinTheOtherOwner;
+	friend class SubConnStates::TLeaveCPR;
+	friend class SubConnStates::TSendParamsToServiceProvider;
+	friend class SubConnStates::TStoreParams;
+	friend class SubConnStates::TSendParamRequest;
+	friend class SubConnStates::TNoTagOrParamsPresent;
+	friend class SubConnStates::TWriteSubConnParamsLength;
+	friend class SubConnStates::TWriteSubConnParams;
+	friend class SubConnStates::TFillInEvent;
+	friend class SubConnStates::TNoTagOrWaitForIncoming;
+	friend class SubConnStates::TEnqueueEvent;
+	friend class SubConnStates::TNoTagOrActiveWhenEventEnqued;
+	friend class SubConnStates::TStoreNewParams;
+	friend class SubConnStates::TSendBuildStack;
+	friend class SubConnStates::TRequestServiceProviderFromCPR;
+	friend class SubConnStates::TNoTagOrAttachToDefaultOrWaitForIncoming;
+	friend class SubConnActivities::CRejoin;
+	friend class SubConnActivities::CBuildStack;
+	friend class SubConnActivities::CSetParameters;
+	friend class AConnectionLegacy;
+#ifdef __X86GCC__
+	// gcc-mingw does not support template function instantiations as friends, only the
+	// generic template.
+	template<class NODE>
+	friend  NODE* mcfnode_cast(Messages::ANode* aNode);
+	template<class NODE>
+	friend  NODE& mcfnode_cast(Messages::ANode& aNode);
+#elif !defined(__GCCXML__)
+    friend CSubConnection* mcfnode_cast<CSubConnection>(Messages::ANode* aNode);
+    friend CSubConnection& mcfnode_cast<CSubConnection>(Messages::ANode& aNode);
+#endif
+
+    static const TInt KMaxEventQueueLength = 8;
+
+public:
+	typedef ITFHIERARCHY_LINK_1(CSubConnection, MeshMachine::AMMNodeBase, MPlatsecApiExt) TIfStaticFetcherNearestInHierarchy;
+
+public:
+    static CSubConnection* NewL(CConnection& aConnection, CPlayer* aPlayer, const TSubSessionUniqueId aSubSessionUniqueId);
+    virtual ~CSubConnection();
+
+    //-----------------------------------
+    //from TInterfaceControl
+    //-----------------------------------
+    void ReturnInterfacePtrL(MPlatsecApiExt*& aInterface)
+        {
+        aInterface = this;
+        }
+
+protected:
+    CSubConnection(CPlayer* aPlayer, const TSubSessionUniqueId aSubSessionUniqueId);
+    void ConstructL(CConnection& aConnection);
+    CConnection& ControlProvider();
+
+    //-----------------------------------
+    //from CMMSockSubSession
+    //-----------------------------------
+    void Received(MeshMachine::TNodeContextBase& aContext);
+    void ReceivedL(const Messages::TRuntimeCtxId& aSender, const Messages::TNodeId& aRecipient, Messages::TSignatureBase& aMessage);
+
+
+    //-----------------------------------
+    //from CSockSubSession
+    //-----------------------------------
+protected:
+    void ProcessMessageL();
+    virtual void FinalCompleteAllBlockedMessages(TInt aResult);
+
+public:
+  	virtual Den::TSubSessInfo Type() const
+  		{
+  		return TCFSubSessInfo(TCFSubSessInfo::ESubConnection);
+  		}
+
+inline RSubConnection::TSubConnType SubConnType() const
+	{
+	return iSubConnType;
+	}
+
+public:
+	IMPORT_C RCFParameterFamilyBundleC& GetOrCreateParameterBundleL();
+	IMPORT_C RCFParameterFamilyBundleC& CreateParameterBundleL();
+
+private:
+  	RCFParameterFamilyBundleC iParameterBundle;
+  	RSubConnection::TSubConnType iSubConnType;
+    TNotificationQueue<CRefCountOwnedSubConNotification*, KMaxEventQueueLength> iEventQueue;
+	};
+
+} // namespace Esock
+
+#endif
+// SS_SUBCONN_H
+