networkcontrol/ipnetworklayer/src/IPProtoCPRFactory.cpp
changeset 0 af10295192d8
child 75 c1029e558ef5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkcontrol/ipnetworklayer/src/IPProtoCPRFactory.cpp	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,134 @@
+// 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:
+// IPProto Connection Provider factory class definition.
+// 
+//
+
+/**
+ @file
+ @internalComponent
+*/
+
+#include "ItfInfoConfigExt.h"
+#include "IPProtoCPRFactory.h"
+#include "IPProtoCPR.h"
+#include <in_sock.h>
+#include <elements/nm_interfaces.h>
+
+#include <comms-infras/ss_legacyinterfaces.h>
+#include <comms-infras/ss_msgintercept.h>
+
+using namespace Messages;
+using namespace ESock;
+using namespace Factories;
+
+//-=========================================================
+//
+// CIPProtoConnectionProviderFactory methods
+//
+//-=========================================================
+CIPProtoConnectionProviderFactory* CIPProtoConnectionProviderFactory::NewL(TAny* aParentContainer)
+    {
+    return new (ELeave) CIPProtoConnectionProviderFactory(TUid::Uid(CIPProtoConnectionProviderFactory::iUid), *reinterpret_cast<ESock::CConnectionFactoryContainer*>(aParentContainer));
+    }
+
+CIPProtoConnectionProviderFactory::CIPProtoConnectionProviderFactory(TUid aFactoryId, ESock::CConnectionFactoryContainer& aParentContainer)
+:	ESock::CConnectionProviderFactoryBase(aFactoryId, aParentContainer),
+	TIfStaticFetcherNearestInHierarchy(this)
+    {
+    }
+
+class TEnumerateConnectionsQuery : public MFactoryQuery
+	{
+public:
+    TEnumerateConnectionsQuery(RPointerArray<TSourcedConnectionInfo>& aConnectionInfoPtrArray)
+    :iConnectionInfoPtrArray(aConnectionInfoPtrArray)
+    {}
+
+	virtual TMatchResult Match(TFactoryObjectInfo& aObjectInfo);
+	inline TInt Error() {return iError;}
+private:
+    RPointerArray<TSourcedConnectionInfo>& iConnectionInfoPtrArray;
+    TInt iError;
+	};
+
+MFactoryQuery::TMatchResult TEnumerateConnectionsQuery::Match(TFactoryObjectInfo& aObjectInfo)
+    {
+    //This is a legacy feature
+	CIPProtoConnectionProvider* prov = static_cast<CIPProtoConnectionProvider*>(aObjectInfo.iInfo.iFactoryObject);
+	iError = KErrNone;
+	if (prov)
+    	{
+        RNodeInterface* dc = prov->GetFirstClient<TDefaultClientMatchPolicy>(TClientType(TCFClientType::EData, TCFClientType::EDefault));
+    	if (dc && /*dc->Flags() & RNodeInterface::EStarted &&*/
+    	        !(dc->Flags() & TClientType::ELeaving))
+    		{
+    		const TItfInfoConfigExt* ext = static_cast<const TItfInfoConfigExt*>(prov->AccessPointConfig().FindExtension(STypeId::CreateSTypeId(KIpProtoConfigExtUid, EItfInfoConfigExt)));
+    		ASSERT(ext);
+            if (ext)
+                {
+                TSourcedConnectionInfo* copy;
+                copy = new ESock::TSourcedConnectionInfo(ext->iConnectionInfo.iIapId, ext->iConnectionInfo.iNetId, EConnectionGeneric, prov->Id());
+                if(copy == NULL)
+                	{
+                	iError = KErrNoMemory;
+                	return MFactoryQuery::ECancel;
+                	}
+                	
+                TInt err = iConnectionInfoPtrArray.Append(copy);
+				if(err != KErrNone)
+					{
+					delete copy;
+                	iError = err;
+                	return MFactoryQuery::ECancel;
+					}
+                }
+	        }
+    	}
+	return MFactoryQuery::EContinue;
+    }
+
+void CIPProtoConnectionProviderFactory::EnumerateConnectionsL(RPointerArray<ESock::TSourcedConnectionInfo>& aConnectionInfoPtrArray)
+    {
+    TEnumerateConnectionsQuery query(aConnectionInfoPtrArray);
+    Find(query);
+	User::LeaveIfError(query.Error());
+    }
+
+void CIPProtoConnectionProviderFactory::ReturnInterfacePtrL(ESock::MLinkCprFactApiExt*& aInterface)
+    {
+    aInterface = this;
+    }
+
+NetInterfaces::TInterfaceControl* CIPProtoConnectionProviderFactory::DoFetchInterfaceControlL(TSupportedCommsApiExt aInterfaceId)
+    {
+    ASSERT(aInterfaceId == ESock::MLinkCprFactApiExt::KInterfaceId);
+    (void)aInterfaceId;
+    return this;
+    }
+
+ESock::ACommsFactoryNodeId* CIPProtoConnectionProviderFactory::DoCreateObjectL(ESock::TFactoryQueryBase& /* aQuery */)
+    {
+	CConnectionProviderBase* provider = CIPProtoConnectionProvider::NewL(*this);
+
+	ESOCK_DEBUG_REGISTER_GENERAL_NODE(iUid, provider);
+
+	return provider;
+    }
+
+
+
+
+
+