baseconnectionproviders/refscpr/src/ReferenceSCPR_subconnProvFactory.cpp
branchRCL_3
changeset 25 9d7ce34704c8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseconnectionproviders/refscpr/src/ReferenceSCPR_subconnProvFactory.cpp	Tue Aug 31 16:25:36 2010 +0300
@@ -0,0 +1,126 @@
+// Copyright (c) 2005-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:
+// Implementation file for the the Reference SubConnection Provider Factory
+// 
+//
+
+/**
+ @file
+ @internalComponent
+*/
+
+
+#include "ReferenceSCPR_subconnProvFactory.h"
+#include "ReferenceSCPR_defaultSubconnProv.h"
+#include "ReferenceSCPR_subconnProv.h"
+#include "ReferenceSCPR_subconparams.h"
+#include <implementationproxy.h>
+
+//The following represents the Factory ID for the Reference subconnection
+//provider. See the assisting *.rss file in the ../src directory.
+const TUint KReferenceSubConnectionProviderImplementationUid = 0x102738C3;
+
+//-=========================================================
+// Data/functions required for instantiating ECOM Plugin
+//-=========================================================
+const TImplementationProxy ImplementationTable[] =
+	{
+	IMPLEMENTATION_PROXY_ENTRY(KReferenceSubConnectionProviderImplementationUid, CReferenceSubConnectionProviderFactory::NewL),
+	IMPLEMENTATION_PROXY_ENTRY(KSubConReferenceParamsUid, CReferenceSubConnExtensionParamsFactory::NewL)
+	};
+
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+    {
+    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+
+    return ImplementationTable;
+    }
+
+
+
+
+
+//-=========================================================
+// CReferenceSubConnectionProviderFactory
+//-=========================================================
+
+CReferenceSubConnectionProviderFactory* CReferenceSubConnectionProviderFactory::NewL(TAny* aConstructionParameters)
+/**NewL is the actual ECOM SubConnection Provider interface implemented.
+ESOCK with call it to instantiate the factory and store it the 
+CSubConnectionProviderFacoryContainer.
+   
+@param aConstructionParameters construction data passed by ECOM
+@returns pointer to a constructed factory 
+*/
+	{
+	CReferenceSubConnectionProviderFactory* ptr = 
+	    new (ELeave) CReferenceSubConnectionProviderFactory(KReferenceSubConnectionProviderFactoryId, 
+	    *(reinterpret_cast<CSubConnectionFactoryContainer*>(aConstructionParameters)));
+	return ptr;
+	}
+
+	
+
+CReferenceSubConnectionProviderFactory::CReferenceSubConnectionProviderFactory(TUint aFactoryId, 
+                                        CSubConnectionFactoryContainer& aParentContainer)
+:CSubConnectionProviderFactoryBase(aFactoryId, aParentContainer)
+/**C'tor
+@param aFactoryId - the id of this factory. The id should represent the type of subconnection 
+                    providers this factory can produce.
+@param aParentContainer - the factory container the new factory object should add itself to.
+*/
+	{
+	}
+	
+
+
+/**D'tor
+
+*/	
+CReferenceSubConnectionProviderFactory::~CReferenceSubConnectionProviderFactory()
+    {
+    }
+    
+
+/**A sample/reference derivation of DoCreateProviderL. The method must be overriden to create 
+(instantiate) the actual CSubConnectionProviderBase objects.
+
+@param aConnProvider - the connection, the subconnection provider object should belong to. 
+@param aType - the type of the subconnection provider object within the meaning defined by 
+			   RSubConnection::TSubConnType:
+	           * ECreateNew - the subconnection provider object shall represent a new, reserved, 
+	           	 private flow.
+	           * EAttachToDefault - the subconnection provider object shall represent the 
+	             default channel - a singular channel that each connection always has.
+*/
+CSubConnectionProviderBase* CReferenceSubConnectionProviderFactory::DoCreateProviderL(
+                                   CConnectionProviderBase& aConnProvider, 
+                                   RSubConnection::TSubConnType aType)
+    {
+    CSubConnectionProviderBase* provider = NULL;
+    if (aType == RSubConnection::EAttachToDefault)
+        {
+        provider = CReferenceDefaultSubConnectionProvider::NewL(*this, aConnProvider);
+        }
+    else if (aType == RSubConnection::ECreateNew)
+        {
+        provider = CReferenceSubConnectionProvider::NewL(*this, aConnProvider);
+        }
+    else
+        {
+        User::Leave(KErrNotSupported);
+        }
+    return provider;
+    }