diff -r 000000000000 -r 307788aac0a8 realtimenetprots/rtp/cfrtp/src/rtpflowfactory.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/rtp/cfrtp/src/rtpflowfactory.cpp Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,130 @@ +// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// RTCPFlowFactory Implementation +// +// + +/** + @file + @internalComponent +*/ + +#include +#include +#include "rtpflowfactory.h" +#include "rtpflow.h" +#include "rtcpflow.h" +#include "rtppint.h" +#include "rtp_cfmessages.h" + +#include "rtpflowfactory.h" + +using namespace ESock; + +CRtpFlowFactory* CRtpFlowFactory::NewL(TAny* aConstructionParameters) + { + CRtpFlowFactory* ptr = new (ELeave) CRtpFlowFactory(TUid::Uid(KRtpFlowImplementationUid), *(reinterpret_cast(aConstructionParameters))); + CleanupStack::PushL(ptr); + CleanupStack::Pop(); + return ptr; + } + +CRtpFlowFactory::CRtpFlowFactory(TUid aFactoryId, CSubConnectionFlowFactoryContainer& aParentContainer) + : CSubConnectionFlowFactoryBase(aFactoryId, aParentContainer) + { + } + + +CProtocolIntfFactoryBase* CRtpFlowFactory::CreateProtocolIntfFactoryL(ESock::CProtocolIntfFactoryContainer& aParentContainer) + { + CProtocolIntfFactoryBase* factory = CRtpProtocolIntfFactory::NewL(Uid(), aParentContainer); + return factory; + } + +ACommsFactoryNodeId* CRtpFlowFactory::DoFindOrCreateObjectL(TFactoryQueryBase& aQuery) +/** Default implementation to create a factory object. This may be overridden by a derived class +*/ + { + ACommsFactoryNodeId *factoryObject = 0; + factoryObject = CreateObjectL(aQuery); + return factoryObject; + } + +/* Check the MessageID and Create the appropriate Flow */ +CSubConnectionFlowBase* CRtpFlowFactory::DoCreateFlowL(CProtocolIntfBase* aProtocolIntf, TFactoryQueryBase& aQuery) + { + CSubConnectionFlowBase* flow = 0; + const TDefaultFlowFactoryQuery& query = static_cast < const TDefaultFlowFactoryQuery& > (aQuery); + TInt protocolID = (TInt)query.iProtocolType; + + if(KProtocolRtp == protocolID) + { + flow = CRtpFlow::NewL(*this, query.iSCprId, aProtocolIntf); + } + else if(KProtocolRtcp == protocolID) + { + flow = CRtcpFlow::NewL(*this, query.iSCprId, aProtocolIntf); + } + + return flow; + } + +TServerProtocolDesc* CRtpFlowFactory::DoCreateFlowDescriptionL(TInt aProtocol) + { + TServerProtocolDesc* protocolDescription = NULL; + switch(aProtocol) + { + case KProtocolRtp: + protocolDescription = new(ELeave) TServerProtocolDesc(); + protocolDescription->iName = KProtocolNameRtp; + protocolDescription->iAddrFamily = KAfInet; + protocolDescription->iSockType = KSockDatagram; + protocolDescription->iProtocol = KProtocolRtp; + protocolDescription->iVersion = TVersion(2,0,1); + protocolDescription->iByteOrder = EBigEndian; + protocolDescription->iServiceInfo = KSIConnectionLess | KSIDatagram | + KSIGracefulClose | KSIPeekData | + KSIRequiresOwnerInfo; + protocolDescription->iNamingServices = KNSNameResolution | KNSRequiresConnectionStartup; + protocolDescription->iSecurity = KSocketNoSecurity; + protocolDescription->iMessageSize = 65536-128; /*KSocketMessageSizeUndefined;*/ + protocolDescription->iServiceTypeInfo = ESocketSupport | ETransport | + EPreferMBufChains | ENeedMBufs | + EUseCanSend; + protocolDescription->iNumSockets = KUnlimitedSockets; + break; + + case KProtocolRtcp: + protocolDescription = new(ELeave) TServerProtocolDesc(); + protocolDescription->iName = KProtocolNameRtcp; + protocolDescription->iAddrFamily = KAfInet; + protocolDescription->iSockType = KSockDatagram; + protocolDescription->iProtocol = KProtocolRtcp; + protocolDescription->iVersion = TVersion(2,0,1); + protocolDescription->iByteOrder = EBigEndian; + protocolDescription->iServiceInfo = KSIConnectionLess | KSIDatagram | + KSIGracefulClose | KSIPeekData | + KSIRequiresOwnerInfo; + protocolDescription->iNamingServices = KNSNameResolution | KNSRequiresConnectionStartup; + protocolDescription->iSecurity = KSocketNoSecurity; + protocolDescription->iMessageSize = 65536-128; /*KSocketMessageSizeUndefined;*/ + protocolDescription->iServiceTypeInfo = ESocketSupport | ETransport | + EPreferMBufChains | ENeedMBufs | + EUseCanSend; + protocolDescription->iNumSockets = KUnlimitedSockets; + break; + } + return protocolDescription; + } +