datacommsserver/esockserver/ssock/ss_tiermanager.cpp
branchRCL_3
changeset 14 4ccf8e394726
parent 0 dfb7c4ff071f
--- a/datacommsserver/esockserver/ssock/ss_tiermanager.cpp	Wed Mar 31 23:27:09 2010 +0300
+++ b/datacommsserver/esockserver/ssock/ss_tiermanager.cpp	Wed Apr 14 17:14:05 2010 +0300
@@ -113,13 +113,21 @@
 	if (aMessage.IsMessage<TCFInternalEsock::TCreateCSR>())
 		{
 		TCFInternalEsock::TCreateCSR& msg = message_cast<TCFInternalEsock::TCreateCSR>(aMessage);
-		// Maps Tier to ImplId For ECOM since ImplId is used in Factory
-		CommsDat::CMDBSession* dbs = CommsDat::CMDBSession::NewLC(KCDVersion1_2);
-		msg.iUid= TierManagerUtils::MapTierIdtoTierImplIdL(msg.iUid, *dbs);
-		CleanupStack::PopAndDestroy(dbs);
-		CCommsFactoryBase* factory = static_cast<CCommsFactoryBase*>(FindOrCreateFactoryL(msg.iUid));
-		TAlwaysFindFactoryQuery query;
-		CSelectionRequest* sr = CSelectionRequest::NewL(address_cast<TNodeId>(aSender), factory->FindOrCreateObjectL(query)->Id());
+		TTierTypeIdFactoryQuery tierTypeQuery(msg.iUid);
+		ACommsFactoryNodeId* obj = Find(tierTypeQuery);   // match the address family to tierTypeId in factory container
+		if (!obj)
+	        {
+            // object not found, use the commsdat to find the Tier Manager
+            CommsDat::CMDBSession* dbs = CommsDat::CMDBSession::NewLC(KCDVersion1_2);
+            // Maps Tier to ImplId For ECOM since ImplId is used in Factory
+            msg.iUid= TierManagerUtils::MapTierIdtoTierImplIdL(msg.iUid, *dbs);
+            CleanupStack::PopAndDestroy(dbs);
+            CCommsFactoryBase* factory = static_cast<CCommsFactoryBase*>(FindOrCreateFactoryL(msg.iUid));
+            TAlwaysFindFactoryQuery query;  // since there is only one Tier Manager per Tier Manager factory, return the first one
+            obj = factory->FindOrCreateObjectL(query);
+	        }
+		
+		CSelectionRequest* sr = CSelectionRequest::NewL(address_cast<TNodeId>(aSender), obj->Id());
 		RClientInterface::OpenPostMessageClose(Id(), aSender, TCFInternalEsock::TCSRCreated(sr->Id()).CRef());
 		aMessage.ClearMessageId();
 		}