realtimenetprots/rtp/cfrtp/src/rtpflowfactory.cpp
changeset 0 307788aac0a8
child 29 5f12516512fa
--- /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;
+	}
+