datacommsserver/esockserver/test/providers/dummy/src/dummypr_factory.cpp
branchRCL_3
changeset 18 9644881fedd0
parent 17 9ddb1d67ebaf
child 23 cbb19216b74d
equal deleted inserted replaced
17:9ddb1d67ebaf 18:9644881fedd0
    28 #include "dummypr_subconnprov.h"
    28 #include "dummypr_subconnprov.h"
    29 #include "dummypr_connprov.h"
    29 #include "dummypr_connprov.h"
    30 #include "dummypr_metaconnprov.h"
    30 #include "dummypr_metaconnprov.h"
    31 #include "dummypr_tiermanager.h"
    31 #include "dummypr_tiermanager.h"
    32 #include "dummypr_network_flow.h"
    32 #include "dummypr_network_flow.h"
       
    33 #include "dummypr_flow.h"
    33 
    34 
    34 #include <comms-infras/ss_msgintercept.h>
    35 #include <comms-infras/ss_msgintercept.h>
    35 
    36 
    36 #ifdef __CFLOG_ACTIVE
    37 #ifdef __CFLOG_ACTIVE
    37 #define KDummyTierManagerTag KESockTierTag
    38 #define KDummyTierManagerTag KESockTierTag
    41 #define KDummyMCPRTag KESockMetaConnectionTag
    42 #define KDummyMCPRTag KESockMetaConnectionTag
    42 #endif
    43 #endif
    43 
    44 
    44 using namespace ESock;
    45 using namespace ESock;
    45 
    46 
    46 
       
    47 const TInt KProtocolInetDummy = 253;
       
    48 
    47 
    49 const TInt KDummyMajorVersionNumber = 0;
    48 const TInt KDummyMajorVersionNumber = 0;
    50 const TInt KDummyMinorVersionNumber = 1;
    49 const TInt KDummyMinorVersionNumber = 1;
    51 const TInt KDummyBuildVersionNumber = 1;
    50 const TInt KDummyBuildVersionNumber = 1;
    52 
    51 
    66 	IMPLEMENTATION_PROXY_ENTRY(CDummySubConnectionProviderFactory::iUid, CDummySubConnectionProviderFactory::NewL),
    65 	IMPLEMENTATION_PROXY_ENTRY(CDummySubConnectionProviderFactory::iUid, CDummySubConnectionProviderFactory::NewL),
    67     IMPLEMENTATION_PROXY_ENTRY(CDummyVanillaSubConnectionProviderFactory::iUid, CDummyVanillaSubConnectionProviderFactory::NewL),	
    66     IMPLEMENTATION_PROXY_ENTRY(CDummyVanillaSubConnectionProviderFactory::iUid, CDummyVanillaSubConnectionProviderFactory::NewL),	
    68 	IMPLEMENTATION_PROXY_ENTRY(CDummyExtendedSubConnectionProviderFactory::iUid, CDummyExtendedSubConnectionProviderFactory::NewL),
    67 	IMPLEMENTATION_PROXY_ENTRY(CDummyExtendedSubConnectionProviderFactory::iUid, CDummyExtendedSubConnectionProviderFactory::NewL),
    69 
    68 
    70 	// Flow and flow description
    69 	// Flow and flow description
    71 	IMPLEMENTATION_PROXY_ENTRY(CDummyNetworkFlowFactory::iUid, CDummyNetworkFlowFactory::NewL),
    70 	IMPLEMENTATION_PROXY_ENTRY(CDummyFlowFactory::iUid, CDummyFlowFactory::NewL),
    72 	};
    71 	};
    73 
    72 
    74 /**
    73 /**
    75 ECOM Implementation Factory
    74 ECOM Implementation Factory
    76 */
    75 */
   297     return provider;
   296     return provider;
   298     }
   297     }
   299 
   298 
   300 //-=========================================================
   299 //-=========================================================
   301 //
   300 //
   302 // CDummyNetworkFlowFactory methods
   301 // CDummyFlowFactory methods
   303 //
   302 //
   304 //-=========================================================	
   303 //-=========================================================	
   305 CDummyNetworkFlowFactory* CDummyNetworkFlowFactory::NewL(TAny* aConstructionParameters)
   304 CDummyFlowFactory* CDummyFlowFactory::NewL(TAny* aConstructionParameters)
   306 	{
   305 	{
   307 	CDummyNetworkFlowFactory* fact = new (ELeave) CDummyNetworkFlowFactory(
   306 	CDummyFlowFactory* fact = new (ELeave) CDummyFlowFactory(
   308 			TUid::Uid(iUid),
   307 			TUid::Uid(iUid),
   309 			*(reinterpret_cast<CSubConnectionFlowFactoryContainer*>(aConstructionParameters)));
   308 			*(reinterpret_cast<CSubConnectionFlowFactoryContainer*>(aConstructionParameters)));
   310 	return fact;
   309 	return fact;
   311 	}
   310 	}
   312 
   311 
   313 CDummyNetworkFlowFactory::CDummyNetworkFlowFactory(TUid aFactoryId, CSubConnectionFlowFactoryContainer& aParentContainer)
   312 CDummyFlowFactory::CDummyFlowFactory(TUid aFactoryId, CSubConnectionFlowFactoryContainer& aParentContainer)
   314  : CSubConnectionFlowFactoryBase(aFactoryId, aParentContainer)
   313  : CSubConnectionFlowFactoryBase(aFactoryId, aParentContainer)
   315  	{
   314  	{
   316 	//LOG_NODE_CREATE(KESockDataFactTag, CDummyNetworkFlowFactory)
   315 	//LOG_NODE_CREATE(KESockDataFactTag, CDummyFlowFactory)
   317  	}
   316  	}
   318 
   317 
   319 CDummyNetworkFlowFactory::~CDummyNetworkFlowFactory()
   318 CDummyFlowFactory::~CDummyFlowFactory()
   320 	{
   319 	{
   321 	//LOG_NODE_DESTROY(KESockDataFactTag, CDummyNetworkFlowFactory)
   320 	//LOG_NODE_DESTROY(KESockDataFactTag, CDummyFlowFactory)
   322  	}
   321  	}
   323 
   322 
   324 CSubConnectionFlowBase* CDummyNetworkFlowFactory::DoCreateFlowL(CProtocolIntfBase* aProtocolIntf, TFactoryQueryBase& aQuery)
   323 CSubConnectionFlowBase* CDummyFlowFactory::DoCreateFlowL(CProtocolIntfBase* aProtocolIntf, TFactoryQueryBase& aQuery)
   325 	{
   324 	{
   326 	const TDefaultFlowFactoryQuery& query = static_cast<const TDefaultFlowFactoryQuery&>(aQuery);
   325 	const TDefaultFlowFactoryQuery& query = static_cast<const TDefaultFlowFactoryQuery&>(aQuery);
   327 	return CDummyNetworkFlow::NewL(*this, query.iSCprId, aProtocolIntf);
   326 	return CDummyNetworkFlow::NewL(*this, query.iSCprId, aProtocolIntf);
   328 	}
   327 	}
   329 
   328 
   330 ACommsFactoryNodeId* CDummyNetworkFlowFactory::DoFindOrCreateObjectL(TFactoryQueryBase& aQuery)
   329 ACommsFactoryNodeId* CDummyFlowFactory::DoFindOrCreateObjectL(TFactoryQueryBase& aQuery)
   331 	{
   330 	{
   332 	const TDefaultFlowFactoryQuery& query = static_cast<const TDefaultFlowFactoryQuery&>(aQuery);
   331 	const TDefaultFlowFactoryQuery& query = static_cast<const TDefaultFlowFactoryQuery&>(aQuery);
   333 	if(query.iMessageId != TCFServiceProvider::TCommsBinderRequest::Id())
   332 	if(query.iMessageId != TCFServiceProvider::TCommsBinderRequest::Id())
   334 		{
   333 		{
   335 		//the factory only reacts to creation triggered by TCommsBinderRequest
   334 		//the factory only reacts to creation triggered by TCommsBinderRequest
   339 	// Find or create the ProtocolIntf instance corresponding to the Flow. If there is no ProtocolIntf instance, then fail.
   338 	// Find or create the ProtocolIntf instance corresponding to the Flow. If there is no ProtocolIntf instance, then fail.
   340 	TDefaultProtocolIntfFactoryQuery queryProto(query.iCprId);
   339 	TDefaultProtocolIntfFactoryQuery queryProto(query.iCprId);
   341 	CProtocolIntfBase* protocolInterface = SockManGlobals::Get()->iProtocolIntfFactories->FindOrCreateProtocolIntfL(Uid(), queryProto);
   340 	CProtocolIntfBase* protocolInterface = SockManGlobals::Get()->iProtocolIntfFactories->FindOrCreateProtocolIntfL(Uid(), queryProto);
   342 	if (protocolInterface == NULL)
   341 	if (protocolInterface == NULL)
   343     	{
   342     	{
   344     	LOG( ESockLog::Printf(KESockDataFactTag, _L8("CDummyNetworkFlowFactory %08x:\tCreateFlowL(protocolId '%08x') Cannot find protocol interface, bailing out"), this, Uid()) );
   343     	LOG( ESockLog::Printf(KESockDataFactTag, _L8("CDummyFlowFactory %08x:\tCreateFlowL(protocolId '%08x') Cannot find protocol interface, bailing out"), this, Uid()) );
   345     	User::Leave(KErrNotFound);
   344     	User::Leave(KErrNotFound);
   346     	}
   345     	}
   347 
   346 
   348 	// The type of flow created is protocol id specific
   347 	// The type of flow created is protocol id specific
   349 	CSubConnectionFlowBase* flow = NULL;
   348 	CSubConnectionFlowBase* flow = NULL;
   350 	switch(query.iProtocolType)
   349 	switch(query.iProtocolType)
   351 		{
   350 		{
   352 		case KProtocolInetDummy:
   351 		case CDummyNetworkFlow::EProtocolId:
   353 			flow = CDummyNetworkFlow::NewL(*this, query.iSCprId, protocolInterface);
   352 			flow = CDummyNetworkFlow::NewL(*this, query.iSCprId, protocolInterface);
   354 			break;
   353 			break;
   355 
   354 
       
   355         case CDummyFlow::EProtocolId:
       
   356             flow = CDummyFlow::NewL(*this, query.iSCprId, protocolInterface);
       
   357             break;
       
   358             
   356 		default:
   359 		default:
   357 			User::Leave(KErrNotFound);
   360 			User::Leave(KErrNotFound);
   358 			break;
   361 			break;
   359 		}
   362 		}
   360 	
   363 	
   361 	LOG( ESockLog::Printf(
   364 	LOG( ESockLog::Printf(
   362 		KESockDataFactTag,
   365 		KESockDataFactTag,
   363 		_L8("CDummyNetworkFlowFactory %08x:\tCreateFlowL(protocolId '%08x'): flow %08x"),
   366 		_L8("CDummyFlowFactory %08x:\tCreateFlowL(protocolId '%08x'): flow %08x"),
   364 		this,
   367 		this,
   365 		Uid(),
   368 		Uid(),
   366 		&flow));
   369 		&flow));
   367 
   370 
   368 	// The factory takes ultimate custody of the new flow
   371 	// The factory takes ultimate custody of the new flow
   374 	}
   377 	}
   375 
   378 
   376 /**
   379 /**
   377 Description of the protocol this factory creates
   380 Description of the protocol this factory creates
   378 */
   381 */
   379 TServerProtocolDesc* CDummyNetworkFlowFactory::DoCreateFlowDescriptionL(TInt aProtocol)
   382 TServerProtocolDesc* CDummyFlowFactory::DoCreateFlowDescriptionL(TInt aProtocol)
   380 	{
   383 	{
   381 	TServerProtocolDesc* protocolDescription = new(ELeave) TServerProtocolDesc();
   384 	TServerProtocolDesc* protocolDescription = new(ELeave) TServerProtocolDesc();
   382 
   385 
   383 	// Poached from udp and modified to represent an rtp like protocol
   386 	// Poached from udp and modified to represent an rtp like protocol
   384 	switch(aProtocol)
   387 	switch(aProtocol)
   385 		{
   388 		{
   386 		case KProtocolInetDummy:
   389         case CDummyNetworkFlow::EProtocolId:
   387 			protocolDescription->iName		  = KDummyProtocolName;
   390             protocolDescription->iName          = KDummyProtocolName;
   388 			protocolDescription->iAddrFamily	  = KAfInet;
   391             protocolDescription->iAddrFamily    = KAfInet;
   389 			protocolDescription->iSockType	  = KSockDatagram;
   392             protocolDescription->iSockType      = KSockDatagram;
   390 			protocolDescription->iProtocol	  = KProtocolInetDummy;
   393             protocolDescription->iProtocol      = CDummyNetworkFlow::EProtocolId;
   391 			protocolDescription->iVersion	  = TVersion(KDummyMajorVersionNumber,
   394             protocolDescription->iVersion       = TVersion(KDummyMajorVersionNumber,
   392 										KDummyMinorVersionNumber,
   395                                                          KDummyMinorVersionNumber,
   393 										KDummyBuildVersionNumber);
   396                                                          KDummyBuildVersionNumber);
   394 			protocolDescription->iByteOrder	  = EBigEndian;
   397             protocolDescription->iByteOrder     = EBigEndian;
   395 			protocolDescription->iServiceInfo	  = KSIConnectionLess | KSIDatagram |
   398             protocolDescription->iServiceInfo   = KSIConnectionLess | KSIDatagram |
   396 									KSIGracefulClose | KSIPeekData |
   399                                                   KSIGracefulClose | KSIPeekData |
   397 									KSIRequiresOwnerInfo;
   400                                                   KSIRequiresOwnerInfo;
   398 			protocolDescription->iNamingServices	  = KNSNameResolution | KNSRequiresConnectionStartup;
   401             protocolDescription->iNamingServices= KNSNameResolution | KNSRequiresConnectionStartup;
   399 			protocolDescription->iSecurity	  = KSocketNoSecurity;
   402             protocolDescription->iSecurity      = KSocketNoSecurity;
   400 			protocolDescription->iMessageSize	  = 65536-128; /*KSocketMessageSizeUndefined;*/
   403             protocolDescription->iMessageSize   = 65536-128; /*KSocketMessageSizeUndefined;*/
   401 			protocolDescription->iServiceTypeInfo  = ESocketSupport | ETransport |
   404             protocolDescription->iServiceTypeInfo= ESocketSupport | ETransport |
   402 									EPreferMBufChains | ENeedMBufs |
   405                                                       EPreferMBufChains | ENeedMBufs |
   403 									EUseCanSend;
   406                                                       EUseCanSend;
   404 			protocolDescription->iNumSockets	  = KUnlimitedSockets;
   407             protocolDescription->iNumSockets     = KUnlimitedSockets;
       
   408             break;
       
   409 	    
       
   410 		case CDummyFlow::EProtocolId:
       
   411 			protocolDescription->iName		     = KDummyProtocolName;
       
   412 			protocolDescription->iAddrFamily     = CDummyTierManagerFactory::iUid;
       
   413 			protocolDescription->iSockType	     = KSockDatagram;
       
   414 			protocolDescription->iProtocol	     = CDummyFlow::EProtocolId;
       
   415 			protocolDescription->iVersion	     = TVersion(KDummyMajorVersionNumber,
       
   416                                                          KDummyMinorVersionNumber,
       
   417                                                          KDummyBuildVersionNumber);
       
   418 			protocolDescription->iByteOrder	     = EBigEndian;
       
   419 			protocolDescription->iServiceInfo	 = KSIConnectionLess | KSIDatagram |
       
   420                                                    KSIGracefulClose | KSIPeekData |
       
   421                                                    KSIRequiresOwnerInfo;
       
   422 			protocolDescription->iNamingServices = KNSNameResolution | KNSRequiresConnectionStartup;
       
   423 			protocolDescription->iSecurity	     = KSocketNoSecurity;
       
   424 			protocolDescription->iMessageSize	 = 65536-128; /*KSocketMessageSizeUndefined;*/
       
   425 			protocolDescription->iServiceTypeInfo= ESocketSupport | ETransport |
       
   426                                                     EPreferMBufChains | ENeedMBufs |
       
   427                                                     EUseCanSend;
       
   428 			protocolDescription->iNumSockets	 = KUnlimitedSockets;
   405 			break;
   429 			break;
   406 		
   430 		
   407 		default:
   431 		default:
   408 			User::Leave(KErrGeneral);
   432 			User::Leave(KErrGeneral);
   409 			break;
   433 			break;