realtimenetprots/rtp/cfrtp/src/rtpflowfactory.cpp
changeset 0 307788aac0a8
child 29 5f12516512fa
equal deleted inserted replaced
-1:000000000000 0:307788aac0a8
       
     1 // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // RTCPFlowFactory Implementation
       
    15 // 
       
    16 //
       
    17 
       
    18 /**
       
    19  @file
       
    20  @internalComponent
       
    21 */
       
    22 
       
    23 #include <ss_glob.h>
       
    24 #include <rtp_proto_id.h>
       
    25 #include "rtpflowfactory.h"
       
    26 #include "rtpflow.h"
       
    27 #include "rtcpflow.h"
       
    28 #include "rtppint.h"
       
    29 #include "rtp_cfmessages.h"
       
    30 
       
    31 #include "rtpflowfactory.h"
       
    32 
       
    33 using namespace ESock;
       
    34 
       
    35 CRtpFlowFactory* CRtpFlowFactory::NewL(TAny* aConstructionParameters)
       
    36 	{
       
    37 	CRtpFlowFactory* ptr = new (ELeave) CRtpFlowFactory(TUid::Uid(KRtpFlowImplementationUid), *(reinterpret_cast<CSubConnectionFlowFactoryContainer*>(aConstructionParameters)));
       
    38 	CleanupStack::PushL(ptr);
       
    39 	CleanupStack::Pop();
       
    40 	return ptr;
       
    41 	}
       
    42 
       
    43 CRtpFlowFactory::CRtpFlowFactory(TUid aFactoryId, CSubConnectionFlowFactoryContainer& aParentContainer)
       
    44 	: CSubConnectionFlowFactoryBase(aFactoryId, aParentContainer)
       
    45 	{
       
    46 	}
       
    47 	
       
    48 
       
    49 CProtocolIntfFactoryBase* CRtpFlowFactory::CreateProtocolIntfFactoryL(ESock::CProtocolIntfFactoryContainer& aParentContainer)
       
    50     {
       
    51     CProtocolIntfFactoryBase* factory = CRtpProtocolIntfFactory::NewL(Uid(), aParentContainer);
       
    52     return factory;
       
    53     }
       
    54 
       
    55 ACommsFactoryNodeId* CRtpFlowFactory::DoFindOrCreateObjectL(TFactoryQueryBase& aQuery)
       
    56 /** Default implementation to create a factory object. This may be overridden by a derived class
       
    57 */
       
    58 	{
       
    59 	ACommsFactoryNodeId *factoryObject = 0;
       
    60 	factoryObject = CreateObjectL(aQuery);
       
    61 	return factoryObject;		
       
    62 	}
       
    63 
       
    64 /* Check the MessageID and Create the appropriate Flow */
       
    65 CSubConnectionFlowBase* CRtpFlowFactory::DoCreateFlowL(CProtocolIntfBase* aProtocolIntf, TFactoryQueryBase& aQuery)
       
    66 	{
       
    67 	CSubConnectionFlowBase* flow = 0;
       
    68 	const TDefaultFlowFactoryQuery& query  = static_cast < const TDefaultFlowFactoryQuery& > (aQuery);
       
    69 	TInt protocolID = (TInt)query.iProtocolType;
       
    70 	
       
    71 	if(KProtocolRtp == protocolID)
       
    72 		{
       
    73 		flow = CRtpFlow::NewL(*this, query.iSCprId, aProtocolIntf);
       
    74 		}
       
    75 	else if(KProtocolRtcp == protocolID)
       
    76 		{
       
    77 		flow = CRtcpFlow::NewL(*this, query.iSCprId, aProtocolIntf);
       
    78 		}
       
    79 	
       
    80 	return flow;
       
    81 	}
       
    82 
       
    83 TServerProtocolDesc* CRtpFlowFactory::DoCreateFlowDescriptionL(TInt aProtocol)
       
    84 	{
       
    85  	TServerProtocolDesc* protocolDescription = NULL;
       
    86      switch(aProtocol)
       
    87      	{
       
    88         case KProtocolRtp:
       
    89              protocolDescription = new(ELeave) TServerProtocolDesc();
       
    90              protocolDescription->iName        = KProtocolNameRtp;
       
    91              protocolDescription->iAddrFamily  = KAfInet;
       
    92              protocolDescription->iSockType    = KSockDatagram;
       
    93              protocolDescription->iProtocol    = KProtocolRtp;
       
    94              protocolDescription->iVersion     = TVersion(2,0,1);
       
    95              protocolDescription->iByteOrder   = EBigEndian;
       
    96              protocolDescription->iServiceInfo     = KSIConnectionLess | KSIDatagram |
       
    97                                      KSIGracefulClose | KSIPeekData |
       
    98                                      KSIRequiresOwnerInfo;
       
    99              protocolDescription->iNamingServices      = KNSNameResolution | KNSRequiresConnectionStartup;
       
   100              protocolDescription->iSecurity    = KSocketNoSecurity;
       
   101              protocolDescription->iMessageSize     = 65536-128; /*KSocketMessageSizeUndefined;*/
       
   102              protocolDescription->iServiceTypeInfo  = ESocketSupport | ETransport |
       
   103                                      EPreferMBufChains | ENeedMBufs |
       
   104                                      EUseCanSend;
       
   105              protocolDescription->iNumSockets      = KUnlimitedSockets;
       
   106              break;
       
   107 	
       
   108         case KProtocolRtcp:
       
   109              protocolDescription = new(ELeave) TServerProtocolDesc();
       
   110              protocolDescription->iName        = KProtocolNameRtcp;
       
   111              protocolDescription->iAddrFamily  = KAfInet;
       
   112              protocolDescription->iSockType    = KSockDatagram;
       
   113              protocolDescription->iProtocol    = KProtocolRtcp;
       
   114              protocolDescription->iVersion     = TVersion(2,0,1);
       
   115              protocolDescription->iByteOrder   = EBigEndian;
       
   116              protocolDescription->iServiceInfo     = KSIConnectionLess | KSIDatagram |
       
   117                                      KSIGracefulClose | KSIPeekData |
       
   118                                      KSIRequiresOwnerInfo;
       
   119              protocolDescription->iNamingServices      = KNSNameResolution | KNSRequiresConnectionStartup;
       
   120              protocolDescription->iSecurity    = KSocketNoSecurity;
       
   121              protocolDescription->iMessageSize     = 65536-128; /*KSocketMessageSizeUndefined;*/
       
   122              protocolDescription->iServiceTypeInfo  = ESocketSupport | ETransport |
       
   123                                      EPreferMBufChains | ENeedMBufs |
       
   124                                      EUseCanSend;
       
   125              protocolDescription->iNumSockets      = KUnlimitedSockets;
       
   126              break;
       
   127 		}
       
   128 	return protocolDescription;
       
   129 	}
       
   130