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 |
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; |