--- /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 <ss_glob.h>
+#include <rtp_proto_id.h>
+#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<CSubConnectionFlowFactoryContainer*>(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;
+ }
+