datacommsserver/esockserver/ssock/ss_connprov.cpp
branchRCL_3
changeset 12 8b5d60ce1e94
parent 1 21d2ab05f085
equal deleted inserted replaced
11:98a7181d2ce7 12:8b5d60ce1e94
   141 	{
   141 	{
   142 	ACommsFactoryNodeId* provider = static_cast<ACommsFactoryNodeId*>(FindObject(aQuery));
   142 	ACommsFactoryNodeId* provider = static_cast<ACommsFactoryNodeId*>(FindObject(aQuery));
   143 	return provider ? provider : CreateL(aQuery);		
   143 	return provider ? provider : CreateL(aQuery);		
   144 	}
   144 	}
   145 
   145 
       
   146 LOCAL_C void RemoveClientAndDestroy(TAny* aConnProvider)
       
   147     {
       
   148     CConnectionProviderBase* connProv = static_cast<CConnectionProviderBase*>(aConnProvider);
       
   149     Messages::RNodeInterface* cntrProv = connProv->ControlProvider();
       
   150     if(cntrProv != NULL)
       
   151         {
       
   152         connProv->RemoveClient(cntrProv->RecipientId());
       
   153         }
       
   154     
       
   155     // cast needed because CConnectionProviderBase destructor is protected
       
   156     delete static_cast<CCommsProviderBase*>(aConnProvider);
       
   157     }
   146 
   158 
   147 EXPORT_C ACommsFactoryNodeId* CConnectionProviderFactoryBase::CreateL(TFactoryQueryBase& aQuery)
   159 EXPORT_C ACommsFactoryNodeId* CConnectionProviderFactoryBase::CreateL(TFactoryQueryBase& aQuery)
   148 /**	Create a new instance of connection provider
   160 /**	Create a new instance of connection provider
   149 
   161 
   150 @return Pointer to the created connection provider or NULL if there's a failure */
   162 @return Pointer to the created connection provider or NULL if there's a failure */
   151 	{
   163 	{
   152 	CConnectionProviderBase* provider = static_cast<CConnectionProviderBase*>(DoCreateObjectL(aQuery));
   164 	CConnectionProviderBase* provider = static_cast<CConnectionProviderBase*>(DoCreateObjectL(aQuery));
   153 	CleanupStack::PushL(provider);
   165 	CleanupStack::PushL(TCleanupItem(RemoveClientAndDestroy, provider));
   154 
       
   155 	const TDefaultConnectionFactoryQuery& query = static_cast<const TDefaultConnectionFactoryQuery&>(aQuery);
   166 	const TDefaultConnectionFactoryQuery& query = static_cast<const TDefaultConnectionFactoryQuery&>(aQuery);
   156 	provider->AddClientL(address_cast<TNodeId>(query.iMCprId), TClientType(TCFClientType::ECtrlProvider));
   167 	provider->AddClientL(address_cast<TNodeId>(query.iMCprId), TClientType(TCFClientType::ECtrlProvider));
   157 
   168 
   158 	// Add the connectionProvider to it's factory
   169 	// Add the connectionProvider to it's factory
   159 	AddManagedObjectL(*provider);
   170 	AddManagedObjectL(*provider);