Revision: 201021
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 27 May 2010 14:32:46 +0300
changeset 66 8873e6835f7b
parent 62 b23410e29e22
child 71 dd83586b62d6
Revision: 201021 Kit: 2010121
contentmgmt/cafstreamingsupport/group/bld.inf
contentmgmt/cafstreamingsupport/group/staclient.mmp
contentmgmt/cafstreamingsupport/group/staserver.mmp
contentmgmt/cafstreamingsupport/group/stashared.mmp
contentmgmt/cafstreamingsupport/group/tscaf.mmp
contentmgmt/cafstreamingsupport/group/tscaf_singleprocess_streamagent.mmp
contentmgmt/cafstreamingsupport/group/tscaf_streamagent01.mmp
contentmgmt/cafstreamingsupport/group/tscaf_streamagent02.mmp
contentmgmt/cafstreamingsupport/test/streamingtestagent/inc/stacommon.h
contentmgmt/cafstreamingsupport/test/streamingtestagent/inc/staserver.h
contentmgmt/cafstreamingsupport/test/streamingtestagent/source/client/staclient.cpp
contentmgmt/cafstreamingsupport/test/streamingtestagent/source/server/staserver.cpp
contentmgmt/cafstreamingsupport/test/streamingtestagent/source/server/stasession.cpp
contentmgmt/cafstreamingsupport/test/streamingtestagent_singleprocess/source/shared/testsingleprocesskeystreamdecoder.cpp
contentmgmt/cafstreamingsupport/test/tscaf/inc/tscafstep.h
contentmgmt/cafstreamingsupport/test/tscaf/scripts/tscaf_oom_without_upward_dependent.script
contentmgmt/cafstreamingsupport/test/tscaf/scripts/tscaf_without_upward_dependent.script
contentmgmt/cafstreamingsupport/test/tscaf/source/tipsec.cpp
contentmgmt/cafstreamingsupport/test/tscaf/source/tkeystreamdecoderattributes.cpp
contentmgmt/cafstreamingsupport/test/tscaf/source/tkeystreamdecoderconstruct.cpp
contentmgmt/cafstreamingsupport/test/tscaf/source/tkeystreamsink.cpp
contentmgmt/cafstreamingsupport/test/tscaf/source/tmultikeystreamdecoders.cpp
contentmgmt/cafstreamingsupport/test/tscaf/source/tpostacquisition.cpp
contentmgmt/cafstreamingsupport/test/tscaf/source/treferenceagent.cpp
contentmgmt/cafstreamingsupport/test/tscaf/source/tscafstep.cpp
contentmgmt/referencedrmagent/RefTestAgent/group/bld.inf
contentmgmt/referencedrmagent/RefTestAgent/group/sraclient.mmp
contentmgmt/referencedrmagent/RefTestAgent/group/sraplugin.mmp
contentmgmt/referencedrmagent/RefTestAgent/group/sraserver.mmp
contentmgmt/referencedrmagent/RefTestAgent/group/srautils.mmp
contentmgmt/referencedrmagent/RefTestAgent/inc/rta.iby
contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/_sdpdefs.h
contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdpattributefield.h
contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdpbandwidthfield.h
contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdpcodecconstants.h
contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdpcodecerr.h
contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdpcodecstringpool.h
contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdpconnectionfield.h
contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdpdocument.h
contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdpfmtattributefield.h
contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdpkeyfield.h
contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdpmediafield.h
contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdporiginfield.h
contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdprepeatfield.h
contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdprtpmapvalue.h
contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdptimefield.h
contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdptypedtime.h
contentmgmt/referencedrmagent/RefTestAgent/localsdp/bwins/localsdpcodecu.def
contentmgmt/referencedrmagent/RefTestAgent/localsdp/eabi/localsdpcodecu.def
contentmgmt/referencedrmagent/RefTestAgent/localsdp/group/localsdpcodec.mmp
contentmgmt/referencedrmagent/RefTestAgent/localsdp/inc/csdpcodecstringpool.h
contentmgmt/referencedrmagent/RefTestAgent/localsdp/inc/sdpattributefieldptrs.h
contentmgmt/referencedrmagent/RefTestAgent/localsdp/inc/sdpcodec.pan
contentmgmt/referencedrmagent/RefTestAgent/localsdp/inc/sdpcodecparseutil.h
contentmgmt/referencedrmagent/RefTestAgent/localsdp/inc/sdpcodecstringconstants.h
contentmgmt/referencedrmagent/RefTestAgent/localsdp/inc/sdpcodectemplate.h
contentmgmt/referencedrmagent/RefTestAgent/localsdp/inc/sdpcodectemplate.inl
contentmgmt/referencedrmagent/RefTestAgent/localsdp/inc/sdporiginfieldptrs.h
contentmgmt/referencedrmagent/RefTestAgent/localsdp/inc/sdputil.h
contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/csdpcodecstringpool.cpp
contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdpattributefield.cpp
contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdpattributefieldptrs.cpp
contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdpbandwidthfield.cpp
contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdpcodecparseutil.cpp
contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdpcodecstringpool.cpp
contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdpconnectionfield.cpp
contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdpdocument.cpp
contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdpfmtattributefield.cpp
contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdpkeyfield.cpp
contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdpmediafield.cpp
contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdporiginfield.cpp
contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdporiginfieldptrs.cpp
contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdprepeatfield.cpp
contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdprtpmapvalue.cpp
contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdptimefield.cpp
contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdptypedtime.cpp
contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdputil.cpp
contentmgmt/referencedrmagent/RefTestAgent/localsdp/strings/localsdpcodecstringconstants.st
contentmgmt/referencedrmagent/RefTestAgent/streamingrefagent/inc/sracommon.h
contentmgmt/referencedrmagent/RefTestAgent/streamingrefagent/inc/sraserver.h
contentmgmt/referencedrmagent/RefTestAgent/streamingrefagent/inc/srautils.h
contentmgmt/referencedrmagent/RefTestAgent/streamingrefagent/source/client/sraclient.cpp
contentmgmt/referencedrmagent/RefTestAgent/streamingrefagent/source/server/sraserver.cpp
contentmgmt/referencedrmagent/RefTestAgent/streamingrefagent/source/server/srasession.cpp
contentmgmt/referencedrmagent/RefTestAgent/streamingrefagent/source/utils/srautils.cpp
securityanddataprivacytools/securitytools/openssllib/import/bin/deb/distribution.policy
securityanddataprivacytools/securitytools/openssllib/import/bin/linux-x86/deb/distribution.policy
securityanddataprivacytools/securitytools/openssllib/import/bin/linux-x86/rel/distribution.policy
securityanddataprivacytools/securitytools/openssllib/import/bin/rel/distribution.policy
--- a/contentmgmt/cafstreamingsupport/group/bld.inf	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/cafstreamingsupport/group/bld.inf	Thu May 27 14:32:46 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -49,6 +49,7 @@
 
 #ifndef TOOLS
 #ifndef TOOLS2
+
 // Common test stream agent implementation projects 
 stashared.mmp
 staclient.mmp		
@@ -69,13 +70,8 @@
 PRJ_TESTEXPORTS
 
 ../test/tscaf/scripts/tscaf.ini				z:/tcaf/tscaf/tscaf.ini
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 ../test/tscaf/scripts/tscaf.script				z:/tcaf/tscaf/tscaf.script
 ../test/tscaf/scripts/tscaf_oom.script			z:/tcaf/tscaf/tscaf_oom.script
-#else
-../test/tscaf/scripts/tscaf_without_upward_dependent.script				z:/tcaf/tscaf/tscaf.script
-../test/tscaf/scripts/tscaf_oom_without_upward_dependent.script			z:/tcaf/tscaf/tscaf_oom.script
-#endif
 ../test/tscaf/scripts/tscafipsec.script			z:/tcaf/tscaf/tscafipsec.script
 ../test/tscaf/scripts/tscafipsec_oom.script			z:/tcaf/tscaf/tscafipsec_oom.script
 ../test/tscaf/scripts/tscafipsecmanual.script			z:/tcaf/tscaf/tscafipsecmanual.script
--- a/contentmgmt/cafstreamingsupport/group/staclient.mmp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/cafstreamingsupport/group/staclient.mmp	Thu May 27 14:32:46 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -25,9 +25,10 @@
 
 USERINCLUDE 	../test/streamingtestagent/inc
 USERINCLUDE 	../../referencedrmagent/RefTestAgent/streamingrefagent/inc
+USERINCLUDE 	../../referencedrmagent/RefTestAgent/localsdp/inc
+USERINCLUDE 	../../referencedrmagent/RefTestAgent/localsdp/api
 
 OS_LAYER_SYSTEMINCLUDE_SYMBIAN
-MW_LAYER_SYSTEMINCLUDE_SYMBIAN
 
 SOURCEPATH 	../test/streamingtestagent/source/client
 SOURCE 		staclient.cpp
@@ -36,9 +37,7 @@
 LIBRARY		scsclient.lib
 LIBRARY		estor.lib
 LIBRARY		cafutils.lib
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
-LIBRARY		sdpcodec.lib
-#endif
+LIBRARY		localsdpcodec.lib
 LIBRARY		stashared.lib
 LIBRARY 	streamingcaf.lib efsrv.lib
 SMPSAFE
--- a/contentmgmt/cafstreamingsupport/group/staserver.mmp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/cafstreamingsupport/group/staserver.mmp	Thu May 27 14:32:46 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -23,10 +23,12 @@
 CAPABILITY	DRM NetworkControl NetworkServices
 
 OS_LAYER_SYSTEMINCLUDE_SYMBIAN
-MW_LAYER_SYSTEMINCLUDE_SYMBIAN
 
 USERINCLUDE 	../test/streamingtestagent/inc
 USERINCLUDE 	../../referencedrmagent/RefTestAgent/streamingrefagent/inc
+USERINCLUDE 	../../referencedrmagent/RefTestAgent/localsdp/inc
+USERINCLUDE 	../../referencedrmagent/RefTestAgent/localsdp/api
+
 
 SOURCEPATH 	../test/streamingtestagent/source/server
 SOURCE 		staserver.cpp
@@ -38,9 +40,7 @@
 LIBRARY		efsrv.lib
 LIBRARY		cafutils.lib
 LIBRARY		estor.lib
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
-LIBRARY		sdpcodec.lib
-#endif
+LIBRARY		localsdpcodec.lib
 LIBRARY		bafl.lib
 LIBRARY		stashared.lib
 LIBRARY 	streamingcaf.lib
--- a/contentmgmt/cafstreamingsupport/group/stashared.mmp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/cafstreamingsupport/group/stashared.mmp	Thu May 27 14:32:46 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -26,9 +26,11 @@
 USERINCLUDE 	../test/streamingtestagent/inc
 USERINCLUDE 	../test/streamingtestagent_singleprocess/inc
 USERINCLUDE 	../../referencedrmagent/RefTestAgent/streamingrefagent/inc
+USERINCLUDE 	../../referencedrmagent/RefTestAgent/localsdp/inc
+USERINCLUDE 	../../referencedrmagent/RefTestAgent/localsdp/api
+
 
 OS_LAYER_SYSTEMINCLUDE_SYMBIAN
-MW_LAYER_SYSTEMINCLUDE_SYMBIAN
 
 SOURCEPATH 	../test/streamingtestagent/source/shared
 SOURCE		testprotstrdesc.cpp
@@ -45,9 +47,7 @@
 LIBRARY		estor.lib
 LIBRARY		staclient.lib
 LIBRARY		srautils.lib
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
-LIBRARY		sdpcodec.lib
-#endif
+LIBRARY		localsdpcodec.lib
 LIBRARY		efsrv.lib
 LIBRARY		bafl.lib
 SMPSAFE
--- a/contentmgmt/cafstreamingsupport/group/tscaf.mmp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/cafstreamingsupport/group/tscaf.mmp	Thu May 27 14:32:46 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -46,9 +46,11 @@
 USERINCLUDE	../test/streamingtestagent/inc
 USERINCLUDE	../test/streamingtestagent_singleprocess/inc
 USERINCLUDE	../../referencedrmagent/RefTestAgent/streamingrefagent/inc
+USERINCLUDE 	../../referencedrmagent/RefTestAgent/localsdp/inc
+USERINCLUDE 	../../referencedrmagent/RefTestAgent/localsdp/api
+
 
 OS_LAYER_SYSTEMINCLUDE_SYMBIAN
-MW_LAYER_SYSTEMINCLUDE_SYMBIAN
 
 LIBRARY euser.lib 
 LIBRARY estlib.lib
@@ -59,9 +61,7 @@
 LIBRARY testexecutelogclient.lib
 LIBRARY rfileloggerclient.lib
 LIBRARY cafutils.lib
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
-LIBRARY sdpcodec.lib
-#endif
+LIBRARY localsdpcodec.lib
 LIBRARY bafl.lib
 LIBRARY streamingcaf.lib
 LIBRARY stashared.lib
--- a/contentmgmt/cafstreamingsupport/group/tscaf_singleprocess_streamagent.mmp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/cafstreamingsupport/group/tscaf_singleprocess_streamagent.mmp	Thu May 27 14:32:46 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -35,15 +35,15 @@
 USERINCLUDE 	../test/streamingtestagent_singleprocess/inc
 USERINCLUDE 	../test/streamingtestagent/inc
 USERINCLUDE 	../../referencedrmagent/RefTestAgent/streamingrefagent/inc
+USERINCLUDE 	../../referencedrmagent/RefTestAgent/localsdp/inc
+USERINCLUDE 	../../referencedrmagent/RefTestAgent/localsdp/api
+
 
 OS_LAYER_SYSTEMINCLUDE_SYMBIAN
-MW_LAYER_SYSTEMINCLUDE_SYMBIAN
 
 LIBRARY 	euser.lib
 LIBRARY		streamingcaf.lib
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
-LIBRARY		sdpcodec.lib
-#endif
+LIBRARY		localsdpcodec.lib
 LIBRARY 	stashared.lib 
 LIBRARY 	srautils.lib
 
--- a/contentmgmt/cafstreamingsupport/group/tscaf_streamagent01.mmp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/cafstreamingsupport/group/tscaf_streamagent01.mmp	Thu May 27 14:32:46 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -34,15 +34,15 @@
 
 USERINCLUDE 	../test/streamingtestagent/inc
 USERINCLUDE 	../../referencedrmagent/RefTestAgent/streamingrefagent/inc
+USERINCLUDE 	../../referencedrmagent/RefTestAgent/localsdp/inc
+USERINCLUDE 	../../referencedrmagent/RefTestAgent/localsdp/api
+
 
 OS_LAYER_SYSTEMINCLUDE_SYMBIAN
-MW_LAYER_SYSTEMINCLUDE_SYMBIAN
 
 LIBRARY 	euser.lib
 LIBRARY		streamingcaf.lib
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
-LIBRARY		sdpcodec.lib
-#endif
+LIBRARY		localsdpcodec.lib
 LIBRARY		stashared.lib
 LIBRARY		srautils.lib
 
--- a/contentmgmt/cafstreamingsupport/group/tscaf_streamagent02.mmp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/cafstreamingsupport/group/tscaf_streamagent02.mmp	Thu May 27 14:32:46 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -34,15 +34,15 @@
 
 USERINCLUDE 	../test/streamingtestagent/inc
 USERINCLUDE 	../../referencedrmagent/RefTestAgent/streamingrefagent/inc
+USERINCLUDE 	../../referencedrmagent/RefTestAgent/localsdp/inc
+USERINCLUDE 	../../referencedrmagent/RefTestAgent/localsdp/api
+
 
 OS_LAYER_SYSTEMINCLUDE_SYMBIAN
-MW_LAYER_SYSTEMINCLUDE_SYMBIAN
 
 LIBRARY 	euser.lib
 LIBRARY		streamingcaf.lib
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
-LIBRARY		sdpcodec.lib
-#endif
+LIBRARY		localsdpcodec.lib
 LIBRARY		stashared.lib
 LIBRARY		srautils.lib
 
--- a/contentmgmt/cafstreamingsupport/test/streamingtestagent/inc/stacommon.h	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/cafstreamingsupport/test/streamingtestagent/inc/stacommon.h	Thu May 27 14:32:46 2010 +0300
@@ -31,14 +31,14 @@
 #include <e32uid.h>
 #include <s32mem.h>
 #include <stringpool.h>
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
-#include <sdpdocument.h>
-#include <sdpmediafield.h>
-#include <sdpattributefield.h>
-#include <sdpcodecstringpool.h>
-#include <sdpfmtattributefield.h>
-#include <sdpcodecstringconstants.h>
-#endif
+
+#include "sdpdocument.h"
+#include "sdpmediafield.h"
+#include "sdpattributefield.h"
+#include "sdpcodecstringpool.h"
+#include "sdpfmtattributefield.h"
+#include "sdpcodecstringconstants.h"
+
 #include <caf/streaming/streamcaftypes.h>
 #include <caf/streaming/keyassociation.h>
 #include <caf/streaming/keystreamsink.h>
--- a/contentmgmt/cafstreamingsupport/test/streamingtestagent/inc/staserver.h	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/cafstreamingsupport/test/streamingtestagent/inc/staserver.h	Thu May 27 14:32:46 2010 +0300
@@ -74,10 +74,8 @@
 	private:
 		HBufC8* iBuffer;
 		CKeyStreamSink* iKeyStreamSink;
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 		CSdpMediaField* iSdp;
 		CSdpDocument* iSdpDoc;
-#endif
 		CSraRightsObject* iRo;
 		};
 	
--- a/contentmgmt/cafstreamingsupport/test/streamingtestagent/source/client/staclient.cpp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/cafstreamingsupport/test/streamingtestagent/source/client/staclient.cpp	Thu May 27 14:32:46 2010 +0300
@@ -151,15 +151,10 @@
  	@param aKey An SDP object data.
  */
 	{
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	HBufC8* sdpBuf(0);
 	TPtr8 ptr(EncodeLC(aSdp, sdpBuf));
 	User::LeaveIfError(CallSessionFunction(ESetSdpKeyStream, TIpcArgs(&ptr)));
 	CleanupStack::PopAndDestroy(sdpBuf);
-#else
-	(void) aSdp;
-#endif
-
 	}
 
 EXPORT_C void RStaClient::SetSdpDocumentL(const CSdpDocument& aSdpDoc) const
@@ -168,15 +163,10 @@
  	@param aKey An SDP object data.
  */
 	{
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	HBufC8* sdpDocBuf(0);
 	TPtr8 ptr(EncodeLC(aSdpDoc, sdpDocBuf));
 	User::LeaveIfError(CallSessionFunction(ESetSdpDocument, TIpcArgs(&ptr)));
 	CleanupStack::PopAndDestroy(sdpDocBuf);
-#else
-	(void) aSdpDoc;
-#endif
-
 	}
 
 EXPORT_C void RStaClient::SendIpSecAssociationL(TInt32 aSpi, HBufC8* aEncryptionKey, HBufC8* aAuthenticationKey) const
--- a/contentmgmt/cafstreamingsupport/test/streamingtestagent/source/server/staserver.cpp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/cafstreamingsupport/test/streamingtestagent/source/server/staserver.cpp	Thu May 27 14:32:46 2010 +0300
@@ -66,9 +66,7 @@
  */
 	{
 	iFs.Close();
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	SdpCodecStringPool::Close();
-#endif
 	}
 	
 	
@@ -96,9 +94,7 @@
 	User::LeaveIfError(iFs.Connect());
 	User::LeaveIfError(iFs.ShareProtected());
 	User::LeaveIfError(iFs.CreatePrivatePath(iFs.GetSystemDrive()));
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	SdpCodecStringPool::OpenL();
-#endif
 	StartL(KStaName);
 	}
 
--- a/contentmgmt/cafstreamingsupport/test/streamingtestagent/source/server/stasession.cpp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/cafstreamingsupport/test/streamingtestagent/source/server/stasession.cpp	Thu May 27 14:32:46 2010 +0300
@@ -39,10 +39,8 @@
 	delete iBuffer;	
 	delete iKeyStreamSink;
 	delete iRo;
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	delete iSdp;
 	delete iSdpDoc;
-#endif
 	}
 
 	
@@ -347,7 +345,6 @@
  	@param	aMessage	Standard server-side handle to message.
   */
 	{
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	TInt len = aMessage.GetDesMaxLengthL(0);
 	HBufC8* des = HBufC8::NewLC(len);
 	TPtr8 ptr(des->Des());
@@ -367,10 +364,6 @@
 		{
 		User::Leave(KErrCANoRights);
 		}
-#else
-	(void) aMessage;
-	User::Leave(KErrCANoRights);
-#endif
 	}
 
 void CStaSession::SetSdpDocumentL(const RMessage2& aMessage)
@@ -380,7 +373,6 @@
  	@param	aMessage	Standard server-side handle to message.
   */
 	{
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	TInt len = aMessage.GetDesMaxLengthL(0);
 	HBufC8* des = HBufC8::NewLC(len);
 	TPtr8 ptr(des->Des());
@@ -393,9 +385,6 @@
 	// Decode the SDP document object from the encoded data
 	iSdpDoc = CSdpDocument::DecodeL(*des);
 	CleanupStack::PopAndDestroy(des);
-#else
-	(void) aMessage;
-#endif
 	}
 
 void CStaSession::VerifyRoL()
--- a/contentmgmt/cafstreamingsupport/test/streamingtestagent_singleprocess/source/shared/testsingleprocesskeystreamdecoder.cpp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/cafstreamingsupport/test/streamingtestagent_singleprocess/source/shared/testsingleprocesskeystreamdecoder.cpp	Thu May 27 14:32:46 2010 +0300
@@ -41,10 +41,8 @@
 	iFs.Close();
 	
 	delete iKeyStreamSink;
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY	
 	delete iSdp;
 	delete iSdpDoc;
-#endif
 	delete iRo;
 	}
 
@@ -93,13 +91,8 @@
 	iKeyStreamSink->SetEncryptionAlgorithmL(EAES_128_CBC);
 	iKeyStreamSink->SetAuthenticationAlgorithmL(EHMAC_SHA1);
 
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY	
 	iSdp = aSdpKeyStream.CloneL();
 	iSdpDoc = aSdpDoc.CloneL();
-#else
-    (void) aSdpKeyStream;
-	(void) aSdpDoc;
-#endif
 	SetRoL();
 	}
 
--- a/contentmgmt/cafstreamingsupport/test/tscaf/inc/tscafstep.h	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/cafstreamingsupport/test/tscaf/inc/tscafstep.h	Thu May 27 14:32:46 2010 +0300
@@ -111,11 +111,9 @@
 	TVerdict doTestStepL();
 	TVerdict doTestStepPostambleL();
 	void CleanAgentsPrivateFolderL(const TDesC& aPrivatePath);
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	CSdpDocument* CreateSdpDocumentLC();
 	CSdpMediaField* CreateSdpLC(TInt aSdpNum);
 	void AddMediaFieldL(CSdpDocument& aSdpDoc, const CSdpMediaField* aSdpKeyStream);
-#endif
 	CKeyStreamSink* CreateKeyStreamSinkLC(const TDesC& aFilePath, const TDesC& aPrivPath);
 	void CopyFile2AgentsPrivateFolderL(RFs& aFs, const TDesC& aFileName, const TDesC& aPrivPath);
 	HBufC* GetFullPathLC(const TDesC& aPath, const TDesC& aFileName);
@@ -139,9 +137,7 @@
 									const TDesC& aExpectedValue);
 	
 private:
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	void AddAttributes2SdpL(CSdpMediaField& aSdp, TInt aSdpNum);
-#endif
 	void PrintErrorAndLeaveL(TDesC& aKey);
 	static void DeleteSdpDocAndCloseCodecPool(TAny* aSdpDoc);
 	
--- a/contentmgmt/cafstreamingsupport/test/tscaf/scripts/tscaf_oom_without_upward_dependent.script	Fri May 14 17:39:00 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,134 +0,0 @@
-//
-// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of the License "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:
-//
-// Streaming CAF "Out of Memory" Tests
-
-PRINT Run PREQ782 Streaming CAF OOM Tests
-
-// Load Suite
-LOAD_SUITE tscaf
-
-
-//! @SYMTestCaseID 		SEC-SCAF-OOM-0001
-//! @SYMTestCaseDesc 		StartupComms
-
-START_TESTCASE SEC-SCAF-OOM-0001
-RUN_TEST_STEP 100 tscaf StartupCommsStep
-END_TESTCASE SEC-SCAF-OOM-0001
-
-
-// Note: For test case descriptions, please refer to the corresponding tscaf.script file
-
-
-//********************** SEC-SCAF-A : CONSUMER INTERFACE  **********************
-
- 
-//! @SYMTestCaseID 		SEC-SCAF-OOM-A001
-//! @SYMTestCaseDesc 		(keystreamdecoder_positiveconstruct_OOM)
-
-START_TESTCASE SEC-SCAF-OOM-A001
-RUN_TEST_STEP tscaf SCAFSetupRightsObjects z:\tcaf\tscaf\tscaf.ini Rights_Program
-RUN_TEST_STEP 100 tscaf SCAFKeyStreamDecoderConstruct z:\tcaf\tscaf\tscaf.ini keystreamdecoder_positiveconstruct_OOM
-END_TESTCASE SEC-SCAF-OOM-A001
-
-
-//! @SYMTestCaseID 		SEC-SCAF-OOM-A004
-//! @SYMTestCaseDesc 		(keystreamdecoder_positivequery_OOM)
-
-START_TESTCASE SEC-SCAF-OOM-A004
-
-// Copy the necessary 'Program' Protected rights objects into the stream agent's private directory
-RUN_TEST_STEP tscaf SCAFSetupRightsObjects z:\tcaf\tscaf\tscaf.ini Rights_Program
-RUN_TEST_STEP tscaf SCAFKeyStreamDecoderAttributes z:\tcaf\tscaf\tscaf.ini keystreamdecoder_positivequery_programprotectedRO_OOM
-
-// Copy the necessary 'Service' Protected rights objects into the stream agent's private directory
-RUN_TEST_STEP tscaf SCAFSetupRightsObjects z:\tcaf\tscaf\tscaf.ini Rights_Service
-RUN_TEST_STEP tscaf SCAFKeyStreamDecoderAttributes z:\tcaf\tscaf\tscaf.ini keystreamdecoder_positivequery_serviceprotectedRO_OOM
-
-END_TESTCASE SEC-SCAF-OOM-A004
-
-
-
-//! @SYMTestCaseID 		SEC-SCAF-OOM-A008
-//! @SYMTestCaseDesc 		(multikeystreamdecoders_OOM)
-
-START_TESTCASE SEC-SCAF-OOM-A008
-
-// Copy the necessary rights objects into the stream agent's private directory
-RUN_TEST_STEP tscaf SCAFSetupRightsObjects z:\tcaf\tscaf\tscaf.ini Rights_ServiceProgram
-
-// 2 Key Stream Decoders, Invoking the same stream agent
-RUN_TEST_STEP tscaf SCAFMultiKeyStreamDecoders z:\tcaf\tscaf\tscaf.ini multikeystreamdecoders_singlethread_singleagent_OOM
-
-// 2 Key Stream Decoders, Invoking different stream agents
-RUN_TEST_STEP tscaf SCAFMultiKeyStreamDecoders z:\tcaf\tscaf\tscaf.ini multikeystreamdecoders_singlethread_multiagents_OOM
-
-END_TESTCASE SEC-SCAF-OOM-A008
-
-
-
-//************	SEC-SCAF-C : INTEROPERABILITY WITH DECODING STACK   ***********
-
-
-//! @SYMTestCaseID 		SEC-SCAF-OOM-C001
-//! @SYMTestCaseDesc 		(keystreamsinks_OOM)
-
-START_TESTCASE SEC-SCAF-OOM-C001
-RUN_TEST_STEP 100 tscaf SCAFKeyStreamSink z:\tcaf\tscaf\tscaf.ini sdp_service_protected_OOM
-END_TESTCASE SEC-SCAF-OOM-C001
-
-
-
-//! @SYMTestCaseID 		SEC-SCAF-OOM-C002
-//! @SYMTestCaseDesc 		(concurrent_keystreamsinks_OOM)
-
-START_TESTCASE SEC-SCAF-OOM-C002
-RUN_TEST_STEP 150 tscaf SCAFConcurrentKeyStreamSinks z:\tcaf\tscaf\tscaf.ini concurrent_keystreamsinks_OOM
-END_TESTCASE SEC-SCAF-OOM-C002
-
-
-
-//********************** SEC-SCAF-D : POST-ACQUISITION  **********************
-
-
-//! @SYMTestCaseID 		SEC-SCAF-OOM-D001
-//! @SYMTestCaseDesc 		(postacqusition_OOM)
-
-START_TESTCASE SEC-SCAF-OOM-D001
-
-RUN_TEST_STEP 100 tscaf SCAFPostAcquisition z:\tcaf\tscaf\tscaf.ini post_acquisition_OOM
-
-RUN_TEST_STEP 100 tscaf SCAFPostAcquisition z:\tcaf\tscaf\tscaf.ini post_acquisition_create_outputs_OOM
-
-END_TESTCASE SEC-SCAF-OOM-D001
-
-
-
-//********************** SEC-SCAF-E : INTEROPERABILITY WITH DECODING STACK - IPSEC    ***********
-
-RUN_SCRIPT z:\tcaf\tscaf\tscafipsec_oom.script
-
-
-
-//********************** SEC-SCAF-H : REFERENCE AGENT TEST  **********************
-
-//! @SYMTestCaseID 		SEC-SCAF-OOM-H001
-//! @SYMTestCaseDesc 		(referenceagent_OOM)
-
-START_TESTCASE SEC-SCAF-OOM-H001
-RUN_TEST_STEP 100 tscaf SCAFRefAgent z:\tcaf\tscaf\tscaf.ini reference_agent_OOM
-END_TESTCASE SEC-SCAF-OOM-H001
-
-
--- a/contentmgmt/cafstreamingsupport/test/tscaf/scripts/tscaf_without_upward_dependent.script	Fri May 14 17:39:00 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,566 +0,0 @@
-//
-// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of the License "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:
-//
-// Streaming CAF Integration Tests
-
-PRINT Run PREQ782 Streaming CAF Integration Tests
-
-// Load Suite
-LOAD_SUITE tscaf
-
-
-//! @SYMTestCaseID 		SEC-SCAF-MISC-0001
-//! @SYMTestCaseDesc 		StartupComms
-
-START_TESTCASE SEC-SCAF-MISC-0001
-RUN_TEST_STEP 100 tscaf StartupCommsStep
-END_TESTCASE SEC-SCAF-MISC-0001
-
-
-//********************** SEC-SCAF-A : CONSUMER INTERFACE  **********************
-
-//! @SYMTestCaseID 		SEC-SCAF-A001
-//! @SYMTestCaseDesc 		Key stream decoder construction with a supported protected key stream description
-//! 				(keystreamdecoder_positiveconstruct)
-//! @SYMPREQ 			PREQ782
-//! @SYMREQ 			REQ7772, REQ7776, REQ7781, REQ7784, REQ7954
-//! @SYMTestPriority 		Critical
-//! @SYMTestStatus   		Implemented
-//! @SYMTestActions 		Preconditions:
-//!				• There are the necessary ROM based test stream agent plug-ins present that support 
-//!				the SDP media description supplied during construction of the key stream decoder.
-//!
-//!				Test Actions:
-//!				• Generate a protected key stream description.
-//!				• Generate an SDP media description for the key stream.
-//!				• Construct the key stream decoder using the protected stream description and SDP
-//!				media description objects previously generated.
-//!				• Destroy the key stream decoder object.
-//!
-//! @SYMTestExpectedResults 	• The key stream decoder is successfully created and destroyed.
-//! @SYMTestType 		CIT
-
-START_TESTCASE SEC-SCAF-A001
-RUN_TEST_STEP tscaf SCAFSetupRightsObjects z:\tcaf\tscaf\tscaf.ini Rights_Program
-RUN_TEST_STEP 100 tscaf SCAFKeyStreamDecoderConstruct z:\tcaf\tscaf\tscaf.ini keystreamdecoder_positiveconstruct
-END_TESTCASE SEC-SCAF-A001
-
-
-
-//! @SYMTestCaseID 		SEC-SCAF-A004
-//! @SYMTestCaseDesc 		Querying attributes related to a key stream decoder
-//! 				(keystreamdecoder_positivequery)
-//! @SYMPREQ 			PREQ782
-//! @SYMREQ 			REQ7772, REQ7776, REQ7784, REQ7954
-//! @SYMTestPriority 		Critical
-//! @SYMTestStatus   		Implemented
-//! @SYMTestActions  		Preconditions:
-//!				• The necessary ROM based test stream agent plug-in is present that supports the SDP
-//!				media description 	
-//!				supplied during construction of the key stream decoder.
-//!				• There are two Rights Objects files (serviceProtectedRO and programProtectedRO) in
-//!				the private folder of the supporting test stream agent.
-//!				• The Rights Issuer URI of the serviceProtectedRO is set to “IssuerUriServiceProtectedRO”
-//!				and programProtectedRO is set to “IssuerUriProgramProtectedRO”
-//!			
-//!				Test Actions:
-//!				• Generate a protected key stream description.
-//!				• Generate an SDP media description for the key stream with an attribute requiring 
-//!				programProtectedRO
-//!				• Construct the key stream decoder using the protected stream description and SDP media 
-//!				description objects previously generated.
-//!				• Query the stream agent to determine whether the program is protected.
-//!				• Query the stream agent to determine whether the whole service is protected.
-//!				• Query the stream agent to retrieve the Rights Issuer URI.
-//!				• Destroy the key stream decoder object.
-//!				
-//! @SYMTestExpectedResults 	• The key stream decoder is successfully created.
-//!				• The program is protected but the whole service is not.
-//!				• The Rights Issuer URI retrieved is “IssuerUriProgramProtectedRO”
-//!
-//! @SYMTestType 		CIT
-
-START_TESTCASE SEC-SCAF-A004
-
-// Copy the necessary 'Program' Protected rights objects into the stream agent's private directory
-RUN_TEST_STEP tscaf SCAFSetupRightsObjects z:\tcaf\tscaf\tscaf.ini Rights_Program
-RUN_TEST_STEP tscaf SCAFKeyStreamDecoderAttributes z:\tcaf\tscaf\tscaf.ini keystreamdecoder_positivequery_programprotectedRO
-
-// Copy the necessary 'Service' Protected rights objects into the stream agent's private directory
-RUN_TEST_STEP tscaf SCAFSetupRightsObjects z:\tcaf\tscaf\tscaf.ini Rights_Service
-RUN_TEST_STEP tscaf SCAFKeyStreamDecoderAttributes z:\tcaf\tscaf\tscaf.ini keystreamdecoder_positivequery_serviceprotectedRO
-
-END_TESTCASE SEC-SCAF-A004
-
-//! @SYMTestCaseID 		SEC-SCAF-A007
-//! @SYMTestCaseDesc 		Concurrent key stream decoder construction and querying
-//! 				(keystreamdecoder_concurrentquery)
-//! @SYMPREQ 			PREQ782
-//! @SYMREQ 			REQ7772, REQ7776, REQ7781, REQ7784, REQ7954
-//! @SYMTestPriority 		Critical
-//! @SYMTestStatus   		Implemented
-//! @SYMTestActions  		Preconditions:
-//!				The following test actions should be carried out concurrently in 3 separate threads:
-//!				• Generate a protected key stream description.
-//!				• Generate an SDP media description. Thread A should generate an SDP media description
-//!				supported by test stream agent plug-in A and Threads B & C should generate SDP media
-//!				description objects supported by test stream agent plug-in B.
-//!				• Construct a key stream decoder object using the generated protected key stream
-//!				description and SDP media description objects.
-//!				• When the key stream decoder has been constructed, query the attributes associated
-//!				with the stream agent.
-//!				• Destroy the key stream decoder object.
-//!
-//! @SYMTestExpectedResults 	• Each key stream decoder object should construct successfully.
-//!				• Checking the implementation attributes reveals that Thread A has invoked test stream
-//!				agent A and Thread B & C have invoked test stream agent B.
-//!
-//! @SYMTestType 		CIT
-
-START_TESTCASE SEC-SCAF-A007
-
-// Copy the necessary rights objects into the stream agent's private directory
-RUN_TEST_STEP tscaf SCAFSetupRightsObjects z:\tcaf\tscaf\tscaf.ini Rights_ServiceProgram
-
-CONCURRENT
-RUN_TEST_STEP tscaf SCAFKeyStreamDecoderAttributes z:\tcaf\tscaf\tscaf.ini keystreamdecoder_concurrentquery_threadA
-RUN_TEST_STEP tscaf SCAFKeyStreamDecoderAttributes z:\tcaf\tscaf\tscaf.ini keystreamdecoder_concurrentquery_threadB
-RUN_TEST_STEP tscaf SCAFKeyStreamDecoderAttributes z:\tcaf\tscaf\tscaf.ini keystreamdecoder_concurrentquery_threadC
-CONSECUTIVE
-
-END_TESTCASE SEC-SCAF-A007
-
-
-
-//! @SYMTestCaseID 		SEC-SCAF-A008
-//! @SYMTestCaseDesc 		Concurrent multi-thread usage of multiple key stream decoders
-//! 				(multikeystreamdecoders)
-//! @SYMPREQ 			PREQ782
-//! @SYMREQ 			REQ7772, REQ7775, REQ7776, REQ7781, REQ7784, REQ7954
-//! @SYMTestPriority 		Critical
-//! @SYMTestStatus   		Implemented
-//! @SYMTestActions  		Preconditions:
-//!				The following test actions should be carried out concurrently in 3 separate threads:
-//!				• Generate a protected key stream description.
-//!				• Generate an SDP media description (SDPa) for the key stream with an attribute
-//!				requiring serviceProtectedRO.
-//!				• Construct a key stream decoder object using the generated protected key stream
-//!				description and SDP media description object SDPa – decoderA.
-//!				• Generate another SDP media description (SDPb) for the key stream with an attribute
-//!				requiring programProtectedRO.
-//!				• Construct another key stream decoder object using the generated protected key stream
-//!				description and SDP media description object SDPb – decoderB.
-//!				• Query decoderA to retrieve the ‘Rights Issuer URI’ attribute from the invoked 
-//!				stream agent.
-//!				• Query decoderB to retrieve the ‘Rights Issuer URI’ attribute from the invoked 
-//!				stream agent.
-//!				• Destroy both key stream decoder objects.			
-//!
-//! @SYMTestExpectedResults 	• Each key stream decoder object should construct successfully.
-//!				• The Rights Issuer URI  attribute value retrieved from decoderA is 
-//!				“IssuerUriServiceProtectedRO”
-//!				• The Rights Issuer URI  attribute value retrieved from decoderB is 
-//!				“IssuerUriProgramProtectedRO”
-//!
-//! @SYMTestType 		CIT
-
-START_TESTCASE SEC-SCAF-A008
-
-// Copy the necessary rights objects into the stream agent's private directory
-RUN_TEST_STEP tscaf SCAFSetupRightsObjects z:\tcaf\tscaf\tscaf.ini Rights_ServiceProgram
-
-// 2 Key Stream Decoders, Invoking the same stream agent
-RUN_TEST_STEP tscaf SCAFMultiKeyStreamDecoders z:\tcaf\tscaf\tscaf.ini multikeystreamdecoders_singlethread_singleagent
-
-// 2 Key Stream Decoders, Invoking different stream agents
-RUN_TEST_STEP tscaf SCAFMultiKeyStreamDecoders z:\tcaf\tscaf\tscaf.ini multikeystreamdecoders_singlethread_multiagents
-
-// 3 concurrent threads, 2 key stream decoders per thread invoking the same agent
-CONCURRENT
-RUN_TEST_STEP tscaf SCAFMultiKeyStreamDecoders z:\tcaf\tscaf\tscaf.ini multikeystreamdecoders_concurrent_singleagent_threadA
-RUN_TEST_STEP tscaf SCAFMultiKeyStreamDecoders z:\tcaf\tscaf\tscaf.ini multikeystreamdecoders_concurrent_singleagent_threadB
-RUN_TEST_STEP tscaf SCAFMultiKeyStreamDecoders z:\tcaf\tscaf\tscaf.ini multikeystreamdecoders_concurrent_singleagent_threadC
-CONSECUTIVE
-
-// 3 concurrent threads, 2 key stream decoders per thread invoking different agents 
-CONCURRENT
-RUN_TEST_STEP tscaf SCAFMultiKeyStreamDecoders z:\tcaf\tscaf\tscaf.ini multikeystreamdecoders_concurrent_multiagents_threadA
-RUN_TEST_STEP tscaf SCAFMultiKeyStreamDecoders z:\tcaf\tscaf\tscaf.ini multikeystreamdecoders_concurrent_multiagents_threadB
-RUN_TEST_STEP tscaf SCAFMultiKeyStreamDecoders z:\tcaf\tscaf\tscaf.ini multikeystreamdecoders_concurrent_multiagents_threadC
-CONSECUTIVE
-
-END_TESTCASE SEC-SCAF-A008
-
-
-
-//******************	TEST STREAM AGENT UNIT TESTING	    *******************
-
-//! @SYMTestCaseID SEC-SCAF-S001
-//! @SYMTestCaseDesc A unit test step which tests the Test Streaming Agent
-//! 		     (StreamingTestAgent)
-//! @SYMREQ Req-b
-//! @SYMTestPriority Low
-//! @SYMTestActions A connection is established with the Test Agent Server via its client side and the closed.  
-//! @SYMTestExpectedResults Successful connection and disconnectiom to/from the Test Streaming Agent Server. 
-//! @SYMDevelopedForRelease Oghma
-
-START_TESTCASE SEC-SCAF-S001
-RUN_TEST_STEP 100 tscaf SCAFTestAgentServer
-END_TESTCASE SEC-SCAF-S001
-
-
-
-//************	SEC-SCAF-C : INTEROPERABILITY WITH DECODING STACK   ***********
-
-
-//! @SYMTestCaseID 		SEC-SCAF-C001
-//! @SYMTestCaseDesc 		Usage of key stream sink
-//! 				(keystreamsinks)
-//! @SYMPREQ 			PREQ782
-//! @SYMREQ 			REQ7774, REQ7778, REQ7786
-//! @SYMTestPriority 		Critical
-//! @SYMTestStatus   		Implemented
-//! @SYMTestActions  		Preconditions:
-//!				• There are the necessary ROM based test stream agent plug-ins present that support 
-//!				the SDP media description supplied during construction of each key stream decoder.
-//!				• There is a Right Object file in the private folder of the supporting test stream agent.
-//!
-//!				Test Actions:
-//!				• Create a key stream sink
-//!				• Create a plain key and encrypt it with the key extracted from the RO
-//!				• Connect to the Test Agent
-//!				• Send the key stream sink
-//!				• Send the encrypted string (a simple key stream)
-//!				• The test agent server decrypts the key stream by using the key from the RO.
-//!				• The test agent server processes the decrypted key (the key is written into a file 
-//!				defined in the key stream sink)
-//!				• Check whether the right plain key is written down 
-//!				• Destroy the key stream decoder object.				
-//!
-//! @SYMTestExpectedResults 	• The plain string is found in the predefined location.
-//!
-//! @SYMTestType 		CIT
-
-START_TESTCASE SEC-SCAF-C001
-RUN_TEST_STEP 100 tscaf SCAFKeyStreamSink z:\tcaf\tscaf\tscaf.ini sdp_service_protected
-END_TESTCASE SEC-SCAF-C001
-
-
-
-//! @SYMTestCaseID 		SEC-SCAF-C002
-//! @SYMTestCaseDesc 		Usage of key stream sinks in concurrent sessions
-//! 				(concurrent_keystreamsinks)
-//! @SYMPREQ 			PREQ782
-//! @SYMREQ 			REQ7774, REQ7778, REQ7786
-//! @SYMTestPriority 		Critical
-//! @SYMTestStatus   		Preconditions:
-//!				• There are the necessary ROM based test stream agent plug-ins present that support
-//!				the SDP media description supplied during construction of each key stream decoder.
-//!				• There are two Rights Object files (serviceProtectedRO and programProtectedRO) in the
-//!				private folder of each test stream agent.
-//!
-//!				Test Actions:
-//!				• Generate a protected key stream description.
-//!				• Generate an SDP media description (SDPa) for the key stream with an attribute requiring
-//!				serviceProtectedRO.
-//!				• Construct a key stream decoder object using the generated protected key stream 
-//!				description and SDP media description object SDPa – decoderA.
-//!				• Generate another SDP media description (SDPb) for the key stream with an attribute requiring 
-//!				programProtectedRO.
-//!				• Construct another key stream decoder object using the generated protected key stream 
-//!				description and SDP media description object SDPb – decoderB.
-//!				• Create plain_keyA
-//!				• Encrypt plain_keyA with encryption_keyA extracted from serviceProtectedRO
-//!				• Send the encrypted plain_keyA using decoderA
-//!				• Create plain_keyB
-//!				• Encrypt plain_keyB with encryption_keyB extracted from programProtectedRO
-//!				• Send the encrypted plain_keyB using decoderB
-//!				• Check whether stringA is in pathA and stringB is in pathB
-//!				• Destroy both key stream decoder objects.				
-//!
-//! @SYMTestExpectedResults 	• The plain strings are found in the predefined locations.
-//!
-//! @SYMTestType 		CIT
-
-START_TESTCASE SEC-SCAF-C002
-RUN_TEST_STEP 100 tscaf SCAFConcurrentKeyStreamSinks z:\tcaf\tscaf\tscaf.ini concurrent_keystreamsinks
-END_TESTCASE SEC-SCAF-C002
-
-
-
-//********************** SEC-SCAF-D : POST-ACQUISITION  **********************
-
-
-//! @SYMTestCaseID 		SEC-SCAF-D001
-//! @SYMTestCaseDesc 		Post-acquisition content protection
-//! 				(postacqusition)
-//! @SYMPREQ 			PREQ782
-//! @SYMREQ 			REQ7788
-//! @SYMTestPriority 		Critical
-//! @SYMTestStatus   		Implemented
-//! @SYMTestActions  		Preconditions:
-//!				The following test actions should be carried out:
-//!				• Copy  rorecordable.dr (a rights object where ECanExport and EMustProtectIfRecording
-//!				flags shall be set) and its post-acquistion rights object (ropostacquisition.dr) into
-//!				the private directory of the test agent server.
-//!			      	• Generate a test key stream description
-//!				• Generate an SDP media description for the key stream with an attribute requiring 
-//!				rorecordable.dr
-//!				• Construct the key stream decoder using the protected key stream description and SDP
-//!				media description objects previously generated.
-//!				• Query the stream agent to determine whether it is allowed to export and record the 
-//!				content.
-//!				• Request and gets a handle to the postacqusition rights object file
-//!				• Import the postacqusition rights object file to the post-acquisition caf agent
-//!                     	• Open a session to import the content
-//!				• Import the content to the post-acquisition caf agent	
-//!
-//! @SYMTestExpectedResults 	
-//!				• The protected stream is allowed to be recorded
-//!				• The test streaming agent returns a handle of the post-acquistion RO successfully
-//!				• The post-acquistion RO is successfully imported to the post-acquisition caf agent
-//!
-//! @SYMTestType 		CIT
-
-START_TESTCASE SEC-SCAF-D001
-
-RUN_TEST_STEP 100 tscaf SCAFPostAcquisition z:\tcaf\tscaf\tscaf.ini post_acquisition
-
-RUN_TEST_STEP 100 tscaf SCAFPostAcquisition z:\tcaf\tscaf\tscaf.ini post_acquisition_create_outputs
-
-END_TESTCASE SEC-SCAF-D001
-
-
-
-//********************** SEC-SCAF-E : INTEROPERABILITY WITH DECODING STACK - IPSEC    ***********
-
-RUN_SCRIPT z:\tcaf\tscaf\tscafipsec.script
-
-
-
-//********************** SEC-SCAF-G : SINGLE PROCESS STREAM AGENT TESTING  **********************
-
-//! @SYMTestCaseID 		SEC-SCAF-G001
-//! @SYMTestCaseDesc 		SPSA - Key stream decoder construction with a supported protected key stream description
-//! 				(spsa_keystreamdecoder_positiveconstruct)
-//! @SYMPREQ 			PREQ782
-//! @SYMREQ 			
-//! @SYMTestPriority 		High
-//! @SYMTestStatus   		Implemented
-//! @SYMTestActions  		Preconditions:
-//!				• The necessary ROM based ‘single process’ stream agent plug-in is present that supports
-//!				the SDP media description supplied during construction of the key stream decoder.
-//!
-//!				Test Actions:
-//!				• Run the test step actions as described in test case SEC-SCAF-A001.
-//!
-//! @SYMTestExpectedResults 	• The key stream decoder constructed by the single process stream agent is successfully 
-//!				created and destroyed.
-//!
-//! @SYMTestType 		CIT
-
-START_TESTCASE SEC-SCAF-G001
-RUN_TEST_STEP 100 tscaf SCAFKeyStreamDecoderConstruct z:\tcaf\tscaf\tscaf.ini spsa_keystreamdecoder_positiveconstruct
-END_TESTCASE SEC-SCAF-G001
-
-
-
-//! @SYMTestCaseID 		SEC-SCAF-G002
-//! @SYMTestCaseDesc 		SPSA - Querying attributes related to a key stream decoder
-//! 				(spsa_keystreamdecoder_positivequery)
-//! @SYMPREQ 			PREQ782
-//! @SYMREQ 			
-//! @SYMTestPriority 		High
-//! @SYMTestStatus   		Implemented
-//! @SYMTestActions  		Preconditions:
-//!				• The necessary ROM based ‘single process’ stream agent plug-in is present that supports
-//!				the SDP media description supplied during construction of the key stream decoder.
-//!				• The required Rights Object file is present in the private folder for the supporting 
-//!				single process stream agent.
-//!
-//!				Test Actions:
-//!				• Run the test step actions as described in test case SEC-SCAF-A004.				
-//!
-//! @SYMTestExpectedResults 	• The key stream decoder constructed by the single process stream agent is successfully
-//!				created.
-//!				• All of the expected attribute values match their corresponding values retrieved from
-//!				the key stream decoder.
-//!
-//! @SYMTestType 		CIT
-
-START_TESTCASE SEC-SCAF-G002
-
-// Copy the necessary 'Program' Protected rights objects into the single process stream agent's private directory
-RUN_TEST_STEP tscaf SCAFSetupRightsObjects z:\tcaf\tscaf\tscaf.ini Rights_Program_SingleProcessAgent
-RUN_TEST_STEP tscaf SCAFKeyStreamDecoderAttributes z:\tcaf\tscaf\tscaf.ini spsa_keystreamdecoder_positivequery_programprotectedRO
-
-// Copy the necessary 'Service' Protected rights objects into the single process stream agent's private directory
-RUN_TEST_STEP tscaf SCAFSetupRightsObjects z:\tcaf\tscaf\tscaf.ini Rights_Service_SingleProcessAgent
-RUN_TEST_STEP tscaf SCAFKeyStreamDecoderAttributes z:\tcaf\tscaf\tscaf.ini spsa_keystreamdecoder_positivequery_serviceprotectedRO
-
-END_TESTCASE SEC-SCAF-G002
-
-
-
-//! @SYMTestCaseID 		SEC-SCAF-G003
-//! @SYMTestCaseDesc 		SPSA - Concurrent multi-thread usage of multiple key stream decoders
-//! 				(spsa_multikeystreamdecoders)
-//! @SYMPREQ 			PREQ782
-//! @SYMREQ 			
-//! @SYMTestPriority 		High
-//! @SYMTestStatus   		Implemented
-//! @SYMTestActions  		Preconditions:
-//!				• The necessary ROM based ‘single process’ and ‘client-server’ stream agent plug-in
-//!				implementations are present that support the SDP media descriptions supplied during 
-//!				construction of the key stream decoders.
-//!				• The required Rights Object files are present in the private folder of the supporting
-//!				stream agents.
-//!
-//!				Test Actions:
-//!				The following test actions should be carried out concurrently in 3 separate threads 
-//!				(1 of the threads should instantiate a ‘single process’ stream agent, whereas the others
-//!				should instantiate ‘client-server’ based stream agents) :
-//!				
-//!				• Run the test step actions as described in test case SEC-SCAF-A008 				
-//!
-//! @SYMTestExpectedResults 	• Each of the key stream decoder objects that have been constructed by either a 
-//!				client-server or single process stream agent plug-in are created successfully.
-//!				• All of the expected attribute values match their corresponding values retrieved from
-//!				the associated key stream decoder.
-//!
-//! @SYMTestType 		CIT
-
-START_TESTCASE SEC-SCAF-G003
-
-// Copy the necessary rights objects into the stream agent's private directory (Client/Server Architecture)
-RUN_TEST_STEP tscaf SCAFSetupRightsObjects z:\tcaf\tscaf\tscaf.ini Rights_ServiceProgram
-
-// Copy the necessary rights objects into the stream agent's private directory (Single Process Stream Agent)
-RUN_TEST_STEP tscaf SCAFSetupRightsObjects z:\tcaf\tscaf\tscaf.ini Rights_ServiceProgram_SingleProcessAgent
-
-// 2 Key Stream Decoders, Invoking the same single process stream agent
-RUN_TEST_STEP tscaf SCAFMultiKeyStreamDecoders z:\tcaf\tscaf\tscaf.ini spsa_multikeystreamdecoders_singlethread_singleagent
-
-// 2 Key Stream Decoders, Invoking different stream agents (1 Single Process & 1 Client/Server)
-RUN_TEST_STEP tscaf SCAFMultiKeyStreamDecoders z:\tcaf\tscaf\tscaf.ini spsa_multikeystreamdecoders_singlethread_multiagents
-
-// 3 concurrent threads, 2 key stream decoders per thread invoking the same agent
-CONCURRENT
-RUN_TEST_STEP tscaf SCAFMultiKeyStreamDecoders z:\tcaf\tscaf\tscaf.ini spsa_multikeystreamdecoders_concurrent_singleagent_threadA
-RUN_TEST_STEP tscaf SCAFMultiKeyStreamDecoders z:\tcaf\tscaf\tscaf.ini multikeystreamdecoders_concurrent_singleagent_threadB
-RUN_TEST_STEP tscaf SCAFMultiKeyStreamDecoders z:\tcaf\tscaf\tscaf.ini multikeystreamdecoders_concurrent_singleagent_threadC
-CONSECUTIVE
-
-// 3 concurrent threads, 2 key stream decoders per thread invoking different agents (1 Single Process & 1 Client/Server)
-CONCURRENT
-RUN_TEST_STEP tscaf SCAFMultiKeyStreamDecoders z:\tcaf\tscaf\tscaf.ini spsa_multikeystreamdecoders_concurrent_multiagents_threadA
-RUN_TEST_STEP tscaf SCAFMultiKeyStreamDecoders z:\tcaf\tscaf\tscaf.ini spsa_multikeystreamdecoders_concurrent_multiagents_threadB
-RUN_TEST_STEP tscaf SCAFMultiKeyStreamDecoders z:\tcaf\tscaf\tscaf.ini spsa_multikeystreamdecoders_concurrent_multiagents_threadC
-CONSECUTIVE
-
-END_TESTCASE SEC-SCAF-G003
-
-
-
-//! @SYMTestCaseID 		SEC-SCAF-G004
-//! @SYMTestCaseDesc 		SPSA - Usage of key stream sink
-//! 				(spsa_keystreamsinks)
-//! @SYMPREQ 			PREQ782
-//! @SYMREQ 			
-//! @SYMTestPriority 		High
-//! @SYMTestStatus   		Implemented
-//! @SYMTestActions  		Preconditions:
-//!				• The necessary ROM based ‘single process’ stream agent plug-in is present that supports
-//!				the SDP media description supplied during construction of the key stream decoder.
-//!				• The required Rights Object file is present in the private folder for the supporting single
-//!				process stream agent.
-//!
-//!				Test Actions:
-//!				• Run the test step actions as described in test case SEC-SCAF-C001.				
-//!
-//! @SYMTestExpectedResults 	• The expected plain text string is found in the predefined location.
-//!
-//! @SYMTestType 		CIT
-
-START_TESTCASE SEC-SCAF-G004
-
-// Single Process Stream Agent Invoked
-RUN_TEST_STEP 100 tscaf SCAFKeyStreamSink z:\tcaf\tscaf\tscaf.ini spsa_keystreamink
-
-// 2 Single Process Stream Agents Invoked
-RUN_TEST_STEP 100 tscaf SCAFConcurrentKeyStreamSinks z:\tcaf\tscaf\tscaf.ini spsa_concurrent_keystreamsinks
-
-// 1 Single Process Stream Agent and 1 Client/Server Stream Agent Invoked
-RUN_TEST_STEP 100 tscaf SCAFConcurrentKeyStreamSinks z:\tcaf\tscaf\tscaf.ini spsa_cssa_concurrent_keystreamsinks
-
-END_TESTCASE SEC-SCAF-G004
-
-
-
-//! @SYMTestCaseID 		SEC-SCAF-G006
-//! @SYMTestCaseDesc 		SPSA - Testing IPSec integration with key stream decoder
-//! 				(spsa_ipsec_integration_decoder_automatic)
-//! @SYMPREQ 			PREQ782
-//! @SYMREQ 			
-//! @SYMTestPriority 		High
-//! @SYMTestStatus   		Implemented
-//! @SYMTestActions 		Preconditions:
-//!				• The necessary ROM based ‘single process’ stream agent plug-in is present that supports the
-//!				SDP media description supplied during construction of the key stream decoder.
-//!
-//!				Test Actions:
-//!				• Run the test step actions as described in test case SEC-SCAF-E015.
-//!
-//! @SYMTestExpectedResults 	• Associations was added 
-//!
-//! @SYMTestType 		CIT
-
-START_TESTCASE SEC-SCAF-G006
-
-RUN_TEST_STEP tscaf SCAFSetupRightsObjects z:\tcaf\tscaf\tscaf.ini Rights_Program_SingleProcessAgent
-
-//The time limit is disabled since this test is manual
-RUN_TEST_STEP -1 tscaf SCAFIpSecDecoderIntegration z:\tcaf\tscaf\tscaf.ini spsa_ipsec_integration_decoder_automatic
-
-END_TESTCASE SEC-SCAF-G006
-
-
-
-//********************** SEC-SCAF-H : REFERENCE AGENT TEST  **********************
-
-
-//! @SYMTestCaseID 		SEC-SCAF-H001
-//! @SYMTestCaseDesc 		Smoke testing for the Reference Agent
-//! 				(referenceagent)
-//! @SYMPREQ 			PREQ782
-//! @SYMREQ 			-------
-//! @SYMTestPriority 		Critical
-//! @SYMTestStatus   		Implemented
-//! @SYMTestActions  		
-//!				•	Generate a IPSec protected key stream description. 
-//!				•	Create a key stream sink from the protected key stream description.
-//!				•	Create a key stream decoder from an SDP message requiring the reference agent 
-//!					and the key stream sink.
-//!				•	Create a short term key message and write it to a predefined socket.
-//! @SYMTestExpectedResults 	
-//!				• Interfaces are invoked without leaves and panics.
-//!
-//! @SYMTestType 		CIT
-
-START_TESTCASE SEC-SCAF-H001
-
-RUN_TEST_STEP 100 tscaf SCAFRefAgent z:\tcaf\tscaf\tscaf.ini reference_agent
-
-END_TESTCASE SEC-SCAF-H001
--- a/contentmgmt/cafstreamingsupport/test/tscaf/source/tipsec.cpp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/cafstreamingsupport/test/tscaf/source/tipsec.cpp	Thu May 27 14:32:46 2010 +0300
@@ -360,7 +360,6 @@
 
 TVerdict CScafIpSecDecoderIntegration::doTestL()
 	{	
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	TBool integrationTest(ETrue);
 	GetBoolFromConfig(ConfigSection(), _L("IntegrationTest"), integrationTest);
 	
@@ -417,7 +416,6 @@
 		}
 	CleanupStack::PopAndDestroy(2, keyStreamSink);
 	CleanupStack::PopAndDestroy(); // sdpDoc
-#endif
 	return TestStepResult();
 	}
 
--- a/contentmgmt/cafstreamingsupport/test/tscaf/source/tkeystreamdecoderattributes.cpp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/cafstreamingsupport/test/tscaf/source/tkeystreamdecoderattributes.cpp	Thu May 27 14:32:46 2010 +0300
@@ -55,7 +55,6 @@
 
 TVerdict CScafKeyStreamDecoderAttributes::doTestL()
 	{
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	// Assume faliure, unless all is successful
 	SetTestStepResult(EFail);
 	
@@ -106,7 +105,6 @@
 		}
 	
 	CleanupStack::PopAndDestroy(3, sdpDoc); //< decoder, protectStreamDesc, sdpDoc
-#endif	
 	return TestStepResult();
 	}
 
--- a/contentmgmt/cafstreamingsupport/test/tscaf/source/tkeystreamdecoderconstruct.cpp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/cafstreamingsupport/test/tscaf/source/tkeystreamdecoderconstruct.cpp	Thu May 27 14:32:46 2010 +0300
@@ -40,7 +40,6 @@
 
 TVerdict CScafKeyStreamDecoderConstruct::doTestL()
 	{
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	// Assume the test has failed if the test step result hasn't been otherwise set to EPass
 	SetTestStepResult(EFail);
 	
@@ -87,6 +86,5 @@
 	
 	// Delete the protected stream descriptor
 	CleanupStack::PopAndDestroy(2, sdpDoc);	//< protectStreamDesc, sdpDoc
-#endif	
 	return TestStepResult();
 	}
--- a/contentmgmt/cafstreamingsupport/test/tscaf/source/tkeystreamsink.cpp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/cafstreamingsupport/test/tscaf/source/tkeystreamsink.cpp	Thu May 27 14:32:46 2010 +0300
@@ -67,7 +67,6 @@
 	encryptedStr.Append(*ro->Key());
 	CleanupStack::PopAndDestroy(ro);
 	
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	//Create an SDP document object and set the created key stream field object
 	CSdpDocument* sdpDoc = CreateSdpDocumentLC();
 	//Create an SDP key stream field object with an attribute requiring the service protected RO
@@ -113,9 +112,6 @@
 		}
 
 	CleanupStack::PopAndDestroy(4, sdpDoc); // fOutputKey, decoder, sink, sdpDoc
-#endif
-
-	
 	return TestStepResult();
 	}
 
@@ -175,7 +171,6 @@
 	CopyFile2AgentsPrivateFolderL(iParent.Fs(), KProgramProtectedRo(), privatePathA);
 	CopyFile2AgentsPrivateFolderL(iParent.Fs(), KProgramProtectedRo(), privatePathB);
 
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	//Create an SDP document object and set the created key stream field object for each decoder
 	CSdpDocument* sdpDoc = CreateSdpDocumentLC();
 	
@@ -284,6 +279,5 @@
 	CleanupStack::PopAndDestroy(2, sinkB);		//< decoderB, sink B
 	CleanupStack::PopAndDestroy(2, sinkA);		//< decoderA, sinkA
 	CleanupStack::PopAndDestroy(sdpDoc); 		//< sdpDoc
-#endif	
 	return TestStepResult();
 	}
--- a/contentmgmt/cafstreamingsupport/test/tscaf/source/tmultikeystreamdecoders.cpp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/cafstreamingsupport/test/tscaf/source/tmultikeystreamdecoders.cpp	Thu May 27 14:32:46 2010 +0300
@@ -54,7 +54,6 @@
 
 TVerdict CScafMultiKeyStreamDecoders::doTestL()
 	{
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	// Assume the test has failed if the test step result hasn't been otherwise set to EPass
 	SetTestStepResult(EFail);
 	
@@ -163,7 +162,6 @@
 		}
 	
 	CleanupStack::PopAndDestroy(5, sdpDoc); //< decoderB, decoderA, protectStreamDescB, protectStreamDescA, sdpDoc
-#endif	
 	return TestStepResult();	
 	}
 
--- a/contentmgmt/cafstreamingsupport/test/tscaf/source/tpostacquisition.cpp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/cafstreamingsupport/test/tscaf/source/tpostacquisition.cpp	Thu May 27 14:32:46 2010 +0300
@@ -57,7 +57,6 @@
 
 TVerdict CScafPostAcquisition::doTestL()
 	{
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	TBool createOutputFile = EFalse;
 	
 	if(!GetBoolFromConfig(ConfigSection(), KCreateOutputFiles, createOutputFile))
@@ -176,7 +175,6 @@
 		SetTestStepResult(EFail);		
 		}
 	CleanupStack::PopAndDestroy(3, content);
-#endif	
 	return TestStepResult();
 	}
 
--- a/contentmgmt/cafstreamingsupport/test/tscaf/source/treferenceagent.cpp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/cafstreamingsupport/test/tscaf/source/treferenceagent.cpp	Thu May 27 14:32:46 2010 +0300
@@ -22,9 +22,7 @@
 
 using namespace StreamAccess;
 
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 const TUint32 KTestSpiBase = 667;
-#endif
 
 CScafRefAgent::CScafRefAgent(CScafServer& aParent): CScafIpSec(aParent)
 	{
@@ -34,7 +32,6 @@
 
 TVerdict CScafRefAgent::doTestL()
 	{
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	SetTestStepResult(EPass);
 	CleanAgentsPrivateFolderL(KSraPrivateFolder());
 	CopyFile2AgentsPrivateFolderL(iParent.Fs(), KProgramProtectedRo(), KSraPrivateFolder());
@@ -95,6 +92,5 @@
 	// Release the allocated memories
 	CleanupStack::PopAndDestroy(5, protectedStreamDesc);
 	CleanupStack::PopAndDestroy(); // sdpDoc
-#endif
 	return TestStepResult();	
 	}
--- a/contentmgmt/cafstreamingsupport/test/tscaf/source/tscafstep.cpp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/cafstreamingsupport/test/tscaf/source/tscafstep.cpp	Thu May 27 14:32:46 2010 +0300
@@ -16,10 +16,8 @@
 //
 
 #include "tscafstep.h"
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
-#include <sdpconnectionfield.h>
-#include <sdporiginfield.h>
-#endif
+#include "sdpconnectionfield.h"
+#include "sdporiginfield.h"
 
 TSdpAttribute::TSdpAttribute()
 	{
@@ -121,7 +119,6 @@
 	return TestStepResult();
 	}
 
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 // We need this dummy function because TCleanupItem c'tor (see below) does not accept functions without parameters
 void CloseSdpCodecPool(TAny *)
 	{
@@ -274,7 +271,6 @@
 	
 	return sdp;
 	}
-#endif
 
 CKeyStreamSink* CScafStep::CreateKeyStreamSinkLC(const TDesC& aFileName, const TDesC& aPrivPath)
 /**
@@ -316,12 +312,8 @@
  	@param aSdp The SDP object which will be deleted.
  */
 	{
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	delete reinterpret_cast<CSdpDocument *>(aSdpDoc);
 	SdpCodecStringPool::Close();
-#else
-	(void) aSdpDoc;
-#endif
 	}
 
 void CScafStep::CopyFile2AgentsPrivateFolderL(RFs& aFs, const TDesC& aFileName, const TDesC& aPrivPath)
@@ -356,7 +348,6 @@
 	CleanupStack::PopAndDestroy(2, fTarget);
 	}
 
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 void CScafStep::AddAttributes2SdpL(CSdpMediaField& aSdp, TInt aSdpNum)
 /**
  * Add attributes from the instance within the CSdpConfiguration array, where 
@@ -404,7 +395,6 @@
 		CleanupStack::PopAndDestroy(3);
 		}//for
 	}//End of function
-#endif
 
 void CScafStep::PrintErrorAndLeaveL(TDesC& aKey)
 /**
--- a/contentmgmt/referencedrmagent/RefTestAgent/group/bld.inf	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/referencedrmagent/RefTestAgent/group/bld.inf	Thu May 27 14:32:46 2010 +0300
@@ -48,6 +48,8 @@
 sraserver.mmp
 sraplugin.mmp
 srautils.mmp
+// Local SDP codec library. Made this local to avoid the dependency on middleware layer.
+../localsdp/group/localsdpcodec.mmp
 #endif // TOOLS2
 #endif // TOOLS
 
--- a/contentmgmt/referencedrmagent/RefTestAgent/group/sraclient.mmp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/referencedrmagent/RefTestAgent/group/sraclient.mmp	Thu May 27 14:32:46 2010 +0300
@@ -26,7 +26,10 @@
 CAPABILITY	All -Tcb
 
 USERINCLUDE 	../streamingrefagent/inc
-MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+USERINCLUDE 	../localsdp/inc
+USERINCLUDE 	../localsdp/api
+
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
 
 SOURCEPATH 	../streamingrefagent/source/client
 SOURCE 		sraclient.cpp
@@ -36,9 +39,7 @@
 LIBRARY 	euser.lib 
 LIBRARY		estor.lib
 LIBRARY		cafutils.lib
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
-LIBRARY		sdpcodec.lib
-#endif
+LIBRARY		localsdpcodec.lib
 LIBRARY 	streamingcaf.lib 
 LIBRARY	    efsrv.lib
 SMPSAFE
--- a/contentmgmt/referencedrmagent/RefTestAgent/group/sraplugin.mmp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/referencedrmagent/RefTestAgent/group/sraplugin.mmp	Thu May 27 14:32:46 2010 +0300
@@ -34,14 +34,14 @@
 SOURCE		srakeystreamdecoder.cpp
 
 USERINCLUDE 	../streamingrefagent/inc
+USERINCLUDE 	../localsdp/inc
+USERINCLUDE 	../localsdp/api
 
-MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
 
 LIBRARY 	euser.lib
 LIBRARY		streamingcaf.lib
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
-LIBRARY		sdpcodec.lib 
-#endif
+LIBRARY		localsdpcodec.lib 
 LIBRARY		sraclient.lib srautils.lib
 
 START RESOURCE 10285A34.rss
--- a/contentmgmt/referencedrmagent/RefTestAgent/group/sraserver.mmp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/referencedrmagent/RefTestAgent/group/sraserver.mmp	Thu May 27 14:32:46 2010 +0300
@@ -24,9 +24,11 @@
 
 CAPABILITY	DRM NetworkControl NetworkServices
 
-MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
 
 USERINCLUDE ../streamingrefagent/inc
+USERINCLUDE 	../localsdp/inc
+USERINCLUDE 	../localsdp/api
 
 SOURCEPATH 	../streamingrefagent/source/server
 SOURCE 		sraserver.cpp
@@ -40,9 +42,7 @@
 LIBRARY		efsrv.lib
 LIBRARY		cafutils.lib
 LIBRARY		estor.lib
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
-LIBRARY		sdpcodec.lib
-#endif
+LIBRARY		localsdpcodec.lib
 LIBRARY		bafl.lib
 LIBRARY 	streamingcaf.lib
 LIBRARY 	srautils.lib
--- a/contentmgmt/referencedrmagent/RefTestAgent/group/srautils.mmp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/referencedrmagent/RefTestAgent/group/srautils.mmp	Thu May 27 14:32:46 2010 +0300
@@ -28,8 +28,10 @@
 CAPABILITY	All -Tcb
 
 USERINCLUDE 	../streamingrefagent/inc
-MW_LAYER_SYSTEMINCLUDE_SYMBIAN
-APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+USERINCLUDE 	../localsdp/inc
+USERINCLUDE 	../localsdp/api
+
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
 
 SOURCEPATH 	../streamingrefagent/source/utils
 SOURCE		srautils.cpp
@@ -41,9 +43,7 @@
 LIBRARY 	euser.lib
 LIBRARY 	estor.lib
 LIBRARY		streamingcaf.lib
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
-LIBRARY		sdpcodec.lib
-#endif
+LIBRARY		localsdpcodec.lib
 LIBRARY     efsrv.lib 
 LIBRARY		bafl.lib
 SMPSAFE
--- a/contentmgmt/referencedrmagent/RefTestAgent/inc/rta.iby	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/referencedrmagent/RefTestAgent/inc/rta.iby	Thu May 27 14:32:46 2010 +0300
@@ -33,6 +33,8 @@
 file=ABI_DIR\BUILD_DIR\sraserver.exe		System\Libs\sraserver.exe
 file=ABI_DIR\BUILD_DIR\sraclient.dll		System\Libs\sraclient.dll
 file=ABI_DIR\BUILD_DIR\srautils.dll			System\Libs\srautils.dll
+// Local SDP codec library. Added to avoid the dependency on middleware layer.
+file=ABI_DIR\BUILD_DIR\localsdpcodec.dll	System\Libs\localsdpcodec.dll
 
 ECOM_PLUGIN(sraplugin.dll,sraplugin.rsc)
 #endif // __RTA_IBY__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/_sdpdefs.h	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2010 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:
+* Name          : _sdpdefs.h
+* Part of       : Local SDP Codec
+* Interface     : -
+* Version       : 1.0
+*
+*/
+
+
+
+#ifndef _SDPDEFS_H
+#define _SDPDEFS_H
+
+#ifdef CPPUNIT_TEST
+#undef EXPORT_C
+#define EXPORT_C
+#endif
+
+#ifdef CPPUNIT_TEST
+#undef IMPORT_C
+#define IMPORT_C
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdpattributefield.h	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,392 @@
+/*
+* Copyright (c) 2010 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:
+* Name          : SdpAttributeField.h
+* Part of       : Local SDP Codec
+* Interface     : SDK API, Local SDP Codec API
+* Version       : 1.0
+*
+*/
+
+
+
+#ifndef CSDPATTRIBUTEFIELD_H
+#define CSDPATTRIBUTEFIELD_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <stringpool.h>
+#include "sdpcodecstringconstants.h"
+#include "_sdpdefs.h"
+
+// FORWARD DECLARATIONS
+class RReadStream;
+class RWriteStream;
+class CSdpFmtAttributeField;
+class CSdpAttributeFieldPtrs;
+
+// CLASS DECLARATION
+/**
+ *  @publishedAll
+ *  @released
+ *
+ *	This class encapsulates the attribute field of Session Description Protocol
+ *	for media and session level attributes. Media format/payload type level
+ *  attributes are supported by the CSdpFmtAttributeField class. 
+ * 
+ *	The normative reference for correct formatting and values is
+ *	draft-ietf-mmusic-sdp-new-14 unless specified otherwise in
+ *  member documentation. The implementation supports this normative
+ *  reference, but does not enforce it fully. 
+ *
+ *  @lib localsdpcodec.lib
+ */
+class CSdpAttributeField : public CBase
+	{
+    public:     // Constructors and destructor
+
+        /**
+         *	Constructs a new attribute field.
+		 *			 
+         *	@param aText A string containing a correctly 
+         *         formatted field value terminated by a CRLF.
+         *	@return a new instance.
+         */
+		IMPORT_C static CSdpAttributeField* DecodeL( const TDesC8& aText );
+
+        /**
+         *	Constructs a new attribute field and adds the pointer to the 
+         *  cleanup stack.
+		 *		 
+         *	@param aTest A string containing a correctly 
+         *         formatted field value terminated by a CRLF.
+         *	@return a new instance.
+         */
+		IMPORT_C static CSdpAttributeField* DecodeLC( const TDesC8& aText );
+
+        /**
+         *	Constructs a new attribute field. 
+		 *
+         *	@param aAttribute The attribute name. It can be a pre-
+         *         defined name in the SDP string pool or defined by the 
+         *         client.
+         *	@param aValue A valid attribute value or an empty 
+         *         descriptor to omit the value part.
+         *	@return a new instance.
+		 */
+		IMPORT_C static CSdpAttributeField* NewL(
+            RStringF aAttribute, const TDesC8& aValue );
+
+        /**
+         *	Constructs a new attribute field and adds the pointer to the 
+         *  cleanup stack. 
+		 *
+         *	@param aAttribute The attribute name. It can be a pre-defined 
+         *         name in the SDP string pool or defined by the client.
+         *	@param aValue A valid attribute value or an empty 
+         *         descriptor to omit the value part.
+         *	@return a new instance.
+		 */
+		IMPORT_C static CSdpAttributeField* NewLC(
+            RStringF aAttribute, const TDesC8& aValue );
+
+ 		/**
+		 *	Deletes the resources held by the instance.
+		 */
+		IMPORT_C ~CSdpAttributeField();
+
+    public:     // New functions
+	
+    	/**
+		 *	Outputs the field formatted according to SDP syntax and including
+		 *  the terminating CRLF.
+		 * 
+		 *	@param aStream Stream used for output. On return the 
+         *         stream includes correctly formatted attribute field.
+		 */
+		IMPORT_C void EncodeL( RWriteStream& aStream ) const;
+
+		/**
+		 *	Creates a new instance that is equal to the target.
+		 *
+		 *	@return a new instance.
+		 */
+		IMPORT_C CSdpAttributeField* CloneL() const;
+
+		/**	
+		 *	Compares this instance to another for equality.
+		 *
+		 *	@param aObj: The instance to compare to.
+		 *	@return ETrue if equal, EFalse if not.
+		 */
+		IMPORT_C TBool operator == ( const CSdpAttributeField& aObj ) const;
+
+		/**
+		 *	Gets the attribute name.
+		 *	
+		 *	@return	The attribute name. The name can be pre-defined 
+         *          name in the SDP string table or defined by the client.
+		 */
+		IMPORT_C RStringF Attribute() const;
+
+		/**
+		 *	Gets the attribute.
+		 *
+ 		 *	@return	The value or an empty descriptor if there is no value part.
+		 */
+		IMPORT_C const TDesC8& Value() const;
+
+		/**
+		 *	Sets the attribute and attribute value.
+		 *
+         *	@param aAttribute A valid attribute name. It can be a 
+         *         pre-defined name in the SDP string pool or 
+         *         defined by the client.
+         *	@param aValue A valid attribute value or an empty 
+         *         descriptor to omit the value part.
+		 *  @leave KErrSdpCodecAttributeField if the attribute part is not 
+		 *         pre-defined EAttributeFmtp or EAttributeRtpmap.
+		 */
+		IMPORT_C void SetL( RStringF aAttribute, const TDesC8& aValue );
+		
+		/**
+ 		 *	Assigns attribute to the format level attribute.
+ 		 *  In the final output the attribute will placed after format level
+		 *  attribute.
+ 		 *
+ 		 *	@param aFmtAttribute A format level 
+ 		 *         attribute this attribute is assigned to.
+ 		 */
+ 		IMPORT_C void AssignTo(const CSdpFmtAttributeField& aFmtAttribute);
+		
+		/**
+		 *	Test if the attribute belongs to the given format level attribute.
+		 *  Note, that the check can be true for the media level paremeter if
+		 *  it appears after the last format level attribute.
+		 *
+		 *	@param  aFmtAttribute: A format level 
+		 *          attribute this attribute belongs to.
+		 *	@return	ETrue if attribute belongs to the format level attribute, 
+		 *          EFalse otherwise.
+		 */
+		IMPORT_C TBool BelongsTo(const CSdpFmtAttributeField& aFmtAttribute) const;
+
+    public:     // Internal to codec
+
+        /**
+         *  Externalizes the object to stream
+         *
+         *  @param aStream Stream where the object's state will be stored
+         */
+		void ExternalizeL( RWriteStream& aStream ) const;
+
+        /**
+         *  Creates object from the stream data
+         *
+         *  @param aStream Stream where the object's state will be read
+         *  @return Initialized object
+         */
+        static CSdpAttributeField* InternalizeL( RReadStream& aStream );
+        
+        /**
+         *  Informs if the attribute belongs to any format level attribute.
+         *
+         *  @return ETrue if attribute belongs to any format level 
+		 *			attribute, EFalse otherwise.
+         */
+        TBool IsFmtAttribute();
+    
+	private:    // Constructors
+
+        /**
+         *  Constructor
+         */
+		CSdpAttributeField();
+
+        /**
+         *  Second phase constructor
+         *
+         *  @param aText Text string ending to LF character
+         */
+        void ConstructL( const TDesC8& aText );
+
+        /**
+         *  Second phase constructor
+         *
+         *  @param aAttribute Attribute identifier
+         *  @param aValue Value of the attribute of KNullDesC8
+         */
+        void ConstructL( RStringF aAttribute, const TDesC8& aValue );
+    
+    private:    // Internal
+
+        /**
+         *  Verifies that attribute is valid property attribute and initializes
+         *  the member variables of class accordingly
+         *
+         *  @param aAttribute Attribute in descriptor
+         */
+        void FormatProperyAttributeL( const TDesC8& aAttribute );
+
+        /**
+         *  Verifies that attribute is valid value attribute and initializes
+         *  the member variables of class accordingly
+         *
+         *  @param aArray Array of the attributes
+         */
+        void FormatValueAttributeL( const TDesC8& aAttribute,
+                                    const TDesC8& aValue );
+
+        /**
+         *  Verifies that the value is valid for the attribute
+         *
+         *  @param aAttribute The attribute
+         *  @param aArray Array containing the values (and attribute)
+         */
+        void VerifyValueAttributeL( SdpCodecStringConstants::TStrings aString,
+                                    const TDesC8& aValue );
+                                    
+        /**
+         *  Forms attribute and value strings out of the token array
+         *  and pushes both (aAttribute & aValue) into cleanup stack
+         *
+         *  @param aArray Token array
+         *  @param aAttribute Attribute string (in cleanup stack)
+         *  @param aValue Value string (in cleanup stack)
+         */
+        void CreateAttributeAndValueStringsLC( RArray<TPtrC8>& aArray,
+                                               HBufC8*& aAttribute,
+                                               HBufC8*& aValue );
+
+        /**
+         *  Checks if the value is among the valid orient attributes
+         *
+         *  @param aValue Value string
+         */
+        void CheckValidOrientL( const TDesC8& aValue );
+
+        /**
+         *  Checks if the value is valid language attribute as
+         *  specified in RFC 3066
+         *
+         *  @param aValue Value string
+         */
+        void CheckValidLangStrL( const TDesC8& aValue );
+
+        /**
+         *  Checks if the value is valid framerate attribute
+         *
+         *  @param aValue Value string
+         */
+        void CheckValidFrameRateL( const TDesC8& aValue );
+        
+        /**
+         *  Checks if the value is among valid uri value for control attribute
+         *
+         *  @param aValue Value string
+         */       
+        void CheckValidControlL( const TDesC8& aValue );
+
+        /**
+         *  Checks if the value is valid value for group attribute as
+         *  specified in RFC 3388
+         *
+         *  @param aValue Value string
+         */       
+        void CheckValidGroupL( const TDesC8& aValue );
+
+        /**
+         *  Checks if the value is valid value for des attribute as
+         *  specified in RFC 3312
+         *
+         *  @param aValue Value string
+         */       
+        void CheckValidDesL( const TDesC8& aValue );
+
+        /**
+         *  Checks if the value is valid value for curr and conf attribute as
+         *  specified in RFC 3312
+         *
+         *  @param aValue Value string
+         */       
+        void CheckValidCurrAndConfL( const TDesC8& aValue );
+
+        /**
+         *  Checks if value is included in the list of predefined values
+         *
+         *  @param aItemsCount Predefined values count
+         *  @param aValuesList List of predefined values
+         *  @param aValue Value string
+         */       
+        void ValidValueInListL( TInt aItemsCount, 
+                                const TText8* const aValuesList[], 
+                                const TDesC8& aValue );
+
+        /**
+         *  Checks if the value is valid value for range attribute as
+         *  specified in RFC 2326
+         *
+         *  @param aValue Value string
+         */       
+        void CheckValidRangeL( const TDesC8& aValue );
+
+
+        /**
+         *  Checks if the value is valid rtpmap string
+         *
+         *  @param aValue Value string
+         */   
+        void CheckValidRtpmapL( const TDesC8& aValue );
+
+        /**
+         *  Checks if the value is valid fmtp string
+         *
+         *  @param aValue Value string
+         */   
+        void CheckValidFmtpL( const TDesC8& aValue );
+        
+        /**
+         *  Set attribute and values. Attribute is not one of predefined ones.
+         *
+         *  @param aAttribute Attribute string (in cleanup stack)
+         *  @param aValue Value string
+         */   
+        void SetNotPredefinedAttributeL( const TDesC8& aAttribute, 
+                                         const TDesC8& aValue );
+        
+        void CreateAttributeFieldPtrsL();
+        
+        inline CSdpAttributeFieldPtrs& AttributeFieldPtrs();      
+        
+        inline const CSdpAttributeFieldPtrs& AttributeFieldPtrs() const;
+	   
+		void __DbgTestInvariant() const;
+
+
+    private:    // Data
+
+        // String pool
+        RStringPool iPool;
+
+        // Attribute name
+        RStringF iAttribute;
+
+        // Flag indicating if the attribute is a property attribute
+        TBool iPropertyAttribute;
+
+        // Value field
+        HBufC8* iValue;
+	};
+
+#endif // CSDPATTRIBUTEFIELD_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdpbandwidthfield.h	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,190 @@
+/*
+* Copyright (c) 2010 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:
+* Name          : SdpBandwidthField.h
+* Part of       : Local SDP Codec
+* Interface     : SDK API, Local SDP Codec API
+* Version       : 1.0
+*
+*/
+
+
+
+#ifndef CSDPBANDWIDTHFIELD_H
+#define CSDPBANDWIDTHFIELD_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <stringpool.h>
+#include "_sdpdefs.h"
+
+// FORWARD DECLARATIONS
+class RReadStream;
+class RWriteStream;
+
+// CLASS DECLARATION
+/**
+ *  @publishedAll
+ *  @released
+ *
+ *	This class encapsulates the bandwidth field of 
+ *  the Session Description Protocol.
+ * 
+ *	The normative reference for correct formatting and values is
+ *	draft-ietf-mmusic-sdp-new-14 unless specified otherwise in
+ *  member documentation. The implementation supports this normative
+ *  reference, but does not enforce it fully. 
+ *
+ *  @lib localsdpcodec.lib
+ */
+class CSdpBandwidthField : public CBase
+	{
+	public:// Constructors and destructor
+       /**
+         *	Constructs a new bandwidth field.
+		 *	
+         *	@param aText A string containing a correctly 
+         *         formatted field value terminated by a CRLF.
+         *	@return a new instance.
+         */
+		IMPORT_C static CSdpBandwidthField* DecodeL(const TDesC8& aText);
+
+         /**
+         *	Constructs a new bandwidth field and adds the pointer to the 
+         *  cleanup stack.
+		 *	
+         *	@param aText A string containing a correctly 
+         *         formatted field value terminated by a CRLF.
+         *	@return a new instance.
+         */
+		IMPORT_C static CSdpBandwidthField* DecodeLC(const TDesC8& aText);
+
+        /**
+         *	Constructs a new bandwidth field.
+		 *
+         *	@param aModifier Bandwidth modifier.
+		 *  @param aValue Bandwidth value.
+         *	@return a new instance.
+		 */
+		IMPORT_C static CSdpBandwidthField* NewL(RStringF aModifier,
+												 TUint32 aValue);
+
+        /**
+         *	Constructs a new bandwidth field and adds the pointer to the 
+         *  cleanup stack.
+		 *
+         *	@param aModifier Bandwidth modifier.
+		 *  @param aValue Bandwidth value.
+         *	@return a new instance.
+		 */
+		IMPORT_C static CSdpBandwidthField* NewLC(RStringF aModifier,
+												  TUint32 aValue);
+
+ 
+        /**
+		 *	Deletes the resources held by the instance.
+		 */
+		IMPORT_C ~CSdpBandwidthField();
+
+    public: // New functions
+		/**
+		 *	Outputs the field formatted according to SDP syntax and including
+		 *  the terminating CRLF.
+		 * 
+		 *	@param aStream Stream used for output. On return 
+         *         the stream includes correctly formatted bandwidth field.
+		 */
+		IMPORT_C void EncodeL(RWriteStream& aStream) const;
+
+		/**
+		 *	Creates a new instance that is equal to the target.
+		 *
+		 *	@return a new instance.
+		 */
+		IMPORT_C CSdpBandwidthField * CloneL() const;
+
+		/**	
+		 *	Compares this instance to another for equality.
+		 *
+		 *	@param aObj The instance to compare to.
+		 *	@return ETrue if equal, EFalse if not.
+		 */
+		IMPORT_C TBool operator == (const CSdpBandwidthField& aObj) const;
+
+		/**
+		 *	Gets the bandwidth modifier.
+		 *
+		 *	@return The modifier that can be pre-defined in the 
+		 *          SDP string table or defined by the user.
+		 */
+		IMPORT_C RStringF Modifier() const;
+
+		/**
+		 *	Sets the bandwidth modifier.
+		 *
+         *	@param aModifier A valid bandwidth modifier name.
+		 */
+		IMPORT_C void SetModifier(RStringF aModifier);
+
+		/**
+		 *	Gets the bandwidth value.
+		 *
+		 *	@return The value.
+		 */
+		IMPORT_C TUint32 Value() const;
+
+		/**
+		 *	Sets the bandwidth value.
+		 *
+		 *	@param aValue The Value.
+		 */
+		IMPORT_C void SetValue(TUint32 aValue);
+
+    public:
+		/**
+		 *	Externalize the instance in a memory optimized format.
+		 *
+		 *	@param aStream The stream used for externalization.
+		 */
+		void ExternalizeL(RWriteStream& aStream) const;
+
+		/**
+		 *	Create a new instance from value created with ExternalizeL().
+		 *
+		 *	@param aStream The stream used for internalization.
+		 *	@return	The new instance.
+		 */
+        static CSdpBandwidthField* InternalizeL(RReadStream& aStream);
+
+    private:
+        CSdpBandwidthField();
+		void ConstructL(const TDesC8& aText);
+		void ConstructL(RStringF aModifier, TUint32 aValue);
+		void ConstructL(const TDesC8& aModifier, TUint32 aValue);
+
+        /**
+         *  Copies given modifier to iModifier. If aModifier is none of 
+         *  predefined ones, new modifier is added to stringPool.
+         *
+         *  @param aModifier Given modifier
+         */
+        void CopyModifierL(const TDesC8& aModifier);
+
+    private: // Data
+		RStringF iModifier;
+        TUint32 iValue;
+        RStringPool iStringPool;
+	};
+
+#endif // CSDPBANDWIDTHFIELD_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdpcodecconstants.h	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2010 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:
+* Name          : SdpCodecConstants.h
+* Part of       : SDPCodec
+* Constants defination file 
+* Version       : 1.0 
+*
+*/
+
+
+
+
+#ifndef __SDPCODECCONSTANTS_H__
+#define __SDPCODECCONSTANTS_H__
+
+/**
+* @file
+* @publishedAll
+* @released
+*/
+
+
+// Delimiter constants
+const TText8 KDotChar = '.';
+const TText8 KColonChar = ':';
+const TText8 KSPChar = ' ';  
+const TText8 KEqualChar = '=';
+const TText8 KSlashChar = '/';
+const TText8 KHyphenChar = '-';
+const TText8 KLFChar = '\n';
+const TText8 KCRChar = '\r';
+const TText8 KEofChar = '\0';
+
+_LIT8(KDotStr, ".");
+_LIT8(KColonStr, ":");
+_LIT8(KSPStr, " ");
+_LIT8(KEqualStr, "=");
+_LIT8(KSlashStr, "/");
+_LIT8(KHyphenStr, "-");
+_LIT8(KCRLFStr, "\r\n");
+_LIT8(KLFStr, "\n");
+_LIT8(KCRStr, "\r");
+_LIT8(KEofStr, "\0");
+_LIT8(KValidFQDNChars, 
+      "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-");
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdpcodecerr.h	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2010 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:
+* Name          : SdpCodecErr.h
+* Part of       : Local SDP Codec
+* Interface     : SDK API, Local SDP Codec API
+* Version       : 1.0
+*
+*/
+
+
+
+#ifndef SDPCODECERR_H
+#define SDPCODECERR_H
+
+/**
+* @file
+* @publishedAll
+* @released
+*/
+
+/**
+ * Base value for the SdpCode error code range
+ */
+const TInt KSdpCodecErrorBase = -17875;
+/**
+ * Codec encoding errors for SDP fields
+ */
+const TInt KErrSdpCodecVersionField			= KSdpCodecErrorBase;
+const TInt KErrSdpCodecOriginField			= KSdpCodecErrorBase - 1; 
+const TInt KErrSdpCodecSessionField			= KSdpCodecErrorBase - 2; 
+const TInt KErrSdpCodecInfoField			= KSdpCodecErrorBase - 3; 
+const TInt KErrSdpCodecUriField				= KSdpCodecErrorBase - 4; 
+const TInt KErrSdpCodecEmailField			= KSdpCodecErrorBase - 5; 
+const TInt KErrSdpCodecPhoneField			= KSdpCodecErrorBase - 6; 
+const TInt KErrSdpCodecConnectionField		= KSdpCodecErrorBase - 7; 
+const TInt KErrSdpCodecBandwidthField		= KSdpCodecErrorBase - 8; 
+const TInt KErrSdpCodecTimeField			= KSdpCodecErrorBase - 9; 
+const TInt KErrSdpCodecRepeatField			= KSdpCodecErrorBase - 10; 
+const TInt KErrSdpCodecZoneField			= KSdpCodecErrorBase - 11; 
+const TInt KErrSdpCodecKeyField				= KSdpCodecErrorBase - 12; 
+const TInt KErrSdpCodecAttributeField		= KSdpCodecErrorBase - 13; 
+const TInt KErrSdpCodecMediaField			= KSdpCodecErrorBase - 14; 
+const TInt KErrSdpCodecMediaInfoField		= KSdpCodecErrorBase - 15; 
+const TInt KErrSdpCodecMediaConnectionField	= KSdpCodecErrorBase - 16; 
+const TInt KErrSdpCodecMediaBandwidthField	= KSdpCodecErrorBase - 17; 
+const TInt KErrSdpCodecMediaKeyField	    = KSdpCodecErrorBase - 18; 
+const TInt KErrSdpCodecMediaAttributeField	= KSdpCodecErrorBase - 19; 
+const TInt KErrSdpCodecTypedTime            = KSdpCodecErrorBase - 20;
+
+const TInt KErrSdpCodecStringPool           = KSdpCodecErrorBase - 21;
+const TInt KErrSdpCodecDecode				= KSdpCodecErrorBase - 22;
+
+#endif //SDPCODECERR_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdpcodecstringpool.h	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2010 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:
+* Name          : SdpCodecStringPool.h
+* Part of       : Local SDP Codec
+* Interface     : SDK API, Local SDP Codec API
+* Version       : 1.0
+*
+*/
+
+
+
+#ifndef SDPCODECSTRINGPOOL_H
+#define SDPCODECSTRINGPOOL_H
+
+//  INCLUDES
+#include <e32base.h>
+#include "_sdpdefs.h"
+#include <stringpool.h>
+
+class CSdpCodecStringPool;
+
+// CLASS DECLARATION
+/**
+* @publishedAll
+* @released
+*
+* This class defines string pool for Local SDP Codec.
+* The client of Local SDP Codec must call OpenL() before 
+* invoking any function of Local SDP Codec classes.
+* The client must close the string pool when finished using
+* Local SDP Codec classes.
+*
+* Note: the client must not close the string pool while
+*       using Local SDP Codec classes.
+* 
+* @lib localsdpcodec.lib
+*/
+class SdpCodecStringPool
+	{
+public: // Constructors and destructor
+ 		
+	/**
+	* Opens Local SDP Codec string pool.
+	*
+    * @leave KErrAlreadyExists if pool already exists in TLS.
+	*/
+	IMPORT_C static void OpenL();
+
+	/**
+	* Closes Local SDP Codec string pool.
+	*
+	*/
+	IMPORT_C static void Close(); 
+
+public: 
+	
+	/**
+	* Gets the string pool used by Local SDP Codec.
+	*
+	* @return RStringPool: A handle to a string pool
+	* @leave KErrSdpCodecStringPool if the pool is not opened.
+	*
+	*/
+	IMPORT_C static RStringPool StringPoolL();
+
+	/**
+	* Gets the string table used by Local SDP Codec.
+	*
+	* @return TStringTable&: The string pool table
+	* @leave KErrSdpCodecStringPool if the pool is not opened.
+	*
+	*/
+	IMPORT_C static const TStringTable& StringTableL();
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdpconnectionfield.h	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,445 @@
+/*
+* Copyright (c) 2010 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:
+* Name          : SdpConnectionField.h
+* Part of       : Local SDP Codec
+* Interface     : SDK API, Local SDP Codec API
+* Version       : 1.0
+*
+*/
+
+
+
+#ifndef CSDPCONNECTIONFIELD_H
+#define CSDPCONNECTIONFIELD_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <in_sock.h>
+#include <stringpool.h>
+#include "_sdpdefs.h"
+
+// CONSTANTS
+const TUint KDefaultNumOfAddress = 1;
+
+// FORWARD DECLARATIONS
+class RReadStream;
+class RWriteStream;
+
+// CLASS DECLARATION
+/**
+ *  @publishedAll
+ *  @released
+ *
+ *	This class encapsulates the connection information field of 
+ *  the Session Description Protocol.
+ *
+ *	The normative reference for correct formatting and values is
+ *	draft-ietf-mmusic-sdp-new-14 unless specified otherwise in
+ *  member documentation. The implementation supports this normative
+ *  reference, but does not enforce it fully. 
+ *
+ *  @lib localsdpcodec.lib
+ */
+class CSdpConnectionField : public CBase
+	{
+    public: // Constructors and destructor
+
+        /**
+         *	Constructs a new connection field.
+		 * 
+         *	@param aText A string containing a correctly 
+         *         formatted field value terminated by a CRLF.
+         *	@return a new instance.
+         */
+		IMPORT_C static CSdpConnectionField* DecodeL( const TDesC8& aText );
+
+        /**
+         *	Constructs a new connection field and adds the pointer to the 
+         *  cleanup stack.
+		 *	
+         *	@param aText A string containing a correctly 
+         *         formatted field value terminated by a CRLF.
+         *	@return a new instance.
+         */
+		IMPORT_C static CSdpConnectionField* DecodeLC( const TDesC8& aText );
+
+        /**
+         *	Constructs a new connection field.
+		 *	Also sets the network type to "IN" and address type to "IP4" or
+		 *  "IP6" depending on the address family of aAddress.
+		 *	
+		 *	@param aAddress IP address from either KAfInet 
+         *         or KAfInet6 family
+         *  @param aTTL Time-To-Live for IP4 multicasts, set it as
+         *         KErrNotFound if IPv6 multicast or IPv4 unicast
+         *  @param aNumOfAddress Number of addresses in multicast,
+         *         if unicast, must be 1
+         *	@return a new instance.
+         */
+		IMPORT_C static CSdpConnectionField* NewL(            
+            const TInetAddr& aAddress,
+            TInt aTTL = KErrNotFound, 
+            TUint aNumOfAddress = KDefaultNumOfAddress );
+
+        /**
+         *	Constructs a new connection field.
+		 *	
+         *	@param aNetType A valid network type name from the pre-
+         *              defined SDP string table or defined by the user.
+		 *  @paramaAddressType A valid address type name from the 
+         *              pre-defined SDP string table or defined by the user.
+		 *	@param  const TDesC8& aAddress: A valid address of the address type.
+         *              Can contain TTL & number of addresses parameter as well.
+         *	@return a new instance.
+         */
+		IMPORT_C static CSdpConnectionField* NewL(
+			RStringF aNetType, 
+			RStringF aAddressType, 
+			const TDesC8& aAddress );
+
+		/**
+         *	Constructs a new connection field and adds the pointer to the 
+         *  cleanup stack. Also sets the network type to "IN" and address type
+		 *	to "IP4" or "IP6" depending on the address family of aAddress.
+		 *
+		 *	@param aAddress IP address from either KAfInet 
+         *              or KAfInet6 family
+         *  @param aTTL Time-To-Live for IP4 multicasts, set it as
+         *              KErrNotFound if IPv6 multicast or IPv4 unicast
+         *  @param aNumOfAddress Number of addresses in multicast,
+         *              if unicast, must be 1
+         *	@return a new instance.
+         */
+		IMPORT_C static CSdpConnectionField* NewLC(       
+            const TInetAddr& aAddress, 
+            TInt aTTL = KErrNotFound,
+            TUint aNumOfAddress = KDefaultNumOfAddress );
+
+        /**
+         *	Construct a new connection field  and adds the pointer to the
+         *  cleanup stack.
+		 *	
+         *	@param aNetType A valid network type name from the pre-
+         *         defined SDP string table or defined by the user
+		 *  @paramaAddressType A valid address type name from the 
+         *              pre-defined SDP string table or defined by the user
+		 *	@param  const TDesC8& aAddress: A valid address of the address type.
+         *              Can contain TTL & number of addresses parameter as well.
+         *	@return a new instance.
+         */
+		IMPORT_C static CSdpConnectionField* NewLC(
+            RStringF aNetType, RStringF aAddressType, const TDesC8& aAddress );
+
+		/**
+		 *	Deletes the resources held by the instance.
+		 */
+		IMPORT_C ~CSdpConnectionField();
+
+    public: // New functions
+
+		/**
+		 *	Outputs the field formatted according to SDP syntax and including
+		 *  the terminating CRLF.
+		 * 
+		 *	@param aStream: Stream used for output. On return the
+         *         stream includes correctly formatted connection field.
+		 */
+		IMPORT_C void EncodeL( RWriteStream& aStream ) const;
+
+		/**
+		 *	Creates a new instance that is equal to the target.
+		 *
+		 *	@return a new instance.
+		 */
+		IMPORT_C CSdpConnectionField* CloneL() const;
+
+		/**	
+		 *	Compares this instance to another for equality.
+		 *
+		 *	@param const CSdpConnectionField& aObj: The instance to compare to.
+		 *	@return ETrue if equal, EFalse if not.
+		 */
+		IMPORT_C TBool operator== ( const CSdpConnectionField& aObj ) const;
+
+		/**
+		 *	Gets the network type that is from the pre-defined SDP string table
+         *  or given by the user.
+		 *
+		 *	@return The network type.
+		 */
+		IMPORT_C RStringF NetType() const;
+
+		/**
+		 *	Gets the address type that is from the pre-defined SDP string table 
+         *  or given by the user.
+		 *
+		 *	@return The address type.
+		 */
+		IMPORT_C RStringF AddressType() const;
+
+		/**
+		 *	Gets the address.
+		 *
+		 *	@return Address as an IP address or null if it is
+         *          not an IP address. This may be e.g. when the address
+		 *          has been specified as a FQDN. In this case, the address
+         *          can be accessed using the other getters.
+		 */
+		IMPORT_C const TInetAddr* InetAddress() const;
+
+		/**
+		 *	Gets the address.
+		 *
+		 *  @return Address as a string.
+		 */
+		IMPORT_C const TDesC8& Address() const;
+
+		/**
+		 *	Sets the address, network and address type. Also sets the network 
+		 *	type to "IN" and address type to "IP4" or "IP6" depending on the 
+		 *  address family of aAddress.
+		 *
+		 *	@param aValue The new address.
+         *  @param aTTL Time-To-Live for IP4 multicasts, set it as
+         *         KErrNotFound if IPv6 multicast or IPv4 unicast
+         *  @param aNumOfAddress Number of addresses in multicast,
+         *         if unicast, must be 1.
+         *  @leave KErrSdpCodecConnectionField ifaddress to be set is wrongly 
+         *         formatted.
+         */
+		IMPORT_C void SetInetAddressL( const TInetAddr& aValue, 
+                                   TInt aTTL = KErrNotFound,
+                                   TUint aNumOfAddress = KDefaultNumOfAddress);
+
+		/**
+		 *	Sets the address, network and address type.
+		 *
+         *	@param aNetType A valid network type name from the pre-
+         *         defined SDP string table or defined by the user
+		 *  @param aAddressType A valid address type name from the 
+         *         pre-defined SDP string table or defined by the user
+		 *	@param aAddress A valid address of the address type.
+		 */
+		IMPORT_C void SetAddressL( RStringF aNetType, 
+								   RStringF aAddressType, 
+								   const TDesC8& aAddress );
+
+        /**
+         *  Gets TTL attribute.
+         *
+         *  @return TTL or KErrNotFound, if one is not available for the address
+         */
+        IMPORT_C TInt TTLValue() const;
+
+        /**
+         *  Sets TTL attribute (only valid for IP4 multicasts).
+         *  Leaves if trying to set TTL to address that doesn't support it.
+         *
+         *  @param aTTL Time-To-Live for IP4 multicasts
+         *	@leave KErrSdpCodecConnectionField if aTTL is invalid.
+         */
+        IMPORT_C void SetTTLL( TInt aTTL );
+
+        /**
+         *  Gets the number of addresses (can be more than 1 for multicasts).
+         *  Multicast addresses are contiguously allocated above the base 
+         *  address.
+         *
+         *  @return Number of addresses
+         */
+        IMPORT_C TInt NumOfAddress() const;
+         
+        /**
+         *  Sets the number of addreses allocated for multicast. 
+         *  
+         *	@param aNumOfAddress Number of addresses in multicast
+         *  @leave KErrSdpCodecConnectionField if the address is unicast.
+         */
+        IMPORT_C void SetNumOfAddressL( TUint aNumOfAddress );
+
+    public:     // Internal to codec
+
+        /**
+         *  Externalizes the object to stream
+         *
+         *  @param aStream Stream where the object's state will be stored
+         */
+		void ExternalizeL( RWriteStream& aStream ) const;
+
+        /**
+         *  Creates object from the stream data
+         *
+         *  @param aStream Stream where the object's state will be read
+         *  @return Initialized object
+         */
+		static CSdpConnectionField* InternalizeL( RReadStream& aStream );
+
+    private:    // Internal
+
+        /**
+         *  Constructor
+         */
+        CSdpConnectionField();
+
+        /**
+         *  2nd phase constructor
+         *
+         *	@param aText A string containing a correctly formatted field value
+		 *         terminated by a CRLF.         
+         */         
+        void ConstructL( const TDesC8& aText );
+        
+        /**
+         *  2nd phase constructor
+         *
+         *	@param aAddress IP address from either KAfInet or KAfInet6 family
+         *  @param aTTL Time-To-Live for IP4 multicasts
+         *  @param aNumOfAddress Nubmer of addresses in multicast
+         */
+        void ConstructL( const TInetAddr& aAddress,
+                         TInt aTTL, TUint aNumOfAddress );
+
+        /**
+         *  2nd phase constructor
+         *
+         *	@param aNetType A valid network type name from the pre-defined
+		 *         SDP string table or defined by the user
+		 *  @param aAddressType A valid address type name from the pre-defined
+		 *         SDP string table or defined by the user
+		 *	@param aAddress A valid address of the address type
+         */
+        void ConstructL( RStringF aNetType, RStringF aAddressType, 
+	                     const TDesC8& aAddress );
+
+        /**
+         *  Checks if the address is valid against given arguments
+         *
+         *  @param aAddressTypeIP4 The given type of address (EFalse = IP6)
+         *  @param aAddress Address with possibly TTL & number of addresses
+         *  @return error code (KErrNone if valid)
+         */
+        TInt IsValidAddress( TBool aAddressTypeIP4,
+                             const TDesC8& aAddress ) const;
+
+        /**
+         *  Checks if the address is valid against given arguments
+         *         
+         *  @param aAddress Address in TInetAddr format
+         *  @param aTTL TTL attribute
+         *  @param aNumOfAddress Number off addresses
+         *  @return error code (KErrNone if valid)
+         */
+        TInt IsValidAddress( const TInetAddr& aAddress, 
+                             TInt aTTL, TUint aNumOfAddress ) const;
+        
+        /**
+         *  Parses address field
+         *
+         *  @param aAddressTypeIP4 The given type of address (EFalse = IP6)
+         *  @param aAddress Address with possibly TTL & number of addresses
+         *  @param aTTL TTL value is stored here (or KErrNotFound)
+         *  @param aNumberOfAddresses Range of addreses
+         *  @return The address
+         */
+        HBufC8* ParseAddressFieldL( TBool aAddressTypeIP4,
+                                    const TDesC8& aAddress,
+                                    TInt& aTTL,
+                                    TUint& aNumberOfAddresses ) const;
+
+        /**
+         *  Parses IP4 address
+         *
+         *  @param aPos Position of the (first) separation mark         
+         *  @param aTTL TTL value is stored here (or KErrNotFound)
+         *  @param aAddr Addres in TInetAddr format
+         *  @param aAddress The whole address field
+         *  @param aNumberOfAddresses Range of addreses
+         *  @return The address
+         */
+        HBufC8* ParseIP4AddressL( TInt aPos, 
+                                  TInetAddr& aAddr,
+                                  const TDesC8& aAddress,
+                                  TInt& aTTL,
+                                  TUint& aNumberOfAddresses ) const;
+
+        /**
+         *  Parses IP6 address
+         *
+         *  @param aPos Position of the (first) separation mark         
+         *  @param aTTL TTL value is stored here (or KErrNotFound)
+         *  @param aAddr Addres in TInetAddr format
+         *  @param aAddress The whole address field
+         *  @param aNumberOfAddresses Range of addreses
+         *  @return The address
+         */
+        HBufC8* ParseIP6AddressL( TInt aPos, 
+                                  TInetAddr& aAddr,
+                                  const TDesC8& aAddress,
+                                  TInt& aTTL,
+                                  TUint& aNumberOfAddresses ) const;
+
+        /**
+         *  Copies given network type to iNetType and verifies aNetType to
+         *  be valid
+         *
+         *  @param aNetType Given network type                
+         */
+        void CopyNetTypeL( const TDesC8& aNetType );
+
+        /**
+         *  Copies given address type to iAddressType and verifies aAddrType
+         *  to be valid
+         * 
+         *  @param aAddrType Given address type     
+         */
+        void CopyAddressTypeL( const TDesC8& aAddrType );
+
+        /**
+         *  Copies address to iAddress, and initalizes TTL & number of addresses,
+         *  leaves on error
+         *  
+         *  @param aAddress Address string, which can also contain TTL
+         *                  and number of addresses attributes
+         */
+        void CopyAddressL( const TDesC8& aAddress, RStringPool aPool );
+
+    private:    // Data
+
+        // <network type>
+        RStringF iNetType;
+        
+        // <address type>        
+        RStringF iAddressType;
+
+        // mutable TInetAddr for InetAddress()
+        mutable TInetAddr iInetAddress;
+
+        // Address in text format
+        HBufC8* iAddress;
+
+        // TTL for IP4 multicast addresses
+        TInt iTTL;
+        // Number of addresses
+        TUint iNumOfAddress;
+
+        // String pool
+        RStringPool iPool;
+
+		void __DbgTestInvariant() const;
+
+
+	};
+
+#endif // CSDPCONNECTIONFIELD_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdpdocument.h	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,446 @@
+/*
+* Copyright (c) 2010 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:
+* Name          : SdpDocument.h
+* Part of       : Local SDP Codec
+* Interface     : SDK API, Local SDP Codec API
+* Version       : 1.0
+*
+*/
+
+
+
+#ifndef CSDPDOCUMENT_H
+#define CSDPDOCUMENT_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <badesca.h>
+#include "_sdpdefs.h"
+#include <stringpool.h>
+
+// FORWARD DECLARATIONS
+class SdpUtil;
+class RReadStream;
+class RWriteStream;
+class CUri8;
+class CDesC8Array;
+class CSdpOriginField;
+class CSdpEmailField;
+class CSdpPhoneField;
+class CSdpConnectionField;
+class CSdpBandwidthField;
+class CSdpTimeField;
+class CSdpAttributeField;
+class CSdpMediaField;
+class CSdpKeyField;
+class CSdpCodecParseUtil;
+
+// CLASS DECLARATION
+/**
+ *  @publishedAll
+ *  @released
+ *
+ *    This class encapsulates the Session Description Protocol (SDP) document.
+ *  The SDP document is a collection of SDP fields and related values
+ *    describing a session.
+ *
+ *    The normative reference for correct formatting and values is
+ *    draft-ietf-mmusic-sdp-new-14 unless specified otherwise in
+ *  member documentation. The implementation supports this normative
+ *  reference, but does not enforce it fully. 
+ *
+ *  @lib localsdpcodec.lib
+ */
+class CSdpDocument : public CBase
+    {
+    public: // Constructors and destructor
+        /**
+        * Constructs a new SDP document.
+        *    
+        * @param aText A string containing a correctly formatted SDP document.
+        * @return a new instance.
+        */
+        IMPORT_C static CSdpDocument* DecodeL(const TDesC8& aText);
+
+        /**
+        * Constructs a new SDP document and adds the pointer to the cleanup stack.
+        *    
+        * @param aText A string containing a correctly formatted SDP document.
+        * @return a new instance.
+        */
+        IMPORT_C static CSdpDocument* DecodeLC(const TDesC8& aText);
+            
+        /**
+        * Constructs a new, empty SDP document.
+        * The instance will have the following initial values:
+        *      v=0
+        *      s=-
+        *      t=0 0
+        *
+        * @return a new instance.
+        */
+        IMPORT_C static CSdpDocument* NewL();
+
+        /**
+        * Constructs a new, empty SDP document document and adds the pointer to 
+        * the cleanup stack.
+        * The instance will have the following initial values:
+        *      v=0
+        *      s=-
+        *      t=0 0
+        *
+        * @return a new instance.
+        */
+        IMPORT_C static CSdpDocument* NewLC();
+
+        /**
+        * Deletes the resources held by the instance.
+        */
+        IMPORT_C ~CSdpDocument();
+
+    public: 
+        /**
+        * Externalizes the object state in an internal, memory optimized format.
+        *
+        * @param aStream The output stream.
+        */
+        IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+
+        /**
+        * Internalizes the object state from an internal, memory optimized format.
+        *
+        * @param aStream The input stream.
+        * @return A new SDP document internalized from the input stream.
+        */
+        IMPORT_C static CSdpDocument* InternalizeL(RReadStream& aStream);
+
+        /**
+        * Outputs the SDP document formatted according to SDP syntax.
+        * It is possible to output the document even though it is
+        * incomplete in the sense that all mandatory SDP fields are
+        * not present.When creating an SDP document to be used e.g.
+        * as part of SIP signalling, caller should first ensure the
+        * validity of the document using the IsValid() function.
+        * 
+        * @param aStream Stream used for output. On return the 
+        *        stream includes correctly formatted SDP description.
+        */
+        IMPORT_C void EncodeL(RWriteStream& aStream) const;
+
+        /**
+        * Creates a new instance that is equal to the target.
+        *
+        * @return a new instance.
+        */
+        IMPORT_C CSdpDocument* CloneL() const;
+
+        /**
+        * Checks if the instance represents a valid SDP document.
+        *
+        * @return ETrue if SDP document is valid and EFalse if not.
+        */
+        IMPORT_C TBool IsValid() const;
+
+        /**
+        * Gets the SDP version used in the version field.
+        * Note, that the current implementation supports only version number 0.
+        *
+        * @return The SDP version number.
+        */ 
+        IMPORT_C TUint SdpVersion() const;
+
+        /**
+        * Gets a reference to the session origin field.
+        * Note, that the ownership is not transferred and
+        * the instance must not be deleted by the caller.
+        *
+        * @return The origin field or zero if not present.
+        */
+        IMPORT_C CSdpOriginField* OriginField();
+
+        /**
+        * Gets a reference to the session origin field.
+        *
+        * @return The origin field or zero if not present.
+        */
+        IMPORT_C const CSdpOriginField* OriginField() const;
+
+        /**
+        * Sets or removes the session origin field.
+        * Note, that the ownership of the argument is 
+        * transferred to the SDP document object.
+        *
+        * @param aObj New origin field or null to remove the field.
+        */
+        IMPORT_C void SetOriginField(CSdpOriginField* aObj);
+
+        /**
+        * Gets the session name field value.
+        *
+        * @return The session name or empty descriptor if not present.
+        */
+        IMPORT_C const TDesC8& SessionName() const;
+
+        /**
+        * Sets the session name field value.
+        *
+        * @param aValue Valid session name value. 
+        *        Note that an empty value is not accepted.
+        * @leave KErrSdpCodecSessionField if
+        *        aValue is not empty or aValue includes invalid byte strings 
+        *        (´\0´, ´\n´, ´\r´).
+        */
+        IMPORT_C void SetSessionNameL(const TDesC8& aValue);
+
+        /**
+        * Gets the session information field value.
+        *
+        * @return Info field value or an empty descriptor if not present.
+        */
+        IMPORT_C const TDesC8& Info() const;
+
+        /**
+        * Sets or removes the session information field value.
+        *
+        * @param New field value or an empty descriptor to remove the field.
+        * @leave KErrSdpCodecInfoField if aValue is not empty or aValue includes 
+        *        invalid byte strings (´\0´, ´\n´, ´\r´).
+        */
+        IMPORT_C void SetInfoL(const TDesC8& aValue);
+
+        /**
+        *    Gets the session URI field value.
+        *    Note, that the ownership is not transferred and
+        *    the instance must not be deleted by the caller.
+        *
+        *    @return CUri8*: Session URI or zero if the field is not present.
+        */
+        IMPORT_C CUri8* Uri();
+
+        /**
+        * Gets the session URI field value.
+        *
+        * @return Session URI or zero if the field is not present.
+        */
+        IMPORT_C const CUri8* Uri() const;
+
+        /**
+        * Sets or removes the session level URI field.
+        * Note, that the ownership of the argument is 
+        * transferred to the SDP document object.
+        *
+        * @param New value of the field or zero to remove the field.
+        */
+        IMPORT_C void SetUri(CUri8* aValue);
+
+        /**
+        * Gets the set of session level email field values. This array is used to
+        * add and remove fields into the document.
+        * Note, that only correctly formatted email field values should be placed
+        * into the array. Empty values in the array will be ignored.
+        *
+        * @return Email fields in array or empty array if no email fields.
+        */
+        IMPORT_C CDesC8Array& EmailFields();
+
+        /**
+        * Gets the set of session level phone field values. This array is used to
+        * add and remove fields into the document.
+        * Note, that only correctly formatted phone field values should be placed
+        * into the array. Empty values in the array will be ignored.
+        *  
+        * @return Phone fields in array or empty array if no phone fields.
+        */
+        IMPORT_C CDesC8Array& PhoneFields();
+
+        /**
+        * Gets the session level connection field.
+        * Note, that the ownership is not transferred and the instance must not be
+        * deleted by the caller.
+        *
+        * @return Connection field or zero if not present.
+        */
+        IMPORT_C CSdpConnectionField* ConnectionField();
+
+        /**
+        * Gets the session level connection field.
+        *
+        * @return Connection field or zero if not present.
+        */
+        IMPORT_C const CSdpConnectionField* ConnectionField() const;
+
+        /**
+        * Sets or removes the session level connection field.
+        * Note, that the ownership of the argument is 
+        * transferred to the SDP document object.
+        *
+        * @param New connection field or zero to remove the field.
+        */    
+        IMPORT_C void SetConnectionField(CSdpConnectionField* aObj);
+
+        /**
+        * Gets the possibly empty set of session level bandwidth fields.
+        * This array is used directly for element insertion and removal.
+        * The array may contain zero references and these are ignored.
+        *
+        * The objects referenced from the array are owned by the document
+        * instance and must not be deleted. An object can be removed from
+        * the document by setting the corresponding element to zero. By
+        * doing so, the calling party receives ownership of the removed object.
+        *
+        * @return Set of bandwidth fields.
+        */
+        IMPORT_C RPointerArray<CSdpBandwidthField>& BandwidthFields();
+
+        /**
+        * Gets the set of session level time description fields.
+        * This array is used directly for element insertion and removal.
+        * There must be at least one time description field in a valid SDP
+        * document.The array may contain zero references and these are ignored.
+        *
+        * The objects referenced from the array are owned by the document 
+        * instance and must not be deleted. An object can be removed from the
+        * document by setting the corresponding element to zero. By doing so,
+        * the calling party receives ownership of the removed object.  
+        *
+        * @return Set of time fields.
+        */
+        IMPORT_C RPointerArray<CSdpTimeField>& TimeFields();
+
+        /** 
+        * Gets the zone adjustments field value.
+        *
+        * @return The field value or an empty descriptor if the
+        *         field is not present.
+        */
+        IMPORT_C const TDesC8& ZoneAdjustments() const;
+
+        /** 
+        * Sets the zone adjustments field value.
+        *
+        * @param aValue A valid field value or an empty descriptor
+        *        if field is not present.
+        */
+        IMPORT_C void SetZoneAdjustmentsL(const TDesC8& aValue);
+
+        /**
+        * Gets the session level encryption key field.
+        * Note, that the ownership is not transferred and
+        * the instance must not be deleted by the caller.
+        *
+        * @return The encryption key or zero if not present.
+        */
+        IMPORT_C CSdpKeyField* Key();
+
+        /**
+        * Gets the session level encryption key field.
+        *
+        * @return The encryption key or zero if not present.
+        */
+        IMPORT_C const CSdpKeyField* Key() const;
+
+        /**
+        * Sets or removes the encryption key field.
+        * Note, that the ownership of the argument is 
+        * transferred to the SDP document object.
+        *
+        * @param aObj New value of the field or zero to remove the field.
+        */
+        IMPORT_C void SetKey(CSdpKeyField* aObj);
+
+        /**
+        * Gets the possibly empty set of session level attribute fields.
+        * This array is used directly for element insertion and removal.
+        * The array may contain zero references and these are ignored.
+        *
+        * The objects referenced from the array are owned by the document
+        * instance and must not be deleted. An object can be removed from the
+        * document by setting the corresponding element to zero. By doing so,
+        * the calling party receives ownership of the removed object.
+        *
+        * @return Set of session level attributes.
+        */
+        IMPORT_C RPointerArray<CSdpAttributeField>& AttributeFields();
+
+        /**
+        * Gets the possibly empty set of media description fields.
+        * This array is used directly for element insertion and removal.
+        * Note, that media level attributes and fields are managed 
+        * through the corresponding media field instance and not through
+        * the document instance.
+        * The array may contain zero references and these are ignored.
+        *
+        * The objects referenced from the array are owned by the document
+        * instance and must not be deleted. An object can be removed from the
+        * document by setting the corresponding element to zero. By doing so,
+        * the calling party receives ownership of the removed object.
+        *
+        * @return Set of media description fields.
+        */
+        IMPORT_C RPointerArray<CSdpMediaField>& MediaFields();
+
+    private:
+        CSdpDocument();
+        void ConstructL();
+        void ConstructL(const CSdpDocument& aSdpDocument);
+        void DoInternalizeL(RReadStream& aStream);
+
+        void ParseL (const TDesC8& aText);
+        void ParseSessionVersionL();
+        void ParseSessionOwnerL();
+        void ParseSessionNameL();
+        void ParseSessionInformationL();
+        void ParseUriL();
+        void ParseEmailL();
+        void ParsePhoneL();
+        void ParseConnectionL();
+        void ParseBandwidthL();
+        void ParseTimeFieldL();
+        void ParseZoneAdjustmentL();
+        void ParseEncryptionKeyL();
+        void ParseAttributeFieldL();
+        void ParseMediaLevelL ();
+        void ExternalizeDesCArrayL(CDesC8ArraySeg& aArray,
+                               RWriteStream& aStream) const;
+        void EncodeDesCArrayL(CDesC8ArraySeg& aArray,TInt aIndex,
+                                            RWriteStream& aStream) const;
+
+        TDesC8& GetTokenFromStreamL(RReadStream& aStream);
+
+        CSdpDocument(const CSdpDocument&); // Hidden.
+        CSdpDocument& operator = (const CSdpDocument&); // Hidden
+
+    private: // Data
+            
+        HBufC8* iInfo;
+        HBufC8* iSessionName;
+        HBufC8* iZoneAdjustments;
+        CSdpKeyField* iSdpKeyField;
+        CSdpOriginField* iSdpOriginField;
+        CSdpConnectionField* iSdpConnectionField;
+        TUint iSdpVersion;
+        RPointerArray<CSdpTimeField>* iTimeFields;
+        RPointerArray<CSdpBandwidthField>* iBandwidthFields;
+        RPointerArray<CSdpAttributeField>* iAttributeFields;
+        RPointerArray<CSdpMediaField>* iMediaFields;
+        CUri8* iUri;
+        CDesC8ArraySeg* iEmailFields;
+        CDesC8ArraySeg* iPhoneFields;
+        RStringPool iPool;
+        HBufC8* iToken;
+        CSdpCodecParseUtil* iSdpCodecParseUtil;
+    };
+
+#endif // CSDPDOCUMENT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdpfmtattributefield.h	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,264 @@
+/*
+* Copyright (c) 2010 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:
+* Name          : SdpFmtAttributeField.h
+* Part of       : Local SDP Codec
+* Interface     : SDK API, Local SDP Codec API
+* Version       : 1.0
+*
+*/
+
+
+
+#ifndef CSDPFMTATTRIBUTEFIELD_H
+#define CSDPFMTATTRIBUTEFIELD_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <stringpool.h>
+#include "_sdpdefs.h"
+
+// FORWARD DECLARATIONS
+class RReadStream;
+class RWriteStream;
+class CSdpAttributeField;
+class TSdpRtpmapValue;
+
+// CLASS DECLARATION
+/**
+ *  @publishedAll
+ *  @released
+ *
+ *	This class encapsulates the attribute field of the Session Description
+ *  Protocol for media format/payload type level attributes. Media and session
+ *  level attributes are supported by the CSdpAttributeField class. 
+ *
+ *	The normative reference for correct formatting and values is
+ *	draft-ietf-mmusic-sdp-new-14 unless specified otherwise in
+ *  member documentation. The implementation supports this normative
+ *  reference, but does not enforce it fully. 
+ *
+ *  @lib localsdpcodec.lib
+ */
+class CSdpFmtAttributeField : public CBase
+	{
+    public: // Constructors and destructor
+        /**
+         *	Constructs a new media format level attribute field.
+		 * 
+		 *	@param aText A string containing a correctly 
+         *         formatted field value terminated by a CRLF.
+         *  @return a new instance.
+         */
+		IMPORT_C static CSdpFmtAttributeField* DecodeL( const TDesC8& aText );
+
+        /**
+         *	Constructs a new media format level attribute field  and adds the 
+         *  pointer to the cleanup stack.
+		 *			 
+         *	@param aText A string containing a correctly 
+         *         formatted field value terminated by a CRLF.
+         *	@return a new instance.
+         */
+		IMPORT_C static CSdpFmtAttributeField* DecodeLC( const TDesC8& aText);
+
+        /**
+         *	Constructs a new media level format attribute field.
+		 *
+         *	@param aAttribute The attribute name. It can be a pre-defined
+         *         name in the SDP string pool or defined by the client.
+         *	@param aFormat A valid format/payload identifier 
+         *         used in the format list of the media description.
+         *	@param aValue A valid attribute value or an empty 
+         *         descriptor to omit the value part.
+         *	@return a new instance.
+		 */
+		IMPORT_C static CSdpFmtAttributeField* NewL(
+            RStringF aAttribute, const TDesC8& aFormat, const TDesC8& aValue );
+
+        /**
+         *	Constructs a new media format level attribute field and adds the 
+         *  pointer to the cleanup stack.
+		 *
+         *	@param aAttribute The attribute name. It can be a pre-defined 
+         *         name in the SDP string pool or defined by the client.
+         *	@param aFormat A valid format/payload identifier 
+         *         used in the format list of the media description.
+         *	@param aValue A valid attribute value or an empty 
+         *         descriptor to omit the value part.
+         *	@return a new instance.
+		 */
+		IMPORT_C static CSdpFmtAttributeField* NewLC(
+            RStringF aAttribute, const TDesC8& aFormat, const TDesC8& aValue );
+
+		/**
+		 *	Deletes the resources held by the instance.
+		 */
+		IMPORT_C ~CSdpFmtAttributeField();
+
+    public: // New functions
+
+		/**
+		 *	Outputs the field formatted according to SDP syntax and including
+		 *  the terminating CRLF.
+		 * 
+		 *	@param aStream Stream used for output. On return 
+         *         the stream includes correctly formatted attribute field.
+		 */
+		IMPORT_C void EncodeL( RWriteStream& aStream ) const;
+
+		/**
+		 *	Creates a new instance that is equal to the target.
+		 *
+		 *	@return a new instance.
+		 */
+		IMPORT_C CSdpFmtAttributeField * CloneL() const;
+
+		/**	
+		 *	Compares this instance to another for equality. 
+		 *
+		 *	@param aObj The instance to compare to.
+		 *	@return ETrue if equal, EFalse if not.
+		 */
+		IMPORT_C TBool operator== ( const CSdpFmtAttributeField& aObj ) const;
+
+		/**
+		 *	Gets the attribute.
+		 *	
+		 *	@return	The attribute name. The name can be pre-defined 
+         *          name in the SDP string table or defined by the client.
+         */
+		IMPORT_C RStringF Attribute() const;
+
+		/**
+		 *	Gets the format.
+		 *	
+		 *	@return	The format.
+		 */
+		IMPORT_C const TDesC8& Format() const;
+
+		/**
+		 *	Gets the attribute value.
+		 *	
+		 *	@return The value  or an empty descriptor if there is no value part.
+		 */
+		IMPORT_C const TDesC8& Value() const;
+
+		/**
+		 *	Sets the attribute, format/payload type and attribute value.
+		 *
+         *	@param aAttribute A valid attribute name. It can be a 
+         *         pre-defined name in the SDP string pool or defined by 
+         *         the client.
+         *	@param aFormat A valid format/payload identifier 
+         *         used in the formatlist of the media description.
+         *	@param aValue A valid attribute value or an empty 
+         *         descriptor to omit the value part.
+         *  @leave KErrSdpCodecMediaAttributeField if aAttribute is not rtpmap
+         *         or fmtp attribute.
+		 */
+		IMPORT_C void SetL(
+            RStringF aAttribute, const TDesC8& aFormat, const TDesC8& aValue );
+
+    public: // Internal to codec
+
+        /**
+         *  Externalizes the object to stream
+         *
+         *  @param aStream Stream where the object's state will be stored
+         */
+		void ExternalizeL( RWriteStream& aStream ) const;
+
+        /**
+         *  Creates object from the stream data
+         *
+         *  @param aStream Stream where the object's state will be read        
+         *  @return Initialized object
+         */
+		static CSdpFmtAttributeField* InternalizeL( RReadStream& aStream );
+
+        /**
+         *  Returns attribute field
+         *
+         *  @return Attribute field
+         */
+        const CSdpAttributeField* AttributeField() const;
+
+    private: // New methods
+
+        /**
+         *  Creates object from the stream data.
+         *	Does the "2nd phase construction" of internalization.
+         *
+         *  @param aStream Stream where the object's state will be read
+         */
+        void DoInternalizeL( RReadStream& aStream );
+
+        /**
+         *  Formats value parameters
+         *
+         *  @param aField Attribute field object
+         */
+        void FormatValueParamsL( CSdpAttributeField* aField );
+
+    private: // Construction and destruction
+        
+        /**
+         *  Constructor
+         */
+        CSdpFmtAttributeField();
+
+        /**
+         *  Second phase construction
+         *         
+         *  @param aText A string containing a correctly formatted field value
+		 *         terminated by a CRLF.
+         */
+        void ConstructL( const TDesC8& aText );
+
+        /**
+         *  Second phase construction
+         *
+         *	@param aAttribute The attribute from the pre-defined SDP string 
+		 *         table or defined by the user
+         *	@param aFormat A valid format/payload identifier used in the format
+		 *         list of the media description.
+         *	@param aValue A valid attribute value or an empty descriptor
+		 *         to omit the value part.         
+		 */
+		void ConstructL(
+            RStringF aAttribute, const TDesC8& aFormat, const TDesC8& aValue );    
+
+        
+        /**
+         *  Decode format parameter from string
+         *
+         *	@param aText A text includeing format parameter.
+		 */
+        void DecodeFormatL(const TDesC8& aText);
+        
+		void __DbgTestInvariant() const;
+
+
+    private:
+
+        RStringPool iPool;
+        CSdpAttributeField* iAttributeField;       
+		/** Pointer to the format part*/
+		TPtrC8 iFormat;
+        /** Pointer to the format parameters*/
+		TPtrC8 iValuePart;
+	};
+
+#endif // CSDPFMTATTRIBUTEFIELD_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdpkeyfield.h	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,194 @@
+/*
+* Copyright (c) 2010 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:
+* Name          : SdpKeyField.h
+* Part of       : Local SDP Codec
+* Interface     : SDK API, Local SDP Codec API
+* Version       : 1.0
+*
+*/
+
+
+
+#ifndef CSDPKEYFIELD_H
+#define CSDPKEYFIELD_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <stringpool.h>
+#include "_sdpdefs.h"
+
+// FORWARD DECLARATIONS
+class RReadStream;
+class RWriteStream;
+
+// CLASS DECLARATION
+/**
+ *  @publishedAll
+ *  @released
+ *
+ *	This class encapsulates the encryption key field of 
+ *  the Session Description Protocol.
+ * 
+ *	The normative reference for correct formatting and values is
+ *	draft-ietf-mmusic-sdp-new-14 unless specified otherwise in
+ *  member documentation. The implementation supports this normative
+ *  reference, but does not enforce it fully. 
+ *
+ *  @lib localsdpcodec.lib
+ */
+class CSdpKeyField : public CBase
+	{
+    public: // Constructors and destructor
+        /**
+         *	Constructs a new encryption key field.
+		 *	
+         *	@param aFieldValue A string containing a correctly 
+         *         formatted field value terminated by a CRLF.
+         *	@return a new instance.
+         */
+		IMPORT_C static CSdpKeyField* DecodeL(const TDesC8& aFieldValue);
+
+        /**
+         *	Constructs a new encryption key field and adds the pointer to 
+         *  the cleanup stack.
+		 *	
+         *	@param aFieldValue A string containing a correctly 
+         *              formatted field value terminated by a CRLF.
+         *	@return a new instance.
+         *  @leave  In error case function leaves.
+         */
+		IMPORT_C static CSdpKeyField* DecodeLC(const TDesC8& aFieldValue);
+
+        /**
+         *	Constructs a new encryption key field.
+		 *	
+         *	@param aMethod Encryption method from the pre-defined 
+         *         SDP string table. User defined values are not accepted.
+		 *  @param aEncryptionKey A valid encryption key value 
+         *         or an empty descriptor to omit the key part.
+         *	@return a new instance.
+         */
+		IMPORT_C static CSdpKeyField* NewL(RStringF aMethod,
+											const TDesC8& aEncryptionKey);
+
+        /**
+         *	Constructs a new encryption key field and adds the pointer to 
+         *  the cleanup stack.
+		 *	
+         *	@param aMethod Encryption method from the pre-defined 
+         *         SDP string table. User defined values are not accepted.
+		 *  @param aEncryptionKey A valid encryption key value 
+         *         or an empty descriptor to omit the key part.
+         *	@return a new instance.
+         */
+		IMPORT_C static CSdpKeyField* NewLC(RStringF aMethod,
+											const TDesC8& aEncryptionKey);
+
+		/**
+		 *	Deletes the resources held by the instance.
+		 */
+		IMPORT_C ~CSdpKeyField();
+
+    public: // New functions
+		/**
+		 *	Writes the instance as a complete SDP field encoded as UTF-8
+		 *	and formatted as defined in draft-ietf-mmusic-sdp-new-14.
+         *
+		 *	@param aStream Stream used for output. On return 
+         *         the stream includes correctly formatted key field.
+		 */
+		IMPORT_C void EncodeL(RWriteStream& aStream) const;
+
+		/**
+		 *	Creates a new instance that is equal to the target.
+		 *
+		 *	@return a new instance.
+		 */
+		IMPORT_C CSdpKeyField * CloneL() const;
+
+		/**	
+		 *	Compares this instance to another for equality.
+		 *
+		 *	@param aObj The instance to compare to.
+		 *	@return ETrue if equal, EFalse if not.
+		 */
+		IMPORT_C TBool operator == (const CSdpKeyField& aObj) const;
+
+		/**
+		 *	Gets the encryption method.
+		 *
+		 *	@return The method.
+		 */
+		IMPORT_C RStringF Method() const;
+
+		/**
+		 *	Gets the encryption key.
+		 *
+		 *	@return The key or an empty descriptor if there is no key part.
+		 */
+		IMPORT_C const TDesC8& EncryptionKey() const;
+
+		/**
+		 *	Sets the encryption method and key.
+		 *
+         *	@param aMethod Encryption method from the pre-defined 
+         *         SDP string table. User defined values are not accepted.
+		 *  @param aEncryptionKey A valid encryption key value 
+         *         or an empty descriptor to omit the key part.
+		 */
+		IMPORT_C void SetL(RStringF aMethod,
+						   const TDesC8& aEncryptionKey);
+
+    public:
+    	/**
+         *  Externalizes the object to stream
+         *
+         *  @param aStream Stream where the object's state will be stored
+         */
+		void ExternalizeL(RWriteStream& aStream) const;
+		
+		/**
+         *  Creates object from the stream data
+         *
+         *  @param aStream Stream where the object's state will be read        
+         *  @return Initialized object
+         */
+		static CSdpKeyField* InternalizeL(RReadStream& aStream);
+
+	private:
+		CSdpKeyField();
+		void ConstructL(const TDesC8& aText);
+		void ConstructL(RStringF aMethod, const TDesC8& aEncryptionKey);
+        void DoInternalizeL(RReadStream& aStream);
+        void SetMethodAndKeyL(RStringF aMethod, 
+                              const TDesC8& aEncryptionKey,
+                              TBool aAllowEmptyKeyValue);
+        void SetMethodClearAndKeyL(RStringF aMethod, const TDesC8& aEncryptionKey);
+        void SetMethodBase64AndKeyL(RStringF aMethod, const TDesC8& aText);
+        void SetMethodUriAndKeyL(RStringF aMethod, const TDesC8& aText);
+        void SetMethodPromptL(RStringF aMethod, const TDesC8& aText);
+        RArray<TPtrC8> GetElementsFromLineL( TLex8& aLexer);
+
+    private: // Data
+		RStringF iMethod;
+        TBool iMethodOpen;
+		HBufC8* iEncryptionKey;
+        RStringPool iStringPool;
+
+		void __DbgTestInvariant() const;
+	
+	};
+
+#endif // CSDPKEYFIELD_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdpmediafield.h	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,445 @@
+/*
+* Copyright (c) 2010 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:
+* Name          : SdpMediaField.h
+* Part of       : Local SDP Codec
+* Interface     : SDK API, Local SDP Codec API
+* Version       : 1.0
+*
+*/
+
+
+
+#ifndef CSDPMEDIAFIELD_H
+#define CSDPMEDIAFIELD_H
+
+//  INCLUDES
+#include <e32base.h>
+#include "_sdpdefs.h"
+#include <stringpool.h>
+
+// FORWARD DECLARATIONS
+class RReadStream;
+class RWriteStream;
+class CSdpConnectionField;
+class CSdpBandwidthField;
+class CSdpAttributeField;
+class CSdpKeyField;
+class CSdpFmtAttributeField;
+class CSdpCodecParseUtil;
+
+// CLASS DECLARATION
+/**
+ *  @publishedAll
+ *  @released
+ *
+ *	This class encapsulates the media description field and related media
+ *  specific subfields of the Session Description Protocol.
+ *
+ *	The normative reference for correct formatting and values is
+ *	draft-ietf-mmusic-sdp-new-14 unless specified otherwise in
+ *  member documentation. The implementation supports this normative
+ *  reference, but does not enforce it fully. 
+ *
+ *  @lib localsdpcodec.lib
+ */
+class CSdpMediaField : public CBase
+	{
+
+	public:
+
+
+    public: // Constructors and destructor
+        /**
+         *	Constructs a new media description field.
+		 *	
+         *	@param aText A correctly formatted media field 
+         *         terminated by a CRLF followed by zero or more media 
+         *         attribute fields separated by a CRLF.
+         *	@param aRecurse If ETrue, attempts to construct also media 
+         *         attributes following the CRLF terminating the media field.
+         *	@return a new instance.
+         */
+		IMPORT_C static	CSdpMediaField* DecodeL(const TDesC8& aText,
+												TBool aRecurse = ETrue);
+
+        /**
+         *	Constructs a new media description field and adds the pointer to 
+         *  the cleanup stack.
+		 *	
+         *	@param aText A correctly formatted media field 
+         *         terminated by a CRLF followed by zero or more media 
+         *         attribute fields separated by a CRLF.
+         *	@param aRecurse If ETrue, attempts to construct also media 
+         *         attributes following the CRLF terminating the media field.
+		 *  @return a new instance.
+         */
+		IMPORT_C static	CSdpMediaField* DecodeLC(const TDesC8& aText,
+												 TBool aRecurse = ETrue);
+
+        /**
+         *	Constructs a new media description field.
+		 *  The optional portcount component of the field is initialized to 1.
+		 *
+		 *	@param aMedia A valid media type name.
+         *	@param aPort Port number.
+         *	@param aProtocol A valid media protocol name.
+         *	@param aFormatList A valid format list.
+         *	@return a new instance.
+         */
+		IMPORT_C static CSdpMediaField* NewL(RStringF aMedia,
+											 TUint aPort,
+											 RStringF aProtocol,
+											 const TDesC8& aFormatList);
+
+		/**
+         *	Constructs a new media description field and adds the pointer to 
+         *  the cleanup stack.
+		 *  The optional portcount component of the field is initialized to 1.
+		 *	
+		 *	@param aMedia A valid media type name.
+         *	@param aPort Port number.
+         *	@param aProtocol A valid media protocol name.
+         *	@param aFormatList A valid format list.
+         *	@return a new instance.
+         */
+		IMPORT_C static CSdpMediaField* NewLC(RStringF aMedia,
+											  TUint aPort,
+										      RStringF aProtocol,
+										      const TDesC8& aFormatList);
+
+		/**
+		 *	Deletes the resources held by the instance.
+		 */
+		IMPORT_C ~CSdpMediaField();
+
+    public: // New functions
+		/**
+		 *	Outputs the field formatted according to SDP syntax and including
+		 *  the terminating CRLF. Optionally output also the related media 
+		 *  level fields. 
+		 * 
+		 *	@param aStream Stream used for output. On return the
+         *         stream includes correctly formatted media field with 
+         *         media part fields if aRecurse is defined to ETrue.
+		 *	@param aRecurse Flag to specify whether to output media 
+		 *         attributes also (ETrue) or only the media field (EFalse).
+		 */
+		IMPORT_C void 
+			EncodeL(RWriteStream& aStream, TBool aRecurse = ETrue) const;
+
+		/**
+		 *	Creates a new instance that is equal to the target.
+		 *  Optionally also related subfields are cloned.
+		 *
+		 *	@param aRecurse Flag to specify whether to clone subfields
+		 *         also (ETrue) or only the media field (EFalse).
+		 *	@return a new instance.
+		 */
+		IMPORT_C CSdpMediaField * CloneL(TBool aRecurse = ETrue) const;
+
+		/**	
+		 *	Compares this instance to another for equality. Subfields are
+		 *  included in the comparison if present.
+		 *
+		 *	@param aObj The instance to compare to.
+		 *	@return ETrue if equal, EFalse if not.
+		 */
+		IMPORT_C TBool operator == (const CSdpMediaField& aObj) const;
+
+		/**
+		 *	Checks the consistency between the media field and it's subfields.
+		 *  In particular, this function checks that each format specific 
+		 *  attribute is related to a format in the format list of the
+		 *  media field.
+		 *
+		 *	@return	ETrue if media description is consistent and EFalse if not.
+		 */
+		IMPORT_C TBool IsValid() const;
+
+		/**
+		 *	Gets the media type.
+		 *
+		 *	@return The media type.
+		 */
+		IMPORT_C RStringF Media() const;
+
+		/**
+		 *	Sets the media type.
+		 *
+		 *	@param aMedia The media type.
+		 *  @leave KErrSdpCodecMediaField if aMedia is not valid character
+		 */
+		IMPORT_C void SetMediaL(RStringF aMedia);
+
+		/**
+		 *	Gets the media protocol.
+		 *
+		 *	@return The media protocol.
+		 */
+		IMPORT_C RStringF Protocol() const;
+
+		/**
+		 *	Sets the media protocol.
+		 *
+		 *	@param aProtocol The media protocol.
+		 *  @leave KErrSdpCodecMediaField if 
+		 *		   aProtocol containing two elements divided by slash are not 
+         *         valid tokens.
+		 */
+		IMPORT_C void SetProtocolL(RStringF aProtocol);
+
+		/**
+		 *	Gets the port number.
+		 *
+		 *	@return The port number.
+		 */
+		IMPORT_C TUint Port() const;
+
+		/**
+		 *	Sets the port number.
+		 *
+		 *	@param aPort The port number.
+		 *  @leave KErrSdpCodecMediaField if port is not valid number as 
+         *         defined in draft-ietf-mmusic-sdp-new-14
+		 */
+		IMPORT_C void SetPortL(TUint aPort);
+
+		/**
+		 *	Gets the port count.
+		 *
+		 *	@return The port count.
+		 */
+		IMPORT_C TUint PortCount() const;
+
+		/**
+		 *	Sets the port count.
+		 *
+		 *	@param aCount The port count that must be greater than zero.
+		 *  @leave KErrSdpCodecMediaField if aCount equals to zero.
+		 */
+		IMPORT_C void SetPortCountL(TUint aCount);
+
+		/**
+		 *	Gets the format list.
+		 *
+		 *	@return The format list.
+		 */
+		IMPORT_C const TDesC8& FormatList() const;
+
+		/**
+		 *	Sets the format list.
+		 *  The format list should contain one or more format tokens separated
+		 *  by a single whitespace character.
+		 *
+		 *	@param aValue A valid format list.
+		 *  @leave KErrSdpCodecMediaField if aValue contains invalid tokens
+		 */
+		IMPORT_C void SetFormatListL(const TDesC8& aValue);
+
+		/**
+		 *	Return the media level info field value.
+		 *
+		 *	@return The value or an empty descriptor if not present.
+		 */
+		IMPORT_C const TDesC8& Info() const;
+
+		/**
+		 *	Sets the media level info field value.
+		 *
+		 *	@param aValue A valid info field value.
+		 *	@leave KErrSdpCodecMediaInfoField if aValue is not KNullDesC8 or 
+         *         aValue includes invalid byte strings (´\0´, ´\n´, ´\r´).
+		 */
+		IMPORT_C void SetInfoL(const TDesC8& aValue);
+
+		/**
+		 *	Gets the media level encryption key field.
+		 *	Note, that the ownership is not transferred and
+		 *	the instance must not be deleted by the caller.
+		 *
+		 *	@return Encryption key field or null if not present.
+		 */
+		IMPORT_C CSdpKeyField* Key();
+
+		/**
+		 *	Gets the media level encryption key field.
+		 *
+		 *	@return Encryption key field or null if not present.
+		 */
+		IMPORT_C const CSdpKeyField* Key() const;
+
+		/**
+		 *	Sets or removes the media level encryption key field.
+		 *
+		 *	@param aObj The new key field or null if field is 
+         *         to be removed. Ownership of the referenced object
+		 *         is transferred to the media field instance.
+		 */
+		IMPORT_C void SetKey(CSdpKeyField* aObj);
+
+		/**
+		 *	Gets the set of media format level attributes.
+		 *  This array is used directly for element insertion and removal.
+		 *
+		 *	The objects referenced from the array are owned by the media
+		 *  field instance and must not be deleted. An object can be
+		 *  removed from the media description by setting the corresponding
+		 *  element to zero. By doing so, the calling party receives ownership
+		 *  of the removed object.
+		 *
+		 *	@return The set of media format level attributes.
+		 */
+		IMPORT_C RPointerArray<CSdpFmtAttributeField>& FormatAttributeFields();
+
+		/**
+		 *	Gets the set of media level, format independent attributes.
+		 *  This array is used directly for element insertion and removal.
+		 *
+		 *	The objects referenced from the array are owned by the media
+		 *  field instance and must not be deleted. An object can be
+		 *  removed from the media description by setting the corresponding
+		 *  element to zero. By doing so, the calling party receives ownership
+		 *  of the removed object.
+		 *
+		 *	@return The set of media level attributes.
+		 */
+		IMPORT_C RPointerArray<CSdpAttributeField>& AttributeFields();
+
+		/**
+		 *	Gets the set of media level bandwidth fields.
+		 *  This array is used directly for element insertion and removal.
+		 *
+		 *	The objects referenced from the array are owned by the media
+		 *  field instance and must not be deleted. An object can be
+		 *  removed from the media description by setting the corresponding
+		 *  element to zero. By doing so, the calling party receives ownership
+		 *  of the removed object.
+		 *
+		 *	@return The set of media level bandwidth fields.
+		 */
+		IMPORT_C RPointerArray<CSdpBandwidthField>& BandwidthFields();
+
+		/**
+		 *	Gets the set of media level connection fields.
+		 *  This array is used directly for element insertion and removal.
+		 *
+		 *	The objects referenced from the array are owned by the media
+		 *  field instance and must not be deleted. An object can be
+		 *  removed from the media description by setting the corresponding
+		 *  element to zero. By doing so, the calling party receives ownership
+		 *  of the removed object.
+		 *
+		 *	@return The set of media level connection fields.
+		 */
+		IMPORT_C RPointerArray<CSdpConnectionField>& ConnectionFields();
+
+		/**
+		 *	Removes a specific format from the media description.
+		 *  The function will remove the named format from the format list if
+		 *  found and then delete all format level attributes of type 
+		 *  CSdpFmtAttributeField related to the removed format. 
+		 *
+		 *	@param aFormat The name of the format to remove.
+		 */
+		IMPORT_C void RemoveFormatL(const TDesC8& aFormat);
+
+		/**
+		 *	Removes all formats except one from the media description.
+		 *  The function will set the format list to only contain the one
+		 *  format to keep and then delete all format level attributes that
+		 *  are related to the removed formats. If the format is not found
+		 *  from the format list, it is added there. If there are no format
+		 *  level attributes for the specified format, the format level
+		 *  attribute set will be empty.
+		 *
+		 *	@param aFormat The name of the format to keep after 
+		 *         removing all others.
+		 */
+		IMPORT_C void KeepFormatL(const TDesC8& aFormat);
+
+		/**
+		 *	Sets this media description into rejected state.
+		 *  The rejected state is defined by the offer/answer model in
+		 *  RFC3264. The function sets the port number to 0 and removes
+		 *  all formats except one. The remaining format is determined
+		 *  by the implementation.
+		 */
+		IMPORT_C void RejectMedia();
+
+    public:
+		/**
+		 *	Shows if contact is present
+		 *
+		 *	@return ETrue if contact present, otherwise EFalse
+		 */
+		TBool IsContactPresent() const;
+		
+		/**
+         *  Externalizes the object to stream
+         *
+         *  @param aStream Stream where the object's state will be stored
+         */
+		void ExternalizeL(RWriteStream& aStream) const;
+		
+		/**
+         *  Creates object from the stream data
+         *
+         *  @param aStream Stream where the object's state will be read	
+         *  @return Initialized object
+         */
+		static CSdpMediaField* InternalizeL(RReadStream& aStream);
+
+	private:
+		CSdpMediaField();
+		void ConstructL();
+		void ConstructL(TBool aRecurse);
+		void ConstructL(RStringF aMedia, TUint aPort, RStringF aProtocol, 
+						const TDesC8& aFormatList);
+
+		void ConstructL(const CSdpMediaField& aSdpMediaField);
+		void DoInternalizeL(RReadStream& aStream);
+		void ParseL (const TDesC8& aText);
+		void ParseMediaL();
+		void ParseInformationL();
+		void ParseConnectionL();
+		void ParseBandwithL();
+		void ParseEncryptionKeyL();
+		void ParseAttributeFieldsL();
+		TDesC8& GetTokenFromStreamL(RReadStream& aStream);
+
+
+		CSdpMediaField(const CSdpMediaField&); // Hidden.
+		CSdpMediaField& operator = (const CSdpMediaField&); // Hidden
+
+    private: // Data
+		HBufC8* iInfo;
+		CSdpKeyField* iSdpKeyField;
+		RArray<TPtrC8> iElementArray;
+		RStringPool iPool;
+		TBool iRecurse;
+		RStringF iMedia;
+		RStringF iProtocol;
+		TUint iPort;
+		TUint iPortCount;
+		HBufC8* iFormatList;
+		RPointerArray<CSdpBandwidthField>* iBandwidthFields;
+		RPointerArray<CSdpAttributeField>* iAttributeFields;
+		RPointerArray<CSdpConnectionField>* iConnectionFields;
+		RPointerArray<CSdpFmtAttributeField>* iFmtAttrFields;
+		HBufC8* iToken;
+		CSdpCodecParseUtil* iSdpCodecParseUtil;
+	};
+
+#endif // CSDPMEDIAFIELD_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdporiginfield.h	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,461 @@
+/*
+* Copyright (c) 2010 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:
+* Name          : SdpOriginField.h
+* Part of       : Local SDP Codec
+* Interface     : SDK API, Local SDP Codec API
+* Version       : 1.0
+*
+*/
+
+
+
+#ifndef CSDPORIGINFIELD_H
+#define CSDPORIGINFIELD_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <in_sock.h>
+#include <stringpool.h>
+#include "_sdpdefs.h"
+
+//  CONSTANTS
+const TInt KMaxAddressLength = 256;
+
+//  FORWARD DECLARATIONS
+class RReadStream;
+class RWriteStream;
+class CSdpOriginFieldPtrs;
+
+// CLASS DECLARATION
+/**
+ *  @publishedAll
+ *  @released
+ *
+ *	This class encapsulates the origin field of 
+ *  the Session Description Protocol.
+ * 
+ *	The normative reference for correct formatting and values is
+ *	draft-ietf-mmusic-sdp-new-14 unless specified otherwise in
+ *  member documentation. The implementation supports this normative
+ *  reference, but does not enforce it fully. 
+ *
+ *  @lib localsdpcodec.lib
+ */
+class CSdpOriginField : public CBase
+	{
+    public:     // Constructors and destructor
+
+        /**
+         *	Constructs a new origin field.
+		 *		 
+         *	@param aText A string containing a correctly 
+         *         formatted field value terminated by a CRLF.
+         *	@return a new instance.
+         */
+		IMPORT_C static	CSdpOriginField* DecodeL( const TDesC8& aText );
+
+        /**
+         *	Constructs a new origin field and adds the pointer to the cleanup 
+         *  stack.
+		 * 		
+         *	@param aText A string containing a correctly 
+         *         formatted field value terminated by a CRLF.
+         *	@return a new instance.
+         */
+		IMPORT_C static	CSdpOriginField* DecodeLC( const TDesC8& aText );
+
+        /**
+         *	Constructs a new origin field.
+		 *	         
+         *	@param aUserName A valid user name value.
+         *	@param aSessionId A valid session id value.
+         *	@param aSessionVersion A valid announcement version value.
+         *	@param aAddress A unicast IP address from either
+		 *         KAfInet or KAfInet6 family.
+         *	@return a new instance.
+         */
+		IMPORT_C static	CSdpOriginField* NewL( const TDesC8& aUserName, 
+											   TInt64 aSessionId, 
+											   TInt64 aSessionVersion, 
+											   TInetAddr& aAddress );
+
+        /**
+         *	Constructs a new origin field and adds the pointer to the cleanup 
+         *  stack.
+		 *	         
+         *	@param aUserName A valid user name value.
+         *	@param aSessionId A valid session id value.
+         *	@param aSessionVersion A valid announcement version value.
+         *	@param aAddress A unicast IP address from either
+		 *         KAfInet or KAfInet6 family.
+         *	@return a new instance.
+         */
+		IMPORT_C static	CSdpOriginField* NewLC( const TDesC8& aUserName, 
+											    TInt64 aSessionId, 
+											    TInt64 aSessionVersion, 
+											    TInetAddr& aAddress );
+
+		/**
+         *	Constructs a new origin field.
+		 *	
+         *	@param aUserName A valid user name value.
+         *	@param aSessionId A valid session id value.
+         *	@param aSessionVersion A valid announcement version value.
+         *	@param aNetType A valid network type value (typically "IN").
+		 *  @param aAddressType A valid address type value 
+		 *         (typically "IP4" or "IP6").
+		 *	@param aAddress A unicast IP Address, Fully 
+         *         Qualified Domain Name (FQDN), or an other type of 
+         *         address allowed for the address type.
+         *	@return a new instance.
+         */
+		IMPORT_C static	CSdpOriginField* NewL( const TDesC8& aUserName, 
+											TInt64 aSessionId, 
+											TInt64 aSessionVersion, 
+											RStringF aNetType, 
+											RStringF aAddressType, 
+											const TDesC8& aAddress );
+
+		/**
+         *	Constructs a new origin field and adds the pointer to the cleanup 
+         *  stack.
+		 *	
+         *	@param aUserName A valid user name value.
+         *	@param aSessionId A valid session id value.
+         *	@param aSessionVersion A valid announcement version value.
+         *	@param aNetType A valid network type value (typically "IN").
+		 *  @param aAddressType A valid address type value 
+		 *         (typically "IP4" or "IP6").
+		 *	@param aAddress A unicast IP Address, Fully Qualified Domain
+		 *         Name (FQDN), or an other type of address allowed
+		 *         for the address type.
+         *	@return a new instance.
+         */
+		IMPORT_C static	CSdpOriginField* NewLC( const TDesC8& aUserName, 
+											TInt64 aSessionId, 
+											TInt64 aSessionVersion, 
+											RStringF aNetType, 
+											RStringF aAddressType, 
+											const TDesC8& aAddress );
+
+		/**
+		 *	Deletes the resources held by the instance.
+		 */
+		IMPORT_C ~CSdpOriginField();
+
+    public: // New functions
+
+		/**
+		 *	Outputs the field formatted according to SDP syntax and including
+		 *  the terminating CRLF.
+		 * 
+		 *	@param aStream Stream used for output. On return 
+         *         the stream includes correctly formatted origin field.
+		 */
+		IMPORT_C void EncodeL( RWriteStream& aStream ) const;
+
+		/**
+    	 *	Creates a new instance that is equal to the target.
+		 *
+		 *	@return a new instance.
+		 */
+		IMPORT_C CSdpOriginField* CloneL() const;
+
+		/**	
+		 *	Compares this instance to another for equality.
+		 *
+		 *	@param aObj The instance to compare to.
+		 *	@return ETrue if equal, EFalse if not.
+		 */
+		IMPORT_C TBool operator == ( const CSdpOriginField& aObj ) const;
+
+		/**
+		 *	Gets the user name.
+		 *
+		 *	@return User name.
+		 */
+		IMPORT_C const TDesC8& UserName() const;
+
+		/**
+		 *	Sets the user name.
+		 *
+		 *	@param aValue A valid user name value.
+		 *	@leave KErrSdpCodecOriginField if aValue is not a valid user name.
+		 */
+		IMPORT_C void SetUserNameL( const TDesC8& aValue );
+
+		/**
+		 *	Gets the session id of the origin field.
+		 *  
+		 *	@return Session id.
+		 */
+		IMPORT_C TInt64 SessionId() const;
+
+		/**
+		 *	Sets the session id.
+		 *
+		 *	@param aValue A valid session id value.
+		 */
+		IMPORT_C void SetSessionId( TInt64 aValue );
+		
+		/**
+		 *	Gets the announcement version.
+		 *	
+		 *	@return Version.
+		 */
+		IMPORT_C TInt64 Version() const;
+
+		/**
+		 *	Sets the announcement version..
+		 *
+		 *	@param aValue A valid version value.
+		 */
+		IMPORT_C void SetVersion( TInt64 aValue );
+
+		/**
+		 *	Gets the network type.
+		 *
+		 *	@return The network type from pre-defined SDP string 
+         *          table or given by the user.
+		 */
+		IMPORT_C RStringF NetType() const;
+
+		/**
+		 *	Gets the address type.
+		 *
+		 *	@return The address type from pre-defined SDP string 
+         *          table or given by the user.
+		 */
+		IMPORT_C RStringF AddressType() const;
+		
+		/**
+		 *	Gets the address.
+		 *
+		 *	@return Address as an IP address or null if it is
+		 *          not an IP address. This may be e.g. when the address has 
+		 *          been specified as a FQDN. In this case, the address can be 
+		 *          accessed using the other getters.
+		 */
+		IMPORT_C const TInetAddr* InetAddress() const;
+
+		/**
+		 *	Gets the address.
+		 *
+		 *  @return Address as a string.
+		 */
+		IMPORT_C const TDesC8& Address() const;
+
+		/**
+		 *	Sets the address, network and address type.
+		 *	Also sets the network type to "IN" and address type to "IP4" or 
+		 *  "IP6" depending on the address family of aValue.
+		 *
+         *	@param aValue A unicast IP address from either KAfInet 
+         *         or KAfInet6 family.
+		 */
+		IMPORT_C void SetInetAddress( const TInetAddr& aValue );
+
+		/**
+		 *	Sets the address, network and address type.
+		 *
+		 *	@param aAddress A unicast IP Address, Fully Qualified Domain
+		 *         Name (FQDN), or an other type of address allowed for the
+		 *         address type.
+         *	@param aNetType A valid network type value (typically "IN").
+		 *  @param aAddressType A valid address type value 
+		 *         (typically "IP4" or "IP6").
+		 *	@leave KErrSdpCodecOriginField if aNetType or aAddressType are not
+		 *		   valid tokens, or aAddress is invalid, or aAddress type 
+		 *		   is not aligned with the address format
+		 */
+		IMPORT_C void SetAddressL( const TDesC8& aAddress, 
+								   RStringF aNetType, 
+								   RStringF aAddressType );
+        
+    public:     // Internal to codec
+
+        /**
+         *  Externalizes the object to stream
+         *
+         *  @param aStream Stream where the object's state will be stored
+         */
+		void ExternalizeL( RWriteStream& aStream ) const;
+
+        /**
+         *  Creates object from the stream data
+         *
+         *  @param aStream Stream where the object's state will be read	
+         *  @return Initialized object
+         */
+		static CSdpOriginField* InternalizeL( RReadStream& aStream );
+
+	private:    // Constructors
+
+        /**
+         *  Constructor
+         */
+		CSdpOriginField();
+
+        /**
+         *  Second phase constructor. Parses the text string and initializes
+         *  the member variables
+         *         
+         *  @param aText Line of text that will be parsed (ends on the newline)
+         */
+		void ConstructL( const TDesC8& aText );
+        
+        /**
+         *  Second phase constructor. Constructs the object.
+         *
+         *  @param aUserName  A valid user name value.
+         *  @param aSessionId A valid session id value.
+         *  @param aSessionVersion A valid announcement version value.
+         *  @param aAddress A unicast IP address from either
+		 *                  KAfInet or KAfInet6 family.        
+         */
+		void ConstructL( const TDesC8& aUserName, 
+						 TInt64 aSessionId, 
+                         TInt64 aSessionVersion, 
+						 TInetAddr& aUnicastAddress );
+         
+        /**                        
+         *	Second phase constructor. Constructs the object.
+		 *	
+         *	@param aUserName  A valid user name value.
+         *	@param aSessionId A valid session id value.
+         *	@param aSessionVersion A valid announcement version value.
+         *	@param aNetType A valid network type value (typically "IN").
+		 *  @param aAddressType A valid address type value 
+		 *         (typically "IP4" or "IP6").
+		 *	@param aAddress A unicast IP Address, Fully Qualified Domain
+		 *         Name (FQDN), or an other type of address allowed
+		 *         for the address type.
+         */
+        void ConstructL( const TDesC8& aUserName, 
+	                     TInt64 aSessionId, 
+	                     TInt64 aSessionVersion, 
+	                     RStringF aNetType, 
+					     RStringF aAddressType, 
+	                     const TDesC8& aAddress );
+
+        // These are unnecessary? Derived from CBase, prevents the use
+		CSdpOriginField( const CSdpOriginField& ); // Hidden.
+		CSdpOriginField& operator = ( const CSdpOriginField& ); // Hidden
+
+    private:        // New methods
+
+        /**
+         *  Checks if the given address is valid
+         *
+         *  @param aAddress Address to be checked
+         *  @return Valid address or not
+         */
+        TBool IsValidAddress( const TDesC8& aAddress ) const;   
+        
+        /**
+         *  Checks if the given address is valid
+         *
+         *  @param aAddr Address to be checked
+         *  @return Valid address or not
+         */             
+        TBool IsValidAddress( const TInetAddr& addr ) const;
+
+        /**
+         *  Checks that address type matches with address format
+         *
+         *  @param aAddress Address
+         *  @param aType Address type
+         *  @param aPool String pool
+         *  @return Type Matches with format or not
+         */
+        TBool TypeMatchesWithFormat( 
+            const TDesC8& aAddress, const TDesC8& aType, 
+            RStringPool aPool ) const;
+
+        /**
+         *  Checks if the given username is valid
+         *
+         *  @param aUserName Username
+         *  @return Validity of the given username
+         */
+        TBool IsValidUserName( const TDesC8& aUserName ) const;
+
+        /**
+         *  Parses username, initializes iUserName
+         *
+         *  @param aArray Array containing all the elements
+         */
+        void ParseUserNameL( RArray<TPtrC8>& aArray );
+
+        /**
+         *  Parses session ID and version, initializes iSessionId
+         *  and iSessionVersion
+         *
+         *  @param aArray Array containing all the elements
+         */
+        void ParseSessionIDAndVersionL( RArray<TPtrC8>& aArray );
+
+        /**
+         *  Parses network type and address type, initializes
+         *  iNetType and iAddressType
+         *
+         *  @param aArray Array containing all the elements
+         */
+       void ParseNetTypeAndAddressTypeL( RArray<TPtrC8>& aArray );
+
+        /**
+         *  Parses address, checks address against address type,
+         *  initializes iAddress
+         *
+         *  @param aArray Array containing all the elements
+         */
+        void ParseAddressL( RArray<TPtrC8>& aArray );
+
+		inline CSdpOriginFieldPtrs& OriginFieldPtrs();
+
+		inline const CSdpOriginFieldPtrs& OriginFieldPtrs() const;
+
+		TInt64 Get63Msbs( const TDesC8& aDecimalValue ) const;
+		void SetIPAddressType( const TInetAddr& aAddr );
+
+    private:    // Data
+
+        RStringPool iPool;
+
+        // <username>
+		HBufC8* iUserName;
+        // <session id>
+		TInt64 iSessionId;
+        // <version>
+		TInt64 iSessionVersion;
+        // <net type>
+        RStringF iNetType;
+        // <address type>        
+        RStringF iAddressType;
+        // <address>
+        // Either one is used (this or iAddressType/iAddress combo)
+        // Can be defined as mutable because this variable does not affect
+        // to the state of the object, but it is needed as const pointer
+        // is returned on InetAddr() method
+		mutable TInetAddr iUnicastAddress;        
+        TBuf8<KMaxAddressLength> iAddress; 
+        // For configuring the address into TInetAddr
+        TBuf<KMaxAddressLength> iAddress16;          
+
+		void __DbgTestInvariant() const;
+
+	};
+
+#endif // CSDPORIGINFIELD_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdprepeatfield.h	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,212 @@
+/*
+* Copyright (c) 2010 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:
+* Name          : SdpRepeatField.h
+* Part of       : Local SDP Codec
+* Interface     : SDK API, Local SDP Codec API
+* Version       : 1.0
+*
+*/
+
+
+
+#ifndef CSDPREPEATFIELD_H
+#define CSDPREPEATFIELD_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <stringpool.h>
+#include "_sdpdefs.h"
+#include "sdptypedtime.h"
+
+// FORWARD DECLARATIONS
+class RReadStream;
+class RWriteStream;
+
+// CLASS DECLARATION
+/**
+ *  @publishedAll
+ *  @released
+ *
+ *	This class encapsulates the repeat times field of the 
+ *  Session Description Protocol.
+ *
+ *	The normative reference for correct formatting and values is
+ *	draft-ietf-mmusic-sdp-new-14 unless specified otherwise in
+ *  member documentation. The implementation supports this normative
+ *  reference, but does not enforce it fully. 
+ *
+ *  @lib localsdpcodec.lib
+ */
+class CSdpRepeatField : public CBase
+	{
+    public: // Constructors and destructor
+        /**
+         *	Constructs a new repeat times field.
+		 *	
+         *	@param aText A string containing a correctly 
+         *         formatted field value terminated by a CRLF.
+         *	@return a new instance.
+         */
+		IMPORT_C static	CSdpRepeatField* DecodeL(const TDesC8& aText);
+
+        /**
+         *	Constructs a new repeat times field and adds the pointer to the 
+         *  cleanup stack.
+		 *	
+         *	@param aText A string containing a correctly 
+         *         formatted field value terminated by a CRLF.
+         *	@return a new instance.
+         */
+		IMPORT_C static	CSdpRepeatField* DecodeLC(const TDesC8& aText);
+
+        /**
+         *	Constructs a new repeat times field.
+		 *	
+         *	@param aRepeatInterval Repeat interval value 
+         *         greater than zero.
+         *	@param aActiveDuration Active duration.
+         *	@param aOffsets At least one time offset.
+         *	@return a new instance.
+         */
+		IMPORT_C static	CSdpRepeatField* NewL(
+                                        const TSdpTypedTime  aRepeatInterval,
+										const TSdpTypedTime  aActiveDuration,
+										const RArray<TSdpTypedTime>& aOffsets);
+
+        /**
+         *	Constructs a new repeat times field and adds the pointer to the 
+         *  cleanup stack.
+		 *	
+         *	@param aRepeatInterval Repeat interval value 
+         *         greater than zero.
+         *	@param aActiveDuration Active duration.
+         *	@param aOffsets At least one time offset.
+         *	@return a new instance.
+         */
+		IMPORT_C static	CSdpRepeatField* NewLC(
+                                        const TSdpTypedTime  aRepeatInterval,
+										const TSdpTypedTime aActiveDuration,
+										const RArray<TSdpTypedTime>& aOffsets);
+
+		/**
+		 *	Deletes the resources held by the instance.
+		 */
+		IMPORT_C ~CSdpRepeatField();
+
+    public: // New functions
+		/**
+		 *	Outputs the field formatted according to SDP syntax and including
+		 *  the terminating CRLF.
+		 * 
+		 *	@param aStream Stream used for output. On return 
+         *         the stream includes correctly formatted repeat field.
+		 */
+		IMPORT_C void EncodeL(RWriteStream& aStream) const;
+
+		/**
+		 *	Creates a new instance that is equal to the target.
+		 *
+		 *	@return a new instance.
+		 */
+		IMPORT_C CSdpRepeatField * CloneL() const;
+
+		/**	
+		 *	Compares this instance to another for equality.
+		 *
+		 *	@param aObj The instance to compare to.
+		 *	@return ETrue if equal, EFalse if not.
+		 */
+		IMPORT_C TBool operator == (const CSdpRepeatField & aObj) const;
+
+		/**
+		 *	Gets the repeat interval.
+		 *
+		 *	@return The repeat interval.
+		 */
+		IMPORT_C const TSdpTypedTime RepeatInterval() const;
+
+		/**
+		 *	Sets the repeat interval.
+		 *
+         *	@param aValue Repeat interval value greater than zero.
+         *	@leave KErrSdpCodecRepeatField if aValue is not positive integer 
+         *         value.
+		 */
+		IMPORT_C void SetRepeatIntervalL(const TSdpTypedTime  aValue);
+
+		/**
+		 *	Gets the active duration..
+		 *
+		 *	@return The active duration.
+		 */
+		IMPORT_C const TSdpTypedTime ActiveDuration() const;
+
+		/**
+		 *	Sets the active duration.
+		 *
+         *	@param Active duration.
+		 */
+		IMPORT_C void SetActiveDuration(const TSdpTypedTime aValue);
+
+		/**
+		 *	Gets the array of time offsets.
+		 *  This array is used directly for element insertion and removal.
+		 *
+		 *	@return The offsets.
+		 */
+		IMPORT_C const RArray<TSdpTypedTime>& TimeOffsets() const;
+
+		/**
+		 *	Sets the time offsets.
+		 *
+         *	@param aOffsets At least one time offset.
+		 */
+		IMPORT_C void SetTimeOffsetsL(const RArray<TSdpTypedTime>& aValue);
+
+    public:
+		/**
+         *  Externalizes the object to stream
+         *
+         *  @param aStream Stream where the object's state will be stored
+         */
+		void ExternalizeL(RWriteStream& aStream) const;
+		
+		/**
+         *  Creates object from the stream data
+         *
+         *  @param aStream Stream where the object's state will be read	
+         *  @return Initialized object
+         */
+		static CSdpRepeatField* InternalizeL(RReadStream& aStream);
+
+	private:
+		CSdpRepeatField(const TSdpTypedTime aRepeatInterval,
+						const TSdpTypedTime aActiveDuration);
+		CSdpRepeatField();
+		void ConstructL(const TDesC8& aText);
+		void ConstructL(const RArray<TSdpTypedTime>& aOffsets);
+        
+
+    private: // Data
+        RStringPool iPool;
+		TSdpTypedTime iRepeatInterval;
+		TSdpTypedTime iActiveDuration;
+		RArray<TSdpTypedTime> iTimeOffsets;
+
+		void __DbgTestInvariant() const;
+	
+	};
+
+#endif // CSDPREPEATFIELD_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdprtpmapvalue.h	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,117 @@
+/*
+* Copyright (c) 2010 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:
+* Name          : SdpRtpmapValue.h
+* Part of       : Local SDP Codec
+* Interface     : SDK API, Local SDP Codec API
+* Version       : 1.0
+*
+*/
+
+
+
+#ifndef TSDPRTPMAPVALUE_H
+#define TSDPRTPMAPVALUE_H
+
+// INCLUDES
+#include <e32std.h>
+#include <stringpool.h>
+#include "_sdpdefs.h"
+
+// FORWARD DECLARATIONS
+class RWriteStream;
+
+// CLASS DECLARATION
+/**
+ *  @publishedAll
+ *  @released
+ *
+ *	Utility class for manipulating the value of an rtpmap-attribute.
+ *
+ *	The normative reference for correct formatting and values is
+ *	draft-ietf-mmusic-sdp-new-14 unless specified otherwise in
+ *  member documentation. The implementation supports this normative
+ *  reference, but does not enforce it fully. 
+ *
+ *  @lib localsdpcodec.lib
+ */
+class TSdpRtpmapValue
+	{
+    public: // Constructors and destructor
+
+		/**
+		 *	Initializes the instance to refer to the given rtpmap components.
+		 *	The parameters must stay in scope as long as this instance exists.
+		 *	Otherwise, the member variables of this class will point to
+		 *	a released memory.
+		 *  
+		 *	@param aEncodingName Valid rtpmap encoding name value.	
+		 *	@param aClockrate Valid rtpmap clockrate value.	
+		 *	@param aEncodingParameters Valid rtpmap encoding 
+         *         parameter list.	
+		 */
+		IMPORT_C TSdpRtpmapValue( 
+						const TPtrC8& aEncodingName,
+						const TPtrC8& aClockrate,
+						const TPtrC8& aEncodingParameters );
+
+    public: // New functions
+
+		/**
+		 *	Tries to parse a string as an rtpmap attribute value up to the end 
+		 *	of the string or CRLF, whichever comes first, and set pointers to 
+		 *	the components found. The parameter must stay in scope as long as 
+         *  this instance exists. Otherwise, the member variables of this class 
+         *  will point to a released memory.
+		 *         
+		 *	@param aText String containing the value of an rtpmap attribute.
+         *  @return a new instance 
+		 *	@leave  KErrArgument if parsing fails.
+		 */
+		IMPORT_C static TSdpRtpmapValue DecodeL( const TDesC8& aText );
+
+		/**
+		 *	Outputs the attribute value formatted according to SDP syntax.
+		 *  The field terminating CRLF is not included in the output.
+         *  When constructing CSdpFmtAttributeField, return value of this 
+         *  function can be used as aValue in CSdpFmtAttributeField::NewL
+         *  (RStringF aAttribute, const TDesC8& aFormat, const TDesC8& aValue)
+         *  function.
+		 * 
+         *  @return Encoded value. Ovnership of buffer is changed to caller.
+		 */
+		IMPORT_C HBufC8* EncodeL() const;        
+
+    public: // Data
+
+		/** 
+		* Encoding name part of an rtpmap value 
+		* @internalComponent
+		*/
+		TPtrC8 iEncName;
+
+		/** 
+		* Clockrate part of an rtpmap value. 
+		* @internalComponent
+		*/
+		TPtrC8 iClockrate;
+
+		/** 
+		* Encoding parameters part of an rtpmap value. 
+		* @internalComponent
+		*/
+		TPtrC8 iEncParams;
+	};
+
+#endif // TSDPRTPMAPVALUE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdptimefield.h	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,231 @@
+/*
+* Copyright (c) 2010 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:
+* Name          : SdpTimeField.h
+* Part of       : Local SDP Codec
+* Interface     : SDK API, Local SDP Codec API
+* Version       : 1.0
+*
+*/
+
+
+
+#ifndef CSDPTIMESFIELD_H
+#define CSDPTIMESFIELD_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <stringpool.h>
+#include "_sdpdefs.h"
+
+// FORWARD DECLARATIONS
+class RReadStream;
+class RWriteStream;
+class CSdpRepeatField;
+
+// CLASS DECLARATION
+/**
+ *  @publishedAll
+ *  @released
+ *
+ *	This class encapsulates the time field and the related zero or 
+ *  more repeat times fields and an optional time zone adjustment
+ *  field of the Session Description Protocol.
+ *
+ *	The normative reference for correct formatting and values is
+ *	draft-ietf-mmusic-sdp-new-14 unless specified otherwise in
+ *  member documentation. The implementation supports this normative
+ *  reference, but does not enforce it fully. 
+ *
+ *  @lib localsdpcodec.lib
+ */
+class CSdpTimeField : public CBase
+	{
+    public: // Constructors and destructor
+        /**
+         *	Constructs a time field.
+		 * 
+         *	@param aText A correctly formatted time field value
+         *         terminated by a CRLF followed by zero or more repeat 
+         *         times and zero or one time zone adjustment fields 
+         *         separeted by a CRLF.
+		 *	@param aRecurse Flag to specify whether to decode subfields 
+		 *         also (ETrue) or only the time field (EFalse).
+         *	@return a new instance.
+         */
+		IMPORT_C static CSdpTimeField * DecodeL(const TDesC8& aText, 
+                                                TBool aRecurse = ETrue);
+
+        /**
+         *	Constructs a time field and adds the pointer to the cleanup stack.
+		 *	
+         *	@param aText A correctly formatted time field value 
+         *         terminated by a CRLF followed by zero or more repeat 
+         *         times and zero or one time zone adjustment fields 
+         *         separeted by a CRLF.
+		 *	@param aRecurse Flag to specify whether to decode subfields 
+		 *         also (ETrue) or only the time field (EFalse).
+         *	@return a new instance.
+         */
+		IMPORT_C static CSdpTimeField * DecodeLC(const TDesC8& aText,
+                                                TBool aRecurse = ETrue);
+
+        /**
+         *	Constructs a time field.
+		 *	
+         *	@param aStartTime Session start time.
+         *	@param aStopTime Session end time that must be 
+         *         greater than or equal to the start time.
+         *	@return a new instance.
+         */
+		IMPORT_C static CSdpTimeField * NewL(const TDesC8& aStartTime,
+									        const TDesC8& aStopTime);
+
+        /**
+         *	Constructs a time field and adds the pointer to the cleanup stack.
+		 *	
+         *	@param aStartTime Session start time.
+         *	@param aStopTime Session end time that must be 
+         *         greater than or equal to the start time.
+         *	@return a new instance.
+         */
+		IMPORT_C static CSdpTimeField * NewLC(const TDesC8& aStartTime,
+									        const TDesC8& aStopTime);
+
+		/**
+		 *	Deletes the resources held by the instance.
+		 */
+		IMPORT_C ~CSdpTimeField();
+
+    public: // New functions
+		/**
+		 *	Outputs the field formatted according to SDP syntax and including
+		 *  the terminating CRLF. Optionally output also the related repeat
+		 *  times.
+		 * 
+		 *	@param aStream Stream used for output. On return 
+         *         the stream includes correctly formatted time field with 
+         *         repeat fields if aRecurse is ETrue.
+		 *	@param aRecurse Flag to specify whether to output subfields
+		 *         also (ETrue) or only the time field (EFalse).
+		 */
+		IMPORT_C void EncodeL(RWriteStream& aStream, TBool aRecurse = ETrue) const;
+
+		/**
+		 *	Creates a new instance that is equal to the target.
+		 *  Optionally also related repeat times are cloned.
+		 *
+		 *	@param aRecurse Flag to specify whether to clone subfields 
+		 *         also (ETrue) or only the time field (EFalse).
+		 *	@return a new instance.
+		 */
+		IMPORT_C CSdpTimeField * CloneL(TBool aRecurse = ETrue) const;
+
+		/**	
+		 *	Compares this instance to another for equality. Subfields are
+		 *	included in comparison if present.
+		 *
+		 *	@param aObj The instance to compare to.
+		 *	@return ETrue if equal, EFalse if not.
+		 */
+		IMPORT_C TBool operator == (const CSdpTimeField & aObj) const;
+
+		/**
+		 *	Checks the consistency of the time description and it's subfields.
+		 *.
+		 *	@return	ETrue if time description is valid and EFalse if not.
+		 */
+		IMPORT_C TBool IsValid() const;
+
+		/**
+		 *	Gets the session start time.
+		 *
+		 *	@return The session start time.
+		 */
+		IMPORT_C const TDesC8& StartTime() const;
+
+		/**
+		 *	Gets the session stop time.
+		 *
+		 *	@return The session stop time.
+		 */
+		IMPORT_C const TDesC8& StopTime() const;
+
+		/**
+		 *	Sets the session start and stop times.
+		 *
+         *	@param aStartTime Session start time..
+         *	@param aStopTime Session end time that must be 
+         *         greater than or equal to the start time.
+		 *	@leave KErrSdpCodecTimeField if start time and stop time are not 
+         *         correct as defined draft-ietf-mmusic-sdp-new-14.
+		 */
+		IMPORT_C void SetTimesL(const TDesC8& aStartTime, const TDesC8& aStopTime);
+
+		/**
+		 *	Gets the set of repeat times fields related to this time field.
+		 *  This array is used directly for element insertion and removal.
+		 *
+		 *	The objects referenced from the array are owned by the media field
+		 *  instance and must not be deleted. An object can be removed from the 
+		 *  media description by setting the corresponding element to zero. By
+		 *  doing so, the calling party receives ownership of the removed object.
+		 *
+		 *	@return The set of repeat fields.
+		 */
+		IMPORT_C RPointerArray<CSdpRepeatField>& RepeatFields();
+	
+    public:
+		/**
+         *  Externalizes the object to stream
+         *
+         *  @param aStream Stream where the object's state will be stored
+         */
+		void ExternalizeL(RWriteStream& aStream) const;
+		
+		/**
+         *  Creates object from the stream data
+         *
+         *  @param aStream Stream where the object's state will be read
+         *  @return Initialized object
+         */
+		static CSdpTimeField* InternalizeL(RReadStream& aStream);
+        
+        /**
+         *  Creates object from the stream data.
+         *	Does the "2nd phase construction" of internalization.
+         *
+         *  @param aStream Stream where the object's state will be read
+         */
+        void DoInternalizeL(RReadStream& aStream);
+
+	private:
+   		CSdpTimeField();
+
+		void ConstructL(const TDesC8& aText, TBool aRecurse=ETrue);
+		void ConstructL(const TDesC8& aStartTime, const TDesC8& aStopTime);
+
+        TBool RepeatFieldsCompare(const CSdpTimeField& aObj) const;
+
+    private: // Data
+		HBufC8* iStartTime;
+		HBufC8* iStopTime;
+		RPointerArray<CSdpRepeatField> iRFields;
+        RStringPool iStringPool;
+
+		void __DbgTestInvariant() const;
+
+	};
+
+#endif // CSDPTIMESFIELD_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/api/sdptypedtime.h	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,143 @@
+/*
+* Copyright (c) 2010 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:
+* Name          : SdpTypedTime.h
+* Part of       : Local SDP Codec
+* Interface     : SDK API, Local SDP Codec API
+* Version       : 1.0
+*
+*/
+
+
+
+#ifndef TSDPTYPEDTIME_H
+#define TSDPTYPEDTIME_H
+
+//  INCLUDES
+#include <e32std.h>
+#include "_sdpdefs.h"
+
+// FORWARD DECLARATIONS
+class RReadStream;
+class RWriteStream;
+
+// CLASS DECLARATION
+/**
+ *  @publishedAll
+ *  @released
+ *
+ *	This class implements the typed time element of the Session
+ *	Description Protocol.
+ *
+ *	The normative reference for correct formatting and values is
+ *	draft-ietf-mmusic-sdp-new-14 unless specified otherwise in
+ *  member documentation. The implementation supports this normative
+ *  reference, but does not enforce it fully. 
+ *
+ *  @lib localsdpcodec.lib
+ */
+class TSdpTypedTime
+	{
+    public: // enums
+
+        /** Time units. */
+        enum TUnit
+            {
+            ETimeUnitDays,      /** d */
+            ETimeUnitHours,     /** h */
+		    ETimeUnitMinutes,   /** m */
+		    ETimeUnitSeconds,   /** s */
+		    ETimeUnitNone,
+            };
+
+    public: // Constructors and destructor
+		/**
+		 *	Constructs a typed time equal to zero and with no time unit set.
+		 */
+		IMPORT_C TSdpTypedTime();
+
+		/**
+		 *	Constructs a typed time equal to specified value and time unit.
+		 *
+		 *	@param aValue Time value.
+		 *	@param aUnit Time unit.
+		 */
+		IMPORT_C TSdpTypedTime(TInt64 aValue, TUnit aUnit);
+
+    public: // New functions
+		/**	
+		 *	Compares this instance to another for equality.
+		 *
+		 *	@param aObj Another instance to compare with.
+		 *	@return ETrue if equal, EFalse if not.
+		 */
+		IMPORT_C TBool operator == (const TSdpTypedTime& aObj) const;
+
+		/**
+		 *	Sets the typed time value.
+		 *
+		 *	@param aValue Time value.
+		 *	@param aUnit Time unit.
+		 */
+		IMPORT_C void SetValue(TInt64 aValue, TUnit aUnit);
+
+    public:
+		
+		/**
+         *  Externalizes the object to stream
+         *
+         *  @param aStream Stream where the object's state will be stored
+         */
+		void ExternalizeL(RWriteStream& aStream) const;
+		
+		/**
+         *  Creates object from the stream data
+         *
+         *  @param aStream Stream where the object's state will be read
+         *  @return Initialized object
+         */
+		static TSdpTypedTime InternalizeL(RReadStream& aStream);
+        
+        /**
+		 *	Output the field formatted according to SDP syntax and including
+		 *  the terminating CRLF.
+		 * 
+		 *	@param aStream	Stream used for output.
+		 */
+        void EncodeL(RWriteStream& aStream) const;
+        
+        /**
+         *	Construct a new origin field.
+		 *		 
+         *	@param aText A string containing a correctly formatted field value
+		 *               terminated by a CRLF.
+         *	@return The new instance.
+         */
+        static TSdpTypedTime DecodeL(const TDesC8& aText);
+
+    public: // Data
+    
+        /**
+        * @internalComponent
+        */
+		TInt64 iValue;
+		
+		/**
+		* @internalComponent
+		*/
+		TInt iUnit;
+
+	};
+
+#endif // TSDPTYPEDTIME_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/bwins/localsdpcodecu.def	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,203 @@
+EXPORTS
+	??0TSdpRtpmapValue@@QAE@ABVTPtrC8@@00@Z @ 1 NONAME ; TSdpRtpmapValue::TSdpRtpmapValue(class TPtrC8 const &, class TPtrC8 const &, class TPtrC8 const &)
+	??0TSdpTypedTime@@QAE@XZ @ 2 NONAME ; TSdpTypedTime::TSdpTypedTime(void)
+	??0TSdpTypedTime@@QAE@_JW4TUnit@0@@Z @ 3 NONAME ; TSdpTypedTime::TSdpTypedTime(long long, enum TSdpTypedTime::TUnit)
+	??1CSdpAttributeField@@UAE@XZ @ 4 NONAME ; CSdpAttributeField::~CSdpAttributeField(void)
+	??1CSdpBandwidthField@@UAE@XZ @ 5 NONAME ; CSdpBandwidthField::~CSdpBandwidthField(void)
+	??1CSdpConnectionField@@UAE@XZ @ 6 NONAME ; CSdpConnectionField::~CSdpConnectionField(void)
+	??1CSdpDocument@@UAE@XZ @ 7 NONAME ; CSdpDocument::~CSdpDocument(void)
+	??1CSdpFmtAttributeField@@UAE@XZ @ 8 NONAME ; CSdpFmtAttributeField::~CSdpFmtAttributeField(void)
+	??1CSdpKeyField@@UAE@XZ @ 9 NONAME ; CSdpKeyField::~CSdpKeyField(void)
+	??1CSdpMediaField@@UAE@XZ @ 10 NONAME ; CSdpMediaField::~CSdpMediaField(void)
+	??1CSdpOriginField@@UAE@XZ @ 11 NONAME ; CSdpOriginField::~CSdpOriginField(void)
+	??1CSdpRepeatField@@UAE@XZ @ 12 NONAME ; CSdpRepeatField::~CSdpRepeatField(void)
+	??1CSdpTimeField@@UAE@XZ @ 13 NONAME ; CSdpTimeField::~CSdpTimeField(void)
+	??8CSdpAttributeField@@QBEHABV0@@Z @ 14 NONAME ; int CSdpAttributeField::operator==(class CSdpAttributeField const &) const
+	??8CSdpBandwidthField@@QBEHABV0@@Z @ 15 NONAME ; int CSdpBandwidthField::operator==(class CSdpBandwidthField const &) const
+	??8CSdpConnectionField@@QBEHABV0@@Z @ 16 NONAME ; int CSdpConnectionField::operator==(class CSdpConnectionField const &) const
+	??8CSdpFmtAttributeField@@QBEHABV0@@Z @ 17 NONAME ; int CSdpFmtAttributeField::operator==(class CSdpFmtAttributeField const &) const
+	??8CSdpKeyField@@QBEHABV0@@Z @ 18 NONAME ; int CSdpKeyField::operator==(class CSdpKeyField const &) const
+	??8CSdpMediaField@@QBEHABV0@@Z @ 19 NONAME ; int CSdpMediaField::operator==(class CSdpMediaField const &) const
+	??8CSdpOriginField@@QBEHABV0@@Z @ 20 NONAME ; int CSdpOriginField::operator==(class CSdpOriginField const &) const
+	??8CSdpRepeatField@@QBEHABV0@@Z @ 21 NONAME ; int CSdpRepeatField::operator==(class CSdpRepeatField const &) const
+	??8CSdpTimeField@@QBEHABV0@@Z @ 22 NONAME ; int CSdpTimeField::operator==(class CSdpTimeField const &) const
+	??8TSdpTypedTime@@QBEHABV0@@Z @ 23 NONAME ; int TSdpTypedTime::operator==(class TSdpTypedTime const &) const
+	?ActiveDuration@CSdpRepeatField@@QBE?BVTSdpTypedTime@@XZ @ 24 NONAME ; class TSdpTypedTime const CSdpRepeatField::ActiveDuration(void) const
+	?Address@CSdpConnectionField@@QBEABVTDesC8@@XZ @ 25 NONAME ; class TDesC8 const & CSdpConnectionField::Address(void) const
+	?Address@CSdpOriginField@@QBEABVTDesC8@@XZ @ 26 NONAME ; class TDesC8 const & CSdpOriginField::Address(void) const
+	?AddressType@CSdpConnectionField@@QBE?AVRStringF@@XZ @ 27 NONAME ; class RStringF CSdpConnectionField::AddressType(void) const
+	?AddressType@CSdpOriginField@@QBE?AVRStringF@@XZ @ 28 NONAME ; class RStringF CSdpOriginField::AddressType(void) const
+	?Attribute@CSdpAttributeField@@QBE?AVRStringF@@XZ @ 29 NONAME ; class RStringF CSdpAttributeField::Attribute(void) const
+	?Attribute@CSdpFmtAttributeField@@QBE?AVRStringF@@XZ @ 30 NONAME ; class RStringF CSdpFmtAttributeField::Attribute(void) const
+	?AttributeFields@CSdpDocument@@QAEAAV?$RPointerArray@VCSdpAttributeField@@@@XZ @ 31 NONAME ; class RPointerArray<class CSdpAttributeField> & CSdpDocument::AttributeFields(void)
+	?AttributeFields@CSdpMediaField@@QAEAAV?$RPointerArray@VCSdpAttributeField@@@@XZ @ 32 NONAME ; class RPointerArray<class CSdpAttributeField> & CSdpMediaField::AttributeFields(void)
+	?BandwidthFields@CSdpDocument@@QAEAAV?$RPointerArray@VCSdpBandwidthField@@@@XZ @ 33 NONAME ; class RPointerArray<class CSdpBandwidthField> & CSdpDocument::BandwidthFields(void)
+	?BandwidthFields@CSdpMediaField@@QAEAAV?$RPointerArray@VCSdpBandwidthField@@@@XZ @ 34 NONAME ; class RPointerArray<class CSdpBandwidthField> & CSdpMediaField::BandwidthFields(void)
+	?CloneL@CSdpAttributeField@@QBEPAV1@XZ @ 35 NONAME ; class CSdpAttributeField * CSdpAttributeField::CloneL(void) const
+	?CloneL@CSdpBandwidthField@@QBEPAV1@XZ @ 36 NONAME ; class CSdpBandwidthField * CSdpBandwidthField::CloneL(void) const
+	?CloneL@CSdpConnectionField@@QBEPAV1@XZ @ 37 NONAME ; class CSdpConnectionField * CSdpConnectionField::CloneL(void) const
+	?CloneL@CSdpDocument@@QBEPAV1@XZ @ 38 NONAME ; class CSdpDocument * CSdpDocument::CloneL(void) const
+	?CloneL@CSdpFmtAttributeField@@QBEPAV1@XZ @ 39 NONAME ; class CSdpFmtAttributeField * CSdpFmtAttributeField::CloneL(void) const
+	?CloneL@CSdpKeyField@@QBEPAV1@XZ @ 40 NONAME ; class CSdpKeyField * CSdpKeyField::CloneL(void) const
+	?CloneL@CSdpMediaField@@QBEPAV1@H@Z @ 41 NONAME ; class CSdpMediaField * CSdpMediaField::CloneL(int) const
+	?CloneL@CSdpOriginField@@QBEPAV1@XZ @ 42 NONAME ; class CSdpOriginField * CSdpOriginField::CloneL(void) const
+	?CloneL@CSdpRepeatField@@QBEPAV1@XZ @ 43 NONAME ; class CSdpRepeatField * CSdpRepeatField::CloneL(void) const
+	?CloneL@CSdpTimeField@@QBEPAV1@H@Z @ 44 NONAME ; class CSdpTimeField * CSdpTimeField::CloneL(int) const
+	?Close@SdpCodecStringPool@@SAXXZ @ 45 NONAME ; void SdpCodecStringPool::Close(void)
+	?ConnectionField@CSdpDocument@@QAEPAVCSdpConnectionField@@XZ @ 46 NONAME ; class CSdpConnectionField * CSdpDocument::ConnectionField(void)
+	?ConnectionField@CSdpDocument@@QBEPBVCSdpConnectionField@@XZ @ 47 NONAME ; class CSdpConnectionField const * CSdpDocument::ConnectionField(void) const
+	?ConnectionFields@CSdpMediaField@@QAEAAV?$RPointerArray@VCSdpConnectionField@@@@XZ @ 48 NONAME ; class RPointerArray<class CSdpConnectionField> & CSdpMediaField::ConnectionFields(void)
+	?DecodeL@CSdpAttributeField@@SAPAV1@ABVTDesC8@@@Z @ 49 NONAME ; class CSdpAttributeField * CSdpAttributeField::DecodeL(class TDesC8 const &)
+	?DecodeL@CSdpBandwidthField@@SAPAV1@ABVTDesC8@@@Z @ 50 NONAME ; class CSdpBandwidthField * CSdpBandwidthField::DecodeL(class TDesC8 const &)
+	?DecodeL@CSdpConnectionField@@SAPAV1@ABVTDesC8@@@Z @ 51 NONAME ; class CSdpConnectionField * CSdpConnectionField::DecodeL(class TDesC8 const &)
+	?DecodeL@CSdpDocument@@SAPAV1@ABVTDesC8@@@Z @ 52 NONAME ; class CSdpDocument * CSdpDocument::DecodeL(class TDesC8 const &)
+	?DecodeL@CSdpFmtAttributeField@@SAPAV1@ABVTDesC8@@@Z @ 53 NONAME ; class CSdpFmtAttributeField * CSdpFmtAttributeField::DecodeL(class TDesC8 const &)
+	?DecodeL@CSdpKeyField@@SAPAV1@ABVTDesC8@@@Z @ 54 NONAME ; class CSdpKeyField * CSdpKeyField::DecodeL(class TDesC8 const &)
+	?DecodeL@CSdpMediaField@@SAPAV1@ABVTDesC8@@H@Z @ 55 NONAME ; class CSdpMediaField * CSdpMediaField::DecodeL(class TDesC8 const &, int)
+	?DecodeL@CSdpOriginField@@SAPAV1@ABVTDesC8@@@Z @ 56 NONAME ; class CSdpOriginField * CSdpOriginField::DecodeL(class TDesC8 const &)
+	?DecodeL@CSdpRepeatField@@SAPAV1@ABVTDesC8@@@Z @ 57 NONAME ; class CSdpRepeatField * CSdpRepeatField::DecodeL(class TDesC8 const &)
+	?DecodeL@CSdpTimeField@@SAPAV1@ABVTDesC8@@H@Z @ 58 NONAME ; class CSdpTimeField * CSdpTimeField::DecodeL(class TDesC8 const &, int)
+	?DecodeL@TSdpRtpmapValue@@SA?AV1@ABVTDesC8@@@Z @ 59 NONAME ; class TSdpRtpmapValue TSdpRtpmapValue::DecodeL(class TDesC8 const &)
+	?DecodeLC@CSdpAttributeField@@SAPAV1@ABVTDesC8@@@Z @ 60 NONAME ; class CSdpAttributeField * CSdpAttributeField::DecodeLC(class TDesC8 const &)
+	?DecodeLC@CSdpBandwidthField@@SAPAV1@ABVTDesC8@@@Z @ 61 NONAME ; class CSdpBandwidthField * CSdpBandwidthField::DecodeLC(class TDesC8 const &)
+	?DecodeLC@CSdpConnectionField@@SAPAV1@ABVTDesC8@@@Z @ 62 NONAME ; class CSdpConnectionField * CSdpConnectionField::DecodeLC(class TDesC8 const &)
+	?DecodeLC@CSdpDocument@@SAPAV1@ABVTDesC8@@@Z @ 63 NONAME ; class CSdpDocument * CSdpDocument::DecodeLC(class TDesC8 const &)
+	?DecodeLC@CSdpFmtAttributeField@@SAPAV1@ABVTDesC8@@@Z @ 64 NONAME ; class CSdpFmtAttributeField * CSdpFmtAttributeField::DecodeLC(class TDesC8 const &)
+	?DecodeLC@CSdpKeyField@@SAPAV1@ABVTDesC8@@@Z @ 65 NONAME ; class CSdpKeyField * CSdpKeyField::DecodeLC(class TDesC8 const &)
+	?DecodeLC@CSdpMediaField@@SAPAV1@ABVTDesC8@@H@Z @ 66 NONAME ; class CSdpMediaField * CSdpMediaField::DecodeLC(class TDesC8 const &, int)
+	?DecodeLC@CSdpOriginField@@SAPAV1@ABVTDesC8@@@Z @ 67 NONAME ; class CSdpOriginField * CSdpOriginField::DecodeLC(class TDesC8 const &)
+	?DecodeLC@CSdpRepeatField@@SAPAV1@ABVTDesC8@@@Z @ 68 NONAME ; class CSdpRepeatField * CSdpRepeatField::DecodeLC(class TDesC8 const &)
+	?DecodeLC@CSdpTimeField@@SAPAV1@ABVTDesC8@@H@Z @ 69 NONAME ; class CSdpTimeField * CSdpTimeField::DecodeLC(class TDesC8 const &, int)
+	?EmailFields@CSdpDocument@@QAEAAVCDesC8Array@@XZ @ 70 NONAME ; class CDesC8Array & CSdpDocument::EmailFields(void)
+	?EncodeL@CSdpAttributeField@@QBEXAAVRWriteStream@@@Z @ 71 NONAME ; void CSdpAttributeField::EncodeL(class RWriteStream &) const
+	?EncodeL@CSdpBandwidthField@@QBEXAAVRWriteStream@@@Z @ 72 NONAME ; void CSdpBandwidthField::EncodeL(class RWriteStream &) const
+	?EncodeL@CSdpConnectionField@@QBEXAAVRWriteStream@@@Z @ 73 NONAME ; void CSdpConnectionField::EncodeL(class RWriteStream &) const
+	?EncodeL@CSdpDocument@@QBEXAAVRWriteStream@@@Z @ 74 NONAME ; void CSdpDocument::EncodeL(class RWriteStream &) const
+	?EncodeL@CSdpFmtAttributeField@@QBEXAAVRWriteStream@@@Z @ 75 NONAME ; void CSdpFmtAttributeField::EncodeL(class RWriteStream &) const
+	?EncodeL@CSdpKeyField@@QBEXAAVRWriteStream@@@Z @ 76 NONAME ; void CSdpKeyField::EncodeL(class RWriteStream &) const
+	?EncodeL@CSdpMediaField@@QBEXAAVRWriteStream@@H@Z @ 77 NONAME ; void CSdpMediaField::EncodeL(class RWriteStream &, int) const
+	?EncodeL@CSdpOriginField@@QBEXAAVRWriteStream@@@Z @ 78 NONAME ; void CSdpOriginField::EncodeL(class RWriteStream &) const
+	?EncodeL@CSdpRepeatField@@QBEXAAVRWriteStream@@@Z @ 79 NONAME ; void CSdpRepeatField::EncodeL(class RWriteStream &) const
+	?EncodeL@CSdpTimeField@@QBEXAAVRWriteStream@@H@Z @ 80 NONAME ; void CSdpTimeField::EncodeL(class RWriteStream &, int) const
+	?EncodeL@TSdpRtpmapValue@@QBEPAVHBufC8@@XZ @ 81 NONAME ; class HBufC8 * TSdpRtpmapValue::EncodeL(void) const
+	?EncryptionKey@CSdpKeyField@@QBEABVTDesC8@@XZ @ 82 NONAME ; class TDesC8 const & CSdpKeyField::EncryptionKey(void) const
+	?ExternalizeL@CSdpDocument@@QBEXAAVRWriteStream@@@Z @ 83 NONAME ; void CSdpDocument::ExternalizeL(class RWriteStream &) const
+	?Format@CSdpFmtAttributeField@@QBEABVTDesC8@@XZ @ 84 NONAME ; class TDesC8 const & CSdpFmtAttributeField::Format(void) const
+	?FormatAttributeFields@CSdpMediaField@@QAEAAV?$RPointerArray@VCSdpFmtAttributeField@@@@XZ @ 85 NONAME ; class RPointerArray<class CSdpFmtAttributeField> & CSdpMediaField::FormatAttributeFields(void)
+	?FormatList@CSdpMediaField@@QBEABVTDesC8@@XZ @ 86 NONAME ; class TDesC8 const & CSdpMediaField::FormatList(void) const
+	?InetAddress@CSdpConnectionField@@QBEPBVTInetAddr@@XZ @ 87 NONAME ; class TInetAddr const * CSdpConnectionField::InetAddress(void) const
+	?InetAddress@CSdpOriginField@@QBEPBVTInetAddr@@XZ @ 88 NONAME ; class TInetAddr const * CSdpOriginField::InetAddress(void) const
+	?Info@CSdpDocument@@QBEABVTDesC8@@XZ @ 89 NONAME ; class TDesC8 const & CSdpDocument::Info(void) const
+	?Info@CSdpMediaField@@QBEABVTDesC8@@XZ @ 90 NONAME ; class TDesC8 const & CSdpMediaField::Info(void) const
+	?InternalizeL@CSdpDocument@@SAPAV1@AAVRReadStream@@@Z @ 91 NONAME ; class CSdpDocument * CSdpDocument::InternalizeL(class RReadStream &)
+	?IsValid@CSdpDocument@@QBEHXZ @ 92 NONAME ; int CSdpDocument::IsValid(void) const
+	?IsValid@CSdpMediaField@@QBEHXZ @ 93 NONAME ; int CSdpMediaField::IsValid(void) const
+	?IsValid@CSdpTimeField@@QBEHXZ @ 94 NONAME ; int CSdpTimeField::IsValid(void) const
+	?KeepFormatL@CSdpMediaField@@QAEXABVTDesC8@@@Z @ 95 NONAME ; void CSdpMediaField::KeepFormatL(class TDesC8 const &)
+	?Key@CSdpDocument@@QAEPAVCSdpKeyField@@XZ @ 96 NONAME ; class CSdpKeyField * CSdpDocument::Key(void)
+	?Key@CSdpDocument@@QBEPBVCSdpKeyField@@XZ @ 97 NONAME ; class CSdpKeyField const * CSdpDocument::Key(void) const
+	?Key@CSdpMediaField@@QAEPAVCSdpKeyField@@XZ @ 98 NONAME ; class CSdpKeyField * CSdpMediaField::Key(void)
+	?Key@CSdpMediaField@@QBEPBVCSdpKeyField@@XZ @ 99 NONAME ; class CSdpKeyField const * CSdpMediaField::Key(void) const
+	?Media@CSdpMediaField@@QBE?AVRStringF@@XZ @ 100 NONAME ; class RStringF CSdpMediaField::Media(void) const
+	?MediaFields@CSdpDocument@@QAEAAV?$RPointerArray@VCSdpMediaField@@@@XZ @ 101 NONAME ; class RPointerArray<class CSdpMediaField> & CSdpDocument::MediaFields(void)
+	?Method@CSdpKeyField@@QBE?AVRStringF@@XZ @ 102 NONAME ; class RStringF CSdpKeyField::Method(void) const
+	?Modifier@CSdpBandwidthField@@QBE?AVRStringF@@XZ @ 103 NONAME ; class RStringF CSdpBandwidthField::Modifier(void) const
+	?NetType@CSdpConnectionField@@QBE?AVRStringF@@XZ @ 104 NONAME ; class RStringF CSdpConnectionField::NetType(void) const
+	?NetType@CSdpOriginField@@QBE?AVRStringF@@XZ @ 105 NONAME ; class RStringF CSdpOriginField::NetType(void) const
+	?NewL@CSdpAttributeField@@SAPAV1@VRStringF@@ABVTDesC8@@@Z @ 106 NONAME ; class CSdpAttributeField * CSdpAttributeField::NewL(class RStringF, class TDesC8 const &)
+	?NewL@CSdpBandwidthField@@SAPAV1@VRStringF@@K@Z @ 107 NONAME ; class CSdpBandwidthField * CSdpBandwidthField::NewL(class RStringF, unsigned long)
+	?NewL@CSdpConnectionField@@SAPAV1@ABVTInetAddr@@HI@Z @ 108 NONAME ; class CSdpConnectionField * CSdpConnectionField::NewL(class TInetAddr const &, int, unsigned int)
+	?NewL@CSdpConnectionField@@SAPAV1@VRStringF@@0ABVTDesC8@@@Z @ 109 NONAME ; class CSdpConnectionField * CSdpConnectionField::NewL(class RStringF, class RStringF, class TDesC8 const &)
+	?NewL@CSdpDocument@@SAPAV1@XZ @ 110 NONAME ; class CSdpDocument * CSdpDocument::NewL(void)
+	?NewL@CSdpFmtAttributeField@@SAPAV1@VRStringF@@ABVTDesC8@@1@Z @ 111 NONAME ; class CSdpFmtAttributeField * CSdpFmtAttributeField::NewL(class RStringF, class TDesC8 const &, class TDesC8 const &)
+	?NewL@CSdpKeyField@@SAPAV1@VRStringF@@ABVTDesC8@@@Z @ 112 NONAME ; class CSdpKeyField * CSdpKeyField::NewL(class RStringF, class TDesC8 const &)
+	?NewL@CSdpMediaField@@SAPAV1@VRStringF@@I0ABVTDesC8@@@Z @ 113 NONAME ; class CSdpMediaField * CSdpMediaField::NewL(class RStringF, unsigned int, class RStringF, class TDesC8 const &)
+	?NewL@CSdpOriginField@@SAPAV1@ABVTDesC8@@_J1AAVTInetAddr@@@Z @ 114 NONAME ; class CSdpOriginField * CSdpOriginField::NewL(class TDesC8 const &, long long, long long, class TInetAddr &)
+	?NewL@CSdpOriginField@@SAPAV1@ABVTDesC8@@_J1VRStringF@@20@Z @ 115 NONAME ; class CSdpOriginField * CSdpOriginField::NewL(class TDesC8 const &, long long, long long, class RStringF, class RStringF, class TDesC8 const &)
+	?NewL@CSdpRepeatField@@SAPAV1@VTSdpTypedTime@@0ABV?$RArray@VTSdpTypedTime@@@@@Z @ 116 NONAME ; class CSdpRepeatField * CSdpRepeatField::NewL(class TSdpTypedTime, class TSdpTypedTime, class RArray<class TSdpTypedTime> const &)
+	?NewL@CSdpTimeField@@SAPAV1@ABVTDesC8@@0@Z @ 117 NONAME ; class CSdpTimeField * CSdpTimeField::NewL(class TDesC8 const &, class TDesC8 const &)
+	?NewLC@CSdpAttributeField@@SAPAV1@VRStringF@@ABVTDesC8@@@Z @ 118 NONAME ; class CSdpAttributeField * CSdpAttributeField::NewLC(class RStringF, class TDesC8 const &)
+	?NewLC@CSdpBandwidthField@@SAPAV1@VRStringF@@K@Z @ 119 NONAME ; class CSdpBandwidthField * CSdpBandwidthField::NewLC(class RStringF, unsigned long)
+	?NewLC@CSdpConnectionField@@SAPAV1@ABVTInetAddr@@HI@Z @ 120 NONAME ; class CSdpConnectionField * CSdpConnectionField::NewLC(class TInetAddr const &, int, unsigned int)
+	?NewLC@CSdpConnectionField@@SAPAV1@VRStringF@@0ABVTDesC8@@@Z @ 121 NONAME ; class CSdpConnectionField * CSdpConnectionField::NewLC(class RStringF, class RStringF, class TDesC8 const &)
+	?NewLC@CSdpDocument@@SAPAV1@XZ @ 122 NONAME ; class CSdpDocument * CSdpDocument::NewLC(void)
+	?NewLC@CSdpFmtAttributeField@@SAPAV1@VRStringF@@ABVTDesC8@@1@Z @ 123 NONAME ; class CSdpFmtAttributeField * CSdpFmtAttributeField::NewLC(class RStringF, class TDesC8 const &, class TDesC8 const &)
+	?NewLC@CSdpKeyField@@SAPAV1@VRStringF@@ABVTDesC8@@@Z @ 124 NONAME ; class CSdpKeyField * CSdpKeyField::NewLC(class RStringF, class TDesC8 const &)
+	?NewLC@CSdpMediaField@@SAPAV1@VRStringF@@I0ABVTDesC8@@@Z @ 125 NONAME ; class CSdpMediaField * CSdpMediaField::NewLC(class RStringF, unsigned int, class RStringF, class TDesC8 const &)
+	?NewLC@CSdpOriginField@@SAPAV1@ABVTDesC8@@_J1AAVTInetAddr@@@Z @ 126 NONAME ; class CSdpOriginField * CSdpOriginField::NewLC(class TDesC8 const &, long long, long long, class TInetAddr &)
+	?NewLC@CSdpOriginField@@SAPAV1@ABVTDesC8@@_J1VRStringF@@20@Z @ 127 NONAME ; class CSdpOriginField * CSdpOriginField::NewLC(class TDesC8 const &, long long, long long, class RStringF, class RStringF, class TDesC8 const &)
+	?NewLC@CSdpRepeatField@@SAPAV1@VTSdpTypedTime@@0ABV?$RArray@VTSdpTypedTime@@@@@Z @ 128 NONAME ; class CSdpRepeatField * CSdpRepeatField::NewLC(class TSdpTypedTime, class TSdpTypedTime, class RArray<class TSdpTypedTime> const &)
+	?NewLC@CSdpTimeField@@SAPAV1@ABVTDesC8@@0@Z @ 129 NONAME ; class CSdpTimeField * CSdpTimeField::NewLC(class TDesC8 const &, class TDesC8 const &)
+	?NumOfAddress@CSdpConnectionField@@QBEHXZ @ 130 NONAME ; int CSdpConnectionField::NumOfAddress(void) const
+	?OpenL@SdpCodecStringPool@@SAXXZ @ 131 NONAME ; void SdpCodecStringPool::OpenL(void)
+	?OriginField@CSdpDocument@@QAEPAVCSdpOriginField@@XZ @ 132 NONAME ; class CSdpOriginField * CSdpDocument::OriginField(void)
+	?OriginField@CSdpDocument@@QBEPBVCSdpOriginField@@XZ @ 133 NONAME ; class CSdpOriginField const * CSdpDocument::OriginField(void) const
+	?PhoneFields@CSdpDocument@@QAEAAVCDesC8Array@@XZ @ 134 NONAME ; class CDesC8Array & CSdpDocument::PhoneFields(void)
+	?Port@CSdpMediaField@@QBEIXZ @ 135 NONAME ; unsigned int CSdpMediaField::Port(void) const
+	?PortCount@CSdpMediaField@@QBEIXZ @ 136 NONAME ; unsigned int CSdpMediaField::PortCount(void) const
+	?Protocol@CSdpMediaField@@QBE?AVRStringF@@XZ @ 137 NONAME ; class RStringF CSdpMediaField::Protocol(void) const
+	?RejectMedia@CSdpMediaField@@QAEXXZ @ 138 NONAME ; void CSdpMediaField::RejectMedia(void)
+	?RemoveFormatL@CSdpMediaField@@QAEXABVTDesC8@@@Z @ 139 NONAME ; void CSdpMediaField::RemoveFormatL(class TDesC8 const &)
+	?RepeatFields@CSdpTimeField@@QAEAAV?$RPointerArray@VCSdpRepeatField@@@@XZ @ 140 NONAME ; class RPointerArray<class CSdpRepeatField> & CSdpTimeField::RepeatFields(void)
+	?RepeatInterval@CSdpRepeatField@@QBE?BVTSdpTypedTime@@XZ @ 141 NONAME ; class TSdpTypedTime const CSdpRepeatField::RepeatInterval(void) const
+	?SdpVersion@CSdpDocument@@QBEIXZ @ 142 NONAME ; unsigned int CSdpDocument::SdpVersion(void) const
+	?SessionId@CSdpOriginField@@QBE_JXZ @ 143 NONAME ; long long CSdpOriginField::SessionId(void) const
+	?SessionName@CSdpDocument@@QBEABVTDesC8@@XZ @ 144 NONAME ; class TDesC8 const & CSdpDocument::SessionName(void) const
+	?SetActiveDuration@CSdpRepeatField@@QAEXVTSdpTypedTime@@@Z @ 145 NONAME ; void CSdpRepeatField::SetActiveDuration(class TSdpTypedTime)
+	?SetAddressL@CSdpConnectionField@@QAEXVRStringF@@0ABVTDesC8@@@Z @ 146 NONAME ; void CSdpConnectionField::SetAddressL(class RStringF, class RStringF, class TDesC8 const &)
+	?SetAddressL@CSdpOriginField@@QAEXABVTDesC8@@VRStringF@@1@Z @ 147 NONAME ; void CSdpOriginField::SetAddressL(class TDesC8 const &, class RStringF, class RStringF)
+	?SetConnectionField@CSdpDocument@@QAEXPAVCSdpConnectionField@@@Z @ 148 NONAME ; void CSdpDocument::SetConnectionField(class CSdpConnectionField *)
+	?SetFormatListL@CSdpMediaField@@QAEXABVTDesC8@@@Z @ 149 NONAME ; void CSdpMediaField::SetFormatListL(class TDesC8 const &)
+	?SetInetAddress@CSdpOriginField@@QAEXABVTInetAddr@@@Z @ 150 NONAME ; void CSdpOriginField::SetInetAddress(class TInetAddr const &)
+	?SetInetAddressL@CSdpConnectionField@@QAEXABVTInetAddr@@HI@Z @ 151 NONAME ; void CSdpConnectionField::SetInetAddressL(class TInetAddr const &, int, unsigned int)
+	?SetInfoL@CSdpDocument@@QAEXABVTDesC8@@@Z @ 152 NONAME ; void CSdpDocument::SetInfoL(class TDesC8 const &)
+	?SetInfoL@CSdpMediaField@@QAEXABVTDesC8@@@Z @ 153 NONAME ; void CSdpMediaField::SetInfoL(class TDesC8 const &)
+	?SetKey@CSdpDocument@@QAEXPAVCSdpKeyField@@@Z @ 154 NONAME ; void CSdpDocument::SetKey(class CSdpKeyField *)
+	?SetKey@CSdpMediaField@@QAEXPAVCSdpKeyField@@@Z @ 155 NONAME ; void CSdpMediaField::SetKey(class CSdpKeyField *)
+	?SetL@CSdpAttributeField@@QAEXVRStringF@@ABVTDesC8@@@Z @ 156 NONAME ; void CSdpAttributeField::SetL(class RStringF, class TDesC8 const &)
+	?SetL@CSdpFmtAttributeField@@QAEXVRStringF@@ABVTDesC8@@1@Z @ 157 NONAME ; void CSdpFmtAttributeField::SetL(class RStringF, class TDesC8 const &, class TDesC8 const &)
+	?SetL@CSdpKeyField@@QAEXVRStringF@@ABVTDesC8@@@Z @ 158 NONAME ; void CSdpKeyField::SetL(class RStringF, class TDesC8 const &)
+	?SetMediaL@CSdpMediaField@@QAEXVRStringF@@@Z @ 159 NONAME ; void CSdpMediaField::SetMediaL(class RStringF)
+	?SetModifier@CSdpBandwidthField@@QAEXVRStringF@@@Z @ 160 NONAME ; void CSdpBandwidthField::SetModifier(class RStringF)
+	?SetNumOfAddressL@CSdpConnectionField@@QAEXI@Z @ 161 NONAME ; void CSdpConnectionField::SetNumOfAddressL(unsigned int)
+	?SetOriginField@CSdpDocument@@QAEXPAVCSdpOriginField@@@Z @ 162 NONAME ; void CSdpDocument::SetOriginField(class CSdpOriginField *)
+	?SetPortCountL@CSdpMediaField@@QAEXI@Z @ 163 NONAME ; void CSdpMediaField::SetPortCountL(unsigned int)
+	?SetPortL@CSdpMediaField@@QAEXI@Z @ 164 NONAME ; void CSdpMediaField::SetPortL(unsigned int)
+	?SetProtocolL@CSdpMediaField@@QAEXVRStringF@@@Z @ 165 NONAME ; void CSdpMediaField::SetProtocolL(class RStringF)
+	?SetRepeatIntervalL@CSdpRepeatField@@QAEXVTSdpTypedTime@@@Z @ 166 NONAME ; void CSdpRepeatField::SetRepeatIntervalL(class TSdpTypedTime)
+	?SetSessionId@CSdpOriginField@@QAEX_J@Z @ 167 NONAME ; void CSdpOriginField::SetSessionId(long long)
+	?SetSessionNameL@CSdpDocument@@QAEXABVTDesC8@@@Z @ 168 NONAME ; void CSdpDocument::SetSessionNameL(class TDesC8 const &)
+	?SetTTLL@CSdpConnectionField@@QAEXH@Z @ 169 NONAME ; void CSdpConnectionField::SetTTLL(int)
+	?SetTimeOffsetsL@CSdpRepeatField@@QAEXABV?$RArray@VTSdpTypedTime@@@@@Z @ 170 NONAME ; void CSdpRepeatField::SetTimeOffsetsL(class RArray<class TSdpTypedTime> const &)
+	?SetTimesL@CSdpTimeField@@QAEXABVTDesC8@@0@Z @ 171 NONAME ; void CSdpTimeField::SetTimesL(class TDesC8 const &, class TDesC8 const &)
+	?SetUri@CSdpDocument@@QAEXPAVCUri8@@@Z @ 172 NONAME ; void CSdpDocument::SetUri(class CUri8 *)
+	?SetUserNameL@CSdpOriginField@@QAEXABVTDesC8@@@Z @ 173 NONAME ; void CSdpOriginField::SetUserNameL(class TDesC8 const &)
+	?SetValue@CSdpBandwidthField@@QAEXK@Z @ 174 NONAME ; void CSdpBandwidthField::SetValue(unsigned long)
+	?SetValue@TSdpTypedTime@@QAEX_JW4TUnit@1@@Z @ 175 NONAME ; void TSdpTypedTime::SetValue(long long, enum TSdpTypedTime::TUnit)
+	?SetVersion@CSdpOriginField@@QAEX_J@Z @ 176 NONAME ; void CSdpOriginField::SetVersion(long long)
+	?SetZoneAdjustmentsL@CSdpDocument@@QAEXABVTDesC8@@@Z @ 177 NONAME ; void CSdpDocument::SetZoneAdjustmentsL(class TDesC8 const &)
+	?StartTime@CSdpTimeField@@QBEABVTDesC8@@XZ @ 178 NONAME ; class TDesC8 const & CSdpTimeField::StartTime(void) const
+	?StopTime@CSdpTimeField@@QBEABVTDesC8@@XZ @ 179 NONAME ; class TDesC8 const & CSdpTimeField::StopTime(void) const
+	?StringPoolL@SdpCodecStringPool@@SA?AVRStringPool@@XZ @ 180 NONAME ; class RStringPool SdpCodecStringPool::StringPoolL(void)
+	?StringTableL@SdpCodecStringPool@@SAABUTStringTable@@XZ @ 181 NONAME ; struct TStringTable const & SdpCodecStringPool::StringTableL(void)
+	?TTLValue@CSdpConnectionField@@QBEHXZ @ 182 NONAME ; int CSdpConnectionField::TTLValue(void) const
+	?TimeFields@CSdpDocument@@QAEAAV?$RPointerArray@VCSdpTimeField@@@@XZ @ 183 NONAME ; class RPointerArray<class CSdpTimeField> & CSdpDocument::TimeFields(void)
+	?TimeOffsets@CSdpRepeatField@@QBEABV?$RArray@VTSdpTypedTime@@@@XZ @ 184 NONAME ; class RArray<class TSdpTypedTime> const & CSdpRepeatField::TimeOffsets(void) const
+	?Uri@CSdpDocument@@QAEPAVCUri8@@XZ @ 185 NONAME ; class CUri8 * CSdpDocument::Uri(void)
+	?Uri@CSdpDocument@@QBEPBVCUri8@@XZ @ 186 NONAME ; class CUri8 const * CSdpDocument::Uri(void) const
+	?UserName@CSdpOriginField@@QBEABVTDesC8@@XZ @ 187 NONAME ; class TDesC8 const & CSdpOriginField::UserName(void) const
+	?Value@CSdpAttributeField@@QBEABVTDesC8@@XZ @ 188 NONAME ; class TDesC8 const & CSdpAttributeField::Value(void) const
+	?Value@CSdpBandwidthField@@QBEKXZ @ 189 NONAME ; unsigned long CSdpBandwidthField::Value(void) const
+	?Value@CSdpFmtAttributeField@@QBEABVTDesC8@@XZ @ 190 NONAME ; class TDesC8 const & CSdpFmtAttributeField::Value(void) const
+	?Version@CSdpOriginField@@QBE_JXZ @ 191 NONAME ; long long CSdpOriginField::Version(void) const
+	?ZoneAdjustments@CSdpDocument@@QBEABVTDesC8@@XZ @ 192 NONAME ; class TDesC8 const & CSdpDocument::ZoneAdjustments(void) const
+	?__DbgTestInvariant@CSdpAttributeField@@QBEXXZ @ 193 NONAME ABSENT; void CSdpAttributeField::__DbgTestInvariant(void) const
+	?__DbgTestInvariant@CSdpConnectionField@@QBEXXZ @ 194 NONAME ABSENT ; void CSdpConnectionField::__DbgTestInvariant(void) const
+	?__DbgTestInvariant@CSdpFmtAttributeField@@QBEXXZ @ 195 NONAME ABSENT ; void CSdpFmtAttributeField::__DbgTestInvariant(void) const
+	?__DbgTestInvariant@CSdpKeyField@@QBEXXZ @ 196 NONAME ABSENT ; void CSdpKeyField::__DbgTestInvariant(void) const
+	?__DbgTestInvariant@CSdpOriginField@@QBEXXZ @ 197 NONAME ABSENT ; void CSdpOriginField::__DbgTestInvariant(void) const
+	?__DbgTestInvariant@CSdpRepeatField@@QBEXXZ @ 198 NONAME ABSENT ; void CSdpRepeatField::__DbgTestInvariant(void) const
+	?__DbgTestInvariant@CSdpTimeField@@QBEXXZ @ 199 NONAME ABSENT ; void CSdpTimeField::__DbgTestInvariant(void) const
+	?AssignTo@CSdpAttributeField@@QAEXABVCSdpFmtAttributeField@@@Z @ 200 NONAME ; void CSdpAttributeField::AssignTo(class CSdpFmtAttributeField const &)
+	?BelongsTo@CSdpAttributeField@@QBEHABVCSdpFmtAttributeField@@@Z @ 201 NONAME ; int CSdpAttributeField::BelongsTo(class CSdpFmtAttributeField const &) const
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/eabi/localsdpcodecu.def	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,247 @@
+EXPORTS
+	_ZN12CSdpDocument10TimeFieldsEv @ 1 NONAME
+	_ZN12CSdpDocument11EmailFieldsEv @ 2 NONAME
+	_ZN12CSdpDocument11MediaFieldsEv @ 3 NONAME
+	_ZN12CSdpDocument11OriginFieldEv @ 4 NONAME
+	_ZN12CSdpDocument11PhoneFieldsEv @ 5 NONAME
+	_ZN12CSdpDocument12InternalizeLER11RReadStream @ 6 NONAME
+	_ZN12CSdpDocument14SetOriginFieldEP15CSdpOriginField @ 7 NONAME
+	_ZN12CSdpDocument15AttributeFieldsEv @ 8 NONAME
+	_ZN12CSdpDocument15BandwidthFieldsEv @ 9 NONAME
+	_ZN12CSdpDocument15ConnectionFieldEv @ 10 NONAME
+	_ZN12CSdpDocument15SetSessionNameLERK6TDesC8 @ 11 NONAME
+	_ZN12CSdpDocument18SetConnectionFieldEP19CSdpConnectionField @ 12 NONAME
+	_ZN12CSdpDocument19SetZoneAdjustmentsLERK6TDesC8 @ 13 NONAME
+	_ZN12CSdpDocument3KeyEv @ 14 NONAME
+	_ZN12CSdpDocument3UriEv @ 15 NONAME
+	_ZN12CSdpDocument4NewLEv @ 16 NONAME
+	_ZN12CSdpDocument5NewLCEv @ 17 NONAME
+	_ZN12CSdpDocument6SetKeyEP12CSdpKeyField @ 18 NONAME
+	_ZN12CSdpDocument6SetUriEP5CUri8 @ 19 NONAME
+	_ZN12CSdpDocument7DecodeLERK6TDesC8 @ 20 NONAME
+	_ZN12CSdpDocument8DecodeLCERK6TDesC8 @ 21 NONAME
+	_ZN12CSdpDocument8SetInfoLERK6TDesC8 @ 22 NONAME
+	_ZN12CSdpDocumentD0Ev @ 23 NONAME
+	_ZN12CSdpDocumentD1Ev @ 24 NONAME
+	_ZN12CSdpDocumentD2Ev @ 25 NONAME
+	_ZN12CSdpKeyField4NewLE8RStringFRK6TDesC8 @ 26 NONAME
+	_ZN12CSdpKeyField4SetLE8RStringFRK6TDesC8 @ 27 NONAME
+	_ZN12CSdpKeyField5NewLCE8RStringFRK6TDesC8 @ 28 NONAME
+	_ZN12CSdpKeyField7DecodeLERK6TDesC8 @ 29 NONAME
+	_ZN12CSdpKeyField8DecodeLCERK6TDesC8 @ 30 NONAME
+	_ZN12CSdpKeyFieldD0Ev @ 31 NONAME
+	_ZN12CSdpKeyFieldD1Ev @ 32 NONAME
+	_ZN12CSdpKeyFieldD2Ev @ 33 NONAME
+	_ZN13CSdpTimeField12RepeatFieldsEv @ 34 NONAME
+	_ZN13CSdpTimeField4NewLERK6TDesC8S2_ @ 35 NONAME
+	_ZN13CSdpTimeField5NewLCERK6TDesC8S2_ @ 36 NONAME
+	_ZN13CSdpTimeField7DecodeLERK6TDesC8i @ 37 NONAME
+	_ZN13CSdpTimeField8DecodeLCERK6TDesC8i @ 38 NONAME
+	_ZN13CSdpTimeField9SetTimesLERK6TDesC8S2_ @ 39 NONAME
+	_ZN13CSdpTimeFieldD0Ev @ 40 NONAME
+	_ZN13CSdpTimeFieldD1Ev @ 41 NONAME
+	_ZN13CSdpTimeFieldD2Ev @ 42 NONAME
+	_ZN13TSdpTypedTime8SetValueExNS_5TUnitE @ 43 NONAME
+	_ZN13TSdpTypedTimeC1Ev @ 44 NONAME
+	_ZN13TSdpTypedTimeC1ExNS_5TUnitE @ 45 NONAME
+	_ZN13TSdpTypedTimeC2Ev @ 46 NONAME
+	_ZN13TSdpTypedTimeC2ExNS_5TUnitE @ 47 NONAME
+	_ZN14CSdpMediaField11KeepFormatLERK6TDesC8 @ 48 NONAME
+	_ZN14CSdpMediaField11RejectMediaEv @ 49 NONAME
+	_ZN14CSdpMediaField12SetProtocolLE8RStringF @ 50 NONAME
+	_ZN14CSdpMediaField13RemoveFormatLERK6TDesC8 @ 51 NONAME
+	_ZN14CSdpMediaField13SetPortCountLEj @ 52 NONAME
+	_ZN14CSdpMediaField14SetFormatListLERK6TDesC8 @ 53 NONAME
+	_ZN14CSdpMediaField15AttributeFieldsEv @ 54 NONAME
+	_ZN14CSdpMediaField15BandwidthFieldsEv @ 55 NONAME
+	_ZN14CSdpMediaField16ConnectionFieldsEv @ 56 NONAME
+	_ZN14CSdpMediaField21FormatAttributeFieldsEv @ 57 NONAME
+	_ZN14CSdpMediaField3KeyEv @ 58 NONAME
+	_ZN14CSdpMediaField4NewLE8RStringFjS0_RK6TDesC8 @ 59 NONAME
+	_ZN14CSdpMediaField5NewLCE8RStringFjS0_RK6TDesC8 @ 60 NONAME
+	_ZN14CSdpMediaField6SetKeyEP12CSdpKeyField @ 61 NONAME
+	_ZN14CSdpMediaField7DecodeLERK6TDesC8i @ 62 NONAME
+	_ZN14CSdpMediaField8DecodeLCERK6TDesC8i @ 63 NONAME
+	_ZN14CSdpMediaField8SetInfoLERK6TDesC8 @ 64 NONAME
+	_ZN14CSdpMediaField8SetPortLEj @ 65 NONAME
+	_ZN14CSdpMediaField9SetMediaLE8RStringF @ 66 NONAME
+	_ZN14CSdpMediaFieldD0Ev @ 67 NONAME
+	_ZN14CSdpMediaFieldD1Ev @ 68 NONAME
+	_ZN14CSdpMediaFieldD2Ev @ 69 NONAME
+	_ZN15CSdpOriginField10SetVersionEx @ 70 NONAME
+	_ZN15CSdpOriginField11SetAddressLERK6TDesC88RStringFS3_ @ 71 NONAME
+	_ZN15CSdpOriginField12SetSessionIdEx @ 72 NONAME
+	_ZN15CSdpOriginField12SetUserNameLERK6TDesC8 @ 73 NONAME
+	_ZN15CSdpOriginField14SetInetAddressERK9TInetAddr @ 74 NONAME
+	_ZN15CSdpOriginField4NewLERK6TDesC8xx8RStringFS3_S2_ @ 75 NONAME
+	_ZN15CSdpOriginField4NewLERK6TDesC8xxR9TInetAddr @ 76 NONAME
+	_ZN15CSdpOriginField5NewLCERK6TDesC8xx8RStringFS3_S2_ @ 77 NONAME
+	_ZN15CSdpOriginField5NewLCERK6TDesC8xxR9TInetAddr @ 78 NONAME
+	_ZN15CSdpOriginField7DecodeLERK6TDesC8 @ 79 NONAME
+	_ZN15CSdpOriginField8DecodeLCERK6TDesC8 @ 80 NONAME
+	_ZN15CSdpOriginFieldD0Ev @ 81 NONAME
+	_ZN15CSdpOriginFieldD1Ev @ 82 NONAME
+	_ZN15CSdpOriginFieldD2Ev @ 83 NONAME
+	_ZN15CSdpRepeatField15SetTimeOffsetsLERK6RArrayI13TSdpTypedTimeE @ 84 NONAME
+	_ZN15CSdpRepeatField17SetActiveDurationE13TSdpTypedTime @ 85 NONAME
+	_ZN15CSdpRepeatField18SetRepeatIntervalLE13TSdpTypedTime @ 86 NONAME
+	_ZN15CSdpRepeatField4NewLE13TSdpTypedTimeS0_RK6RArrayIS0_E @ 87 NONAME
+	_ZN15CSdpRepeatField5NewLCE13TSdpTypedTimeS0_RK6RArrayIS0_E @ 88 NONAME
+	_ZN15CSdpRepeatField7DecodeLERK6TDesC8 @ 89 NONAME
+	_ZN15CSdpRepeatField8DecodeLCERK6TDesC8 @ 90 NONAME
+	_ZN15CSdpRepeatFieldD0Ev @ 91 NONAME
+	_ZN15CSdpRepeatFieldD1Ev @ 92 NONAME
+	_ZN15CSdpRepeatFieldD2Ev @ 93 NONAME
+	_ZN15TSdpRtpmapValue7DecodeLERK6TDesC8 @ 94 NONAME
+	_ZN15TSdpRtpmapValueC1ERK6TPtrC8S2_S2_ @ 95 NONAME
+	_ZN15TSdpRtpmapValueC2ERK6TPtrC8S2_S2_ @ 96 NONAME
+	_ZN18CSdpAttributeField4NewLE8RStringFRK6TDesC8 @ 97 NONAME
+	_ZN18CSdpAttributeField4SetLE8RStringFRK6TDesC8 @ 98 NONAME
+	_ZN18CSdpAttributeField5NewLCE8RStringFRK6TDesC8 @ 99 NONAME
+	_ZN18CSdpAttributeField7DecodeLERK6TDesC8 @ 100 NONAME
+	_ZN18CSdpAttributeField8DecodeLCERK6TDesC8 @ 101 NONAME
+	_ZN18CSdpAttributeFieldD0Ev @ 102 NONAME
+	_ZN18CSdpAttributeFieldD1Ev @ 103 NONAME
+	_ZN18CSdpAttributeFieldD2Ev @ 104 NONAME
+	_ZN18CSdpBandwidthField11SetModifierE8RStringF @ 105 NONAME
+	_ZN18CSdpBandwidthField4NewLE8RStringFm @ 106 NONAME
+	_ZN18CSdpBandwidthField5NewLCE8RStringFm @ 107 NONAME
+	_ZN18CSdpBandwidthField7DecodeLERK6TDesC8 @ 108 NONAME
+	_ZN18CSdpBandwidthField8DecodeLCERK6TDesC8 @ 109 NONAME
+	_ZN18CSdpBandwidthField8SetValueEm @ 110 NONAME
+	_ZN18CSdpBandwidthFieldD0Ev @ 111 NONAME
+	_ZN18CSdpBandwidthFieldD1Ev @ 112 NONAME
+	_ZN18CSdpBandwidthFieldD2Ev @ 113 NONAME
+	_ZN18SdpCodecStringPool11StringPoolLEv @ 114 NONAME
+	_ZN18SdpCodecStringPool12StringTableLEv @ 115 NONAME
+	_ZN18SdpCodecStringPool5CloseEv @ 116 NONAME
+	_ZN18SdpCodecStringPool5OpenLEv @ 117 NONAME
+	_ZN19CSdpConnectionField11SetAddressLE8RStringFS0_RK6TDesC8 @ 118 NONAME
+	_ZN19CSdpConnectionField15SetInetAddressLERK9TInetAddrij @ 119 NONAME
+	_ZN19CSdpConnectionField16SetNumOfAddressLEj @ 120 NONAME
+	_ZN19CSdpConnectionField4NewLE8RStringFS0_RK6TDesC8 @ 121 NONAME
+	_ZN19CSdpConnectionField4NewLERK9TInetAddrij @ 122 NONAME
+	_ZN19CSdpConnectionField5NewLCE8RStringFS0_RK6TDesC8 @ 123 NONAME
+	_ZN19CSdpConnectionField5NewLCERK9TInetAddrij @ 124 NONAME
+	_ZN19CSdpConnectionField7DecodeLERK6TDesC8 @ 125 NONAME
+	_ZN19CSdpConnectionField7SetTTLLEi @ 126 NONAME
+	_ZN19CSdpConnectionField8DecodeLCERK6TDesC8 @ 127 NONAME
+	_ZN19CSdpConnectionFieldD0Ev @ 128 NONAME
+	_ZN19CSdpConnectionFieldD1Ev @ 129 NONAME
+	_ZN19CSdpConnectionFieldD2Ev @ 130 NONAME
+	_ZN21CSdpFmtAttributeField4NewLE8RStringFRK6TDesC8S3_ @ 131 NONAME
+	_ZN21CSdpFmtAttributeField4SetLE8RStringFRK6TDesC8S3_ @ 132 NONAME
+	_ZN21CSdpFmtAttributeField5NewLCE8RStringFRK6TDesC8S3_ @ 133 NONAME
+	_ZN21CSdpFmtAttributeField7DecodeLERK6TDesC8 @ 134 NONAME
+	_ZN21CSdpFmtAttributeField8DecodeLCERK6TDesC8 @ 135 NONAME
+	_ZN21CSdpFmtAttributeFieldD0Ev @ 136 NONAME
+	_ZN21CSdpFmtAttributeFieldD1Ev @ 137 NONAME
+	_ZN21CSdpFmtAttributeFieldD2Ev @ 138 NONAME
+	_ZNK12CSdpDocument10SdpVersionEv @ 139 NONAME
+	_ZNK12CSdpDocument11OriginFieldEv @ 140 NONAME
+	_ZNK12CSdpDocument11SessionNameEv @ 141 NONAME
+	_ZNK12CSdpDocument12ExternalizeLER12RWriteStream @ 142 NONAME
+	_ZNK12CSdpDocument15ConnectionFieldEv @ 143 NONAME
+	_ZNK12CSdpDocument15ZoneAdjustmentsEv @ 144 NONAME
+	_ZNK12CSdpDocument3KeyEv @ 145 NONAME
+	_ZNK12CSdpDocument3UriEv @ 146 NONAME
+	_ZNK12CSdpDocument4InfoEv @ 147 NONAME
+	_ZNK12CSdpDocument6CloneLEv @ 148 NONAME
+	_ZNK12CSdpDocument7EncodeLER12RWriteStream @ 149 NONAME
+	_ZNK12CSdpDocument7IsValidEv @ 150 NONAME
+	_ZNK12CSdpKeyField13EncryptionKeyEv @ 151 NONAME
+	_ZNK12CSdpKeyField6CloneLEv @ 152 NONAME
+	_ZNK12CSdpKeyField6MethodEv @ 153 NONAME
+	_ZNK12CSdpKeyField7EncodeLER12RWriteStream @ 154 NONAME
+	_ZNK12CSdpKeyFieldeqERKS_ @ 155 NONAME
+	_ZNK13CSdpTimeField6CloneLEi @ 156 NONAME
+	_ZNK13CSdpTimeField7EncodeLER12RWriteStreami @ 157 NONAME
+	_ZNK13CSdpTimeField7IsValidEv @ 158 NONAME
+	_ZNK13CSdpTimeField8StopTimeEv @ 159 NONAME
+	_ZNK13CSdpTimeField9StartTimeEv @ 160 NONAME
+	_ZNK13CSdpTimeFieldeqERKS_ @ 161 NONAME
+	_ZNK13TSdpTypedTimeeqERKS_ @ 162 NONAME
+	_ZNK14CSdpMediaField10FormatListEv @ 163 NONAME
+	_ZNK14CSdpMediaField3KeyEv @ 164 NONAME
+	_ZNK14CSdpMediaField4InfoEv @ 165 NONAME
+	_ZNK14CSdpMediaField4PortEv @ 166 NONAME
+	_ZNK14CSdpMediaField5MediaEv @ 167 NONAME
+	_ZNK14CSdpMediaField6CloneLEi @ 168 NONAME
+	_ZNK14CSdpMediaField7EncodeLER12RWriteStreami @ 169 NONAME
+	_ZNK14CSdpMediaField7IsValidEv @ 170 NONAME
+	_ZNK14CSdpMediaField8ProtocolEv @ 171 NONAME
+	_ZNK14CSdpMediaField9PortCountEv @ 172 NONAME
+	_ZNK14CSdpMediaFieldeqERKS_ @ 173 NONAME
+	_ZNK15CSdpOriginField11AddressTypeEv @ 174 NONAME
+	_ZNK15CSdpOriginField11InetAddressEv @ 175 NONAME
+	_ZNK15CSdpOriginField6CloneLEv @ 176 NONAME
+	_ZNK15CSdpOriginField7AddressEv @ 177 NONAME
+	_ZNK15CSdpOriginField7EncodeLER12RWriteStream @ 178 NONAME
+	_ZNK15CSdpOriginField7NetTypeEv @ 179 NONAME
+	_ZNK15CSdpOriginField7VersionEv @ 180 NONAME
+	_ZNK15CSdpOriginField8UserNameEv @ 181 NONAME
+	_ZNK15CSdpOriginField9SessionIdEv @ 182 NONAME
+	_ZNK15CSdpOriginFieldeqERKS_ @ 183 NONAME
+	_ZNK15CSdpRepeatField11TimeOffsetsEv @ 184 NONAME
+	_ZNK15CSdpRepeatField14ActiveDurationEv @ 185 NONAME
+	_ZNK15CSdpRepeatField14RepeatIntervalEv @ 186 NONAME
+	_ZNK15CSdpRepeatField6CloneLEv @ 187 NONAME
+	_ZNK15CSdpRepeatField7EncodeLER12RWriteStream @ 188 NONAME
+	_ZNK15CSdpRepeatFieldeqERKS_ @ 189 NONAME
+	_ZNK15TSdpRtpmapValue7EncodeLEv @ 190 NONAME
+	_ZNK18CSdpAttributeField5ValueEv @ 191 NONAME
+	_ZNK18CSdpAttributeField6CloneLEv @ 192 NONAME
+	_ZNK18CSdpAttributeField7EncodeLER12RWriteStream @ 193 NONAME
+	_ZNK18CSdpAttributeField9AttributeEv @ 194 NONAME
+	_ZNK18CSdpAttributeFieldeqERKS_ @ 195 NONAME
+	_ZNK18CSdpBandwidthField5ValueEv @ 196 NONAME
+	_ZNK18CSdpBandwidthField6CloneLEv @ 197 NONAME
+	_ZNK18CSdpBandwidthField7EncodeLER12RWriteStream @ 198 NONAME
+	_ZNK18CSdpBandwidthField8ModifierEv @ 199 NONAME
+	_ZNK18CSdpBandwidthFieldeqERKS_ @ 200 NONAME
+	_ZNK19CSdpConnectionField11AddressTypeEv @ 201 NONAME
+	_ZNK19CSdpConnectionField11InetAddressEv @ 202 NONAME
+	_ZNK19CSdpConnectionField12NumOfAddressEv @ 203 NONAME
+	_ZNK19CSdpConnectionField6CloneLEv @ 204 NONAME
+	_ZNK19CSdpConnectionField7AddressEv @ 205 NONAME
+	_ZNK19CSdpConnectionField7EncodeLER12RWriteStream @ 206 NONAME
+	_ZNK19CSdpConnectionField7NetTypeEv @ 207 NONAME
+	_ZNK19CSdpConnectionField8TTLValueEv @ 208 NONAME
+	_ZNK19CSdpConnectionFieldeqERKS_ @ 209 NONAME
+	_ZNK21CSdpFmtAttributeField5ValueEv @ 210 NONAME
+	_ZNK21CSdpFmtAttributeField6CloneLEv @ 211 NONAME
+	_ZNK21CSdpFmtAttributeField6FormatEv @ 212 NONAME
+	_ZNK21CSdpFmtAttributeField7EncodeLER12RWriteStream @ 213 NONAME
+	_ZNK21CSdpFmtAttributeField9AttributeEv @ 214 NONAME
+	_ZNK21CSdpFmtAttributeFieldeqERKS_ @ 215 NONAME
+	_ZTI12CSdpDocument @ 216 NONAME ; #<TI>#
+	_ZTI12CSdpKeyField @ 217 NONAME ; #<TI>#
+	_ZTI13CSdpTimeField @ 218 NONAME ; #<TI>#
+	_ZTI14CSdpMediaField @ 219 NONAME ; #<TI>#
+	_ZTI15CSdpOriginField @ 220 NONAME ; #<TI>#
+	_ZTI15CSdpRepeatField @ 221 NONAME ; #<TI>#
+	_ZTI18CSdpAttributeField @ 222 NONAME ; #<TI>#
+	_ZTI18CSdpBandwidthField @ 223 NONAME ; #<TI>#
+	_ZTI18CSdpCodecParseUtil @ 224 NONAME ; #<TI>#
+	_ZTI19CSdpCodecStringPool @ 225 NONAME ; #<TI>#
+	_ZTI19CSdpConnectionField @ 226 NONAME ; #<TI>#
+	_ZTI21CSdpFmtAttributeField @ 227 NONAME ; #<TI>#
+	_ZTV12CSdpDocument @ 228 NONAME ; #<VT>#
+	_ZTV12CSdpKeyField @ 229 NONAME ; #<VT>#
+	_ZTV13CSdpTimeField @ 230 NONAME ; #<VT>#
+	_ZTV14CSdpMediaField @ 231 NONAME ; #<VT>#
+	_ZTV15CSdpOriginField @ 232 NONAME ; #<VT>#
+	_ZTV15CSdpRepeatField @ 233 NONAME ; #<VT>#
+	_ZTV18CSdpAttributeField @ 234 NONAME ; #<VT>#
+	_ZTV18CSdpBandwidthField @ 235 NONAME ; #<VT>#
+	_ZTV18CSdpCodecParseUtil @ 236 NONAME ; #<VT>#
+	_ZTV19CSdpCodecStringPool @ 237 NONAME ; #<VT>#
+	_ZTV19CSdpConnectionField @ 238 NONAME ; #<VT>#
+	_ZTV21CSdpFmtAttributeField @ 239 NONAME ; #<VT>#
+	_ZN18CSdpAttributeField8AssignToERK21CSdpFmtAttributeField @ 240 NONAME
+	_ZNK18CSdpAttributeField9BelongsToERK21CSdpFmtAttributeField @ 241 NONAME
+	_ZTI22CSdpAttributeFieldPtrs @ 242 NONAME ; #<TI>#
+	_ZTV22CSdpAttributeFieldPtrs @ 243 NONAME ; #<VT>#
+	_ZTI19CSdpOriginFieldPtrs @ 244 NONAME ; #<TI>#
+	_ZTV19CSdpOriginFieldPtrs @ 245 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/group/localsdpcodec.mmp	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,67 @@
+// Copyright (c) 2010 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:
+// Name          : localsdpcodec is a local copy of the sdpcodec.dll added here to avoid mw dependency
+// Part of       : Local SDP Codec
+// Version       : SIP/5.0
+//
+
+
+
+TARGET        localsdpcodec.dll
+TARGETTYPE    dll
+UID           0x1000008d 0x200305C5
+
+SOURCEPATH    ../src
+SOURCE        sdpattributefield.cpp
+SOURCE        sdpattributefieldptrs.cpp
+SOURCE        sdpbandwidthfield.cpp
+SOURCE        sdprepeatfield.cpp
+SOURCE        sdptimefield.cpp
+SOURCE        sdptypedtime.cpp
+SOURCE        sdpconnectionfield.cpp
+SOURCE        sdpdocument.cpp
+SOURCE        sdpfmtattributefield.cpp
+SOURCE        sdpkeyfield.cpp
+SOURCE        sdpmediafield.cpp
+SOURCE        sdporiginfield.cpp
+SOURCE        sdporiginfieldptrs.cpp
+SOURCE        sdprtpmapvalue.cpp
+SOURCE        sdputil.cpp
+SOURCE        sdpcodecstringpool.cpp
+SOURCE        csdpcodecstringpool.cpp
+SOURCE        sdpcodecparseutil.cpp
+
+ SOURCEPATH ../strings
+ START STRINGTABLE localsdpcodecstringconstants.st
+ 	  EXPORTPATH  /epoc32/include
+ END
+
+USERINCLUDE   ../api
+USERINCLUDE   ../inc
+USERINCLUDE   ../src
+
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY       euser.lib
+LIBRARY       insock.lib
+LIBRARY       esock.lib
+LIBRARY       estor.lib
+LIBRARY       bafl.lib
+LIBRARY       inetprotutil.lib 
+
+VENDORID 0x70000001
+
+CAPABILITY All -Tcb
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/inc/csdpcodecstringpool.h	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,89 @@
+/*
+* Copyright (c) 2010 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:
+* Name          : SdpCodecStringPool.h
+* Part of       : Local SDP Codec
+* Interface     : SDK API, Local SDP Codec API
+* Version       : 1.0
+*
+*/
+
+
+
+
+/**
+ @internalComponent
+*/
+
+#ifndef CSDPCODECSTRINGPOOL_H
+#define CSDPCODECSTRINGPOOL_H
+
+//  INCLUDES
+#include <e32base.h>
+#include "_sdpdefs.h"
+#include <stringpool.h>
+
+
+// CLASS DECLARATION
+/**
+ *	This class defines string pool for SdpCodec.
+ *  Only one CSdpCodecStringPool object must be created in an application.
+ *  If more than one CSdpCodecStringPool objects are used by an
+ *  application with CSdpDocument objects, panic occurs. 
+ *
+ *  @lib localsdpcodec.lib
+ */
+class CSdpCodecStringPool : public CBase
+	{
+public: // Constructors and destructor
+ 		
+	/**
+	*	StringPool is created for SdpCodec.
+	*
+    *	@return The new instance.
+	*/
+	static CSdpCodecStringPool* NewLC();
+
+	/**
+	*	Deletes the resources held by the instance.
+	*/
+	~CSdpCodecStringPool();
+
+public: 
+	
+	/**
+	* Gets the string pool used by SDP
+	*
+	* @return a handle to a string pool
+	*/
+	RStringPool StringPool();
+
+	/**
+	* Gets the SDP's string pool table
+	*
+	* @return the string pool table
+	*/
+	static const TStringTable& StringTable();
+
+private:
+
+	CSdpCodecStringPool();
+	void ConstructL();
+
+private: // Data
+		
+	RStringPool iPool;
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/inc/sdpattributefieldptrs.h	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2010 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:
+* Name          : SdpAttributeFieldPtrs.h
+* Part of       : Local SDP Codec
+* Interface     : -
+* Version       : 1.0
+*
+*/
+
+
+
+
+/**
+ @internalComponent
+*/
+
+#ifndef CSDPATTRIBUTEFIELDPTRS_H
+#define CSDPATTRIBUTEFIELDPTRS_H
+
+//  INCLUDES
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+class CSdpFmtAttributeField;
+
+// CLASS DECLARATION
+/**
+ *	This class encapsulates the data of CSdpAttributeField.
+ *
+ *  @lib localsdpcodec.lib
+ */
+class CSdpAttributeFieldPtrs : public CBase
+    {
+    public:
+    
+        static CSdpAttributeFieldPtrs* NewL();
+	    ~CSdpAttributeFieldPtrs();
+
+        void SetValueL( const TDesC8& aValue );
+        const TDesC8& Value() const;
+        
+        void SetFmtAttribute( const CSdpFmtAttributeField* aFmtAttribute );
+        const CSdpFmtAttributeField* FmtAttribute() const;
+
+    private: // Second phase constructors
+    
+        CSdpAttributeFieldPtrs();
+        void ConstructL();
+    
+    private: // Data
+
+        HBufC8* iValue; // Owned
+        const CSdpFmtAttributeField* iFmtAttributeField; // Not owned	    
+    };
+
+#endif // CSDPATTRIBUTEFIELDPTRS_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/inc/sdpcodec.pan	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,32 @@
+// Copyright (c) 2010 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:
+// Name          : SdpCodec.pan
+// Part of       : SDP Codec
+// Interface     : -
+// Version       : 1.0
+//
+
+
+
+#ifndef SDPCODEC_PAN
+#define SDPCODEC_PAN
+
+// Panic category for SDP Codec
+_LIT(KSdpCodecPanicCat, "SDPCODEC");
+
+// Panic codes for SDP Codec
+const TInt KSdpCodecPanicInternal	= 100;   // Internal error
+const TInt KSdpConstructor          = 101;   // Constructor fails
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/inc/sdpcodecparseutil.h	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,126 @@
+/*
+* Copyright (c) 2010 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:
+* Name          : SdpCodecParseUtil.h
+* Part of       : Local SDP Codec
+* Interface     : -
+* Version       : 1.0
+*
+*/
+
+
+
+
+/**
+ @internalComponent
+*/
+
+#ifndef CSDPCODECPARSEUTIL_H
+#define CSDPCODECPARSEUTIL_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <stringpool.h>
+#include "_sdpdefs.h"
+#include <e32std.h>
+#include "badesca.h"
+class CSdpTimeField;
+class CSdpBandwidthField;
+class CSdpAttributeField;
+class CSdpMediaField;	
+class CSdpOriginField;
+class CUri8;
+class CSdpConnectionField;
+class CSdpKeyField;
+class RReadStream;
+class RWriteStream;
+
+// CLASS DECLARATION
+/**
+ *	Common utilities used in the implementation of the Local SDP codec.
+ */
+class CSdpCodecParseUtil :public CBase
+	{
+    public: // Constructors and destructor
+
+		/**
+		*	Construct a new, CSdpCodecParseUtil object.
+		*	@return The new instance.
+		*/
+		static CSdpCodecParseUtil* NewL(RStringPool aPool,const TDesC8& aValue,
+											  TInt aErrCode);
+
+		/**
+		*	Construct a new, CSdpCodecParseUtil object.
+		*	@return The new instance.
+		*/
+		static CSdpCodecParseUtil* NewLC(RStringPool aPool,const TDesC8& aValue,
+											  TInt aErrCode);
+
+	    ~CSdpCodecParseUtil();
+
+    public: // New functions
+
+		static TPtrC8 FieldLineValueL(const TDesC8& aValue);
+		static RArray<TPtrC8> CheckFieldNameL(RStringPool aPool,
+											  TInt aIndex, 
+											  const TDesC8& aValue,
+											  TInt aErrCode);
+		static RArray<TPtrC8> CheckOptionalFieldNameL(RStringPool aPool, 
+													TInt aIndex, 
+													const TDesC8& aValue,
+												    TInt aErrCode);
+		TUint ParseSessionVersionL(TInt aErrCode);
+		CSdpOriginField* ParseSessionOwnerL(TInt aErrCode);
+		const TDesC8& ParseSessionNameL(TInt aErrCode);
+		const TDesC8& ParseInformationL(TInt aErrCode);
+		CUri8* ParseUriL(TInt aErrCode);
+		CDesC8ArraySeg* ParseEmailL(TInt aErrCode);
+		CDesC8ArraySeg* ParsePhoneL(TInt aErrCode);
+		CSdpConnectionField* ParseConnectionL(TInt aErrCode);
+		RPointerArray<CSdpBandwidthField>* ParseBandwidthL(TInt aErrCode);
+		RPointerArray<CSdpConnectionField>* ParseConnectionFieldsL(TInt aErrCode);
+		RPointerArray<CSdpTimeField>* ParseTimeFieldL(TInt aErrCode);
+		const TDesC8& ParseZoneAdjustmentL(TInt aErrCode);
+		CSdpKeyField* ParseEncryptionKeyL(TInt aErrCode);
+		RPointerArray<CSdpAttributeField>* ParseAttributeFieldL(TInt aErrCode);
+		RPointerArray<CSdpMediaField>* ParseMediaLevelL ();
+		RArray<TPtrC8> FirstLineArrayElementL(RStringPool aPool,
+											  TInt aIndex,
+											  TInt aErrCode);
+
+        RArray<TPtrC8>& LineArray();
+
+	private:
+
+		CSdpCodecParseUtil();
+		
+		void ConstructL(RStringPool aPool,const TDesC8& aValue,TInt aErrCode);
+
+	private: // Data
+		RArray<TPtrC8> iLineArray;
+		RArray<TPtrC8> iElementArray;
+		RStringPool iPool;
+		RPointerArray<CSdpTimeField>* iTimeFields;
+		RPointerArray<CSdpBandwidthField>* iBandwidthFields;
+		RPointerArray<CSdpAttributeField>* iAttributeFields;
+		RPointerArray<CSdpMediaField>* iMediaFields;
+		RPointerArray<CSdpConnectionField>* iConnectionFields;
+		CDesC8ArraySeg* iEmailFields;
+		CDesC8ArraySeg* iPhoneFields;
+		HBufC8* iToken;
+		TPtrC8 iData;
+	};
+
+#endif // CSDPCODECPARSEUTIL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/inc/sdpcodecstringconstants.h	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,219 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+// Autogenerated from epoc32/build/cafstreamingsupport/c_f439661e83f96b9c/localsdpcodec_dll/sdpcodecstringconstants.st by the stringtable tool - Do not edit
+
+#ifndef STRINGTABLE_SdpCodecStringConstants
+#define STRINGTABLE_SdpCodecStringConstants
+
+#include <stringpool.h>
+
+struct TStringTable;
+
+/**
+ * @publishedAll
+ * @released
+*/
+class SdpCodecStringConstants 
+	{
+public:
+	enum TStrings
+		{
+		// SDP field names:
+		/** v= */
+		EVersion,
+		/** o= */
+		EOrigin,
+		/** s= */
+		ESession,
+		/** i= */
+		EInfo,
+		/** u= */
+		EUri,
+		/** e= */
+		EEmail,
+		/** p= */
+		EPhone,
+		/** c= */
+		EConnection,
+		/** b= */
+		EBandwidth,
+		/** z= */
+		EZone,
+		/** k= */
+		EKey,
+		/** a= */
+		EAttribute,
+		/** t= */
+		ETime,
+		/** r= */
+		ERepeat,
+		/** m= */
+		EMedia,
+		// Predefined bandwidth modifiers:
+		/** CT */
+		EModifierCT,
+		/** AS */
+		EModifierAS,
+		// Typed time units:
+		/** d */
+		ETimeUnitDays,
+		/** h */
+		ETimeUnitHours,
+		/** m */
+		ETimeUnitMinutes,
+		/** s */
+		ETimeUnitSeconds,
+		// No typed time unit defined:
+		/**  */
+		ETimeUnitNone,
+		// Predefined encryption methods:
+		/** clear */
+		EMethodClear,
+		/** base64 */
+		EMethodBase64,
+		/** uri */
+		EMethodUri,
+		/** prompt */
+		EMethodPrompt,
+		// Predefined attributes:
+		/** cat */
+		EAttributeCat,
+		/** keywds */
+		EAttributeKeywds,
+		/** tool */
+		EAttributeTool,
+		/** ptime */
+		EAttributePtime,
+		/** maxptime */
+		EAttributeMaxptime,
+		/** recvonly */
+		EAttributeRecvonly,
+		/** sendrecv */
+		EAttributeSendrecv,
+		/** sendonly */
+		EAttributeSendonly,
+		/** inactive */
+		EAttributeInactive,
+		/** orient */
+		EAttributeOrient,
+		// Predefined Orient attribute values
+		/** portrait */
+		EAttributeOrientValuePortrait,
+		/** landscape */
+		EAttributeOrientValueLandscape,
+		/** seascape */
+		EAttributeOrientValueSeascape,
+		/** type */
+		EAttributeType,
+		/** charset */
+		EAttributeCharset,
+		/** sdplang */
+		EAttributeSdplang,
+		/** lang */
+		EAttributeLang,
+		/** framerate */
+		EAttributeFramerate,
+		/** quality */
+		EAttributeQuality,
+		/** control */
+		EAttributeControl,
+		/** range */
+		EAttributeRange,
+		/** etag */
+		EAttributeEtag,
+		/** des */
+		EAttributeDes,
+		/** curr */
+		EAttributeCurr,
+		/** conf */
+		EAttributeConf,
+		// Predefined Strength tag for Curr, Conf and Des attributes
+		/** mandatory */
+		EAttributeStatusStrengthTagMandatory,
+		/** optional */
+		EAttributeStatusStrengthTagOptional,
+		/** none */
+		EAttributeStatusStrengthTagNone,
+		/** failure */
+		EAttributeStatusStrengthTagFailure,
+		/** unknown */
+		EAttributeStatusStrengthTagUnknown,
+		// Predefined Status type for Curr, Conf and Des attributes
+		/** e2e */
+		EAttributeStatusTypeE2e,
+		/** local */
+		EAttributeStatusTypeLocal,
+		/** remote */
+		EAttributeStatusTypeRemote,
+		// Predefined Direction tag for Curr, Conf and Des attributes
+		/** none */
+		EAttributeStatusDirectionTagNone,
+		/** send */
+		EAttributeStatusDirectionTagSend,
+		/** recv */
+		EAttributeStatusDirectionTagRecv,
+		/** sendrecv */
+		EAttributeStatusDirectionTagSendrecv,
+		/** mid */
+		EAttributeMid,
+		/** group */
+		EAttributeGroup,
+		// Predefined semantics for Group attribute
+		/** LS */
+		EAttributeGroupSemanticLS,
+		/** FID */
+		EAttributeGroupSemanticFID,
+		/** SRF */
+		EAttributeGroupSemanticSRF,
+		/** rtpmap */
+		EAttributeRtpmap,
+		/** fmtp */
+		EAttributeFmtp,
+		// Predefined media types:
+		/** audio */
+		EMediaAudio,
+		/** video */
+		EMediaVideo,
+		/** application */
+		EMediaApplication,
+		/** data */
+		EMediaData,
+		/** control */
+		EMediaControl,
+		/** image */
+		EMediaImage,
+		// Predefined media transport protocols:
+		/** RTP/AVP */
+		EProtocolRtpAvp,
+		/** udp */
+		EProtocolUdp,
+		/** TCP */
+		EProtocolTcp,
+		// Network type:
+		/** IN */
+		ENetType,
+		// Address types:
+		/** IP4 */
+		EAddressTypeIP4,
+		/** IP6 */
+		EAddressType
+		};
+	static const TStringTable Table;	
+	};
+
+#endif // STRINGTABLE_SdpCodecStringConstants
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/inc/sdpcodectemplate.h	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2010 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:
+* Name          : SdpCodecTemplate.h
+* Part of       : Local SDP Codec
+* Interface     : -
+* Version       : 1.0
+*
+*/
+
+
+
+
+/**
+ @internalComponent
+*/
+
+#ifndef SDPCODECTEMPLATE_H
+#define SDPCODECTEMPLATE_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <stringpool.h>
+
+#include "_sdpdefs.h"
+#include "e32std.h"
+#include "stringpool.h"
+
+class RReadStream;
+class RWriteStream;
+
+template<class T> class SdpCodecTemplate
+	{
+    public: 
+
+		static void ExternalizeL(const T* aElement, RWriteStream& aWriteStream);
+		static void ExternalizeArrayL(RPointerArray<T> aArray,RWriteStream& aStream);
+		static void EncodeArrayL(RPointerArray<T> aArray, RWriteStream& aStream);
+		static void EncodeL(const T* aElement, RWriteStream& aWriteStream);
+		static void InternalizeArrayL(RPointerArray<T>& aArray, RReadStream& aStream);
+		static void 
+		CloneArrayL(RPointerArray<T>& aArray, RPointerArray<T> aSourceArray);
+
+	};
+
+#include "SdpCodecTemplate.inl"
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/inc/sdpcodectemplate.inl	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,132 @@
+/*
+* Copyright (c) 2010 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:
+* Name          : SdpCodecTemplate.inl
+* Part of       : SDP Codec
+* Interface     : -
+* Version       : 1.0
+*
+*/
+
+
+
+#ifndef SDPCODECTEMPLATE_INL
+#define SDPCODECTEMPLATE_INL
+
+//  INCLUDES
+#include <e32base.h>
+#include <stringpool.h>
+
+#include "_sdpdefs.h"
+#include "e32std.h"
+
+class RReadStream;
+class RWriteStream;
+
+// ---------------------------------------------------------------------------
+// SdpCodecTemplate<T>::ExternalizeL 
+// ---------------------------------------------------------------------------
+//
+template<class T> void SdpCodecTemplate<T>::ExternalizeL(const T* aElement,
+										RWriteStream& aWriteStream)
+	{
+	if(aElement)
+		{
+		aWriteStream.WriteUint8L (1);
+		aElement->ExternalizeL(aWriteStream);
+		}
+	else
+		{
+		aWriteStream.WriteUint8L (0);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// SdpCodecTemplate<T>::ExternalizeArrayL
+// ---------------------------------------------------------------------------
+//
+template<class T> void 
+SdpCodecTemplate<T>::ExternalizeArrayL(RPointerArray<T> aArray,
+						   RWriteStream& aStream)
+	{
+	aStream.WriteUint32L (aArray.Count());
+	for (TInt i = 0;i < aArray.Count();i++)
+		{
+		aArray[i]->ExternalizeL(aStream);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// SdpCodecTemplate<T>::EncodeArrayL
+// ---------------------------------------------------------------------------
+//
+template<class T> void 
+SdpCodecTemplate<T>::EncodeArrayL(RPointerArray<T> aArray, RWriteStream& aStream)
+	{
+	for (TInt i = 0;i < aArray.Count();i++)
+		{
+		aArray[i]->EncodeL(aStream);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// SdpCodecTemplate<T>::EncodeL
+// ---------------------------------------------------------------------------
+//
+template<class T> void SdpCodecTemplate<T>::EncodeL(const T* aElement,
+										RWriteStream& aWriteStream)
+	{
+	if(aElement)
+		{
+		aElement->EncodeL(aWriteStream);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// SdpCodecTemplate<T>::InternalizeArrayL
+// ---------------------------------------------------------------------------
+//
+template<class T> void 
+SdpCodecTemplate<T>::InternalizeArrayL(RPointerArray<T>& aArray, 
+								RReadStream& aStream)
+	{
+	TInt count = aStream.ReadUint32L();
+	for (TInt i = 0;i < count;i++)
+		{
+		T* obj = T::InternalizeL(aStream);
+		CleanupStack::PushL(obj);
+		User::LeaveIfError(aArray.Append(obj));
+		CleanupStack::Pop();//obj
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// SdpCodecTemplate<T>::CloneArrayL
+// ---------------------------------------------------------------------------
+//
+template<class T> void 
+SdpCodecTemplate<T>::CloneArrayL(RPointerArray<T>& aArray,
+						  RPointerArray<T> aSourceArray)
+	{
+	for (TInt i=0; i < (aSourceArray).Count(); i++)
+		{
+		T* obj = aSourceArray[i]->CloneL();
+		CleanupStack::PushL(obj);
+		User::LeaveIfError(aArray.Append(obj));
+		CleanupStack::Pop();//obj
+		}
+	}
+
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/inc/sdporiginfieldptrs.h	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2010 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:
+* Name          : SdpOriginFieldPtrs.h
+* Part of       : Local SDP Codec
+* Interface     : -
+* Version       : 1.0
+*
+*/
+
+
+
+
+/**
+ @internalComponent
+*/
+
+#ifndef CSDPORIGINFIELDPTRS_H
+#define CSDPORIGINFIELDPTRS_H
+
+//  INCLUDES
+#include <e32base.h>
+
+// CONSTANTS
+const TUint KMaxTInt64Digits = 30;
+
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATION
+/**
+ *	This class encapsulates the data of CSdpAttributeField.
+ *
+ *  @lib localsdpcodec.lib
+ */
+class CSdpOriginFieldPtrs : public CBase
+    {
+    public:
+    
+        static CSdpOriginFieldPtrs* NewL( TInt64 aSessionId,
+        								  TInt64 aSessionVersion );
+	    ~CSdpOriginFieldPtrs();
+
+        void SetUserNameL( const TDesC8& aUserName );        
+        const TDesC8& UserName() const;
+        
+        void SetSessionIdL( const TDesC8& aSessionId );
+        void SetSessionIdL( TInt64 aSessionId );
+        const TDesC8& SessionId() const;
+        
+        void SetSessionVersionL( const TDesC8& aSessionVersion );
+        void SetSessionVersionL( TInt64 aSessionVersion );
+        const TDesC8& SessionVersion() const;
+
+    private: // Second phase constructors
+
+        CSdpOriginFieldPtrs();
+        void ConstructL( TInt64 aSessionId, TInt64 aSessionVersion );
+    
+    private: // Data
+
+		// Owned
+		HBufC8* iUserName;
+		// Owned
+		HBufC8* iSessionId;
+		// Owned
+		HBufC8* iSessionVersion;
+    };
+
+#endif // CSDPORIGINFIELDPTRS_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/inc/sdputil.h	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,316 @@
+/*
+* Copyright (c) 2010 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:
+* Name          : SdpUtil.h
+* Part of       : Local SDP Codec
+* Interface     : -
+* Version       : 1.0
+*
+*/
+
+
+
+
+/**
+ @internalComponent
+*/
+
+#ifndef SDPUTIL_H
+#define SDPUTIL_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <stringpool.h>
+#include <e32std.h>
+#include "_sdpdefs.h"
+
+// FORWARD DECLARATIONS
+class RReadStream;
+class RWriteStream;
+class CSdpConnectionField;
+class CSSdpKeyField;
+class CSdpOriginField;
+class TInetAddr;
+
+// CLASS DECLARATION
+/**
+ *	Common utilities used in the implementation of the Local SDP codec.
+ *  Utility class, cannot be instantiated
+ */
+class SdpUtil
+	{
+
+    public: // New functions
+
+        /**
+         *  Generic method that checks that all aValue's chars are not on illegal charset
+         *
+         *  @param aIllegalChars Illegal character set
+         *  @param aValue String to be checked
+         *  @param aStart Start position of the string
+         *  @param aEnd End position of the string
+         *  @return Validity of the string
+         */
+		static TBool IsValidCharSet( 
+            const TDesC8& aIllegalChars, const TDesC8& aValue, TInt aStart, TInt aEnd );
+
+        /**
+         *  Checks that token list is valid (tokens with space as delimiter)
+         *
+         *  @param aValue String containing tokens
+         *  @return Validity of the string
+         */
+		static TBool IsTokenList( const TDesC8& aValue );
+
+        /**
+         *  Checks that the token is valid (substring inside string)
+         *
+         *  @param aValue String containing the token
+         *  @param aStart Start position of the token inside the string
+         *  @param aEnd End position of the token inside the string
+         *  @return Validity of the token
+         */
+		static TBool IsToken( const TDesC8& aValue, TInt aStart, TInt aEnd );
+
+        /**
+         *  Checks that the token is valid
+         *
+         *  @param aValue Token string 
+         *  @return Validity of the token
+         */
+		static TBool IsToken( const TDesC8& aValue );
+
+        /**
+         *  Checks that the byte string is valid (substring inside string)
+         *
+         *  @param aValue String 
+         *  @param aStart Start position of the byte string inside the string
+         *  @param aEnd End position of the byte string inside the string
+         *  @return Validity of the byte string
+         */
+		static TBool IsByteString( const TDesC8& aValue, TInt aStart, TInt aEnd );
+
+        /**
+         *  Checks that the byte string is valid
+         *
+         *  @param aValue String containing the token        
+         *  @return Validity of the byte string
+         */
+		static TBool IsByteString( const TDesC8& aValue );
+
+        /**
+         *  Checks that the substring is a token-byte string pair with colon char
+         *  as delimiter of the two strings
+         *
+         *  @param aValue String containing the pair
+         *  @param aStart Start position of the string pair
+         *  @param aEnd End position of the string pair        
+         *  @return Validity of the pair
+         */
+		static TBool IsTokenTextPair( 
+            const TDesC8& aValue, TInt aStart, TInt aEnd );
+
+        /**
+         *  Checks that the string conatins valid token-byte string pair with color
+         *  char as delimiter of the two strings
+         *
+         *  @param aValue String containing the pair        
+         *  @return Validity of the byte string
+         */
+		static TBool IsTokenTextPair( const TDesC8& aValue );
+
+        /**
+         *  Checks that the string does not contain any whitespace characters
+         *
+         *  @param aValue String        
+         *  @return Validity of the string
+         */
+		static TBool IsNonWhitespace( const TDesC8& aValue );
+
+        /**
+         *  Checks that the string contains a valid NTP-time element
+         *
+         *  @param aValue String
+         *  @return Validity of the string
+         */
+		static TBool IsValidNtpTime( const TDesC8& aValue );
+
+        /**
+         *  Divides the buffer into a number of lines. Each line is marked
+         *  as a TPtrC8 object and added to array that is returned to the user
+         *  NOTE! Each line in the returned array ends in LF character
+         *  NOTE! The aLines must end in LF character, not '\0' character
+         *
+         *  @param aLines Buffer that contains all the string
+         *  @param aErrCode Error code that is used on leave situations, when the
+         *                  aLines parameter contains invalid string set
+         *  @return Array that contains the division of buffer to lines
+         */
+        static RArray<TPtrC8> DivideToLinesL( 
+            const TDesC8& aLines, TInt aErrCode );
+
+        /**
+         *  Parses elements from each line. The first item in the returned array
+         *  is the field attribute and equal character (e.g. "a=", "c="), following
+         *  elements are parsed from the string using space character as delimiter
+         *
+         *  @param aLine String containing line that ends to LF character
+         *  @param aErrCode Error code that is used on leave situations, when
+         *                  the contents of aLine are illegal
+         *  @return Array that contains the division of string to elements
+         */
+        static RArray<TPtrC8> GetElementsFromLineL( 
+            const TDesC8& aLine, TInt aErrCode );
+    
+        /**
+         *  Parses elements from each line. The first item in the returned array
+         *  is the field attribute and equal character (e.g. "a=", "c="), following
+         *  elements are parsed from the string using aDelimiter as delimiter
+         *
+         *  @param aLine String containing line that ends to LF character
+         *  @param aDelimiter Delimiter character
+         *  @param aErrCode Error code that is used on leave situations, when
+         *                  the contents of aLine are illegal
+         *  @return Array that contains the division of string to elements
+         */
+        static RArray<TPtrC8> GetElementsFromLineL( 
+            const TDesC8& aLine, TChar aDelimiter, TInt aErrCode ); 
+            
+        /**
+         *  Parses elements from each line. The first item in the returned array
+         *  is the field attribute and equal character (e.g. "a=", "c="), following
+         *  elements are parsed from the string using space character as delimiter
+         *
+         *  @param aLexer Lexer that has been initialized with the string
+         *  @param aErrCode Error code that is used on leave situations, when
+         *                  the contents of aLine are illegal
+         *  @return Array that contains the division of string to elements
+         */       
+        static RArray<TPtrC8> GetElementsFromLineL( 
+            TLex8& aLexer, TChar aDelimiter, TInt aErrCode );
+        
+        /**
+         *  Checks if the string contains only POS-DIGIT characters
+         *
+         *  @param aDes String
+         *  @return Validity of POS-DIGIT string
+         */
+        static TBool IsPosDigit( const TDesC8& aDes );
+
+        /**
+         *  Checks if the string contains only DIGIT characters
+         *
+         *  @param aDes String
+         *  @return Validity of DIGIT string
+         */
+        static TBool IsDigit( const TDesC8& aDes );
+
+        /**
+         *  Checks if the string contains valid characters
+         *  
+         *  @param aValidChars Valid characters allowed in the string
+         *  @param aDes String
+         *  @return Validity of the string
+         */
+        static TBool IsValidChars( const TDesC8& aValidChars, const TDesC8& aDes );                
+
+        /**
+         *  Checks if the string contains only token characters
+         *
+         *  @param aValue String
+         *  @return Validity of the string
+         */
+        static TBool IsTokenChar( const TDesC8& aValue );
+
+        /**
+         *  Checks if the character is a valid token character
+         *
+         *  @param aChar Character
+         *  @return Validity of the character
+         */
+		static TBool IsTokenChar( TChar aChar );
+
+        /**
+         *  Checks if the string is a valid token. The string can contain slash character,
+         *  which divides the line into two tokens. The two tokens are then individually
+         *  verified.
+         *
+         *  @param aValue String
+         *  @return Validity of the string
+         */
+		static TBool IsTokenCharWithOptionalSlash( const TDesC8& aValue );
+
+        /**
+         *  Checks if the string is a valid token. The string can contain space characters,
+         *  which divides the string into a number of tokens. Each token is then individually
+         *  verified.
+         *
+         *  @param aValue String
+         *  @return Validity of the string
+         */
+		static TBool IsTokenCharWithSpacesL( const TDesC8& aValue );
+
+        /**
+         *  Checks if the string is a valid token. The string can contain slash character,
+         *  which divides the line into two tokens. The two tokens are then individually
+         *  verified.
+         *
+         *  @param aValue String
+         *  @return Validity of the string
+         */
+		static void EncodeBufferL( 
+            const TDesC8& aValue, TInt aIndex, RWriteStream& aStream );
+
+        /**
+         *  Sets default network type ("IN") and default address type ("IP4" or "IP6")
+         *  to variables given as parameters
+         *  
+         *  @param aPool String pool
+         *  @param aInetAddr Internet address
+         *  @param aNetType Network type
+         *  @param aAddressType Address type
+         */
+        static void SetDefaultNetTypeAndAddrType( 
+            RStringPool aPool, const TInetAddr& aAddress,
+            RStringF& aNetType, RStringF& aAddressType );
+
+        /**
+         * Skips spaces until next line break, if the line break can be found.
+         * @param aLexer
+         * @return ETrue if the line break was found, otherwise EFalse. 
+         */
+        static TBool SkipSpacesUntilNextLineBreak( TLex8& aLexer );
+ 
+    private:
+
+        /**
+         *  After the field tag has been parsed out, all the field elements are
+         *  parsed in this method
+         *
+         *  @param aArray Reference to the array that contains the chopped elements
+         *  @param aLexer Used lexer
+         *  @param aDelimiter Delimiter character that determines the separation of elements
+         *  @param aErrCode The error code that is used on leaves, when the argument is invalid
+         */
+        static void ChopElementsFromLineL( 
+            RArray<TPtrC8>& aArray, TLex8& aLexer, TChar aDelimiter, TInt aErrCode );
+        
+        /**
+         *  Private constructor         
+         *  This class can never be instantiated
+         */
+        SdpUtil();
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/csdpcodecstringpool.cpp	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,82 @@
+// Copyright (c) 2010 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:
+// Name          : CSdpCodecStringPool.cpp
+// Part of       : Local SDP Codec
+// Version       : 1.0
+//
+
+
+
+#include <stringpool.h>
+#include "csdpcodecstringpool.h"
+#include "sdpcodecstringconstants.h"
+#include "_sdpdefs.h"
+
+
+// ----------------------------------------------------------------------------
+// CSdpCodecStringPool::NewLC
+// ----------------------------------------------------------------------------
+//
+CSdpCodecStringPool* CSdpCodecStringPool::NewLC()
+	{
+	CSdpCodecStringPool* self = new(ELeave)CSdpCodecStringPool;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpCodecStringPool::~CSdpCodecStringPool
+// ----------------------------------------------------------------------------
+//
+CSdpCodecStringPool::~CSdpCodecStringPool()
+	{
+	iPool.Close();
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpCodecStringPool::StringPool
+// ----------------------------------------------------------------------------
+//
+RStringPool CSdpCodecStringPool::StringPool()
+	{
+	return iPool;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpCodecStringPool::StringTable
+// ----------------------------------------------------------------------------
+//
+const TStringTable& CSdpCodecStringPool::StringTable()
+	{
+	return SdpCodecStringConstants::Table;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpCodecStringPool::CSdpCodecStringPool
+// ----------------------------------------------------------------------------
+//
+CSdpCodecStringPool::CSdpCodecStringPool()
+	{
+	}
+	
+// ----------------------------------------------------------------------------
+// CSdpCodecStringPool::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CSdpCodecStringPool::ConstructL()
+	{
+	iPool.OpenL(SdpCodecStringConstants::Table);
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdpattributefield.cpp	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,986 @@
+// Copyright (c) 2010 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:
+// Name          : SdpAttributeField.h
+// Part of       : Local SDP Codec
+// Version       : 1.0
+//
+
+
+
+#include <s32strm.h>
+#include <uri8.h>
+#include "sdpattributefield.h"
+#include "sdpattributefieldptrs.h"
+#include "sdpfmtattributefield.h"
+#include "sdputil.h"
+#include "sdpcodec.pan"
+#include "sdpcodecstringconstants.h"
+#include "sdpcodecconstants.h"
+#include "sdpcodecstringpool.h"
+#include "sdprtpmapvalue.h"
+#include "sdpcodecerr.h"
+#include "_sdpdefs.h"
+
+// CONSTANTS
+const TInt KHeaderIndex = 0;
+const TInt KAttributeIndex = 1;
+const TInt KMinAttributeNum = 2;
+const TInt KMaxSubtagLength = 8;
+const TInt KMaxPrimarySubtagLength = 8;
+
+// Valid property attribute strings
+const TInt KPropertyStringNum = 4;
+const SdpCodecStringConstants::TStrings 
+    KValidPropertyStrings[KPropertyStringNum] =
+    {
+    SdpCodecStringConstants::EAttributeRecvonly,
+    SdpCodecStringConstants::EAttributeSendrecv,
+    SdpCodecStringConstants::EAttributeSendonly,
+    SdpCodecStringConstants::EAttributeInactive
+    };
+
+// Valid value attribute strings
+const TInt KValueStringNum = 22;
+const SdpCodecStringConstants::TStrings KValidValueStrings[KValueStringNum] =
+    {
+    SdpCodecStringConstants::EAttributeCat,
+    SdpCodecStringConstants::EAttributeKeywds,
+    SdpCodecStringConstants::EAttributeTool,
+    SdpCodecStringConstants::EAttributePtime,
+    SdpCodecStringConstants::EAttributeMaxptime,
+    SdpCodecStringConstants::EAttributeRtpmap,
+    SdpCodecStringConstants::EAttributeOrient,
+    SdpCodecStringConstants::EAttributeType,
+    SdpCodecStringConstants::EAttributeCharset,
+    SdpCodecStringConstants::EAttributeSdplang,
+    SdpCodecStringConstants::EAttributeLang,
+    SdpCodecStringConstants::EAttributeFramerate,
+    SdpCodecStringConstants::EAttributeQuality,    
+    SdpCodecStringConstants::EAttributeFmtp,
+    SdpCodecStringConstants::EAttributeControl,
+    SdpCodecStringConstants::EAttributeEtag,
+    SdpCodecStringConstants::EAttributeMid,
+    SdpCodecStringConstants::EAttributeGroup,
+    SdpCodecStringConstants::EAttributeCurr,
+    SdpCodecStringConstants::EAttributeDes,
+    SdpCodecStringConstants::EAttributeConf,
+    SdpCodecStringConstants::EAttributeRange
+    };
+
+// Valid orient value strings
+const TInt KValidOrientStringNum = 3;
+static const TText8* const KOrientStrings[KValidOrientStringNum] = 
+    {
+    _S8("portrait\0"),
+    _S8("landscape\0"),
+    _S8("seascape\0")
+    };
+
+const TInt KValidGroupSemanticsNum = 3;
+static const TText8* const KGroupSemantics[KValidGroupSemanticsNum] =
+    {
+    _S8("LS"),
+    _S8("FID"),
+    _S8("SRF")
+    };
+
+const TInt KValidStatusTypeNum = 3;
+static const TText8* const KStatusTypes[KValidStatusTypeNum] =
+    {
+    _S8("e2e"),
+    _S8("local"),
+    _S8("remote")
+    };
+
+const TInt KValidDirectionTagsNum = 4;
+static const TText8* const KDirectionTags[KValidDirectionTagsNum] =
+    {
+    _S8("none"),
+    _S8("send"),
+    _S8("recv"),
+    _S8("sendrecv")
+    };
+
+const TInt KValidStrengthTagsNum = 5;
+static const TText8* const KStrengthTags[KValidStrengthTagsNum] =
+    {
+    _S8("mandatory"),
+    _S8("optional"),
+    _S8("none"),
+    _S8("failure"),
+    _S8("unknown")
+    };
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::CSdpAttributeField
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSdpAttributeField::CSdpAttributeField()
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSdpAttributeField::ConstructL( const TDesC8& aText )
+	{
+    // aText should be in format
+    // a=<attribute> or a=<attribute>:<value> or 
+    // a=<attribute>:<value> <value specific attributes>
+
+    __ASSERT_ALWAYS(aText.Length() > 0, User::Leave(KErrSdpCodecAttributeField));
+
+    iPool = SdpCodecStringPool::StringPoolL();
+    CreateAttributeFieldPtrsL();
+    
+    RArray<TPtrC8> array;
+    
+    TInt length = aText.Length();
+    if ( aText[aText.Length() - 1] == KLFChar )
+        {
+        if ( length > 1 && aText[aText.Length() - 2] == KCRChar )
+            {
+            length--;
+            }
+        length--;
+        }  
+    TPtrC8 restValue( aText.Left( length ));
+    
+    __ASSERT_ALWAYS(SdpUtil::IsByteString(restValue) 
+            || SdpUtil::IsToken(restValue)
+            || SdpUtil::IsValidChars(KEqualStr, restValue),
+            User::Leave(KErrSdpCodecAttributeField));
+    
+    array = SdpUtil::GetElementsFromLineL( aText, KErrSdpCodecAttributeField );
+    CleanupClosePushL( array );
+
+    RStringF origHeader =  iPool.StringF( SdpCodecStringConstants::EAttribute, 
+                                          SdpCodecStringConstants::Table );
+    
+    // We need to have at least two tokens (and this should be always the case,
+    // unless TSdpUtil::GetElementsFromLineL() gets modified)
+    __ASSERT_ALWAYS( origHeader.DesC().Compare( array[KHeaderIndex] ) == 0
+                    && array.Count() >= KMinAttributeNum,
+        User::Leave( KErrSdpCodecAttributeField ) );
+        
+    if ( array[KAttributeIndex].Locate( KColonChar ) == KErrNotFound )
+        {
+        // For property attributes exactly two attributes are needed
+        __ASSERT_ALWAYS( array.Count() == KMinAttributeNum,
+            User::Leave( KErrSdpCodecAttributeField ));
+
+        FormatProperyAttributeL( array[KAttributeIndex] );  
+        }
+    else
+        {    
+        HBufC8* attribute = NULL;
+        HBufC8* value = NULL;             
+        CreateAttributeAndValueStringsLC( array, attribute, value );
+        FormatValueAttributeL( *attribute, *value );
+        CleanupStack::PopAndDestroy( 2 );   // attribute, value
+        }
+
+    CleanupStack::PopAndDestroy();  // array
+
+    __TEST_INVARIANT;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSdpAttributeField::ConstructL( RStringF aAttribute, 
+                                    const TDesC8& aValue )
+	{	
+    iPool = SdpCodecStringPool::StringPoolL();
+    CreateAttributeFieldPtrsL();
+
+    TBool property( EFalse );
+    for ( TInt i( 0 ); i < KPropertyStringNum && !property; i++ )
+        {
+        if ( aAttribute == 
+             iPool.StringF( KValidPropertyStrings[i], 
+                            SdpCodecStringConstants::Table ) )
+            {
+            property = ETrue;
+            }
+        }
+
+    if ( property || aValue.Length() == 0)
+        {
+        // For property attributes, no value is valid value
+        __ASSERT_ALWAYS( aValue.Length() == 0, 
+            User::Leave( KErrSdpCodecAttributeField ));
+                   
+        FormatProperyAttributeL( aAttribute.DesC() );  
+        }
+    else
+        {   
+        FormatValueAttributeL( aAttribute.DesC(), aValue );        
+        }        
+
+    __TEST_INVARIANT;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::DecodeL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpAttributeField* CSdpAttributeField::DecodeL( const TDesC8& aText )
+	{
+	CSdpAttributeField* obj = DecodeLC( aText );
+	CleanupStack::Pop();
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::DecodeLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpAttributeField* CSdpAttributeField::DecodeLC( 
+    const TDesC8& aText )
+	{
+	CSdpAttributeField* obj = new ( ELeave ) CSdpAttributeField;
+	CleanupStack::PushL( obj );
+	obj->ConstructL( aText );
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpAttributeField* CSdpAttributeField::NewL( RStringF aAttribute, 
+                                                    const TDesC8& aValue )
+	{
+	CSdpAttributeField* obj = NewLC( aAttribute, aValue );
+	CleanupStack::Pop();
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpAttributeField* CSdpAttributeField::NewLC( RStringF aAttribute,
+                                                        const TDesC8& aValue )
+	{
+	CSdpAttributeField* obj = new ( ELeave ) CSdpAttributeField;
+	CleanupStack::PushL(obj);
+	obj->ConstructL( aAttribute, aValue );
+	return obj;
+	}
+
+// Destructor
+EXPORT_C CSdpAttributeField::~CSdpAttributeField()
+	{    
+    iAttribute.Close();
+    CSdpAttributeFieldPtrs* tmp = 
+        reinterpret_cast< CSdpAttributeFieldPtrs* >( iValue ); 
+	delete tmp;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::EncodeL
+// Encodes a string into valid output string format
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpAttributeField::EncodeL( RWriteStream& aStream ) const
+	{
+	__TEST_INVARIANT;
+    
+    RStringF header = iPool.StringF( SdpCodecStringConstants::EAttribute, 
+                                     SdpCodecStringConstants::Table );
+    aStream.WriteL( header.DesC() );
+    aStream.WriteL( iAttribute.DesC() );
+    TPtrC8 value( AttributeFieldPtrs().Value() );
+    if ( value.Length() > 0 )
+        {
+        aStream.WriteL( KColonStr );
+        aStream.WriteL( value );
+        }
+    aStream.WriteL( KCRLFStr );
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::CloneL
+// Clones an object and returns the new attribute field
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpAttributeField * CSdpAttributeField::CloneL() const
+	{
+	__TEST_INVARIANT;
+
+    CSdpAttributeField* obj = 
+        CSdpAttributeField::NewL( iAttribute, AttributeFieldPtrs().Value() );
+
+	__ASSERT_DEBUG( *this == *obj, 
+                    User::Panic(KSdpCodecPanicCat, KSdpCodecPanicInternal) );
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::operator==
+// Checks if the two attribute fields are equal
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CSdpAttributeField::operator== (
+    const CSdpAttributeField& aObj ) const
+	{
+	__TEST_INVARIANT;
+
+    return ( iAttribute == aObj.Attribute() && 
+             AttributeFieldPtrs().Value().CompareF( aObj.Value() ) == 0 );
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::Attribute
+// Returns attribute part of attribute field
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RStringF CSdpAttributeField::Attribute() const
+	{
+    __TEST_INVARIANT;
+    return iAttribute;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::Value
+// Returns value part of attribute field
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC8& CSdpAttributeField::Value() const
+	{
+    __TEST_INVARIANT;
+    
+    return AttributeFieldPtrs().Value();
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::SetL
+// Sets new attribute field values
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpAttributeField::SetL( RStringF aAttribute, 
+                                        const TDesC8& aValue )
+	{
+    __TEST_INVARIANT;
+
+    ConstructL( aAttribute, aValue ); 
+
+    __TEST_INVARIANT;  
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::AssignTo
+// Assigns attribute to a format attribute
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpAttributeField::AssignTo(
+    const CSdpFmtAttributeField& aFmtAttribute)
+	{
+	AttributeFieldPtrs().SetFmtAttribute(&aFmtAttribute);
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::BelongsTo
+// Check if the attribute field belongs to the format attribute
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CSdpAttributeField::BelongsTo(
+    const CSdpFmtAttributeField& aFmtAttribute) const
+	{
+	return ( AttributeFieldPtrs().FmtAttribute() == &aFmtAttribute );
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::ExternalizeL
+// Externalizes the object to stream
+// -----------------------------------------------------------------------------
+//
+void CSdpAttributeField::ExternalizeL( RWriteStream& aStream ) const
+	{
+    // Attribute
+    aStream.WriteUint32L( iAttribute.DesC().Length() );
+    aStream.WriteL( iAttribute.DesC() );
+    // Value
+    TPtrC8 value( AttributeFieldPtrs().Value() );
+    aStream.WriteUint32L( value.Length() );
+    if ( value.Length() > 0 )
+        {
+        aStream.WriteL( value, value.Length() );
+        }
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::InternalizeL
+// Internalizes the object from stream
+// -----------------------------------------------------------------------------
+//
+CSdpAttributeField* CSdpAttributeField::InternalizeL( RReadStream& aStream )
+	{
+    RStringPool pool = SdpCodecStringPool::StringPoolL();
+
+	// Attribute
+    HBufC8* tmpBuf2;
+    TUint32 length = aStream.ReadUint32L();
+    HBufC8* tmpBuf = HBufC8::NewLC( length );
+    TPtr8 ptr( tmpBuf->Des() );
+    aStream.ReadL( ptr, length ); 
+    RStringF attribute = pool.OpenFStringL( ptr );
+    CleanupClosePushL( attribute );
+
+    length = aStream.ReadUint32L();
+    if ( length > 0 )
+        {
+        tmpBuf2 = HBufC8::NewLC( length );
+        TPtr8 ptr2( tmpBuf2->Des() );
+        aStream.ReadL( ptr2, length );
+        }
+    else
+        {
+        tmpBuf2 = KNullDesC8().AllocLC();
+        }
+
+    CSdpAttributeField* obj = CSdpAttributeField::NewL( attribute, *tmpBuf2 );
+    CleanupStack::PopAndDestroy( 3 );  // attribute, tmpBuf, tmpBuf2
+
+    return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::FormatPropertyAttributeL
+// Formats and initializes class to be a property attribute
+// -----------------------------------------------------------------------------
+//
+void CSdpAttributeField::FormatProperyAttributeL( const TDesC8& aAttribute )
+    {
+    __ASSERT_ALWAYS( SdpUtil::IsToken( aAttribute ), 
+        User::Leave( KErrSdpCodecAttributeField ));
+
+    TBool found( EFalse );
+    for ( TInt i( 0 ); i < KPropertyStringNum && !found; i++ )
+        {
+        RStringF attrString = 
+            iPool.StringF( KValidPropertyStrings[i], 
+                        SdpCodecStringConstants::Table );
+
+        if ( attrString.DesC().CompareF( aAttribute ) == 0 )
+            {
+            AttributeFieldPtrs().SetValueL( KNullDesC8 );
+            
+            iAttribute.Close();           
+            iAttribute = attrString.Copy();            
+            iPropertyAttribute = ETrue;            
+
+            found = ETrue;
+            }                                       
+        }
+
+    if ( !found )
+        {
+        HBufC8* tempValue = KNullDesC8().AllocLC();
+        SetNotPredefinedAttributeL(aAttribute, *tempValue);
+        CleanupStack::PopAndDestroy(); // tempValue
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::FormatValueAttributeL
+// Formats and initializes class to be a value attribute
+// -----------------------------------------------------------------------------
+//
+void CSdpAttributeField::FormatValueAttributeL( const TDesC8& aAttribute,
+                                                const TDesC8& aValue )
+    {
+    TBool found( EFalse ); 
+
+    __ASSERT_ALWAYS( SdpUtil::IsToken( aAttribute ) 
+                && SdpUtil::IsByteString( aValue ),
+            User::Leave( KErrSdpCodecAttributeField ) );
+
+    TInt i = 0;
+    for( i = 0; i < KPropertyStringNum && !found; i++)
+        {
+        RStringF attrString = 
+            iPool.StringF( KValidPropertyStrings[i], 
+                        SdpCodecStringConstants::Table );
+
+        if ( attrString.DesC().CompareF( aAttribute ) == 0 )
+            {
+            //found = ETrue;
+            User::Leave(KErrSdpCodecAttributeField);
+            }
+        }
+    
+    for ( i = 0; i < KValueStringNum && !found; i++ )
+        {
+        RStringF attrString = 
+            iPool.StringF( KValidValueStrings[i], 
+                        SdpCodecStringConstants::Table );
+
+        if ( attrString.DesC().CompareF( aAttribute ) == 0 )
+            {
+            VerifyValueAttributeL( KValidValueStrings[i], aValue );
+            iAttribute.Close();                          
+            iAttribute = attrString.Copy();            
+            found = ETrue;
+            }
+        }
+
+    if ( !found )
+        {
+        SetNotPredefinedAttributeL(aAttribute, aValue);
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::VerifyValueAttributeL
+// Verifies that value given to the attribute is valid
+// -----------------------------------------------------------------------------
+//
+void CSdpAttributeField::VerifyValueAttributeL( 
+    SdpCodecStringConstants::TStrings aString,
+    const TDesC8& aValue )
+    {
+    TUint str( aString );
+    switch ( str )
+        {
+        case SdpCodecStringConstants::EAttributeCat:
+        case SdpCodecStringConstants::EAttributeType:    
+        case SdpCodecStringConstants::EAttributeCharset: 
+        case SdpCodecStringConstants::EAttributeEtag:
+            __ASSERT_ALWAYS( aValue.Length() > 0 
+                && aValue.Locate( KSPChar ) == KErrNotFound,
+            User::Leave( KErrSdpCodecAttributeField ) );
+            break;
+
+        case SdpCodecStringConstants::EAttributeKeywds:
+        case SdpCodecStringConstants::EAttributeTool:      
+            __ASSERT_ALWAYS( aValue.Length() > 0, 
+                 User::Leave( KErrSdpCodecAttributeField ) );
+            break;
+
+        case SdpCodecStringConstants::EAttributePtime:
+        case SdpCodecStringConstants::EAttributeMaxptime:
+        case SdpCodecStringConstants::EAttributeQuality:
+            __ASSERT_ALWAYS( SdpUtil::IsDigit( aValue ),
+                User::Leave( KErrSdpCodecAttributeField ) );
+            break;
+
+        case SdpCodecStringConstants::EAttributeOrient:
+            CheckValidOrientL( aValue );
+            break;
+      
+        case SdpCodecStringConstants::EAttributeSdplang:
+        case SdpCodecStringConstants::EAttributeLang:
+            CheckValidLangStrL( aValue );
+            break;
+
+        case SdpCodecStringConstants::EAttributeFramerate:
+            CheckValidFrameRateL( aValue );
+            break;
+
+        case SdpCodecStringConstants::EAttributeControl:
+            CheckValidControlL( aValue );
+            break;
+
+        case SdpCodecStringConstants::EAttributeMid:
+            if (SdpUtil::IsToken( aValue ) == EFalse)
+                {
+                User::Leave( KErrSdpCodecAttributeField );
+                }
+            break;
+
+        case SdpCodecStringConstants::EAttributeGroup:
+            CheckValidGroupL( aValue );
+            break;
+
+        case SdpCodecStringConstants::EAttributeCurr:
+            CheckValidCurrAndConfL( aValue );
+            break;
+        
+        case SdpCodecStringConstants::EAttributeDes:
+            CheckValidDesL( aValue );
+            break;
+
+        case SdpCodecStringConstants::EAttributeConf:
+            CheckValidCurrAndConfL( aValue );
+            break;
+
+        case SdpCodecStringConstants::EAttributeRange:
+            CheckValidRangeL( aValue );
+            break;
+
+        case SdpCodecStringConstants::EAttributeRtpmap:
+            CheckValidRtpmapL( aValue );
+            break;
+
+        case SdpCodecStringConstants::EAttributeFmtp:
+            CheckValidFmtpL( aValue );
+            break;
+
+        default:
+            User::Leave( KErrSdpCodecAttributeField );
+            break;
+        }
+
+    AttributeFieldPtrs().SetValueL( aValue );
+    iPropertyAttribute = EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::CreateAttributeAndValueStringsLC
+// Forms attribute and value strings
+// -----------------------------------------------------------------------------
+//
+void CSdpAttributeField::CreateAttributeAndValueStringsLC( 
+    RArray<TPtrC8>& aArray,
+    HBufC8*& aAttribute,
+    HBufC8*& aValue )
+    {
+    TInt pos = aArray[KAttributeIndex].Locate( KColonChar );
+    __ASSERT_ALWAYS( pos > 0, User::Leave( KErrSdpCodecAttributeField ) );
+
+    aAttribute = HBufC8::NewLC( pos );
+    aAttribute->Des().Copy( aArray[KAttributeIndex].Left( pos ) );
+
+    // Find out the total length of value string
+    TPtrC8 initialValue( aArray[KAttributeIndex].Right( 
+                            aArray[KAttributeIndex].Length() - pos - 1 ) );
+
+    TInt valueLength( initialValue.Length() );    
+    for ( TInt i( KAttributeIndex + 1 ); i < aArray.Count(); i++ )
+        {
+        valueLength += KSPStr().Length();
+        valueLength += aArray[i].Length();
+        }
+
+    // Copy the value string to the value buffer
+    aValue = HBufC8::NewLC( valueLength );
+    aValue->Des().Append( initialValue );
+    for ( TInt j( KAttributeIndex + 1 ); j < aArray.Count(); j++ )
+        {
+        aValue->Des().Append( KSPStr );
+        aValue->Des().Append( aArray[j] ) ;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::CheckValidOrientL
+// Checks if value is valid orient value
+// -----------------------------------------------------------------------------
+//
+void CSdpAttributeField::CheckValidOrientL( const TDesC8& aValue )
+    {    
+    TBool found( EFalse );
+    for ( TInt i( 0 ); i < KValidOrientStringNum && !found; i++ )
+        {
+        TPtrC8 strPtr( KOrientStrings[i] );
+        if ( strPtr.CompareF( aValue ) == 0 )
+            {
+            found = ETrue;
+            } 
+        }
+
+    __ASSERT_ALWAYS(found, User::Leave( KErrSdpCodecAttributeField ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::CheckValidLangStrL
+// Checks if value is valid language tag
+// -----------------------------------------------------------------------------
+//
+void CSdpAttributeField::CheckValidLangStrL( const TDesC8& aValue )
+    {
+    // Language-Tag = Primary-subtag *( "-" Subtag )
+    // Primary-subtag = 1*8ALPHA
+    // Subtag = 1*8(ALPHA / DIGIT)
+    TInt primarySubtagPos = aValue.Locate( KHyphenChar );
+
+    if ( primarySubtagPos > KMaxPrimarySubtagLength )
+        {
+        User::Leave( KErrSdpCodecAttributeField );
+        }    
+
+    TInt subtagPos( primarySubtagPos );    
+    TPtrC8 ptr( aValue.Right( aValue.Length() - subtagPos - 1 ) );
+    // Check all subtags
+    while ( subtagPos != ptr.Length() )
+        {
+        subtagPos = ptr.Locate( KHyphenChar );
+            
+        if ( subtagPos == KErrNotFound )
+            {
+            subtagPos = ptr.Length();
+            }
+      
+        // Check length
+        __ASSERT_ALWAYS( subtagPos > 0 && subtagPos < KMaxSubtagLength,
+            User::Leave( KErrSdpCodecAttributeField ) );
+   
+        if ( subtagPos != ptr.Length() )
+            {
+            ptr.Set( aValue.Right( ptr.Length() - subtagPos - 1 ) );
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::CheckValidFrameRateL
+// Checks if value is valid framerate value
+// -----------------------------------------------------------------------------
+//
+void CSdpAttributeField::CheckValidFrameRateL( const TDesC8& aValue )
+    {
+    TInt dotFound = 0;
+    // There can be one dot and digits
+    for ( TInt i( 0 ); i < aValue.Length(); i++ )
+        {
+        __ASSERT_ALWAYS((aValue[i] == KDotChar || TChar( aValue[i] ).IsDigit())
+            && dotFound <= 1,
+            User::Leave( KErrSdpCodecAttributeField ));
+                        
+        if ( aValue[i] == KDotChar )
+            {
+            dotFound++;
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::CheckValidControlL
+// Checks if value is valid uri for group attribute
+// -----------------------------------------------------------------------------
+//      
+void CSdpAttributeField::CheckValidControlL( const TDesC8& aValue )
+    {
+    TUriParser8 parser;
+	User::LeaveIfError(parser.Parse(aValue));
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::CheckValidGroupL
+// Checks if value is valid value for group attribute
+// -----------------------------------------------------------------------------
+//      
+void CSdpAttributeField::CheckValidGroupL( const TDesC8& aValue )
+    {
+   ValidValueInListL(KValidGroupSemanticsNum, KGroupSemantics, aValue);
+    TInt pos = aValue.Locate( KSPChar );
+    TPtrC8 ptr(aValue);
+
+    while ( pos != KErrNotFound)
+        {
+        ptr.Set( ptr.Right( ptr.Length() - pos - 1 ) );
+        pos = ptr.Locate( KSPChar );           
+        }    
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::CheckValidDesL
+// Checks if value is valid value for des attribute
+// -----------------------------------------------------------------------------
+//      
+void CSdpAttributeField::CheckValidDesL( const TDesC8& aValue )
+    {
+    TInt pos = aValue.Locate( KSPChar );
+    __ASSERT_ALWAYS(pos > 0, User::Leave( KErrSdpCodecAttributeField ));
+    TPtrC8 ptr(aValue.Left(pos));
+    __ASSERT_ALWAYS( SdpUtil::IsToken(ptr), 
+        User::Leave( KErrSdpCodecAttributeField ) );
+        
+    ptr.Set(aValue.Right( aValue.Length() - pos - 1 ));
+    pos = ptr.Locate( KSPChar );
+    __ASSERT_ALWAYS(pos > 0, User::Leave( KErrSdpCodecAttributeField ));
+    ValidValueInListL(KValidStrengthTagsNum, KStrengthTags, ptr.Left( pos ));
+
+    ptr.Set(ptr.Right( ptr.Length() - pos - 1 ));
+    pos = ptr.Locate( KSPChar );
+    __ASSERT_ALWAYS(pos > 0, User::Leave( KErrSdpCodecAttributeField ));
+    ValidValueInListL(KValidStatusTypeNum, KStatusTypes, ptr.Left( pos ));
+    
+    ptr.Set(ptr.Right( ptr.Length() - pos - 1 ));
+    __ASSERT_ALWAYS(ptr.Locate( KSPChar ) == KErrNotFound, 
+                    User::Leave( KErrSdpCodecAttributeField ));
+    ValidValueInListL(KValidDirectionTagsNum, KDirectionTags, ptr);
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::CheckValidCurrAndConfL
+// Checks if value is valid value for curr and conf attribute
+// -----------------------------------------------------------------------------
+//      
+void CSdpAttributeField::CheckValidCurrAndConfL( const TDesC8& aValue )
+    {
+    TInt pos = aValue.Locate( KSPChar );
+    __ASSERT_ALWAYS(pos > 0, User::Leave( KErrSdpCodecAttributeField ));
+    TPtrC8 ptr(aValue.Left(pos));
+    __ASSERT_ALWAYS( SdpUtil::IsToken(ptr), 
+        User::Leave( KErrSdpCodecAttributeField ) );
+    
+    ptr.Set(aValue.Right( aValue.Length() - pos - 1 ));
+    pos = ptr.Locate( KSPChar );
+    __ASSERT_ALWAYS(pos > 0, User::Leave( KErrSdpCodecAttributeField ));
+    ValidValueInListL(KValidStatusTypeNum, KStatusTypes, ptr.Left( pos ));
+
+    ptr.Set(ptr.Right( ptr.Length() - pos - 1 ));
+    __ASSERT_ALWAYS(ptr.Locate( KSPChar ) == KErrNotFound, 
+                    User::Leave( KErrSdpCodecAttributeField ));
+    ValidValueInListL(KValidDirectionTagsNum, KDirectionTags, ptr);
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::ValidValueInListL
+// Checks if value is included in predefined values list
+// -----------------------------------------------------------------------------
+//      
+void CSdpAttributeField::ValidValueInListL( TInt aItemsCount, 
+                                            const TText8* const aValuesList[],
+                                            const TDesC8& aValue )
+    {
+    TBool found( EFalse );
+    TInt pos = 0;
+    for ( TInt i( 0 ); i < aItemsCount && !found; i++ )
+        {
+        TPtrC8 strPtr( aValuesList[i] );
+        pos = aValue.Find(strPtr); 
+        if ( pos != KErrNotFound && pos >= 0 )
+            {
+            found = ETrue;
+            } 
+        }
+
+    __ASSERT_ALWAYS(found, User::Leave( KErrSdpCodecAttributeField ));
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::CheckValidCRangefL
+// Checks if precondition type value is valid value
+// -----------------------------------------------------------------------------
+//      
+void CSdpAttributeField::CheckValidRangeL( const TDesC8& aValue )
+    {
+    TInt found = aValue.Find(KEqualStr);
+    __ASSERT_ALWAYS(found != KErrNotFound && found > 0, User::Leave( KErrSdpCodecAttributeField ));
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::CheckValidRtpmapL
+// Checks if value is valid rtpmap value
+// -----------------------------------------------------------------------------
+//
+void CSdpAttributeField::CheckValidRtpmapL( const TDesC8& aValue )
+    {
+    // If this doesn't leave, then the value is OK
+    TSdpRtpmapValue::DecodeL( aValue );
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::CheckValidFmtpL
+// Checks if value is valid format value
+// -----------------------------------------------------------------------------
+//
+void CSdpAttributeField::CheckValidFmtpL( const TDesC8& aValue )
+    {
+    __ASSERT_ALWAYS(SdpUtil::IsByteString(aValue) && aValue.Length() > 0, 
+                User::Leave( KErrSdpCodecMediaAttributeField ));
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::SetNotPredefinedAttributeL
+// Sets attribute and value. Attribute is not one of predefined ones.
+// -----------------------------------------------------------------------------
+//
+void CSdpAttributeField::SetNotPredefinedAttributeL(const TDesC8& aAttribute, 
+                                                    const TDesC8& aValue)
+    {
+    iAttribute.Close();
+    iAttribute = iPool.OpenFStringL(aAttribute);
+    AttributeFieldPtrs().SetValueL( aValue );
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::IsFmtAttribute
+// Check if the attribute field belongs to any format attribute
+// -----------------------------------------------------------------------------
+//
+TBool CSdpAttributeField::IsFmtAttribute()
+	{
+	if ( AttributeFieldPtrs().FmtAttribute() )
+		{
+		return ETrue;
+		}
+	return EFalse;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::CreateAttributeFieldPtrsL
+// -----------------------------------------------------------------------------
+//	
+void CSdpAttributeField::CreateAttributeFieldPtrsL()
+    {
+    CSdpAttributeFieldPtrs* newObj = CSdpAttributeFieldPtrs::NewL();
+    CSdpAttributeFieldPtrs* oldObj = 
+        reinterpret_cast< CSdpAttributeFieldPtrs* >( iValue );
+    delete oldObj;
+    iValue = reinterpret_cast< HBufC8* >( newObj );
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::AttributeFieldPtrs
+// -----------------------------------------------------------------------------
+//  
+inline CSdpAttributeFieldPtrs& CSdpAttributeField::AttributeFieldPtrs()
+    {
+    return *( reinterpret_cast< CSdpAttributeFieldPtrs* >( iValue ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeField::AttributeFieldPtrs
+// -----------------------------------------------------------------------------
+//  
+inline const CSdpAttributeFieldPtrs& 
+CSdpAttributeField::AttributeFieldPtrs() const
+    {
+    return *( reinterpret_cast< CSdpAttributeFieldPtrs* >( iValue ) );
+    }
+
+// For DEBUG builds
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::__DbgTestInvariant
+// Test invariant
+// -----------------------------------------------------------------------------
+//	
+void CSdpAttributeField::__DbgTestInvariant() const
+	{    
+	TBool invariant = ( 
+        SdpUtil::IsToken( iAttribute.DesC() ) 
+		&& iValue != 0 );
+
+	if (!invariant)
+		User::Invariant();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdpattributefieldptrs.cpp	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,100 @@
+// Copyright (c) 2010 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:
+// Name          : SdpAttributeFieldPtrs.h
+// Part of       : Local SDP Codec
+// Version       : 1.0
+//
+
+
+
+#include "sdpattributefieldptrs.h"
+#include "sdpfmtattributefield.h"
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeFieldPtrs::NewL
+// -----------------------------------------------------------------------------
+//
+CSdpAttributeFieldPtrs* CSdpAttributeFieldPtrs::NewL()
+	{
+	CSdpAttributeFieldPtrs* self = new ( ELeave ) CSdpAttributeFieldPtrs;
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpAttributeFieldPtrs::CSdpAttributeFieldPtrs
+// ----------------------------------------------------------------------------
+//
+CSdpAttributeFieldPtrs::CSdpAttributeFieldPtrs()
+	{
+	}	
+
+// ----------------------------------------------------------------------------
+// CSdpAttributeFieldPtrs::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CSdpAttributeFieldPtrs::ConstructL()
+	{
+	iValue = KNullDesC8().AllocL();
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpAttributeFieldPtrs::~CSdpAttributeFieldPtrs
+// ----------------------------------------------------------------------------
+//
+CSdpAttributeFieldPtrs::~CSdpAttributeFieldPtrs()
+	{
+	delete iValue;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpAttributeFieldPtrs::SetValueL
+// -----------------------------------------------------------------------------
+// 
+void CSdpAttributeFieldPtrs::SetValueL( const TDesC8& aValue )
+    {
+    HBufC8* tmp = aValue.AllocL();
+    delete iValue;
+    iValue = tmp;
+    }
+        
+// -----------------------------------------------------------------------------
+// CSdpAttributeFieldPtrs::Value
+// -----------------------------------------------------------------------------
+//
+const TDesC8& CSdpAttributeFieldPtrs::Value() const
+    {
+    return *iValue;
+    }
+	
+// -----------------------------------------------------------------------------
+// CSdpAttributeFieldPtrs::SetFmtAttribute
+// -----------------------------------------------------------------------------
+//
+void CSdpAttributeFieldPtrs::SetFmtAttribute( 
+    const CSdpFmtAttributeField* aFmtAttribute )
+    {
+    iFmtAttributeField = aFmtAttribute;
+    }
+	
+// -----------------------------------------------------------------------------
+// CSdpAttributeFieldPtrs::FmtAttribute
+// -----------------------------------------------------------------------------
+//
+const CSdpFmtAttributeField* CSdpAttributeFieldPtrs::FmtAttribute() const
+    {
+    return iFmtAttributeField;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdpbandwidthfield.cpp	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,316 @@
+// Copyright (c) 2010 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:
+// Name          : SdpBandwidthField.h
+// Part of       : Local SDP Codec
+// Version       : 1.0
+//
+
+
+
+#include <s32strm.h>
+#include "sdpbandwidthfield.h"
+#include "sdpcodec.pan"
+#include "_sdpdefs.h"
+#include "sdpcodecstringconstants.h"
+#include "sdputil.h"
+#include "sdpcodecconstants.h"
+#include "sdpcodecerr.h"
+#include "sdpcodecstringpool.h"
+
+// LOCAL CONSTANTS
+const TInt KLines = 1;
+const TInt KElements = 3;
+const TUint KMaxTInt64Digits = 30;
+
+// -----------------------------------------------------------------------------
+// CSdpBandwidthField::DecodeL
+// Decodes bandwidth field from TDesC
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpBandwidthField* CSdpBandwidthField::DecodeL(const TDesC8& aText)
+	{
+	CSdpBandwidthField* obj = DecodeLC(aText);
+	CleanupStack::Pop();
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpBandwidthField::DecodeLC
+// Decodes bandwidth field from TDesC
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpBandwidthField* CSdpBandwidthField::DecodeLC(const TDesC8& aText)
+	{
+    CSdpBandwidthField* obj = new (ELeave) CSdpBandwidthField();
+	CleanupStack::PushL(obj);
+	obj->ConstructL(aText);
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpBandwidthField::NewL
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpBandwidthField* CSdpBandwidthField::NewL(RStringF aModifier, 
+                                                      TUint32 aValue)
+	{
+	CSdpBandwidthField* obj = NewLC(aModifier, aValue);
+	CleanupStack::Pop();
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpBandwidthField::NewLC
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpBandwidthField* CSdpBandwidthField::NewLC(RStringF aModifier, 
+                                                       TUint32 aValue)
+	{
+	CSdpBandwidthField* obj = new (ELeave) CSdpBandwidthField();
+	CleanupStack::PushL(obj);
+	obj->ConstructL(aModifier, aValue);
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpBandwidthField::~CSdpBandwidthField
+// Destructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpBandwidthField::~CSdpBandwidthField()
+	{
+    iModifier.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpBandwidthField::EncodeL
+// Writes attributes in proper format to the stream
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpBandwidthField::EncodeL(RWriteStream& aStream) const
+	{
+    RStringF header = iModifier.Pool().StringF( 
+                                        SdpCodecStringConstants::EBandwidth,
+                                        SdpCodecStringConstants::Table );
+    aStream.WriteL( header.DesC() );
+
+    aStream.WriteL( iModifier.DesC() );
+    aStream.WriteL( KColonStr );
+
+    TBuf8<KMaxTInt64Digits> number;
+    number.Format( _L8("%u"), iValue );
+	aStream.WriteL( number );
+
+    aStream.WriteL( KCRLFStr );
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpBandwidthField::CloneL
+// Creates an exact copy of the bandwidth field
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpBandwidthField * CSdpBandwidthField::CloneL() const
+	{
+	CSdpBandwidthField* obj = NewL(iModifier, iValue);
+	__ASSERT_DEBUG(*this == *obj, User::Panic(KSdpCodecPanicCat, 
+                                            KSdpCodecPanicInternal));
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpBandwidthField::operator ==
+// Checks if two bandwidth fields are equal
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CSdpBandwidthField::operator == (const CSdpBandwidthField& aObj)
+const
+	{
+	return iModifier == aObj.iModifier && iValue == aObj.iValue;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpBandwidthField::Modifier
+// Returns bandwidth modifier
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RStringF CSdpBandwidthField::Modifier() const
+	{
+	return iModifier;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpBandwidthField::SetModifier
+// Set new bandwidth modifier
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpBandwidthField::SetModifier(RStringF aModifier)
+	{
+    iModifier.Close();
+	iModifier = aModifier.Copy();
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpBandwidthField::Value
+// Returns bandwidth value
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TUint32 CSdpBandwidthField::Value() const
+	{
+	return iValue;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpBandwidthField::SetValue
+// Set new bandwidth value
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpBandwidthField::SetValue(TUint32 aValue)
+	{
+	iValue = aValue;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpBandwidthField::ExternalizeL
+// Externalizes the object to stream
+// -----------------------------------------------------------------------------
+//
+void CSdpBandwidthField::ExternalizeL(RWriteStream& aStream) const
+	{
+    aStream.WriteUint32L(iModifier.DesC().Length());
+    aStream.WriteL(iModifier.DesC(), iModifier.DesC().Length());
+    aStream.WriteUint32L(iValue);
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpBandwidthField::InternalizeL
+// Internalizes the object from stream
+// -----------------------------------------------------------------------------
+//
+CSdpBandwidthField* CSdpBandwidthField::InternalizeL(RReadStream& aStream)
+	{
+    TUint32 length = aStream.ReadUint32L();
+    HBufC8* modifier = HBufC8::NewLC(length);
+    TPtr8 ptr(modifier->Des());
+    aStream.ReadL(ptr, length); 
+
+    TUint32 value = aStream.ReadUint32L();
+
+   	CSdpBandwidthField* obj = new (ELeave) CSdpBandwidthField();
+    CleanupStack::PushL(obj);
+    obj->ConstructL(*modifier, value);
+
+    CleanupStack::PopAndDestroy(); // modifier
+    CleanupStack::Pop(obj);
+    return obj;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpBandwidthField::CSdpBandwidthField
+// Constructor
+// -----------------------------------------------------------------------------
+//
+CSdpBandwidthField::CSdpBandwidthField()
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpBandwidthField::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSdpBandwidthField::ConstructL(const TDesC8& aText)
+	{
+    iStringPool = SdpCodecStringPool::StringPoolL();
+	RArray <TPtrC8> lines;
+    lines = SdpUtil::DivideToLinesL(aText, KErrSdpCodecBandwidthField);
+    CleanupClosePushL(lines);
+    RArray<TPtrC8> bwArray;
+    bwArray = SdpUtil::GetElementsFromLineL(lines[0], KColonChar, 
+                                            KErrSdpCodecBandwidthField);
+    CleanupClosePushL(bwArray);
+    const TDesC8& bwName = iStringPool.StringF(
+                                        SdpCodecStringConstants::EBandwidth,
+                                        SdpCodecStringConstants::Table).DesC();       
+
+    __ASSERT_ALWAYS(lines.Count() == KLines
+                    && bwArray.Count() == KElements
+                    && bwArray[0].Find(bwName) != KErrNotFound,
+                    User::Leave(KErrSdpCodecBandwidthField));
+
+    CopyModifierL(bwArray[1]);
+    TLex8 lexer(bwArray[2]);
+    lexer.Val(iValue, EDecimal);
+    
+    CleanupStack::PopAndDestroy(2); //lines, bwArray
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpBandwidthField::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSdpBandwidthField::ConstructL(RStringF aModifier, TUint32 aValue)
+	{
+    iStringPool = SdpCodecStringPool::StringPoolL();
+	iModifier = aModifier.Copy();
+    iValue = aValue;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpBandwidthField::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSdpBandwidthField::ConstructL(const TDesC8& aModifier, TUint32 aValue)
+	{
+    iStringPool = SdpCodecStringPool::StringPoolL();
+	CopyModifierL(aModifier);
+    iValue = aValue;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CSdpBandwidthField::CopyModifierL
+// Copies modifier to object after check
+// -----------------------------------------------------------------------------
+//
+void CSdpBandwidthField::CopyModifierL(const TDesC8& aModifier)
+    {
+    RStringF modifierCT = iStringPool.StringF(
+                                        SdpCodecStringConstants::EModifierCT,
+                                        SdpCodecStringConstants::Table );
+    RStringF modifierAS = iStringPool.StringF( 
+                                        SdpCodecStringConstants::EModifierAS,
+                                        SdpCodecStringConstants::Table );
+    
+    if (modifierCT.DesC().CompareF(aModifier) == 0)
+        {
+        iModifier.Close();
+        iModifier = modifierCT.Copy();
+        }
+    else if ( modifierAS.DesC().CompareF(aModifier) == 0)
+        {
+        iModifier.Close();
+        iModifier = modifierAS.Copy();
+        }
+    else
+        {
+        iModifier.Close();
+        iModifier = iStringPool.OpenFStringL(aModifier);
+        }
+    }
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdpcodecparseutil.cpp	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,763 @@
+// Copyright (c) 2010 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:
+// Name          : SdpCodecParseUtil.cpp
+// Part of       : Local SDP Codec
+// Version       : 1.0
+//
+
+
+
+#include "sdpcodecparseutil.h"
+#include "sdpcodecstringconstants.h"
+#include "_sdpdefs.h"
+#include <s32strm.h>
+#include "sdputil.h"
+#include "sdptimefield.h"
+#include "sdpbandwidthfield.h"
+#include "sdpattributefield.h"
+#include "sdpmediafield.h"
+#include "sdpconnectionfield.h"
+#include "sdpkeyfield.h"
+#include "sdporiginfield.h"
+#include "sdprepeatfield.h"
+#include "sdpcodecerr.h"
+#include "sdpcodecconstants.h"
+#include "uri8.h"
+#include "uriutilscommon.h"
+#include "badesca.h"
+
+// ----------------------------------------------------------------------------
+// CSdpCodecParseUtil::NewL
+// ----------------------------------------------------------------------------
+//
+CSdpCodecParseUtil* 
+CSdpCodecParseUtil::NewL(RStringPool aPool, const TDesC8& aValue,TInt aErrCode)
+	{
+	CSdpCodecParseUtil* obj = CSdpCodecParseUtil::NewLC(aPool, aValue,aErrCode);
+	CleanupStack::Pop();//obj
+	return obj;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpCodecParseUtil::NewLC
+// ----------------------------------------------------------------------------
+//
+CSdpCodecParseUtil* 
+CSdpCodecParseUtil::NewLC(RStringPool aPool, const TDesC8& aValue,TInt aErrCode)
+	{
+	CSdpCodecParseUtil* obj = new(ELeave)CSdpCodecParseUtil;
+	CleanupStack::PushL(obj);
+	obj->ConstructL(aPool, aValue,aErrCode);
+	return obj;
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpCodecParseUtil::FieldLineValueL
+// ---------------------------------------------------------------------------
+//
+TPtrC8 CSdpCodecParseUtil::FieldLineValueL(const TDesC8& aValue)
+	{
+	__ASSERT_ALWAYS (aValue.Length() > 0, User::Leave(KErrArgument));
+	TPtrC8 lineStartBuf(aValue.Mid(2));
+	TInt lineEndPosition = lineStartBuf.Locate('\r');
+	if(lineEndPosition == KErrNotFound)
+		{
+		lineEndPosition = lineStartBuf.Locate('\n');
+		}
+	return lineStartBuf.Left(lineEndPosition);
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpCodecParseUtil::CheckFieldNameL
+// ---------------------------------------------------------------------------
+//
+RArray<TPtrC8> CSdpCodecParseUtil::CheckFieldNameL(RStringPool aPool,
+												  TInt aIndex, 
+												  const TDesC8& aValue,
+												  TInt aErrCode)
+	{
+	if(!aValue.Length())
+			{
+			User::Leave(KErrArgument);
+			}
+	RArray<TPtrC8> elementArray = SdpUtil::GetElementsFromLineL(aValue, 
+																aErrCode);
+	CleanupClosePushL(elementArray);
+	RStringF name = aPool.OpenFStringL(elementArray[0]);
+	CleanupClosePushL(name);
+	if(name!=(aPool.StringF(aIndex, SdpCodecStringConstants::Table)))
+		{
+		User::Leave(KErrArgument);//parsererror
+		}
+	CleanupStack::Pop(2);//name, elementArray
+	name.Close();
+	return elementArray;
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpCodecParseUtil::CheckOptionalFieldNameL
+// ---------------------------------------------------------------------------
+//
+RArray<TPtrC8> CSdpCodecParseUtil::CheckOptionalFieldNameL(RStringPool aPool, 
+												 TInt aIndex, 
+												 const TDesC8& aValue,
+												  TInt aErrCode)
+	{
+	RArray<TPtrC8> elementArray;
+	elementArray.Reset();
+	if(aValue.Length())
+		{
+		elementArray = SdpUtil::GetElementsFromLineL(aValue, aErrCode);
+	    CleanupClosePushL(elementArray);
+		RStringF name = aPool.OpenFStringL(elementArray[0]);
+		CleanupClosePushL(name);
+		if(name!=(aPool.StringF(aIndex, SdpCodecStringConstants::Table)))
+			{
+			elementArray.Reset();
+			}
+		CleanupStack::Pop(2);//name, elementArray
+		name.Close();
+		}
+	return elementArray;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpCodecParseUtil::CSdpCodecParseUtil
+// ----------------------------------------------------------------------------
+//
+CSdpCodecParseUtil::CSdpCodecParseUtil()
+	{
+
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpCodecParseUtil::~CSdpCodecParseUtil
+// ----------------------------------------------------------------------------
+//
+CSdpCodecParseUtil::~CSdpCodecParseUtil()
+	{
+	iLineArray.Reset();
+	iElementArray.Reset();
+	if(iTimeFields)
+		{
+		iTimeFields->ResetAndDestroy();
+		delete iTimeFields;
+		}
+	
+	if(iBandwidthFields)
+		{
+		iBandwidthFields->ResetAndDestroy();
+		delete iBandwidthFields;
+		}
+	
+	if(iAttributeFields)
+		{
+		iAttributeFields->ResetAndDestroy();
+		delete iAttributeFields;
+		}
+	
+	if(iMediaFields)
+		{
+		iMediaFields->ResetAndDestroy();
+		delete iMediaFields;
+		}
+
+	if(iConnectionFields)
+		{
+		iConnectionFields->ResetAndDestroy();
+		delete iConnectionFields;
+		}
+
+	if(iEmailFields)
+		{
+		iEmailFields->Reset();
+		delete iEmailFields;
+		}
+
+	if(iPhoneFields)
+		{
+		iPhoneFields->Reset();
+		delete iPhoneFields;
+		}
+	delete iToken;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpCodecParseUtil::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CSdpCodecParseUtil::ConstructL(RStringPool aPool, const TDesC8& aValue,
+									TInt aErrCode)
+	{
+	iPool = aPool;
+	iData.Set(aValue);
+	iToken = KNullDesC8().AllocL();
+	iEmailFields = new(ELeave)CDesC8ArraySeg(1);
+	iPhoneFields = new(ELeave)CDesC8ArraySeg(1);
+	iBandwidthFields = new(ELeave)RPointerArray<CSdpBandwidthField>;
+	iTimeFields = new(ELeave)RPointerArray<CSdpTimeField>;
+	iAttributeFields = new(ELeave)RPointerArray<CSdpAttributeField>;
+	iMediaFields = new(ELeave)RPointerArray<CSdpMediaField>;
+	iConnectionFields = new(ELeave)RPointerArray<CSdpConnectionField>;
+	iLineArray = SdpUtil::DivideToLinesL(aValue,aErrCode);
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpCodecParseUtil::ParseSessionVersionL
+// ---------------------------------------------------------------------------
+//
+TUint CSdpCodecParseUtil::ParseSessionVersionL(TInt aErrCode)
+	{
+	TUint sdpVersion = 0;
+	if(iLineArray.Count())
+		{
+		iElementArray = CSdpCodecParseUtil::CheckFieldNameL(iPool,
+											SdpCodecStringConstants::EVersion,
+											iLineArray[0],aErrCode);
+		if(iElementArray.Count() > 1)
+			{
+			TLex8 lex(iElementArray[1]);
+			if(lex.Val(sdpVersion) == KErrNone)
+				{
+				iLineArray.Remove(0);
+				iElementArray.Reset();
+				}
+			else
+				{
+				User::Leave(KErrSdpCodecVersionField);
+				}
+			}
+		}
+	else
+		{
+		User::Leave(KErrSdpCodecVersionField);
+		}
+	return sdpVersion;
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpCodecParseUtil::ParseSessionOwnerL
+// ---------------------------------------------------------------------------
+//
+CSdpOriginField* CSdpCodecParseUtil::ParseSessionOwnerL(TInt aErrCode)
+	{
+	CSdpOriginField* sdpOriginField = NULL;
+	if(iLineArray.Count())
+		{
+		iElementArray = CSdpCodecParseUtil::CheckFieldNameL(iPool,
+											SdpCodecStringConstants::EOrigin,
+											iLineArray[0],aErrCode);
+		sdpOriginField = 
+					CSdpOriginField::DecodeL(iLineArray[0]);
+		iElementArray.Reset();
+		iLineArray.Remove(0);
+		}
+	else
+		{
+		User::Leave(KErrSdpCodecOriginField);
+		}
+	return sdpOriginField;
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpCodecParseUtil::ParseSessionNameL
+// ---------------------------------------------------------------------------
+//
+const TDesC8& CSdpCodecParseUtil::ParseSessionNameL(TInt aErrCode)
+	{
+	delete iToken;
+	iToken = 0;
+	iToken = KNullDesC8().AllocL();
+	if(iLineArray.Count())
+		{
+		if(iLineArray[0].Length() < 6 && 
+			(iLineArray[0].CompareF(_L8("s= \r\n")) == 0 ||
+			iLineArray[0].CompareF(_L8("s= \n")) == 0 ))
+			{
+			iLineArray.Remove(0);
+			delete iToken;
+			iToken = 0;
+			iToken = _L8(" ").AllocL();
+			return	*iToken;
+			}
+		iElementArray = CSdpCodecParseUtil::CheckFieldNameL(iPool,
+											SdpCodecStringConstants::ESession,
+											iLineArray[0],aErrCode);
+		__ASSERT_ALWAYS (iElementArray.Count() > 1, 
+		User::Leave(KErrSdpCodecSessionField));
+		delete iToken;
+		iToken = 0;
+		iToken = (CSdpCodecParseUtil::FieldLineValueL(iLineArray[0])).AllocL();
+		iElementArray.Reset();
+		iLineArray.Remove(0);
+		}
+	else
+		{
+		User::Leave(KErrSdpCodecSessionField);
+		}
+	return *iToken;
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpCodecParseUtil::ParseInformationL
+// ---------------------------------------------------------------------------
+//
+const TDesC8& CSdpCodecParseUtil::ParseInformationL(TInt aErrCode)
+	{
+	delete iToken;
+	iToken = 0;
+	iToken = KNullDesC8().AllocL();
+	if(iLineArray.Count())
+		{
+		iElementArray = CSdpCodecParseUtil::CheckOptionalFieldNameL(iPool,
+												SdpCodecStringConstants::EInfo,
+												iLineArray[0],aErrCode);
+
+		if(iElementArray.Count())
+			{
+			__ASSERT_ALWAYS (iElementArray.Count() > 1, 
+			User::Leave(KErrSdpCodecInfoField));
+			delete iToken;
+			iToken = 0;
+			iToken = 
+				(CSdpCodecParseUtil::FieldLineValueL(iLineArray[0])).AllocL();
+			iElementArray.Reset();
+			iLineArray.Remove(0);
+			}
+		}
+	return *iToken;
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpCodecParseUtil::ParseUriL
+// ---------------------------------------------------------------------------
+//
+CUri8* CSdpCodecParseUtil::ParseUriL(TInt aErrCode)
+	{
+	CUri8* uri = 0;
+	if(iLineArray.Count())
+		{
+		iElementArray = CSdpCodecParseUtil::CheckOptionalFieldNameL(iPool,
+												SdpCodecStringConstants::EUri,
+												iLineArray[0],aErrCode);
+		if(iElementArray.Count())
+			{
+			__ASSERT_ALWAYS (iElementArray.Count() == 2, 
+				User::Leave(KErrSdpCodecUriField));
+			TUriParser8 parser;
+			User::LeaveIfError(parser.Parse(iElementArray[1]));
+			uri = CUri8::NewL(parser);
+			iElementArray.Reset();
+			iLineArray.Remove(0);
+			}
+		}
+	return uri;
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpCodecParseUtil::ParseEmailL
+// ---------------------------------------------------------------------------
+//
+CDesC8ArraySeg* CSdpCodecParseUtil::ParseEmailL(TInt aErrCode)
+	{
+	TBool endloop = EFalse;
+	while (iLineArray.Count() && !endloop)
+		{
+		iElementArray = CSdpCodecParseUtil::CheckOptionalFieldNameL(iPool,
+												SdpCodecStringConstants::EEmail,
+												iLineArray[0],aErrCode);
+		if(iElementArray.Count())
+			{
+			__ASSERT_ALWAYS (iElementArray.Count() > 1, 
+				User::Leave(KErrSdpCodecEmailField));
+			iEmailFields->AppendL(
+				CSdpCodecParseUtil::FieldLineValueL(iLineArray[0]));
+			iElementArray.Reset();
+			iLineArray.Remove(0);
+			}
+		else
+			{
+			endloop = ETrue;
+			}
+		}
+	CDesC8ArraySeg* array = iEmailFields;
+	iEmailFields = 0;
+	return array;
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpCodecParseUtil::ParsePhoneL
+// ---------------------------------------------------------------------------
+//
+CDesC8ArraySeg* CSdpCodecParseUtil::ParsePhoneL(TInt aErrCode)
+	{
+	TBool endloop = EFalse;
+	while (iLineArray.Count() && !endloop)
+		{
+		iElementArray = CSdpCodecParseUtil::CheckOptionalFieldNameL(iPool,
+												SdpCodecStringConstants::EPhone,
+												iLineArray[0],aErrCode);
+		if(iElementArray.Count() != 0)
+			{
+			__ASSERT_ALWAYS (iElementArray.Count() > 1, 
+				User::Leave(KErrSdpCodecPhoneField));
+			iPhoneFields->AppendL(
+				CSdpCodecParseUtil::FieldLineValueL(iLineArray[0]));
+			iElementArray.Reset();
+			iLineArray.Remove(0);
+			}
+		else
+			{
+			endloop = ETrue;
+			}
+		}
+	CDesC8ArraySeg* array = iPhoneFields;
+	iPhoneFields = 0;
+	return array;
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpCodecParseUtil::ParseConnectionL
+// ---------------------------------------------------------------------------
+//
+CSdpConnectionField* CSdpCodecParseUtil::ParseConnectionL(TInt aErrCode)
+	{
+	CSdpConnectionField* sdpConnectionField = NULL;
+	if(iLineArray.Count())
+		{
+		iElementArray = CSdpCodecParseUtil::CheckOptionalFieldNameL(iPool,
+										SdpCodecStringConstants::EConnection,
+										iLineArray[0],aErrCode);
+		if(iElementArray.Count())
+			{
+			sdpConnectionField =  
+				CSdpConnectionField::DecodeL(iLineArray[0]);
+			iElementArray.Reset();
+			iLineArray.Remove(0);
+			}
+		}
+	return sdpConnectionField;
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpCodecParseUtil::ParseBandwidthL
+// ---------------------------------------------------------------------------
+//
+RPointerArray<CSdpBandwidthField>* 
+CSdpCodecParseUtil::ParseBandwidthL(TInt aErrCode)
+	{
+	TBool endloop = EFalse;
+	CSdpBandwidthField* bandwidth = NULL;
+	while (iLineArray.Count() && !endloop)
+		{
+		iElementArray = 
+		    CSdpCodecParseUtil::CheckOptionalFieldNameL(
+		        iPool,SdpCodecStringConstants::EBandwidth,
+		        iLineArray[0],aErrCode);
+		if(iElementArray.Count())
+			{			
+			bandwidth = CSdpBandwidthField::DecodeLC(iLineArray[0]);
+			iBandwidthFields->AppendL(bandwidth);
+			CleanupStack::Pop(bandwidth);
+			iElementArray.Reset();
+			iLineArray.Remove(0);
+			}
+		else
+			{
+			endloop = ETrue;
+			}
+		}
+	RPointerArray<CSdpBandwidthField>* array = iBandwidthFields;
+	iBandwidthFields = 0;
+	return array;
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpCodecParseUtil::ParseConnectionFieldsL
+// ---------------------------------------------------------------------------
+//
+RPointerArray<CSdpConnectionField>* 
+CSdpCodecParseUtil::ParseConnectionFieldsL(TInt aErrCode)
+	{
+	TBool endloop = EFalse;
+	CSdpConnectionField* connection = NULL;
+	while(iLineArray.Count() && !endloop)
+		{
+		iElementArray = 
+		    CSdpCodecParseUtil::CheckOptionalFieldNameL(
+		        iPool,SdpCodecStringConstants::EConnection,
+		        iLineArray[0],aErrCode);
+		if(iElementArray.Count())
+			{			
+			connection = CSdpConnectionField::DecodeLC(iLineArray[0]);
+			iConnectionFields->AppendL(connection);
+			CleanupStack::Pop(connection);
+			iElementArray.Reset();
+			iLineArray.Remove(0);
+			}
+		else
+			{
+			endloop = ETrue;
+			}
+		}
+	RPointerArray<CSdpConnectionField>* array = iConnectionFields;
+	iConnectionFields = 0;
+	return array;
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpCodecParseUtil::ParseTimeFieldL
+// ---------------------------------------------------------------------------
+//
+RPointerArray<CSdpTimeField>* 
+CSdpCodecParseUtil::ParseTimeFieldL(TInt aErrCode)
+	{
+	if(iLineArray.Count())
+		{
+		iElementArray = CSdpCodecParseUtil::CheckFieldNameL(iPool,
+											SdpCodecStringConstants::ETime,
+											iLineArray[0],aErrCode);
+		iElementArray.Reset();
+		CSdpTimeField* timefield = NULL;
+		CSdpRepeatField* repeatfield = NULL;
+		TBool endloop = EFalse;
+		while(iLineArray.Count() && !endloop)
+			{
+			iElementArray = CSdpCodecParseUtil::CheckOptionalFieldNameL(iPool,
+												SdpCodecStringConstants::ETime,
+												iLineArray[0],aErrCode);
+			if(iElementArray.Count())
+				{
+				timefield = CSdpTimeField::DecodeLC(iLineArray[0]);
+				User::LeaveIfError(iTimeFields->Append(timefield));
+				CleanupStack::Pop();//timefield
+				iElementArray.Reset();
+				iLineArray.Remove(0);
+				TBool repeatEnd = EFalse;
+				while(iLineArray.Count() && !repeatEnd)
+					{
+					iElementArray = 
+						CSdpCodecParseUtil::CheckOptionalFieldNameL(iPool,
+											SdpCodecStringConstants::ERepeat,
+											iLineArray[0],aErrCode);
+					if(iElementArray.Count())
+						{
+						repeatfield =
+							CSdpRepeatField::DecodeLC(iLineArray[0]);
+						User::LeaveIfError((timefield->RepeatFields()).Append(
+																  repeatfield));
+						CleanupStack::Pop();//repeatfield
+						repeatfield = 0;
+						iElementArray.Reset();
+						iLineArray.Remove(0);
+						}
+					else
+						{
+						repeatEnd = ETrue;
+						}
+					}
+				timefield = 0;
+				}
+			else
+				{
+				endloop = ETrue;
+				}
+			}
+		}
+	RPointerArray<CSdpTimeField>* array = iTimeFields;
+	iTimeFields = 0;
+	return array;
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpCodecParseUtil::ParseZoneAdjustmentL
+// ---------------------------------------------------------------------------
+//
+const TDesC8& CSdpCodecParseUtil::ParseZoneAdjustmentL(TInt aErrCode)
+	{
+	delete iToken;
+	iToken = 0;
+	iToken = KNullDesC8().AllocL();
+	if(iLineArray.Count())
+		{
+		iElementArray = CSdpCodecParseUtil::CheckOptionalFieldNameL(iPool,
+											SdpCodecStringConstants::EZone,
+											iLineArray[0],aErrCode);
+		if(iElementArray.Count())
+			{
+			__ASSERT_ALWAYS (iElementArray.Count() > 1, 
+				User::Leave(KErrSdpCodecZoneField));
+			delete iToken;
+			iToken = 0;
+			iToken = 
+				(CSdpCodecParseUtil::FieldLineValueL(iLineArray[0])).AllocL();
+			iElementArray.Reset();
+			iLineArray.Remove(0);
+			}
+		}
+	return *iToken;
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpCodecParseUtil::ParseEncryptionKeyL
+// ---------------------------------------------------------------------------
+//
+CSdpKeyField* CSdpCodecParseUtil::ParseEncryptionKeyL(TInt aErrCode)
+	{
+	CSdpKeyField* sdpKeyField = NULL;
+	if(iLineArray.Count())
+		{
+		iElementArray = CSdpCodecParseUtil::CheckOptionalFieldNameL(iPool,
+												SdpCodecStringConstants::EKey,
+												iLineArray[0],aErrCode);
+		if(iElementArray.Count())
+			{
+			__ASSERT_ALWAYS (iElementArray.Count() > 1, 
+				User::Leave(KErrSdpCodecKeyField));
+			sdpKeyField = CSdpKeyField::DecodeL(iLineArray[0]);
+			iElementArray.Reset();
+			iLineArray.Remove(0);
+			}
+		}
+	return sdpKeyField;
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpCodecParseUtil::ParseAttributeFieldL
+// ---------------------------------------------------------------------------
+//
+RPointerArray<CSdpAttributeField>* 
+CSdpCodecParseUtil::ParseAttributeFieldL(TInt aErrCode)
+	{
+	TBool endloop = EFalse;
+	CSdpAttributeField* attributefield = NULL;
+	while(iLineArray.Count() && !endloop)
+		{
+		iElementArray = CSdpCodecParseUtil::CheckOptionalFieldNameL(iPool,
+										SdpCodecStringConstants::EAttribute,
+										iLineArray[0],aErrCode);
+		if(iElementArray.Count())
+			{
+			attributefield = 
+						CSdpAttributeField::DecodeLC(iLineArray[0]);
+			User::LeaveIfError(iAttributeFields->Append(attributefield));
+			CleanupStack::Pop();//attributefield
+			attributefield = NULL;
+			iElementArray.Reset();
+			iLineArray.Remove(0);
+			}
+		else
+			{
+			endloop = ETrue;
+			}
+		}
+	RPointerArray<CSdpAttributeField>* array = iAttributeFields;
+	iAttributeFields = 0;
+	return array;
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpCodecParseUtil::ParseMediaLevelL
+// ---------------------------------------------------------------------------
+//
+RPointerArray<CSdpMediaField>* 
+CSdpCodecParseUtil::ParseMediaLevelL()
+	{
+	RStringF headername = iPool.StringF( SdpCodecStringConstants::EMedia, 
+                                         SdpCodecStringConstants::Table );
+	TInt linestartPosition = 0;
+	TInt lineEndPosition = 0;
+	CSdpMediaField* mediafield = NULL;
+	TBool endloop = EFalse;
+	while(iData.Length() > 0 && !endloop)
+		{
+		linestartPosition = iData.FindF(headername.DesC());
+		if(linestartPosition != KErrNotFound)
+			{
+			TPtrC8 firstline(iData.Mid(linestartPosition));
+			TPtrC8 templine(iData.Mid(linestartPosition + 1));
+			HBufC8* searchString = 
+			 	HBufC8::NewLC(KCRLFStr().Length() + 
+			 	headername.DesC().Length());
+			TPtr8 strPtr(searchString->Des());
+			strPtr.Append(KCRLFStr);
+			strPtr.Append(headername.DesC());
+			lineEndPosition = templine.FindF(strPtr);
+			CleanupStack::PopAndDestroy(searchString);
+			if(lineEndPosition == KErrNotFound)
+				{
+				mediafield = 
+				CSdpMediaField::DecodeLC(iData.Mid(linestartPosition));
+				User::LeaveIfError(iMediaFields->Append(mediafield));
+				CleanupStack::Pop();//mediafield
+				mediafield = 0;
+				iElementArray.Reset();
+				iLineArray.Reset();
+				endloop = ETrue;
+				}
+			else 
+				{
+				mediafield = 
+				CSdpMediaField::DecodeLC(firstline.Left(
+									lineEndPosition+1+KCRLFStr().Length()));
+				User::LeaveIfError(iMediaFields->Append(mediafield));
+				CleanupStack::Pop();//mediafield
+				mediafield = 0;
+				iData.Set(firstline.Mid(lineEndPosition+1));
+				}
+			}
+		else
+			{
+			endloop = ETrue;
+			}
+		}
+	RPointerArray<CSdpMediaField>* array = iMediaFields;
+	iMediaFields = 0;
+	return array;
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpCodecParseUtil::FirstLineArrayElementL
+// ---------------------------------------------------------------------------
+//
+RArray<TPtrC8> CSdpCodecParseUtil::FirstLineArrayElementL(RStringPool aPool,
+												          TInt aIndex,
+														  TInt aErrCode)
+	{
+	if(!iLineArray.Count())
+			{
+			User::Leave(aErrCode);
+			}
+	RArray<TPtrC8> elementArray = 
+		SdpUtil::GetElementsFromLineL(iLineArray[0],aErrCode);
+	CleanupClosePushL(elementArray);
+	RStringF name = aPool.OpenFStringL(elementArray[0]);
+	CleanupClosePushL(name);
+	if(name!=(aPool.StringF(aIndex, SdpCodecStringConstants::Table)))
+		{
+		User::Leave(aErrCode);//parsererror
+		}
+	CleanupStack::Pop(2);//name, elementArray
+	name.Close();
+	return elementArray;
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpCodecParseUtil::LineArray
+// ---------------------------------------------------------------------------
+//
+RArray<TPtrC8>& CSdpCodecParseUtil::LineArray()
+	{
+	return iLineArray;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdpcodecstringpool.cpp	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,89 @@
+// Copyright (c) 2010 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:
+// Name          : SdpCodecStringPool.cpp
+// Part of       : Local SDP Codec
+// Version       : 1.0
+//
+
+
+
+#include <stringpool.h>
+#include "sdpcodecerr.h"
+#include "sdpcodecstringpool.h"
+#include "csdpcodecstringpool.h"
+#include "sdpcodecstringconstants.h"
+#include "_sdpdefs.h"
+
+
+// -----------------------------------------------------------------------------
+// SdpCodecStringPool::OpenL
+// Opens stringpool owner, leaves if one already exists in TLS
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void SdpCodecStringPool::OpenL()
+	{
+	__ASSERT_ALWAYS( Dll::Tls() == NULL, User::Leave ( KErrAlreadyExists ) );
+
+	CSdpCodecStringPool* codecStringPool = CSdpCodecStringPool::NewLC();
+	User::LeaveIfError( Dll::SetTls( codecStringPool ) );
+	CleanupStack::Pop();    //  codecStringPool
+	}
+
+// -----------------------------------------------------------------------------
+// SdpCodecStringPool::Close
+// Closes & deletes string pool
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void SdpCodecStringPool::Close()
+	{
+	if ( Dll::Tls() == NULL )
+        {
+        return;
+        }
+
+	CSdpCodecStringPool* codecStringPool =
+        static_cast<CSdpCodecStringPool*>( Dll::Tls() );
+    delete codecStringPool;
+	Dll::SetTls( NULL );
+	}
+
+// -----------------------------------------------------------------------------
+// SdpCodecStringPool::StringPoolL
+// Returns string pool
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RStringPool SdpCodecStringPool::StringPoolL()
+    {
+    CSdpCodecStringPool* codecStringPool =
+        static_cast<CSdpCodecStringPool*>( Dll::Tls() );
+    __ASSERT_ALWAYS( codecStringPool != NULL,
+                     User::Leave( KErrSdpCodecStringPool ) );
+
+	return codecStringPool->StringPool();
+    }
+
+// -----------------------------------------------------------------------------
+// SdpCodecStringPool::StringTableL
+// Returns string table
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TStringTable& SdpCodecStringPool::StringTableL()
+    {
+     CSdpCodecStringPool* codecStringPool =
+        static_cast<CSdpCodecStringPool*>( Dll::Tls() );
+    __ASSERT_ALWAYS( codecStringPool != NULL,
+                     User::Leave( KErrSdpCodecStringPool ) );
+
+	return codecStringPool->StringTable();
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdpconnectionfield.cpp	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,1155 @@
+// Copyright (c) 2010 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:
+// Name          : SdpConnectionField.cpp
+// Part of       : Local SDP Codec
+// Version       : 1.0
+//
+
+
+
+
+#include <in_sock.h>
+#include <s32strm.h>
+#include <stringpool.h>
+#include "sdpconnectionfield.h"
+#include "sdpcodecstringconstants.h"
+#include "sdpcodecconstants.h"
+#include "sdpcodecstringpool.h"
+#include "sdputil.h"
+#include "sdpcodecerr.h"
+#include "sdpcodec.pan"
+#include "_sdpdefs.h"
+#include "uriutils.h"
+
+// LOCAL CONSTANTS
+const TInt KHeaderIndex = 0;
+const TInt KNetworkTypeIndex = 1;
+const TInt KAddressTypeIndex = 2;
+const TInt KAddressIndex = 3;
+const TInt KTokenCount = 4;
+const TInt KMaxAddressLength = 256;
+const TUint KMaxIPDesLength = 39;
+_LIT16(KWildAddr, "0.0.0.0");
+_LIT16(KWildAddrIPv6, "::");
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::CSdpConnectionField
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSdpConnectionField::CSdpConnectionField() :
+    iTTL( KErrNotFound ),
+    iNumOfAddress( KDefaultNumOfAddress )
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSdpConnectionField::ConstructL(
+    const TDesC8& aText )
+	{
+    // aText should be in format
+    // c=<network type> <address type> <connection address>
+    iPool = SdpCodecStringPool::StringPoolL();
+
+    RArray<TPtrC8> array =
+        SdpUtil::GetElementsFromLineL( aText, KErrSdpCodecConnectionField );
+    CleanupClosePushL( array );
+
+    if ( array.Count() != KTokenCount )
+        {
+        User::Leave( KErrSdpCodecConnectionField );
+        }
+
+    RStringF origHeader =  iPool.StringF( SdpCodecStringConstants::EConnection,
+                                          SdpCodecStringConstants::Table );
+    if ( origHeader.DesC().CompareF( array[KHeaderIndex] ) != 0 )
+        {
+        // Header didn't match
+        User::Leave( KErrSdpCodecConnectionField );
+        }
+
+    // <network type>
+    CopyNetTypeL( array[KNetworkTypeIndex] );
+
+    // <address type>
+    CopyAddressTypeL( array[KAddressTypeIndex] );
+
+    // <address>
+    CopyAddressL( array[KAddressIndex], iPool );
+
+    CleanupStack::PopAndDestroy();  // array
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSdpConnectionField::ConstructL(
+    const TInetAddr& aAddress,
+    TInt aTTL,
+    TUint aNumOfAddress )
+	{
+    __ASSERT_ALWAYS( IsValidAddress(aAddress, aTTL, aNumOfAddress) == KErrNone,
+                     User::Leave( KErrSdpCodecConnectionField ) );
+
+    iPool = SdpCodecStringPool::StringPoolL();
+    TBuf<KMaxIPDesLength> addr;
+    //If aAddress is IPv4-Mapped IPv6,the result of Output is IPv4
+    aAddress.Output( addr );
+
+    // Copy address
+    iAddress = HBufC8::NewL( addr.Length() );
+    iAddress->Des().Copy( addr );
+
+    // TTL
+    iTTL = aTTL;
+    // Num of addresses
+    iNumOfAddress = aNumOfAddress;
+    // Network type
+    iNetType = iPool.StringF( SdpCodecStringConstants::ENetType,
+                              SdpCodecStringConstants::Table ).Copy();
+    // Address type
+	if ( UriUtils::HostType( addr ) == UriUtils::EIPv4Host )
+		{
+		//addresstype for IPv4
+			iAddressType = iPool.StringF( SdpCodecStringConstants::EAddressTypeIP4,
+                                      SdpCodecStringConstants::Table ).Copy();
+			}
+	else if ( UriUtils::HostType( addr ) == UriUtils::EIPv6Host )
+			{
+			//addresstype IPv6
+			iAddressType = iPool.StringF( SdpCodecStringConstants::EAddressType,
+                                      SdpCodecStringConstants::Table ).Copy();
+			}
+	else
+		{
+		User::Leave(KErrArgument);
+		}
+
+	__TEST_INVARIANT;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSdpConnectionField::ConstructL(
+    RStringF aNetType,
+	RStringF aAddressType,
+	const TDesC8& aAddress )
+    {
+    iPool = SdpCodecStringPool::StringPoolL();
+
+    // Network type
+    CopyNetTypeL( aNetType.DesC() );
+
+    // Address type
+    CopyAddressTypeL( aAddressType.DesC() );
+
+    // Address + TTL + numOfAddress
+    CopyAddressL( aAddress, aNetType.Pool() );
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::DecodeL
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpConnectionField* CSdpConnectionField::DecodeL(
+    const TDesC8& aText )
+	{
+	CSdpConnectionField* obj = CSdpConnectionField::DecodeLC( aText );
+	CleanupStack::Pop();
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::DecodeLC
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpConnectionField* CSdpConnectionField::DecodeLC(
+    const TDesC8& aText )
+	{
+	CSdpConnectionField* obj = new ( ELeave ) CSdpConnectionField;
+	CleanupStack::PushL( obj );
+	obj->ConstructL( aText );
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::NewL
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpConnectionField* CSdpConnectionField::NewL(
+    const TInetAddr& aAddress,
+    TInt aTTL,
+    TUint aNumOfAddress )
+	{
+	CSdpConnectionField* obj = CSdpConnectionField::NewLC(
+        aAddress, aTTL, aNumOfAddress );
+	CleanupStack::Pop();
+	return obj;
+	}
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::NewLC
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpConnectionField* CSdpConnectionField::NewLC(
+    const TInetAddr& aAddress,
+    TInt aTTL,
+    TUint aNumOfAddress )
+	{
+	CSdpConnectionField* obj = new ( ELeave ) CSdpConnectionField;
+	CleanupStack::PushL( obj );
+	obj->ConstructL( aAddress, aTTL, aNumOfAddress );
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::NewL
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpConnectionField* CSdpConnectionField::NewL(
+    RStringF aNetType,
+    RStringF aAddressType,
+    const TDesC8& aAddress )
+    {
+    CSdpConnectionField* obj = CSdpConnectionField::NewLC(
+        aNetType, aAddressType, aAddress );
+	CleanupStack::Pop();
+	return obj;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::NewLC
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpConnectionField* CSdpConnectionField::NewLC(
+    RStringF aNetType,
+    RStringF aAddressType,
+    const TDesC8& aAddress )
+    {
+    CSdpConnectionField* obj = new ( ELeave ) CSdpConnectionField;
+	CleanupStack::PushL( obj );
+	obj->ConstructL( aNetType, aAddressType, aAddress );
+	return obj;
+    }
+
+// Destructor
+EXPORT_C CSdpConnectionField::~CSdpConnectionField()
+	{
+    delete iAddress;
+    iNetType.Close();
+    iAddressType.Close();
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::EncodeL
+// Writes attributes in proper format to the stream
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpConnectionField::EncodeL(
+    RWriteStream& aStream ) const
+	{
+	__TEST_INVARIANT;
+    TBuf8<20> number;  // Is enough for addr as well
+
+    // c=<network type> <address type> <connection address>
+    RStringF header = iPool.StringF( SdpCodecStringConstants::EConnection,
+                                     SdpCodecStringConstants::Table );
+    aStream.WriteL( header.DesC() );
+
+    // Network type
+    aStream.WriteL( iNetType.DesC() );
+    aStream.WriteL( KSPStr );
+
+    // Address type
+    aStream.WriteL( iAddressType.DesC() );
+    aStream.WriteL( KSPStr );
+
+    // Connection address
+    aStream.WriteL( *iAddress );
+    if ( iTTL != KErrNotFound )
+        {
+        number.Zero();
+        number.Append( KSlashStr );
+        number.AppendFormat( _L8("%d"), iTTL );
+        aStream.WriteL( number );
+        }
+
+    if ( iNumOfAddress > 1 )
+        {
+        number.Zero();
+        number.Append( KSlashStr );
+        number.AppendFormat( _L8("%u"), iNumOfAddress );
+        aStream.WriteL( number );
+        }
+
+     // End-of-Line mark
+	aStream.WriteL( KCRLFStr );
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::CloneL
+// Clones an exact copy of this object
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpConnectionField* CSdpConnectionField::CloneL() const
+	{
+	__TEST_INVARIANT;
+
+	CSdpConnectionField* obj = NULL;
+    const TInetAddr* addr = InetAddress();
+
+    if ( addr )
+        {
+        // Could be anything
+        obj = CSdpConnectionField::NewL( *addr, iTTL, iNumOfAddress );
+        }
+    else
+        {
+        // Unicast FQDN address
+        obj = CSdpConnectionField::NewL( iNetType, iAddressType, *iAddress );
+        }
+
+	__ASSERT_DEBUG( *this == *obj, User::Panic(
+                                   KSdpCodecPanicCat, KSdpCodecPanicInternal));
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::operator==
+// Checks if two origin fields are equal
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CSdpConnectionField::operator== (
+    const CSdpConnectionField& aObj ) const
+	{
+	__TEST_INVARIANT;
+
+    TBool equal( EFalse );
+
+    if ( (*iAddress).CompareF( aObj.Address() ) == 0 &&
+         NetType() == aObj.NetType() &&
+         AddressType() == aObj.AddressType() &&
+         TTLValue() == aObj.TTLValue() &&
+         NumOfAddress() == aObj.NumOfAddress() )
+        {
+        // All attributes match, two fields are equal
+        equal = ETrue;
+        }
+
+	return equal;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::NetType
+// Returns network type
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RStringF CSdpConnectionField::NetType() const
+	{
+	__TEST_INVARIANT;
+	return iNetType;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::AddressType
+// Returns address type
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RStringF CSdpConnectionField::AddressType() const
+	{
+	__TEST_INVARIANT;
+	return iAddressType;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::InetAddress
+// Returns address in TInetAddr format if possible
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TInetAddr* CSdpConnectionField::InetAddress() const
+	{
+	__TEST_INVARIANT;
+
+    TInetAddr* addr = NULL;
+    TBuf<KMaxAddressLength> addr16;
+
+    addr16.Copy( iAddress->Des() );
+    TInt err = iInetAddress.Input( addr16 );
+
+    if ( err == KErrNone )
+        {
+        addr = &iInetAddress;
+        }
+
+	return addr;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::Address
+// Returns address in TDesC8 format
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC8& CSdpConnectionField::Address() const
+    {
+    return *iAddress;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::SetInetAddressL
+// Sets address from TInetAddr
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpConnectionField::SetInetAddressL(
+    const TInetAddr& aAddress,
+    TInt aTTL,
+    TUint aNumOfAddress )
+	{
+	__TEST_INVARIANT;
+
+    if ( IsValidAddress( aAddress, aTTL, aNumOfAddress ) == KErrNone )
+        {
+        TBuf<KMaxAddressLength> addr16;
+       	//If aAddress IPv4-Mapped IPv6, result of Output IPv4
+         aAddress.Output( addr16 );
+
+        HBufC8* tempBuf = HBufC8::NewL( addr16.Length() );
+        tempBuf->Des().Copy( addr16 );
+
+        SdpUtil::SetDefaultNetTypeAndAddrType(
+            iPool, aAddress, iNetType, iAddressType );
+        if(aAddress.Address() && aAddress.IsV4Mapped())
+			{
+			iAddressType.Close();
+			iAddressType = iPool.StringF( SdpCodecStringConstants::EAddressTypeIP4,
+                                      SdpCodecStringConstants::Table ).Copy();
+			}
+        // Set address
+        delete iAddress;
+        iAddress = tempBuf;
+        // Set attributes for address
+        iTTL = aTTL;
+        iNumOfAddress = aNumOfAddress;
+        }
+    else
+        {
+        User::Leave( KErrSdpCodecConnectionField );
+        }
+
+	__TEST_INVARIANT;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::SetAddressL
+// Sets new address and types, leaves on error
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpConnectionField::SetAddressL(
+    RStringF aNetType,
+    RStringF aAddressType,
+    const TDesC8& aAddress )
+    {
+    __TEST_INVARIANT;
+    TInt err( KErrNone );
+    RStringF netTypeBackup = iNetType.Copy();
+    RStringF addressTypeBackup = iAddressType.Copy();
+    CleanupClosePushL( netTypeBackup );
+    CleanupClosePushL( addressTypeBackup );
+
+    TRAP( err, CopyNetTypeL( aNetType.DesC() ) );
+    if ( !err )
+        {
+        // Netowrk type changed successfully
+        TRAP( err, CopyAddressTypeL( aAddressType.DesC() ) );
+        if ( !err )
+            {
+            // Address type & network type changed successfully
+            TRAP( err, CopyAddressL( aAddress, iAddressType.Pool() ) );
+
+            if ( err )
+                {
+                // Place back old netType & address
+                iNetType.Close();
+                iNetType = netTypeBackup.Copy();
+
+                iAddressType.Close();
+                iAddressType = addressTypeBackup.Copy();
+
+                User::LeaveIfError( err );
+                }
+            // Everything changed succesfully
+            }
+        else
+            {
+            // Place back old netType
+            iNetType.Close();
+            iNetType = netTypeBackup.Copy();
+
+            User::LeaveIfError( err );
+            }
+        }
+    else
+        {
+        User::LeaveIfError( err );
+        }
+
+    CleanupStack::PopAndDestroy( 2 );   // netTypeBackup, addressTypeBackup
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::TTLValue
+// Returns TTL attribute
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CSdpConnectionField::TTLValue() const
+    {
+    __TEST_INVARIANT;
+    return iTTL;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::SetTTLL
+// Sets new TTL attribute value, leaves on error
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpConnectionField::SetTTLL(
+    TInt aTTL )
+    {
+    __TEST_INVARIANT;
+
+    const TInetAddr* addr = InetAddress();
+
+    // FQDN; Unicast, can be only KErrNotFound
+    // IP4 Multicast: 0 <= TTL <= 255
+    // IP4 Unicast, can be only KErrNotFound
+    // IP6 can be only KErrNotFound
+
+    if ( ( !addr && aTTL != KErrNotFound ) ||
+         ( addr && addr->Address() && addr->IsMulticast() && 
+           ( aTTL < 0 || aTTL > 255 ) ) ||
+         ( addr && addr->Address() && !addr->IsMulticast() && 
+           aTTL != KErrNotFound ) ||
+         ( addr && !addr->Address() && aTTL != KErrNotFound ) )
+        {
+        User::Leave( KErrSdpCodecConnectionField );
+        }
+
+    iTTL = aTTL;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::NumOfAddress
+// Returns number of continuous addresses for multicast
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CSdpConnectionField::NumOfAddress() const
+    {
+    return iNumOfAddress;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::SetNumOfAddressL
+// Sets number of addresses
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpConnectionField::SetNumOfAddressL(
+    TUint aNumOfAddress )
+    {
+    const TInetAddr* addr = InetAddress();
+    if ( aNumOfAddress < 1 || ( !addr && aNumOfAddress != 1 )  ||
+         ( addr && !addr->IsMulticast() && aNumOfAddress != 1  ) )
+        {
+        User::Leave( KErrSdpCodecConnectionField );
+        }
+
+    iNumOfAddress = aNumOfAddress;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::ExternalizeL
+// Externalizes the object to stream
+// -----------------------------------------------------------------------------
+//
+void CSdpConnectionField::ExternalizeL(
+    RWriteStream& aStream ) const
+    {
+    __TEST_INVARIANT;
+
+    // Address
+    aStream.WriteUint32L( iAddress->Des().Length() );
+    aStream.WriteL( iAddress->Des(), iAddress->Des().Length() );
+    // TTL
+    aStream.WriteInt32L( iTTL );
+    // Number of addresses
+    aStream.WriteInt32L( iNumOfAddress );
+    // <network type>
+    aStream.WriteUint32L( iNetType.DesC().Length() );
+    aStream.WriteL( iNetType.DesC() );
+    // <address type>
+    aStream.WriteUint32L( iAddressType.DesC().Length() );
+    aStream.WriteL( iAddressType.DesC() );
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::InternalizeL
+// Internalizes the object from stream
+// -----------------------------------------------------------------------------
+//
+CSdpConnectionField* CSdpConnectionField::InternalizeL(
+    RReadStream& aStream )
+    {
+    TUint32 length;
+    CSdpConnectionField* obj = NULL;
+    RStringPool pool = SdpCodecStringPool::StringPoolL();
+
+    // address
+    length = aStream.ReadUint32L();
+	HBufC8* address = HBufC8::NewLC( length );
+    TPtr8 ptr( address->Des() );
+    aStream.ReadL( ptr, length );
+    // TTL
+    TInt ttl = aStream.ReadInt32L();
+    // Number of addresses
+    TInt numOfAddr = aStream.ReadInt32L();
+    // Network type
+    length = aStream.ReadUint32L();
+    HBufC8* netType = HBufC8::NewLC( length );
+    ptr.Set( netType->Des() );
+    aStream.ReadL( ptr, length );
+    // Address type
+    length = aStream.ReadUint32L();
+    HBufC8* addrType = HBufC8::NewLC( length );
+    ptr.Set( addrType->Des() );
+    aStream.ReadL( ptr, length );
+
+    TInetAddr addr;
+    HBufC* address16 = HBufC::NewLC( address->Length() ) ;
+    address16->Des().Copy( *address );
+    TInt err = addr.Input( *address16 );
+
+    if ( !err )
+        {
+        // Create connection field based on TInetAddr
+        obj = CSdpConnectionField::NewL( addr, ttl, numOfAddr );
+        }
+    else
+        {
+        // Create connection field from buffer, ttl & numOfAddr
+        // are in this case irrelevant
+        RStringF netTypeStr = pool.OpenFStringL( *netType );
+        CleanupClosePushL( netTypeStr );
+        RStringF addrTypeStr = pool.OpenFStringL( *addrType );
+        CleanupClosePushL( addrTypeStr );
+        obj = CSdpConnectionField::NewL( netTypeStr, addrTypeStr, *address );
+        CleanupStack::PopAndDestroy( 2 );   // netTypeStr, addrTypeStr
+        }
+
+    CleanupStack::PopAndDestroy( 4 );  // address, netType, addrType, address16
+    return obj;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::IsValidAddress
+// Checks if the given address is valid
+// -----------------------------------------------------------------------------
+//
+TInt CSdpConnectionField::IsValidAddress(
+    TBool aAddressTypeIP4,
+    const TDesC8& aAddress ) const
+    {
+    HBufC8* address = NULL;
+    TInt ttl( 0 );
+    TUint num( 0 );
+
+    TRAPD( err, address =
+                ParseAddressFieldL( aAddressTypeIP4, aAddress, ttl, num ) );
+    delete address;
+
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::IsValidAddress
+// Checks if the given address is valid
+// -----------------------------------------------------------------------------
+//
+TInt CSdpConnectionField::IsValidAddress(
+    const TInetAddr& aAddress,
+    TInt aTTL,
+    TUint aNumOfAddress ) const
+    {
+    TInt err( KErrSdpCodecConnectionField );
+    // 0 <= TTL <= 255 or KErrNotFound if not defined
+    // Number of addresses > 0
+    if ( ( aTTL == KErrNotFound || ( aTTL >= 0 && aTTL <= 255 ) ) &&
+           aNumOfAddress > 0 )
+        {
+        TBuf16 <KMaxAddressLength> output;
+        aAddress.Output(output);
+
+        // Address has to be either of type IP4 or IP6
+        // If IP4 and multicast then it must contain TTL attribute
+        // If IP4 and unicast then it must NOT contain TTL and must have 1 address
+        // If IP6 and multicast then it must NOT contain TTL
+        // If IP6 and unicast then it must NOT contain TTL and must have 1 address
+        if ( ( aAddress.Address() && 
+               ( ( aAddress.IsMulticast() && aTTL != KErrNotFound ) ||
+                 ( aAddress.IsUnicast() && aTTL == KErrNotFound &&
+                   aNumOfAddress == 1 ) ) ) ||
+             ( !aAddress.Address() &&
+               ( ( aAddress.IsMulticast() && aTTL == KErrNotFound ) ||
+                 ( aAddress.IsUnicast() && aTTL == KErrNotFound &&
+                   aNumOfAddress == 1 ) )   ||
+               ( aAddress.IsWildAddr() && 
+               ( output.Match(KWildAddr) == 0||
+               	 output.Match(KWildAddrIPv6) == 0 )) ) )
+           {
+           err = KErrNone;
+           }
+        }
+
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::ParseAddressFieldL
+// Format the address field
+// -----------------------------------------------------------------------------
+//
+HBufC8* CSdpConnectionField::ParseAddressFieldL(
+    TBool aAddressTypeIP4,
+    const TDesC8& aAddress,
+    TInt& aTTL,
+    TUint& aNumberOfAddresses ) const
+    {
+    HBufC8* address = NULL;
+
+    if ( aAddress.Length() > 0 && aAddress.Length() <= KMaxAddressLength )
+        {
+        // IP4 address
+        TInetAddr addr;
+        TBuf<KMaxAddressLength> buf16;
+
+        // IP address lasts till first separator mark
+        TInt pos = aAddress.Locate( KSlashChar );
+        if ( pos == KErrNotFound )
+            {
+            pos = aAddress.Length();
+            }
+        buf16.Copy( aAddress.Left( pos ) );
+
+        // Try to convert the string to TInetAddr
+        TInt err = addr.Input( buf16 );
+
+   		//Type and address check
+        TBuf16 <KMaxAddressLength> output;
+        addr.Output(output);
+        if (err == KErrNone)
+	        {
+            if (addr.Address() )
+                {
+                if ( (addr.IsV4Mapped() && aAddressTypeIP4) ||
+                     (!addr.IsV4Mapped() && !aAddressTypeIP4) )
+                    {
+                    User::Leave( KErrSdpCodecConnectionField );
+                    }
+                else
+                    {
+                    // IP4 address
+                    address = ParseIP4AddressL( pos, addr, aAddress, aTTL,
+                                            aNumberOfAddresses );
+                    }
+                }
+            else
+                {
+                if ( !aAddressTypeIP4)
+                    {
+                    // IP6 address
+                    address = ParseIP6AddressL( pos, addr, aAddress, aTTL,
+                                        aNumberOfAddresses );
+                    }
+                else if ( addr.IsWildAddr() && output.Match(KWildAddr) == 0 )
+                    {
+                    // 0.0.0.0
+                    address = ParseIP4AddressL( pos, addr, aAddress, aTTL,
+                                            aNumberOfAddresses );
+                    }
+                else
+                    {
+                    User::Leave( KErrSdpCodecConnectionField );
+                    }
+		        }
+	        }
+        else
+	        {   
+            // FQDN
+	        // Clarify that the address contains only valid FQDN chars
+            // This is always unicast
+            for ( TInt i( 0 ); i < aAddress.Length(); i++ )
+		        {
+                if ( KValidFQDNChars().Locate( aAddress[i] ) ==
+			        KErrNotFound )
+                    {
+                    User::Leave( KErrSdpCodecConnectionField );
+                    }
+                }
+            address = aAddress.AllocL();
+            aTTL = KErrNotFound;
+            aNumberOfAddresses = 1;
+	        }
+
+        }
+    else
+        {
+        User::Leave( KErrSdpCodecConnectionField );
+        }
+
+    return address;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::ParseIP4AddressL
+// Parses IP4 address and checks that it is valid
+// -----------------------------------------------------------------------------
+//
+HBufC8* CSdpConnectionField::ParseIP4AddressL(
+    TInt aPos,
+    TInetAddr& aAddr,
+    const TDesC8& aAddress,
+    TInt& aTTL,
+    TUint& aNumberOfAddresses ) const
+    {
+    HBufC8* address = NULL;
+
+    if ( aAddr.IsMulticast() )
+        {
+        // Multicast address - MUST contain TTL and possibly
+        // number of addresses
+        if ( aPos != aAddress.Length() )
+            {
+            TInt pos2 = aAddress.Right( aAddress.Length() - aPos - 1 ).Locate(
+                KSlashChar );
+
+            if ( pos2 != KErrNotFound )
+                {
+                pos2 += aPos + 1;
+
+                // Validity check for number strings
+                TBool digit = SdpUtil::IsDigit(
+                    aAddress.Mid( aPos + 1, pos2 - aPos - 1 ) );
+                digit = digit && SdpUtil::IsDigit(
+                    aAddress.Mid( pos2 + 1, aAddress.Length() - pos2 - 1 ) );
+                if ( !digit )
+                    {
+                    User::Leave( KErrSdpCodecConnectionField );
+                    }
+
+                // TTL & number of addresses
+                User::LeaveIfError(
+                    TLex8( aAddress.Mid( aPos + 1, pos2 - aPos - 1 ) ).Val(
+                        aTTL ) );
+                User::LeaveIfError(
+                    TLex8( aAddress.Mid(
+                        pos2 + 1, aAddress.Length() - pos2 - 1 ) ).Val(
+                            aNumberOfAddresses, EDecimal ) );
+
+                __ASSERT_ALWAYS( aTTL >= 0
+                                && aTTL <= 255
+                                && aNumberOfAddresses > 0,
+                                User::Leave( KErrSdpCodecConnectionField ) );
+                }
+            else
+                {
+                // Validity check for number strings
+                TBool digit = SdpUtil::IsDigit(
+                   aAddress.Mid( aPos + 1, aAddress.Length() - aPos - 1 ) );
+                if ( !digit )
+                    {
+                    User::Leave( KErrSdpCodecConnectionField );
+                    }
+
+                // Plain TTL
+                User::LeaveIfError(
+                    TLex8( aAddress.Mid(
+                        aPos + 1, aAddress.Length() - aPos - 1 ) ).Val(
+                            aTTL ) );
+                aNumberOfAddresses = 1;
+
+                __ASSERT_ALWAYS( aTTL >= 0 && aTTL <= 255,
+                                 User::Leave( KErrSdpCodecConnectionField ) );
+                }
+
+            address = aAddress.Left( aPos ).AllocL();
+            }
+        else
+            {
+            User::Leave( KErrSdpCodecConnectionField );
+            }
+        }
+    else
+        {
+        // Unicast address - cannot contain any multicast TTLs etc.
+        if ( aPos == aAddress.Length() )
+            {
+            address = aAddress.AllocL();
+            aTTL = KErrNotFound;
+            aNumberOfAddresses = 1;
+            }
+        else
+            {
+            User::Leave( KErrSdpCodecConnectionField );
+            }
+        }
+
+    return address;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::ParseIP6AddressL
+// Parses IP6 address and checks that it is valid
+// -----------------------------------------------------------------------------
+//
+HBufC8* CSdpConnectionField::ParseIP6AddressL(
+    TInt aPos,
+    TInetAddr& aAddr,
+    const TDesC8& aAddress,
+    TInt& aTTL,
+    TUint& aNumberOfAddresses ) const
+    {
+    HBufC8* address = NULL;
+
+    if ( aAddr.IsMulticast() )
+        {
+        // Multicast address - CAN contain one extra attribute,
+        // number of addresses
+        if ( aPos != aAddress.Length() )
+            {
+            // Validity check for number strings
+
+            TBool digit = SdpUtil::IsDigit(
+                aAddress.Mid( aPos + 1, aAddress.Length() - aPos - 1 ) );
+            if ( !digit )
+                {
+                User::Leave( KErrSdpCodecConnectionField );
+                }
+
+            User::LeaveIfError( TLex8( aAddress.Mid(
+                aPos + 1, aAddress.Length() - aPos - 1 ) ).Val(
+                    aNumberOfAddresses, EDecimal ) );
+
+            __ASSERT_ALWAYS( aNumberOfAddresses > 0,
+                             User::Leave( KErrSdpCodecConnectionField ) );
+            }
+        else
+            {
+            aNumberOfAddresses = 1;
+            }
+
+        aTTL = KErrNotFound;    // IP6 does not use TTL
+        address = aAddress.Left( aPos ).AllocL();
+        }
+    else
+        {
+        // Unicast address - cannot contain any multicast TTLs etc.
+        if ( aPos == aAddress.Length() )
+            {
+            address = aAddress.AllocL();
+            aTTL = KErrNotFound;
+            aNumberOfAddresses = 1;
+            }
+        else
+            {
+            User::Leave( KErrSdpCodecConnectionField );
+            }
+        }
+
+    return address;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::CopyNetTypeL
+// Copies network type to object after checking that it is valid
+// -----------------------------------------------------------------------------
+//
+void CSdpConnectionField::CopyNetTypeL(
+    const TDesC8& aNetType )
+    {
+    if ( !SdpUtil::IsToken( aNetType ) )
+        {
+        User::Leave( KErrSdpCodecConnectionField );
+        }
+    else
+        {
+        RStringF netType = iPool.OpenFStringL( aNetType );
+        iNetType.Close();
+        iNetType = netType;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::CopyAddressTypeL
+// Copies address type after checking that it is valid
+// -----------------------------------------------------------------------------
+//
+void CSdpConnectionField::CopyAddressTypeL(
+    const TDesC8& aAddrType )
+    {
+    if ( !SdpUtil::IsToken( aAddrType ) )
+        {
+        User::Leave( KErrSdpCodecConnectionField );
+        }
+    else
+        {
+        RStringF addrType = iPool.OpenFStringL( aAddrType );
+        iAddressType.Close();
+        iAddressType = addrType;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::CopyAddressL
+// Copies address after checking that it is valid
+// -----------------------------------------------------------------------------
+//
+void CSdpConnectionField::CopyAddressL(
+    const TDesC8& aAddress,
+    RStringPool aPool )
+    {
+    RStringF addrTypeIP4 = aPool.StringF(
+        SdpCodecStringConstants::EAddressTypeIP4,
+        SdpCodecStringConstants::Table );
+    RStringF addrTypeIP6 = aPool.StringF(
+        SdpCodecStringConstants::EAddressType,
+        SdpCodecStringConstants::Table );
+    HBufC8* addr = NULL;
+
+    if ( iAddressType == addrTypeIP4 || iAddressType == addrTypeIP6 )
+        {
+        User::LeaveIfError(
+            IsValidAddress( iAddressType == addrTypeIP4, aAddress ) );
+
+        addr = ParseAddressFieldL( iAddressType == addrTypeIP4, aAddress,
+                               iTTL, iNumOfAddress );
+  		//If address is IPv4-Mapped IPv6 , it is changed to IPv4
+		TInetAddr inetaddr;
+		TBuf<KMaxAddressLength> address;
+		address.Copy(*addr);
+		TInt err = inetaddr.Input(address);
+        TBuf16 <KMaxAddressLength> output;
+        inetaddr.Output(output);
+		if(!err && 
+            ( ( inetaddr.Address() && inetaddr.IsV4Mapped() ) || 
+              ( inetaddr.IsWildAddr() && output.Match(KWildAddr) != KErrNotFound ) 
+            ) )
+			{//IPv4-Mapped IPv6 is changed to IPv4 address
+			TBuf<KMaxIPDesLength> buf;
+			inetaddr.Output( buf );
+			// Copy new address to safe
+			delete addr;
+			addr = NULL;
+			addr = HBufC8::NewL(buf.Length());
+			addr->Des().Copy(buf);
+			iAddressType.Close();
+			iAddressType = 
+				iPool.StringF(SdpCodecStringConstants::EAddressTypeIP4,
+                               SdpCodecStringConstants::Table ).Copy();
+			}
+	
+        }
+    else
+        {
+        // Address not IP4 or IP6, must be then non-ws-string
+        if ( SdpUtil::IsNonWhitespace( aAddress ) )
+            {
+            addr = aAddress.AllocL();
+            }
+        else
+            {
+            User::Leave( KErrSdpCodecConnectionField );
+            }
+        }
+
+    delete iAddress;
+    iAddress = addr;
+    }
+
+// For DEBUG builds
+
+// -----------------------------------------------------------------------------
+// CSdpConnectionField::__DbgTestInvariant
+// Test invariant
+// -----------------------------------------------------------------------------
+//
+
+void CSdpConnectionField::__DbgTestInvariant() const
+	{
+    TBool validAddr = EFalse;
+
+    RStringF addrTypeIP4 = iPool.StringF(
+        SdpCodecStringConstants::EAddressTypeIP4,
+        SdpCodecStringConstants::Table );
+    RStringF addrTypeIP6 = iPool.StringF(
+        SdpCodecStringConstants::EAddressType,
+        SdpCodecStringConstants::Table );
+
+    if ( iAddress &&
+        ( iAddressType == addrTypeIP4 || iAddressType == addrTypeIP6 ) )
+        {
+        TInetAddr addr;
+        TBuf<KMaxAddressLength> buf16;
+        buf16.Copy( *iAddress );
+        TInt err = addr.Input( buf16 );
+        if ( !err )
+            {
+            validAddr = IsValidAddress(addr, iTTL, iNumOfAddress) == KErrNone;
+            }
+        else
+            {
+            // FQDN unicast
+            if ( iTTL == KErrNotFound && iNumOfAddress == 1 )
+                {
+                validAddr = ETrue;
+                }
+            }
+        }
+
+    TBool invariant = ( SdpUtil::IsToken( iNetType.DesC() ) &&
+                        SdpUtil::IsToken( iAddressType.DesC() ) &&
+                        iAddress && SdpUtil::IsNonWhitespace( *iAddress ) &&
+                        validAddr );
+
+	if ( !invariant )
+        {
+		User::Invariant();
+        }
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdpdocument.cpp	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,914 @@
+// Copyright (c) 2010 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:
+// Name          : SdpDocument.cpp
+// Part of       : Local SDP Codec
+// Version       : 1.0
+//
+
+
+
+#include <s32strm.h>
+#include <e32std.h>
+#include "sdpdocument.h"
+#include "sdptimefield.h"
+#include "sdpbandwidthfield.h"
+#include "sdpattributefield.h"
+#include "sdpmediafield.h"
+#include "sdpconnectionfield.h"
+#include "sdpkeyfield.h"
+#include "sdporiginfield.h"
+#include "sdprepeatfield.h"
+#include "sdpcodecstringconstants.h"
+#include "sdpcodecerr.h"
+#include "sdpcodecconstants.h"
+#include "uri8.h"
+#include "uriutilscommon.h"
+#include "badesca.h"
+#include "_sdpdefs.h"
+#include "sdpcodecstringpool.h"
+#include "sdputil.h"
+#include "sdpcodectemplate.h"
+#include "sdpcodecparseutil.h"
+
+_LIT8(KCRLF, "\r\n");
+// ----------------------------------------------------------------------------
+// CSdpDocument::DecodeL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CSdpDocument* 
+CSdpDocument::DecodeL(const TDesC8& aText)
+	{
+	CSdpDocument* sdpDocument = CSdpDocument::DecodeLC(aText);
+	CleanupStack::Pop();
+	return sdpDocument;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::DecodeLC
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CSdpDocument* 
+CSdpDocument::DecodeLC(const TDesC8& aText)
+	{
+	__ASSERT_ALWAYS (aText.Length() > 0, User::Leave(KErrArgument));
+	CSdpDocument* sdpDocument = new(ELeave)CSdpDocument;
+	CleanupStack::PushL(sdpDocument);
+	sdpDocument->ConstructL();
+	sdpDocument->ParseL(aText);
+	return sdpDocument;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::NewL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CSdpDocument* CSdpDocument::NewL()
+	{
+	CSdpDocument* self = CSdpDocument::NewLC();
+	CleanupStack::Pop();
+	return self;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::NewLC
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CSdpDocument* CSdpDocument::NewLC()
+	{
+	CSdpDocument* self = new(ELeave)CSdpDocument;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::~CSdpDocument
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CSdpDocument::~CSdpDocument()
+	{
+	delete iInfo;
+	delete iSessionName;
+	delete iZoneAdjustments;
+	delete iSdpKeyField;
+	delete iSdpOriginField;
+	delete iSdpConnectionField;
+	if(iTimeFields)
+		{
+		iTimeFields->ResetAndDestroy();
+		delete iTimeFields;
+		}
+	if(iBandwidthFields)
+		{
+		iBandwidthFields->ResetAndDestroy();
+		delete iBandwidthFields;
+		}
+	if(iAttributeFields)
+		{
+		iAttributeFields->ResetAndDestroy();
+		delete iAttributeFields;
+		}
+	if(iMediaFields)
+		{
+		iMediaFields->ResetAndDestroy();
+		delete iMediaFields;
+		}
+	delete iUri;
+	if(iEmailFields)
+		{
+		iEmailFields->Reset();
+		delete iEmailFields;
+		}
+
+	if(iPhoneFields)
+		{
+		iPhoneFields->Reset();
+		delete iPhoneFields;
+		}
+	delete iToken;
+	delete iSdpCodecParseUtil;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::ExternalizeL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpDocument::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream.WriteUint32L (iSdpVersion);	
+	SdpCodecTemplate<CSdpOriginField>::ExternalizeL(OriginField(), aStream);
+	aStream.WriteUint32L (iSessionName->Length());
+	if (iSessionName->Length() > 0)
+		{
+		aStream.WriteL (*iSessionName);
+		}
+	aStream.WriteUint32L (iInfo->Length());
+	if (iInfo->Length() > 0)
+		{
+		aStream.WriteL (*iInfo);
+		}
+	if(Uri())
+		{
+		aStream.WriteUint8L (1);
+		aStream.WriteUint32L ((iUri->Uri()).UriDes().Length());
+		aStream.WriteL((iUri->Uri()).UriDes());
+		}
+	else
+		{
+		aStream.WriteUint8L (0);
+		}
+	ExternalizeDesCArrayL(*iEmailFields, aStream);
+	ExternalizeDesCArrayL(*iPhoneFields, aStream);
+
+	SdpCodecTemplate<CSdpConnectionField>::ExternalizeL(iSdpConnectionField,
+														aStream);
+	SdpCodecTemplate<CSdpBandwidthField>::ExternalizeArrayL(*iBandwidthFields,
+															aStream);
+	SdpCodecTemplate<CSdpTimeField>::ExternalizeArrayL(*iTimeFields, aStream);
+	aStream.WriteUint32L (iZoneAdjustments->Length());
+	if (iZoneAdjustments->Length() > 0)
+		{
+		aStream.WriteL (*iZoneAdjustments);
+		}
+	SdpCodecTemplate<CSdpKeyField>::ExternalizeL(Key(), aStream);
+	SdpCodecTemplate<CSdpAttributeField>::ExternalizeArrayL(*iAttributeFields,
+															aStream);
+	SdpCodecTemplate<CSdpMediaField>::ExternalizeArrayL(*iMediaFields, 
+															aStream);
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::InternalizeL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CSdpDocument* 
+CSdpDocument::InternalizeL(RReadStream& aStream)
+	{
+	CSdpDocument* self = new(ELeave)CSdpDocument;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	self->DoInternalizeL (aStream);
+	CleanupStack::Pop();
+	return self;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::DoInternalizeL
+// ----------------------------------------------------------------------------
+//
+void CSdpDocument::DoInternalizeL(RReadStream& aStream)
+	{
+	if(iTimeFields)
+		{
+		iTimeFields->ResetAndDestroy();
+		}
+	iSdpVersion = aStream.ReadUint32L();
+	if(aStream.ReadUint8L())
+		{
+		SetOriginField(CSdpOriginField::InternalizeL(aStream));
+		}
+	SetSessionNameL(GetTokenFromStreamL(aStream));
+	SetInfoL(GetTokenFromStreamL(aStream));
+	if(aStream.ReadUint8L())
+		{
+		TUriParser8 parser;
+		User::LeaveIfError(parser.Parse(GetTokenFromStreamL(aStream)));
+		SetUri(CUri8::NewL(parser));
+		}
+	TInt i = 0;
+	TInt count = aStream.ReadUint32L();
+	for (i = 0;i < count;i++)
+		{
+		TPtrC8 temp(GetTokenFromStreamL(aStream));
+		if(temp.Compare(KNullDesC8) != 0)
+			{
+			iEmailFields->AppendL(temp);
+			}
+		}
+	count = aStream.ReadUint32L();
+	for (i = 0;i < count;i++)
+		{
+		TPtrC8 temp(GetTokenFromStreamL(aStream));
+		if(temp.Compare(KNullDesC8) != 0)
+			{
+			iPhoneFields->AppendL(temp);
+			}
+		}
+	if(aStream.ReadUint8L())
+		{
+		SetConnectionField(CSdpConnectionField::InternalizeL(aStream));
+		}
+	SdpCodecTemplate<CSdpBandwidthField>::InternalizeArrayL(
+												*iBandwidthFields, aStream);
+	SdpCodecTemplate<CSdpTimeField>::InternalizeArrayL(*iTimeFields,
+														aStream);
+	SetZoneAdjustmentsL(GetTokenFromStreamL(aStream));
+	if(aStream.ReadUint8L())
+		{
+		SetKey(CSdpKeyField::InternalizeL(aStream));
+		}
+	SdpCodecTemplate<CSdpAttributeField>::InternalizeArrayL(
+												*iAttributeFields, aStream);
+	SdpCodecTemplate<CSdpMediaField>::InternalizeArrayL(*iMediaFields,
+															aStream);
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::EncodeL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpDocument::EncodeL(RWriteStream& aStream) const
+	{
+	RStringF headername = iPool.StringF( SdpCodecStringConstants::EVersion, 
+                                              SdpCodecStringConstants::Table );
+    aStream.WriteL(headername.DesC());
+	TBuf8<80> text;
+	text.Format(_L8("%u"), iSdpVersion);
+	aStream.WriteL(text);
+	aStream.WriteL(KCRLF);	
+	SdpCodecTemplate<CSdpOriginField>::EncodeL(OriginField(), aStream);
+	SdpUtil::EncodeBufferL(*iSessionName, SdpCodecStringConstants::ESession,
+																	aStream);
+	SdpUtil::EncodeBufferL(*iInfo, SdpCodecStringConstants::EInfo, aStream);
+	if(Uri())
+		{
+		SdpUtil::EncodeBufferL(((iUri->Uri()).UriDes()), 
+					SdpCodecStringConstants::EUri, aStream);
+		}
+	EncodeDesCArrayL(*iEmailFields, SdpCodecStringConstants::EEmail, aStream);
+	EncodeDesCArrayL(*iPhoneFields, SdpCodecStringConstants::EPhone, aStream);
+	SdpCodecTemplate<CSdpConnectionField>::EncodeL(iSdpConnectionField,
+														aStream);
+	SdpCodecTemplate<CSdpBandwidthField>::EncodeArrayL(*iBandwidthFields,
+														aStream);
+	SdpCodecTemplate<CSdpTimeField>::EncodeArrayL(*iTimeFields, aStream);
+	SdpUtil::EncodeBufferL(*iZoneAdjustments,
+							SdpCodecStringConstants::EZone, aStream);
+	SdpCodecTemplate<CSdpKeyField>::EncodeL(Key(), aStream);
+	SdpCodecTemplate<CSdpAttributeField>::EncodeArrayL(*iAttributeFields, 
+														aStream);
+	SdpCodecTemplate<CSdpMediaField>::EncodeArrayL(*iMediaFields, aStream);
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::CloneL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CSdpDocument* CSdpDocument::CloneL() const
+	{
+	CSdpDocument* sdpdocument = new(ELeave)CSdpDocument;
+	CleanupStack::PushL(sdpdocument);
+	sdpdocument->ConstructL(*this);
+	CleanupStack::Pop();//sdpdocument
+	return sdpdocument;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::IsValid
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CSdpDocument::IsValid() const
+	{
+	if (iTimeFields->Count() == 0 || !OriginField() ||
+        !SessionName().Length()||
+		(!iMediaFields->Count() && !ConnectionField()))
+		{
+		return EFalse;
+		}
+    TInt j;
+	for (j=0; j < iMediaFields->Count(); j++)
+		{
+		if(!(*iMediaFields)[j]->IsValid() || 
+			(!ConnectionField() && (!(*iMediaFields)[j]->IsContactPresent())))
+			{
+			return EFalse;
+			}
+		}
+    
+    for (j=0; j < iTimeFields->Count(); j++)
+		{
+        if ( !(*iTimeFields)[j]->IsValid())
+            {
+		    return EFalse;
+            }
+		}
+	return ETrue;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::SdpVersion
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TUint CSdpDocument::SdpVersion() const
+	{
+	return iSdpVersion;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::OriginField
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CSdpOriginField* CSdpDocument::OriginField()
+	{
+	return iSdpOriginField;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::OriginField
+// ----------------------------------------------------------------------------
+//
+EXPORT_C const CSdpOriginField* CSdpDocument::OriginField() const
+	{
+	return iSdpOriginField;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::SetOriginField
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpDocument::SetOriginField(CSdpOriginField* aObj)
+	{
+	delete iSdpOriginField;
+	iSdpOriginField = aObj;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::SessionName
+// ----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC8& CSdpDocument::SessionName() const
+	{
+	return *iSessionName;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::SetSessionNameL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpDocument::SetSessionNameL(const TDesC8& aValue)
+	{
+	__ASSERT_ALWAYS (aValue.Compare(KNullDesC8) == 0||
+					aValue.Compare(_L8(" ")) == 0||
+					SdpUtil::IsByteString(aValue),
+	                 User::Leave(KErrSdpCodecSessionField));
+	HBufC8* tmp = aValue.AllocL();
+	delete iSessionName;
+	iSessionName = tmp;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::Info
+// ----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC8& CSdpDocument::Info() const
+	{
+	return *iInfo;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::SetInfoL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpDocument::SetInfoL(const TDesC8& aValue)
+	{
+	__ASSERT_ALWAYS (aValue.Compare(KNullDesC8) == 0||
+					SdpUtil::IsByteString(aValue),
+	                 User::Leave(KErrSdpCodecInfoField));
+	HBufC8* tmp = aValue.AllocL();
+	tmp->Des().Trim();
+	delete iInfo;
+	iInfo = tmp;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::Uri
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CUri8* CSdpDocument::Uri() 
+	{
+	return iUri;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::Uri
+// ----------------------------------------------------------------------------
+//
+EXPORT_C const CUri8* CSdpDocument::Uri() const
+	{
+	return iUri;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::SetUriL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpDocument::SetUri(CUri8* aValue)
+	{
+	delete iUri;
+	iUri = aValue;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::EmailFields
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CDesC8Array& CSdpDocument::EmailFields()
+	{
+	return *iEmailFields;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::PhoneFields
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CDesC8Array& CSdpDocument::PhoneFields()
+	{
+	return *iPhoneFields;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::ConnectionField
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CSdpConnectionField* CSdpDocument::ConnectionField()
+	{
+	return iSdpConnectionField;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::ConnectionField
+// ----------------------------------------------------------------------------
+//
+EXPORT_C const CSdpConnectionField* CSdpDocument::ConnectionField() const
+	{
+	return iSdpConnectionField;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::SetConnectionField
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpDocument::SetConnectionField(CSdpConnectionField* aObj)
+	{
+	delete iSdpConnectionField;
+	iSdpConnectionField = aObj;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::BandwidthFields
+// ----------------------------------------------------------------------------
+//
+EXPORT_C RPointerArray<CSdpBandwidthField>& CSdpDocument::BandwidthFields()
+	{
+	return *iBandwidthFields;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::TimeFields
+// ----------------------------------------------------------------------------
+//
+EXPORT_C RPointerArray<CSdpTimeField>& CSdpDocument::TimeFields()
+	{
+	return *iTimeFields;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::ZoneAdjustments
+// ----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC8& CSdpDocument::ZoneAdjustments() const
+	{
+	return *iZoneAdjustments;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::SetZoneAdjustmentsL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpDocument::SetZoneAdjustmentsL(const TDesC8& aValue)
+	{
+	HBufC8* tmp = aValue.AllocL();
+	tmp->Des().Trim();
+	delete iZoneAdjustments;
+	iZoneAdjustments = tmp;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::Key
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CSdpKeyField* CSdpDocument::Key()
+	{
+	return iSdpKeyField;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::Key
+// ----------------------------------------------------------------------------
+//
+EXPORT_C const CSdpKeyField* CSdpDocument::Key() const
+	{
+	return iSdpKeyField;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::SetKey
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpDocument::SetKey(CSdpKeyField* aObj)
+	{
+	delete iSdpKeyField;
+	iSdpKeyField = aObj;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::AttributeFields
+// ----------------------------------------------------------------------------
+//
+EXPORT_C RPointerArray<CSdpAttributeField>& CSdpDocument::AttributeFields()
+	{
+	return *iAttributeFields;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::MediaFields
+// ----------------------------------------------------------------------------
+//
+EXPORT_C RPointerArray<CSdpMediaField>& CSdpDocument::MediaFields()
+	{
+	return *iMediaFields;
+	}
+	
+// ----------------------------------------------------------------------------
+// CSdpDocument::CSdpDocument
+// ----------------------------------------------------------------------------
+//
+CSdpDocument::CSdpDocument()
+	{
+	}
+	
+// ----------------------------------------------------------------------------
+// CSdpDocument::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CSdpDocument::ConstructL()
+	{
+	iPool = SdpCodecStringPool::StringPoolL();
+	iInfo = KNullDesC8().AllocL();
+	iSessionName = KNullDesC8().AllocL();
+	iZoneAdjustments = KNullDesC8().AllocL();
+	iSdpVersion = 0;
+	iEmailFields = new(ELeave)CDesC8ArraySeg(1);
+	iPhoneFields = new(ELeave)CDesC8ArraySeg(1);
+	iBandwidthFields = new(ELeave)RPointerArray<CSdpBandwidthField>;
+	iTimeFields = new(ELeave)RPointerArray<CSdpTimeField>;
+	iAttributeFields = new(ELeave)RPointerArray<CSdpAttributeField>;
+	iMediaFields = new(ELeave)RPointerArray<CSdpMediaField>;
+	CSdpTimeField* timefield = CSdpTimeField::NewLC(_L8("0"),_L8("0"));
+	User::LeaveIfError(iTimeFields->Append(timefield));
+	CleanupStack::Pop();
+	iToken = KNullDesC8().AllocL();
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpDocument::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CSdpDocument::ConstructL(const CSdpDocument& aSdpDocument)
+	{
+	ConstructL();
+	iSdpVersion = aSdpDocument.SdpVersion();
+	if ( aSdpDocument.OriginField() )
+		{
+		iSdpOriginField = aSdpDocument.OriginField()->CloneL();
+		}
+	delete iSessionName;
+	iSessionName = 0;
+	iSessionName = aSdpDocument.SessionName().AllocL();
+	HBufC8* tmp = aSdpDocument.Info().AllocL();
+	delete iInfo;
+	iInfo = tmp;
+	if ( aSdpDocument.Uri() )
+		{
+		iUri = CUri8::NewL(aSdpDocument.Uri()->Uri());
+		}
+	TInt i = 0;
+	for ( i=0; i < (aSdpDocument.iEmailFields)->MdcaCount(); i++ )
+		{
+		iEmailFields->AppendL(aSdpDocument.iEmailFields->MdcaPoint(i));
+		}
+
+	for (i=0; i < (aSdpDocument.iPhoneFields)->MdcaCount(); i++)
+		{
+		iPhoneFields->AppendL(aSdpDocument.iPhoneFields->MdcaPoint(i));
+		}
+
+	if ( aSdpDocument.ConnectionField() )
+		{
+		iSdpConnectionField = aSdpDocument.ConnectionField()->CloneL();
+		}
+	SdpCodecTemplate<CSdpBandwidthField>::CloneArrayL(*iBandwidthFields, 
+											*aSdpDocument.iBandwidthFields);
+	if ( iTimeFields )
+		{
+		iTimeFields->ResetAndDestroy();
+		}
+	SdpCodecTemplate<CSdpTimeField>::CloneArrayL(*iTimeFields, 
+												*aSdpDocument.iTimeFields);
+	delete iZoneAdjustments;
+	iZoneAdjustments = 0;
+	iZoneAdjustments = aSdpDocument.ZoneAdjustments().AllocL();
+	if(aSdpDocument.Key())
+		{
+		iSdpKeyField = aSdpDocument.Key()->CloneL();
+		}
+	SdpCodecTemplate<CSdpAttributeField>::CloneArrayL(*iAttributeFields,
+											*aSdpDocument.iAttributeFields);
+	SdpCodecTemplate<CSdpMediaField>::CloneArrayL(*iMediaFields, 
+												*aSdpDocument.iMediaFields);
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpDocument::ParseL
+// ---------------------------------------------------------------------------
+//
+void CSdpDocument::ParseL (const TDesC8& aText)
+	{
+	if(iTimeFields)
+		{
+		iTimeFields->ResetAndDestroy();
+		delete iTimeFields;
+		iTimeFields = 0;
+		}
+	iSdpCodecParseUtil = CSdpCodecParseUtil::NewL(iPool,aText,KErrSdpCodecDecode);
+	ParseSessionVersionL();
+	ParseSessionOwnerL();
+	ParseSessionNameL();
+	ParseSessionInformationL();
+	ParseUriL();
+	ParseEmailL();
+	ParsePhoneL();
+	ParseConnectionL();
+	ParseBandwidthL();
+	ParseTimeFieldL();
+	ParseZoneAdjustmentL();
+	ParseEncryptionKeyL();
+	ParseAttributeFieldL();
+	ParseMediaLevelL ();
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpDocument::ParseSessionVersionL
+// ---------------------------------------------------------------------------
+//
+void CSdpDocument::ParseSessionVersionL()
+	{
+	iSdpVersion = 
+		iSdpCodecParseUtil->ParseSessionVersionL(KErrSdpCodecSessionField);
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpDocument::ParseSessionOwnerL
+// ---------------------------------------------------------------------------
+//
+void CSdpDocument::ParseSessionOwnerL()
+	{
+	iSdpOriginField = iSdpCodecParseUtil->ParseSessionOwnerL(
+													KErrSdpCodecOriginField);
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpDocument::ParseSessionNameL
+// ---------------------------------------------------------------------------
+//
+void CSdpDocument::ParseSessionNameL()
+	{
+	SetSessionNameL(iSdpCodecParseUtil->ParseSessionNameL(
+													KErrSdpCodecSessionField));
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpDocument::ParseSessionInformationL
+// ---------------------------------------------------------------------------
+//
+void CSdpDocument::ParseSessionInformationL()
+	{
+	SetInfoL(iSdpCodecParseUtil->ParseInformationL(KErrSdpCodecInfoField));
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpDocument::ParseUriL
+// ---------------------------------------------------------------------------
+//
+void CSdpDocument::ParseUriL()
+	{
+	SetUri(iSdpCodecParseUtil->ParseUriL(KErrSdpCodecUriField));
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpDocument::ParseEmailL
+// ---------------------------------------------------------------------------
+//
+void CSdpDocument::ParseEmailL()
+	{
+	delete iEmailFields;
+	iEmailFields = NULL;
+	iEmailFields = iSdpCodecParseUtil->ParseEmailL(KErrSdpCodecEmailField);
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpDocument::ParsePhoneL
+// ---------------------------------------------------------------------------
+//
+void CSdpDocument::ParsePhoneL()
+	{
+	delete iPhoneFields;
+	iPhoneFields = NULL;
+	iPhoneFields = iSdpCodecParseUtil->ParsePhoneL(KErrSdpCodecPhoneField);
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpDocument::ParseConnectionL
+// ---------------------------------------------------------------------------
+//
+void CSdpDocument::ParseConnectionL()
+	{
+	iSdpConnectionField = 
+		iSdpCodecParseUtil->ParseConnectionL(KErrSdpCodecConnectionField);
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpDocument::ParseBandwidthL
+// ---------------------------------------------------------------------------
+//
+void CSdpDocument::ParseBandwidthL()
+	{
+	delete iBandwidthFields;
+	iBandwidthFields = 0;
+	iBandwidthFields = 
+		iSdpCodecParseUtil->ParseBandwidthL(KErrSdpCodecBandwidthField);
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpDocument::ParseTimeFieldL
+// ---------------------------------------------------------------------------
+//
+void CSdpDocument::ParseTimeFieldL()
+	{
+	delete iTimeFields;
+	iTimeFields = 0;
+	iTimeFields = iSdpCodecParseUtil->ParseTimeFieldL(KErrSdpCodecTimeField);
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpDocument::ParseZoneAdjustmentL
+// ---------------------------------------------------------------------------
+//
+void CSdpDocument::ParseZoneAdjustmentL()
+	{
+	SetZoneAdjustmentsL(
+		iSdpCodecParseUtil->ParseZoneAdjustmentL(KErrSdpCodecZoneField));
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpDocument::ParseEncryptionKeyL
+// ---------------------------------------------------------------------------
+//
+void CSdpDocument::ParseEncryptionKeyL()
+	{
+	SetKey(iSdpCodecParseUtil->ParseEncryptionKeyL(KErrSdpCodecKeyField));
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpDocument::ParseAttributeFieldL
+// ---------------------------------------------------------------------------
+//
+void CSdpDocument::ParseAttributeFieldL()
+	{
+	delete iAttributeFields;
+	iAttributeFields = 0;
+	iAttributeFields = 
+		iSdpCodecParseUtil->ParseAttributeFieldL(KErrSdpCodecAttributeField);
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpDocument::ParseMediaLevelL
+// ---------------------------------------------------------------------------
+//
+void CSdpDocument::ParseMediaLevelL()
+	{
+	delete iMediaFields;
+	iMediaFields = 0;
+	iMediaFields = iSdpCodecParseUtil->ParseMediaLevelL();
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpDocument::ExternalizeDesCArrayL
+// ---------------------------------------------------------------------------
+//
+void CSdpDocument::ExternalizeDesCArrayL(CDesC8ArraySeg& aArray,
+						   RWriteStream& aStream) const
+	{
+	aStream.WriteUint32L (aArray.MdcaCount());
+	for (TInt i = 0;i < aArray.MdcaCount();i++)
+		{
+		aStream.WriteUint32L (aArray.MdcaPoint(i).Length());
+		aStream.WriteL(aArray.MdcaPoint(i));
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpDocument::EncodeDesCArrayL
+// ---------------------------------------------------------------------------
+//
+void CSdpDocument::EncodeDesCArrayL(CDesC8ArraySeg& aArray, TInt aIndex,
+										RWriteStream& aStream) const
+	{
+	RStringF headername = 
+					iPool.StringF(aIndex, SdpCodecStringConstants::Table);
+	for (TInt i = 0;i < aArray.MdcaCount();i++)
+		{
+		if(aArray.MdcaPoint(i).Compare(KNullDesC8) != 0)
+			{
+			aStream.WriteL(headername.DesC());
+			aStream.WriteL(aArray.MdcaPoint(i));
+			aStream.WriteL(KCRLF);
+			}
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpDocument::GetTokenFromStreamL
+// ---------------------------------------------------------------------------
+//
+TDesC8& CSdpDocument::GetTokenFromStreamL(RReadStream& aStream)
+	{
+	TUint32 tokenLength = aStream.ReadUint32L();
+	HBufC8* tmp = 0;
+	if (tokenLength > 0)
+		{
+		tmp = HBufC8::NewLC(tokenLength);
+		TPtr8 tokenptr(tmp->Des());
+		aStream.ReadL (tokenptr, tokenLength);
+		CleanupStack::Pop();//tmp
+		}
+	else
+		{
+		tmp = KNullDesC8().AllocL();
+		}
+	delete iToken;
+	iToken = tmp;
+	return *iToken;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdpfmtattributefield.cpp	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,393 @@
+// Copyright (c) 2010 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:
+// Name          : SdpFmtAttributeField.h
+// Part of       : Local SDP Codec
+// Version       : 1.0
+//
+
+
+
+#include <s32mem.h>
+#include "sdpfmtattributefield.h"
+#include "sdpattributefield.h"
+#include "sdprtpmapvalue.h"
+#include "sdputil.h"
+#include "sdpcodecconstants.h"
+#include "sdpcodecstringpool.h"
+#include "sdpcodecerr.h"
+#include "sdpcodec.pan"
+#include "_sdpdefs.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSdpFmtAttributeField::CSdpFmtAttributeField
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSdpFmtAttributeField::CSdpFmtAttributeField()
+: iFormat ( KNullDesC8() ), iValuePart( KNullDesC8() )
+    {
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpFmtAttributeField::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSdpFmtAttributeField::ConstructL(   
+    const TDesC8& aText )
+    {
+    iPool = SdpCodecStringPool::StringPoolL();
+
+    iAttributeField = CSdpAttributeField::DecodeL( aText );
+    FormatValueParamsL( iAttributeField );   
+    __TEST_INVARIANT;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpFmtAttributeField::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSdpFmtAttributeField::ConstructL( RStringF aAttribute,
+                                        const TDesC8& aFormat,
+                                        const TDesC8& aValue )
+    {
+    iPool = SdpCodecStringPool::StringPoolL();
+
+    TInt length = aFormat.Length() + aValue.Length() + KSPStr().Length();        
+    HBufC8* text = HBufC8::NewLC( length );
+    text->Des().Copy( aFormat );
+    if ( aValue.Length() > 0 )
+        {
+        text->Des().Append( KSPStr );
+        text->Des().Append( aValue );
+        }
+
+    iAttributeField = CSdpAttributeField::NewL( aAttribute, *text );
+    CleanupStack::PopAndDestroy(); //text
+    
+    FormatValueParamsL( iAttributeField );
+    __TEST_INVARIANT;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpFmtAttributeField::DecodeL
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpFmtAttributeField* CSdpFmtAttributeField::DecodeL( 
+    const TDesC8& aText )
+    {
+    CSdpFmtAttributeField* field = 
+        CSdpFmtAttributeField::DecodeLC( aText );
+    CleanupStack::Pop();    // field
+    return field;    
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpFmtAttributeField::DecodeLC
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpFmtAttributeField* CSdpFmtAttributeField::DecodeLC(    
+    const TDesC8& aText )
+    {
+    CSdpFmtAttributeField* field = new ( ELeave ) CSdpFmtAttributeField;
+    CleanupStack::PushL( field );
+    field->ConstructL( aText );
+    return field;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpFmtAttributeField::NewL
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpFmtAttributeField* CSdpFmtAttributeField::NewL(
+    RStringF aAttribute,
+    const TDesC8& aFormat,
+    const TDesC8& aValue )
+    {
+    CSdpFmtAttributeField* field =
+        CSdpFmtAttributeField::NewLC( aAttribute, aFormat, aValue );
+    CleanupStack::Pop();    // field
+    return field;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpFmtAttributeField::NewLC
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpFmtAttributeField* CSdpFmtAttributeField::NewLC(
+    RStringF aAttribute,
+    const TDesC8& aFormat,
+    const TDesC8& aValue )
+    {
+    CSdpFmtAttributeField* field = new ( ELeave ) CSdpFmtAttributeField;
+    CleanupStack::PushL( field );
+    field->ConstructL( aAttribute, aFormat, aValue );
+    return field;
+    }
+
+// Destructor
+EXPORT_C CSdpFmtAttributeField::~CSdpFmtAttributeField()
+    {
+    delete iAttributeField;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpFmtAttributeField::EncodeL
+// Encodes the string to a proper message format
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpFmtAttributeField::EncodeL( RWriteStream& aStream ) const
+    {
+    __TEST_INVARIANT;
+    iAttributeField->EncodeL( aStream );
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpFmtAttributeField::CloneL
+// Creates an exact copy of the object
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpFmtAttributeField* CSdpFmtAttributeField::CloneL() const
+    {
+    __TEST_INVARIANT;
+    
+    CSdpFmtAttributeField* obj =
+        CSdpFmtAttributeField::NewL( iAttributeField->Attribute(), 
+                                     Format(), Value() );                               
+
+    __ASSERT_DEBUG( *obj == *this, 
+                    User::Panic( KSdpCodecPanicCat, KSdpCodecPanicInternal ) );
+
+    return obj;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpFmtAttributeField::operator==
+// Creates an exact copy of the object
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CSdpFmtAttributeField::operator==(
+    const CSdpFmtAttributeField& aObj ) const
+    {
+    __TEST_INVARIANT;
+    
+    return ( *iAttributeField == *(aObj.AttributeField()) 
+        && iFormat.Compare(aObj.Format()) == 0
+        && iValuePart.Compare(aObj.Value()) == 0);
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpFmtAttributeField::Attribute
+// Returns attribute field
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RStringF CSdpFmtAttributeField::Attribute() const
+    {
+    __TEST_INVARIANT;
+    return iAttributeField->Attribute();
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpFmtAttributeField::Format
+// Returns Format
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC8& CSdpFmtAttributeField::Format() const
+    {   
+    __TEST_INVARIANT;
+
+    return iFormat;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpFmtAttributeField::Value
+// Returns Format value
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC8& CSdpFmtAttributeField::Value() const
+    {
+    __TEST_INVARIANT;
+    return iValuePart;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpFmtAttributeField::SetL
+// Sets new format attribute
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpFmtAttributeField::SetL( RStringF aAttribute, 
+                                        const TDesC8& aFormat, 
+                                        const TDesC8& aValue )
+    {
+    __TEST_INVARIANT;
+
+    TInt length = aFormat.Length() + aValue.Length() + KSPStr().Length();        
+    HBufC8* txt = HBufC8::NewLC( length );
+    txt->Des().Copy( aFormat );
+    if ( aValue.Length() > 0 )
+        {
+        txt->Des().Append( KSPStr );
+        txt->Des().Append( aValue );
+        }
+
+    CSdpAttributeField* attrFld = CSdpAttributeField::NewL(aAttribute, *txt);
+    CleanupStack::PopAndDestroy(); //txt
+    
+    delete iAttributeField;
+    iAttributeField = attrFld;    
+
+    FormatValueParamsL( iAttributeField );
+
+    __TEST_INVARIANT;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpFmtAttributeField::ExternalizeL
+// Externalizes object to stream
+// -----------------------------------------------------------------------------
+//
+void CSdpFmtAttributeField::ExternalizeL( RWriteStream& aStream ) const
+    {
+    __TEST_INVARIANT;
+
+    iAttributeField->ExternalizeL( aStream );
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpFmtAttributeField::InternalizeL
+// Internalizes object from stream
+// -----------------------------------------------------------------------------
+//
+CSdpFmtAttributeField* CSdpFmtAttributeField::InternalizeL( 
+    RReadStream& aStream )
+    {
+    CSdpFmtAttributeField* obj = new ( ELeave ) CSdpFmtAttributeField();
+    CleanupStack::PushL( obj );
+    obj->DoInternalizeL( aStream );
+    CleanupStack::Pop();
+
+    return obj;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpFmtAttributeField::DoInternalizeL
+// Does the "2nd phase construction" of internalization
+// -----------------------------------------------------------------------------
+//
+void CSdpFmtAttributeField::DoInternalizeL( RReadStream& aStream )
+    {
+    iPool = SdpCodecStringPool::StringPoolL();
+    iAttributeField = CSdpAttributeField::InternalizeL( aStream );
+    FormatValueParamsL( iAttributeField );
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpFmtAttributeField::AttributeField
+// Returns attribute field
+// -----------------------------------------------------------------------------
+//
+const CSdpAttributeField* CSdpFmtAttributeField::AttributeField() const
+    {
+    __TEST_INVARIANT;
+    return iAttributeField;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpFmtAttributeField::FormatValueParamsL
+// Formats value parameters
+// -----------------------------------------------------------------------------
+//
+void CSdpFmtAttributeField::FormatValueParamsL( CSdpAttributeField* aField )
+    {
+    __ASSERT_ALWAYS (aField->Attribute() == 
+                     iPool.StringF( SdpCodecStringConstants::EAttributeFmtp, 
+                                SdpCodecStringConstants::Table ) 
+                  || aField->Attribute() ==
+                     iPool.StringF( SdpCodecStringConstants::EAttributeRtpmap,
+                                SdpCodecStringConstants::Table ),
+                User::Leave( KErrSdpCodecMediaAttributeField ));
+    DecodeFormatL( aField->Value() );
+    if ( iValuePart.Length() == 0 &&
+         aField->Attribute() ==
+         iPool.StringF( SdpCodecStringConstants::EAttributeRtpmap,
+                        SdpCodecStringConstants::Table ))
+        {
+        User::Leave( KErrSdpCodecMediaAttributeField );
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSdpFmtAttributeField::DecodeFormatL
+// Decodes format parameter from string
+// -----------------------------------------------------------------------------
+//
+void CSdpFmtAttributeField::DecodeFormatL( const TDesC8& aText )
+    {
+    __ASSERT_ALWAYS( aText.Length() > 0, 
+                     User::Leave( KErrSdpCodecAttributeField ) );
+
+    TInt pos = aText.Locate( KSPChar );
+
+    if ( pos == 0 )
+        {
+        User::Leave( KErrSdpCodecAttributeField );
+        }
+    
+    if ( pos > 0 )
+        {
+        iFormat.Set( aText.Left( pos ) );
+
+        TPtrC8 formatParameters( aText.Right( aText.Length() - pos - 1 ) );
+        
+        if ( formatParameters.Length() > 0 )
+            {
+            iValuePart.Set( formatParameters );
+            }
+        else
+            {
+            iValuePart.Set( KNullDesC8 );
+            }
+        }
+    else
+        {
+        // No format parameters
+        iFormat.Set( aText );
+        iValuePart.Set( KNullDesC8 );
+        }
+    }
+
+// For DEBUG builds
+// -----------------------------------------------------------------------------
+// CSdpFmtAttributeField::__DbgTestInvariant
+// Test invariant
+// -----------------------------------------------------------------------------
+//	
+void CSdpFmtAttributeField::__DbgTestInvariant() const
+	{
+    TBool invariant = iAttributeField != NULL;
+
+    if ( !invariant )
+        {
+        User::Invariant();
+        }
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdpkeyfield.cpp	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,525 @@
+// Copyright (c) 2010 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:
+// Name          : SdpKeyField.h
+// Part of       : Local SDP Codec
+// Version       : 1.0
+//
+
+
+
+#include <uri8.h>
+#include <s32strm.h>
+#include "sdpkeyfield.h"
+#include "sdputil.h"
+#include "sdpcodec.pan"
+#include "_sdpdefs.h"
+#include "sdpcodecstringconstants.h"
+#include "sdpcodecconstants.h"
+#include "sdpcodecerr.h"
+#include "sdpcodecstringpool.h"
+
+// LOCAL CONSTANTS
+const TText8 KPlusChar = '+';
+
+// -----------------------------------------------------------------------------
+// CSdpKeyField::DecodeL
+// Decodes key field from TDesC
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpKeyField* CSdpKeyField::DecodeL(const TDesC8& aFieldValue)
+	{
+	CSdpKeyField* obj = DecodeLC(aFieldValue);
+	CleanupStack::Pop();
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpKeyField::DecodeL
+// Decodes key field from TDesC
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpKeyField* CSdpKeyField::DecodeLC(const TDesC8& aFieldValue)
+	{
+	CSdpKeyField* obj = new (ELeave) CSdpKeyField();
+	CleanupStack::PushL(obj);
+	obj->ConstructL(aFieldValue);
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpKeyField::NewL
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpKeyField* CSdpKeyField::NewL(RStringF aMethod,
+                                          const TDesC8& aEncryptionKey)
+	{
+	CSdpKeyField* obj = NewLC(aMethod, aEncryptionKey);
+	CleanupStack::Pop();
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpKeyField::NewLC
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpKeyField* CSdpKeyField::NewLC(RStringF aMethod,
+                                           const TDesC8& aEncryptionKey)
+	{
+	CSdpKeyField* obj = new (ELeave) CSdpKeyField();
+	CleanupStack::PushL(obj);
+	obj->ConstructL(aMethod, aEncryptionKey);
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpKeyField::~CSdpKeyField
+// Destructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpKeyField::~CSdpKeyField()
+	{
+    iMethod.Close();
+	delete iEncryptionKey;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpKeyField::EncodeL
+// Writes attributes in proper format to the stream
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpKeyField::EncodeL(RWriteStream& aStream) const
+	{
+	__TEST_INVARIANT;
+    RStringF header = iStringPool.StringF(SdpCodecStringConstants::EKey,
+                                        SdpCodecStringConstants::Table);
+    aStream.WriteL( header.DesC() );
+
+    aStream.WriteL( iMethod.DesC() );
+    if (iMethod != iStringPool.StringF(SdpCodecStringConstants::EMethodPrompt,
+                                    SdpCodecStringConstants::Table))
+        {
+        aStream.WriteL( KColonStr );
+        if (iEncryptionKey->Length() > 0)
+            {
+            aStream.WriteL( *iEncryptionKey );
+            }
+        }
+
+    aStream.WriteL( KCRLFStr );
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpKeyField::CloneL
+// Creates an exact copy of the key field
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpKeyField * CSdpKeyField::CloneL() const
+	{
+	__TEST_INVARIANT;
+	CSdpKeyField* obj = CSdpKeyField::NewL(iMethod, *iEncryptionKey);
+	__ASSERT_DEBUG(*this == *obj, User::Panic(  KSdpCodecPanicCat,
+                                                KSdpCodecPanicInternal));
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpKeyField::operator ==
+// Checks if two key fields are equal
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CSdpKeyField::operator == (const CSdpKeyField& aObj) const
+	{
+	__TEST_INVARIANT;
+	return iMethod == aObj.iMethod
+			&& ((iEncryptionKey == 0 && aObj.iEncryptionKey == 0)
+				|| (iEncryptionKey != 0 && aObj.iEncryptionKey != 0
+                && aObj.iEncryptionKey->Compare(*iEncryptionKey) == 0));
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpKeyField::Method
+// Returns method
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RStringF CSdpKeyField::Method() const
+	{
+	__TEST_INVARIANT;
+	return iMethod;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpKeyField::EncryptionKey
+// Returns encryption key
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC8& CSdpKeyField::EncryptionKey() const
+	{
+	__TEST_INVARIANT;
+	return *iEncryptionKey;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpKeyField::SetL
+// Sets new values to key method and encryption key
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpKeyField::SetL(RStringF aMethod,
+                                 const TDesC8& aEncryptionKey)
+	{
+    RStringF methodClear = iStringPool.StringF(
+                                        SdpCodecStringConstants::EMethodClear,
+                                        SdpCodecStringConstants::Table );
+    RStringF methodBase64 = iStringPool.StringF(
+                                        SdpCodecStringConstants::EMethodBase64,
+                                        SdpCodecStringConstants::Table );
+    RStringF methodUri = iStringPool.StringF(
+                                        SdpCodecStringConstants::EMethodUri,
+                                        SdpCodecStringConstants::Table );
+    RStringF methodPrompt = iStringPool.StringF(
+                                        SdpCodecStringConstants::EMethodPrompt,
+                                        SdpCodecStringConstants::Table );
+
+    if (aMethod == methodClear)
+        {
+        SetMethodClearAndKeyL(methodClear, aEncryptionKey);
+        }
+    else if (aMethod == methodBase64)
+        {
+        SetMethodBase64AndKeyL(methodBase64, aEncryptionKey);
+        }
+    else if (aMethod == methodUri)
+        {
+        SetMethodUriAndKeyL(methodUri, aEncryptionKey);
+        }
+    else if (aMethod == methodPrompt)
+        {
+        SetMethodPromptL(methodPrompt, aEncryptionKey);
+        }
+    else
+        {
+        User::Leave(KErrSdpCodecKeyField);
+        }
+
+    __TEST_INVARIANT;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpKeyField::ExternalizeL
+// Externalizes the object to stream
+// -----------------------------------------------------------------------------
+//
+void CSdpKeyField::ExternalizeL(RWriteStream& aStream) const
+    {
+    aStream.WriteUint32L( iMethod.DesC().Length() );
+    aStream.WriteL( iMethod.DesC() );
+
+    aStream.WriteUint32L( iEncryptionKey->Des().Length() );
+	if (iEncryptionKey->Des().Length() > 0)
+        {
+        aStream.WriteL(iEncryptionKey->Des(), iEncryptionKey->Des().Length());
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpKeyField::InternalizeL
+// Internalizes the object from stream
+// -----------------------------------------------------------------------------
+//
+CSdpKeyField* CSdpKeyField::InternalizeL(RReadStream& aStream)
+    {
+    CSdpKeyField* self = new (ELeave) CSdpKeyField();
+    CleanupStack::PushL(self);
+    self->iStringPool = SdpCodecStringPool::StringPoolL();
+
+    self->DoInternalizeL(aStream);
+
+    CleanupStack::Pop(); // self
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpKeyField::CSdpKeyField
+// Constructor
+// -----------------------------------------------------------------------------
+//
+CSdpKeyField::CSdpKeyField()
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpKeyField::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSdpKeyField::ConstructL(const TDesC8& aText)
+	{
+    iStringPool = SdpCodecStringPool::StringPoolL();
+    RArray <TPtrC8> lines;
+    lines = SdpUtil::DivideToLinesL(aText, KErrSdpCodecKeyField);
+    CleanupClosePushL(lines);
+
+    TLex8 lexer(lines[0]);
+    RArray<TPtrC8> keyArray = GetElementsFromLineL(lexer);
+    CleanupClosePushL(keyArray);
+    const TDesC8& keyName = iStringPool.StringF(SdpCodecStringConstants::EKey,
+        SdpCodecStringConstants::Table).DesC();
+
+    __ASSERT_ALWAYS(lines.Count() == 1
+                    && keyArray.Count() >= 2 && keyArray.Count() <= 3
+                    && keyArray[0].Find(keyName) != KErrNotFound,
+                    User::Leave(KErrSdpCodecKeyField));
+
+    RStringF method = iStringPool.OpenFStringL(keyArray[1]);
+    CleanupClosePushL(method);
+
+    if (keyArray.Count() == 3)
+        {
+        SetL(method, keyArray[2]);
+        }
+    else
+        {
+        SetL(method, KNullDesC8);
+        }
+    CleanupStack::PopAndDestroy(3);  // method, lines, keyArray
+	__TEST_INVARIANT;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpKeyField::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSdpKeyField::ConstructL(RStringF aMethod, const TDesC8& aEncryptionKey)
+	{
+    iStringPool = SdpCodecStringPool::StringPoolL();
+    SetL(aMethod, aEncryptionKey);
+
+	__TEST_INVARIANT;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpKeyField::DoInternalizeL
+// Internalizes the object members from stream
+// -----------------------------------------------------------------------------
+//
+void CSdpKeyField::DoInternalizeL(RReadStream& aStream)
+    {
+     // <method>
+    TUint32 length = aStream.ReadUint32L();
+    HBufC8* method = HBufC8::NewLC(length);
+    TPtr8 ptr(method->Des());
+    aStream.ReadL(ptr, length);
+
+    RStringF methodStr = iStringPool.OpenFStringL(*method);
+    CleanupStack::PopAndDestroy(); // method
+    CleanupClosePushL(methodStr);
+
+    length = aStream.ReadUint32L();
+    if (length > 0)
+        {
+        HBufC8* key = HBufC8::NewLC(length);
+        ptr.Set(key->Des());
+        aStream.ReadL(ptr, length);
+
+        SetL(methodStr, *key);
+        CleanupStack::PopAndDestroy(); //key
+        }
+    else
+        {
+        SetL(methodStr, KNullDesC8);
+        }
+    CleanupStack::PopAndDestroy(); // methodStr
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpKeyField::SetMethodAndKeyL
+// Sets new values to key method and encryption key
+// -----------------------------------------------------------------------------
+//
+void CSdpKeyField::SetMethodAndKeyL(RStringF aMethod,
+                                    const TDesC8& aEncryptionKey,
+                                    TBool aAllowEmptyKeyValue)
+    {
+    HBufC8* tempKey = aEncryptionKey.AllocL();
+    tempKey->Des().Trim();
+    if (tempKey->Length() == 0 && !aAllowEmptyKeyValue)
+        {
+        delete tempKey;
+        User::Leave(KErrSdpCodecKeyField);
+        }
+    iMethod.Close();
+    iMethod = aMethod.Copy();
+    delete iEncryptionKey;
+    iEncryptionKey = tempKey;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpKeyField::SetMethodClearAndKeyL
+// Sets key method to clear and new encryption key
+// -----------------------------------------------------------------------------
+//
+void CSdpKeyField::SetMethodClearAndKeyL(RStringF aMethod,
+                                         const TDesC8& aEncryptionKey)
+    {
+    __ASSERT_ALWAYS(SdpUtil::IsByteString(aEncryptionKey),
+                    User::Leave(KErrSdpCodecKeyField));
+    SetMethodAndKeyL(aMethod, aEncryptionKey, EFalse);
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpKeyField::SetMethodBase64AndKeyL
+// Sets key method to Base64 and new encryption key
+// -----------------------------------------------------------------------------
+//
+void CSdpKeyField::SetMethodBase64AndKeyL(RStringF aMethod,
+                                          const TDesC8& aText)
+    {
+    __ASSERT_ALWAYS(aText.Length() > 0, User::Leave(KErrSdpCodecKeyField));
+
+    for (TInt i = 0; i < aText.Length(); i++)
+        {
+        if ( !( ( aText[i] >= 'a' && aText[i] <= 'z' ) ||
+                ( aText[i] >= 'A' && aText[i] <= 'Z' ) ||
+                ( aText[i] >= '0' && aText[i] <= '9' ) ||
+                ( aText[i] == KPlusChar ) ||
+                ( aText[i] == KSlashChar ) ||
+                ( aText[i] == KEqualChar ) ) )
+            {
+            User::Leave(KErrSdpCodecKeyField);
+            }
+        }
+    SetMethodAndKeyL(aMethod, aText, EFalse);
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpKeyField::SetMethodUriAndKeyL
+// Sets key method to uri and new encryption key
+// -----------------------------------------------------------------------------
+//
+void CSdpKeyField::SetMethodUriAndKeyL(RStringF aMethod, const TDesC8& aText)
+    {
+    TUriParser8 parser;
+    User::LeaveIfError(parser.Parse(aText));
+    SetMethodAndKeyL(aMethod, aText, EFalse);
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpKeyField::SetMethodPromptL
+// Sets key method to Prompt and new encryption key
+// -----------------------------------------------------------------------------
+//
+void CSdpKeyField::SetMethodPromptL(RStringF aMethod, const TDesC8& aText)
+    {
+    __ASSERT_ALWAYS(aText.Length() == 0, User::Leave(KErrSdpCodecKeyField));
+    SetMethodAndKeyL(aMethod, aText, ETrue);
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpKeyField::GetElementsFromLineL
+// Gets all the elements from a single line
+// -----------------------------------------------------------------------------
+//
+RArray<TPtrC8> CSdpKeyField::GetElementsFromLineL( TLex8& aLexer)
+    {
+    RArray<TPtrC8> lineArray;
+    CleanupClosePushL(lineArray);
+
+    aLexer.Mark();
+    for (TChar curChar(KColonChar); curChar != KEqualChar;)
+        {
+        curChar = aLexer.Peek();
+        if (curChar == KEofChar || curChar == KLFChar ||
+             curChar == KCRChar)
+            {
+            User::Leave(KErrSdpCodecKeyField);
+            }
+        aLexer.Inc();
+        }
+    User::LeaveIfError(lineArray.Append(aLexer.MarkedToken()));
+
+    TBool colonFound = EFalse;
+    TBool eofcFound = EFalse;
+    while (!eofcFound)
+        {
+        aLexer.Mark();
+        while ((aLexer.Peek() != KColonChar || colonFound) &&
+                aLexer.Peek() != KCRChar &&
+                aLexer.Peek() != KLFChar &&
+                aLexer.Peek() != KEofChar)
+            {
+            aLexer.Inc();
+            }
+
+        if (aLexer.MarkedToken().Length() > 0)
+            {
+            User::LeaveIfError(lineArray.Append(aLexer.MarkedToken()));
+            }
+        else
+            {
+            User::Leave(KErrSdpCodecKeyField);
+            }
+
+        if (aLexer.Peek() == KColonChar)
+            {
+            colonFound = ETrue;
+            }
+
+        if (aLexer.Peek() == KCRChar)
+            {
+            aLexer.Inc();
+            }
+        if (aLexer.Peek() == KLFChar)
+            {
+            aLexer.Inc();
+            if (aLexer.Peek() == KEofChar)
+                {
+                eofcFound = ETrue;
+                }
+            }
+        else
+            {
+            aLexer.Inc();
+            }
+        }
+
+    CleanupStack::Pop();
+    return lineArray;
+    }
+
+void CSdpKeyField::__DbgTestInvariant() const
+	{
+    RStringF methodClear = iStringPool.StringF(
+                                        SdpCodecStringConstants::EMethodClear,
+                                        SdpCodecStringConstants::Table );
+    RStringF methodBase64 = iStringPool.StringF(
+                                        SdpCodecStringConstants::EMethodBase64,
+                                        SdpCodecStringConstants::Table );
+    RStringF methodUri = iStringPool.StringF(
+                                        SdpCodecStringConstants::EMethodUri,
+                                        SdpCodecStringConstants::Table );
+    RStringF methodPrompt = iStringPool.StringF(
+                                        SdpCodecStringConstants::EMethodPrompt,
+                                        SdpCodecStringConstants::Table );
+
+    TBool invariant =   (iMethod == methodPrompt
+	                        && (iEncryptionKey != 0 && (iEncryptionKey->Length() == 0)) )
+						||  ((iMethod == methodClear || iMethod == methodBase64
+	                            || iMethod == methodUri)
+                        && (iEncryptionKey != 0 && (iEncryptionKey->Length() != 0)) );
+
+	if (!invariant)
+		User::Invariant();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdpmediafield.cpp	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,1044 @@
+// Copyright (c) 2010 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:
+// Name          : SdpMediaField.cpp
+// Part of       : Local SDP Codec
+// Version       : 1.0
+//
+
+
+
+#include <s32mem.h>
+#include <s32strm.h>
+#include "sdpmediafield.h"
+#include "sdpconnectionfield.h"
+#include "sdpbandwidthfield.h"
+#include "sdpattributefield.h"
+#include "sdpkeyfield.h"
+#include "sdpcodecstringconstants.h"
+#include "sdputil.h"
+#include "sdpcodec.pan"
+#include "_sdpdefs.h"
+#include "sdpcodecstringpool.h"
+#include "sdpfmtattributefield.h"
+#include "sdpcodectemplate.h"
+#include "sdpcodecerr.h"
+#include "sdpcodecparseutil.h"
+#include "sdpcodecconstants.h"
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::DecodeL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CSdpMediaField* 
+CSdpMediaField::DecodeL(const TDesC8& aText, TBool aRecurse)
+	{
+	CSdpMediaField* obj = DecodeLC(aText,aRecurse);
+	CleanupStack::Pop();
+	return obj;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::DecodeLC
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CSdpMediaField* 
+CSdpMediaField::DecodeLC(const TDesC8& aText, TBool aRecurse)
+	{
+	__ASSERT_ALWAYS (aText.Length() > 0, User::Leave(KErrSdpCodecMediaField));
+	CSdpMediaField* obj = new(ELeave)CSdpMediaField;
+	CleanupStack::PushL(obj);
+	obj->ConstructL(aRecurse);
+	obj->ParseL(aText);
+	return obj;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::NewL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CSdpMediaField* CSdpMediaField::NewL(RStringF aMedia,
+											TUint aPort,
+											RStringF aProtocol,
+											const TDesC8& aFormatList)
+	{
+	CSdpMediaField* obj = NewLC(aMedia, aPort, aProtocol, aFormatList);
+	CleanupStack::Pop();
+	return obj;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::NewLC
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CSdpMediaField* CSdpMediaField::NewLC(RStringF aMedia,
+											TUint aPort,
+											RStringF aProtocol,
+											const TDesC8& aFormatList)
+	{
+	CSdpMediaField* obj = new(ELeave)CSdpMediaField;
+	CleanupStack::PushL(obj);
+	obj->ConstructL(aMedia, aPort, aProtocol, aFormatList);
+	return obj;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::~CSdpMediaField
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CSdpMediaField::~CSdpMediaField()
+	{
+	delete iInfo;
+	delete iSdpKeyField;
+	iElementArray.Reset();
+	iMedia.Close();
+	iProtocol.Close();
+	delete iFormatList;
+	delete iToken;
+	if(iBandwidthFields)
+		{
+		iBandwidthFields->ResetAndDestroy();
+		delete iBandwidthFields;
+		}
+	if(iAttributeFields)
+		{
+		iAttributeFields->ResetAndDestroy();
+		delete iAttributeFields;
+		}
+	if(iConnectionFields)
+		{
+		iConnectionFields->ResetAndDestroy();
+		delete iConnectionFields;
+		}
+	if(iFmtAttrFields)
+		{
+		iFmtAttrFields->ResetAndDestroy();
+		delete iFmtAttrFields;
+		}
+	delete iSdpCodecParseUtil;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::CloneL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CSdpMediaField * CSdpMediaField::CloneL(TBool aRecurse) const
+	{
+	CSdpMediaField* obj = new(ELeave)CSdpMediaField;
+	CleanupStack::PushL(obj);
+	obj->ConstructL(aRecurse);
+	obj->ConstructL(*this);
+	CleanupStack::Pop();//obj
+	return obj;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::operator ==
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CSdpMediaField::operator == (const CSdpMediaField& aObj) const
+	{
+	TBool result = ETrue;
+	if(	!(iMedia==aObj.Media()) ||
+		!(iPort == aObj.Port()) ||
+		!(iPortCount == aObj.iPortCount) ||
+		!(iProtocol == aObj.Protocol()) ||
+		!(*iFormatList==(*aObj.iFormatList)) ||
+		(!(*iInfo==(*aObj.iInfo)))||
+		(!iSdpKeyField && aObj.Key())||
+		(iSdpKeyField && !aObj.Key())||
+		((iSdpKeyField && aObj.Key()) && (!(*iSdpKeyField==(*aObj.Key()))))||
+		(iBandwidthFields->Count() != aObj.iBandwidthFields->Count())||
+		(iAttributeFields->Count() != aObj.iAttributeFields->Count())||
+		(iFmtAttrFields->Count() != aObj.iFmtAttrFields->Count())||
+		(iConnectionFields->Count() != aObj.iConnectionFields->Count()))
+		{
+		result = EFalse;
+		}
+
+	TInt i  = 0;
+	if(result)
+		{
+		for (i=0; i < (aObj.iConnectionFields)->Count(); i++)
+			{
+			if((!(*iConnectionFields)[i] && (*aObj.iConnectionFields)[i]) ||
+				((*iConnectionFields)[i] && !(*aObj.iConnectionFields)[i]))
+				{
+				return EFalse;
+				}
+
+			if(((*iConnectionFields)[i] && (*aObj.iConnectionFields)[i]) &&
+				(!(*(*iConnectionFields)[i]==(*(*aObj.iConnectionFields)[i]))))
+				{	
+				return EFalse;
+				}
+			}
+
+		for (i=0; i < (aObj.iBandwidthFields)->Count(); i++)
+			{
+			if((!(*iBandwidthFields)[i] && (*aObj.iBandwidthFields)[i]) ||
+				((*iBandwidthFields)[i] && !(*aObj.iBandwidthFields)[i]))
+				{
+				return EFalse;
+				}
+
+			if(((*iBandwidthFields)[i] && (*aObj.iBandwidthFields)[i]) &&
+				(!(*(*iBandwidthFields)[i]==(*(*aObj.iBandwidthFields)[i]))))
+				{	
+				return EFalse;
+				}
+			}
+
+		for (i=0; i < (aObj.iAttributeFields)->Count(); i++)
+			{
+			if((!((*iAttributeFields)[i]) && ((*aObj.iAttributeFields)[i]))||
+				((*iAttributeFields)[i] && !(*aObj.iAttributeFields)[i]))
+				{
+				return EFalse;
+				}
+	
+			if(((*iAttributeFields)[i] && (*aObj.iAttributeFields)[i]) &&
+				(!(*(*iAttributeFields)[i]==(*(*aObj.iAttributeFields)[i]))))
+				{
+				return EFalse;
+				}
+			}
+
+		for (i=0; i < (aObj.iFmtAttrFields)->Count(); i++)
+			{
+			if((!((*iFmtAttrFields)[i]) && ((*aObj.iFmtAttrFields)[i]))||
+				((*iFmtAttrFields)[i] && !(*aObj.iFmtAttrFields)[i]))
+				{
+				return EFalse;
+				}
+	
+			if(((*iFmtAttrFields)[i] && (*aObj.iFmtAttrFields)[i]) &&
+				(!(*(*iFmtAttrFields)[i]==(*(*aObj.iFmtAttrFields)[i]))))
+				{
+				return EFalse;
+				}
+			}
+		}
+	return result;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::Media
+// ----------------------------------------------------------------------------
+//
+EXPORT_C RStringF CSdpMediaField::Media() const
+	{
+	return iMedia;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::SetMedia
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpMediaField::SetMediaL(RStringF aMedia)
+	{
+	__ASSERT_ALWAYS(SdpUtil::IsTokenChar(aMedia.DesC()), 
+					User::Leave(KErrSdpCodecMediaField));
+	iMedia.Close();
+	iMedia = aMedia.Copy();
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::Protocol
+// ----------------------------------------------------------------------------
+//
+EXPORT_C RStringF CSdpMediaField::Protocol() const
+	{
+	return iProtocol;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::SetProtocol
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpMediaField::SetProtocolL(RStringF aProtocol)
+	{
+	__ASSERT_ALWAYS(SdpUtil::IsTokenCharWithOptionalSlash(aProtocol.DesC()),
+					User::Leave(KErrSdpCodecMediaField));
+    if (aProtocol == iPool.StringF( SdpCodecStringConstants::EProtocolUdp, 
+                            SdpCodecStringConstants::Table ))
+        {
+	    __ASSERT_ALWAYS((iPort == 0 || (iPort >= 1024 && iPort <= 65535)),
+					User::Leave(KErrSdpCodecMediaField));
+        }
+
+	iProtocol.Close();
+	iProtocol = aProtocol.Copy();    
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::Port
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TUint CSdpMediaField::Port() const
+	{
+	return iPort;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::SetPortL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpMediaField::SetPortL(TUint aPort)
+	{
+    if ( iProtocol == iPool.StringF( SdpCodecStringConstants::EProtocolUdp, 
+                            SdpCodecStringConstants::Table ))
+        {
+	    __ASSERT_ALWAYS((aPort == 0 || (aPort >= 1024 && aPort <= 65535)),
+					User::Leave(KErrSdpCodecMediaField));
+        }
+	iPort = aPort;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::PortCount
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TUint CSdpMediaField::PortCount() const
+	{
+	return iPortCount;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::SetPortCount
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpMediaField::SetPortCountL(TUint aCount)
+	{
+	__ASSERT_ALWAYS(aCount > 0, User::Leave(KErrSdpCodecMediaField));
+	iPortCount = aCount;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::FormatList
+// ----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC8& CSdpMediaField::FormatList() const
+	{
+	return *iFormatList;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::SetFormatListL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpMediaField::SetFormatListL(const TDesC8& aValue)
+	{
+	__ASSERT_ALWAYS(SdpUtil::IsTokenCharWithSpacesL(aValue), 
+										User::Leave(KErrSdpCodecMediaField));
+	HBufC8* tmp = aValue.AllocL();
+	delete iFormatList;
+	iFormatList = tmp;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::CSdpMediaField
+// ----------------------------------------------------------------------------
+//
+CSdpMediaField::CSdpMediaField()
+	{
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CSdpMediaField::ConstructL()
+	{
+	iPool = SdpCodecStringPool::StringPoolL();
+	iInfo = KNullDesC8().AllocL();
+	iFormatList = KNullDesC8().AllocL();
+	iToken = KNullDesC8().AllocL();
+	iBandwidthFields = new(ELeave)RPointerArray<CSdpBandwidthField>;
+	iConnectionFields = new(ELeave)RPointerArray<CSdpConnectionField>;
+	iAttributeFields = new(ELeave)RPointerArray<CSdpAttributeField>;
+	iFmtAttrFields = new(ELeave)RPointerArray<CSdpFmtAttributeField>;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CSdpMediaField::ConstructL(TBool aRecurse)
+	{
+	ConstructL();
+	iRecurse = aRecurse;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::ConstructL
+// ----------------------------------------------------------------------------
+//
+void 
+CSdpMediaField::ConstructL(RStringF aMedia, TUint aPort, RStringF aProtocol,
+						const TDesC8& aFormatList)
+	{
+	__ASSERT_ALWAYS(SdpUtil::IsTokenChar(aMedia.DesC()) &&
+					(aPort== 0 || (aPort >= 1024 && aPort <= 65535)) &&
+					SdpUtil::IsTokenCharWithOptionalSlash(aProtocol.DesC()) &&
+					SdpUtil::IsTokenCharWithSpacesL(aFormatList), 
+					User::Leave(KErrArgument));
+	ConstructL();
+	iMedia = aMedia.Copy();
+	iProtocol = aProtocol.Copy(); 
+	SetPortL(aPort);
+	delete iFormatList;
+	iFormatList = 0;
+	iFormatList = aFormatList.AllocL();	
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CSdpMediaField::ConstructL(const CSdpMediaField& aSdpMediaField)
+	{
+	iMedia = aSdpMediaField.Media().Copy();
+	iProtocol = aSdpMediaField.Protocol().Copy();
+    SetPortL(aSdpMediaField.Port());
+	iPortCount = aSdpMediaField.PortCount();
+	HBufC8* tmp = aSdpMediaField.FormatList().AllocL();
+	delete iFormatList;
+	iFormatList = 0;
+	iFormatList = tmp;
+	if(iRecurse)
+		{
+		tmp = aSdpMediaField.Info().AllocL();
+		delete iInfo;
+		iInfo = tmp;
+		SdpCodecTemplate<CSdpConnectionField>::CloneArrayL(*iConnectionFields,
+			*aSdpMediaField.iConnectionFields);
+		SdpCodecTemplate<CSdpBandwidthField>::CloneArrayL(*iBandwidthFields,
+			*aSdpMediaField.iBandwidthFields);
+		if(aSdpMediaField.Key())
+			{
+			iSdpKeyField = aSdpMediaField.Key()->CloneL();
+			}
+		SdpCodecTemplate<CSdpAttributeField>::CloneArrayL(*iAttributeFields,
+			*aSdpMediaField.iAttributeFields);
+		SdpCodecTemplate<CSdpFmtAttributeField>::CloneArrayL(*iFmtAttrFields,
+			*aSdpMediaField.iFmtAttrFields);		
+		}
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::Info
+// ----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC8& CSdpMediaField::Info() const
+	{
+	return *iInfo;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::SetInfoL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpMediaField::SetInfoL(const TDesC8& aValue)
+	{
+	__ASSERT_ALWAYS (aValue.Compare(KNullDesC8) == 0||
+					SdpUtil::IsByteString(aValue),
+					User::Leave(KErrSdpCodecMediaInfoField));
+	HBufC8* tmp = aValue.AllocL();
+	tmp->Des().Trim();
+	delete iInfo;
+	iInfo = tmp;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::Key
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CSdpKeyField* CSdpMediaField::Key()
+	{
+	return iSdpKeyField;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::Key
+// ----------------------------------------------------------------------------
+//
+EXPORT_C const CSdpKeyField* CSdpMediaField::Key() const
+	{
+	return iSdpKeyField;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::SetKey
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpMediaField::SetKey(CSdpKeyField* aObj)
+	{
+	delete iSdpKeyField;
+	iSdpKeyField = aObj;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::ConnectionFields
+// ----------------------------------------------------------------------------
+//
+EXPORT_C RPointerArray<CSdpConnectionField>& CSdpMediaField::ConnectionFields()
+	{
+	return *iConnectionFields;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::BandwidthFields
+// ----------------------------------------------------------------------------
+//
+EXPORT_C RPointerArray<CSdpBandwidthField>& CSdpMediaField::BandwidthFields()
+	{
+	return *iBandwidthFields;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::AttributeFields
+// ----------------------------------------------------------------------------
+//
+EXPORT_C RPointerArray<CSdpAttributeField>& CSdpMediaField::AttributeFields()
+	{
+	return *iAttributeFields;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::FormatAttributeFields()
+// ----------------------------------------------------------------------------
+//
+EXPORT_C RPointerArray<CSdpFmtAttributeField>& 
+CSdpMediaField::FormatAttributeFields()
+	{
+	return *iFmtAttrFields;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::EncodeL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void 
+CSdpMediaField::EncodeL(RWriteStream& aStream, TBool aRecurse) const
+	{
+	RStringF headername = iPool.StringF( SdpCodecStringConstants::EMedia, 
+                                               SdpCodecStringConstants::Table );
+    aStream.WriteL(headername.DesC());
+	aStream.WriteL(iMedia.DesC());
+	aStream.WriteL(KSPStr);
+	TBuf8<80> text;
+	text.Format(_L8("%u"), iPort);
+	aStream.WriteL(text);
+	if(iPortCount>0)
+		{
+		aStream.WriteL(_L8("/"));
+		text.Format(_L8("%u"), iPortCount);
+	    aStream.WriteL(text);
+		}
+	aStream.WriteL(KSPStr);
+	aStream.WriteL(iProtocol.DesC());
+	aStream.WriteL(KSPStr);
+	aStream.WriteL(*iFormatList);
+	aStream.WriteL(KCRLFStr);	
+	if(aRecurse)
+		{
+		SdpUtil::EncodeBufferL(*iInfo, 
+						SdpCodecStringConstants::EInfo, aStream);
+		SdpCodecTemplate<CSdpConnectionField>::EncodeArrayL(*iConnectionFields,
+															aStream);
+		SdpCodecTemplate<CSdpBandwidthField>::EncodeArrayL(*iBandwidthFields,
+															aStream);
+		SdpCodecTemplate<CSdpKeyField>::EncodeL(Key(), aStream);
+
+		for (TInt i = 0;i < iAttributeFields->Count();i++)
+			{
+			if (!(((*iAttributeFields)[i])->IsFmtAttribute()))
+				{
+				((*iAttributeFields)[i])->EncodeL(aStream);
+				}
+			}
+
+		for (TInt i = 0;i < iFmtAttrFields->Count();i++)
+			{
+			((*iFmtAttrFields)[i])->EncodeL(aStream);
+			
+			for (TInt j=0; j<iAttributeFields->Count(); j++)
+				{
+				if ((((*iAttributeFields)[j])->IsFmtAttribute()) &&
+					((*iAttributeFields)[j])->BelongsTo(*(*iFmtAttrFields)[i]))
+					{
+					((*iAttributeFields)[j])->EncodeL(aStream);
+					}
+				}
+			}
+		}
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::IsValid
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CSdpMediaField::IsValid() const
+	{
+	TBool result = EFalse;
+	if(!(iMedia.DesC()==(KNullDesC8)) &&
+		!(iProtocol.DesC()==(KNullDesC8))&&
+		!(*iFormatList==(KNullDesC8)))
+		{
+		result = ETrue;
+		}
+	return result;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::IsContactPresent
+// ----------------------------------------------------------------------------
+//
+TBool CSdpMediaField::IsContactPresent() const
+	{
+	TBool result = EFalse;
+	if(iConnectionFields->Count() > 0)
+		{
+		result = ETrue;
+		}
+	return result;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::ExternalizeL
+// ----------------------------------------------------------------------------
+//
+void CSdpMediaField::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream.WriteUint32L (iMedia.DesC().Length());
+	if (iMedia.DesC().Length() > 0)
+		{
+		aStream.WriteL (iMedia.DesC());
+		}
+	aStream.WriteUint32L (iPort);
+	if(iPortCount)
+		{
+		aStream.WriteUint8L (1);
+		aStream.WriteUint32L (iPortCount);
+		}
+	else
+		{
+		aStream.WriteUint8L (0);
+		}
+	aStream.WriteUint32L (iProtocol.DesC().Length());
+	if (iProtocol.DesC().Length() > 0)
+		{
+		aStream.WriteL (iProtocol.DesC());
+		}
+	aStream.WriteUint32L (iFormatList->Length());
+	if (iFormatList->Length() > 0)
+		{
+		aStream.WriteL (*iFormatList);
+		}
+	aStream.WriteUint32L (iInfo->Length());
+	if (iInfo->Length() > 0)
+		{
+		aStream.WriteL (*iInfo);
+		}
+	SdpCodecTemplate<CSdpConnectionField>::ExternalizeArrayL(*iConnectionFields,
+															aStream);
+	SdpCodecTemplate<CSdpBandwidthField>::ExternalizeArrayL(*iBandwidthFields,
+															aStream);
+	SdpCodecTemplate<CSdpKeyField>::ExternalizeL(Key(), aStream);
+	SdpCodecTemplate<CSdpAttributeField>::ExternalizeArrayL(*iAttributeFields,
+															aStream);
+	SdpCodecTemplate<CSdpFmtAttributeField>::ExternalizeArrayL(*iFmtAttrFields,
+																aStream);
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::InternalizeL
+// ----------------------------------------------------------------------------
+//
+CSdpMediaField* CSdpMediaField::InternalizeL(RReadStream& aStream)
+	{
+	CSdpMediaField* obj = new(ELeave)CSdpMediaField();
+	CleanupStack::PushL(obj);
+	obj->ConstructL();
+	obj->DoInternalizeL (aStream);
+	CleanupStack::Pop();
+	return obj;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpMediaField::DoInternalizeL
+// ----------------------------------------------------------------------------
+//
+void CSdpMediaField::DoInternalizeL(RReadStream& aStream)
+	{
+	RStringF media = iPool.OpenFStringL(GetTokenFromStreamL(aStream));
+	CleanupClosePushL(media);
+	SetMediaL(media);
+	CleanupStack::Pop();//media
+	media.Close();
+    TUint32 port = aStream.ReadUint32L();
+	//SetPortL(aStream.ReadUint32L());
+	TUint flag = aStream.ReadUint8L();
+	if(flag)
+		{
+		SetPortCountL(aStream.ReadUint32L());
+		}
+	RStringF protocol =iPool.OpenFStringL(GetTokenFromStreamL(aStream));
+	CleanupClosePushL(protocol);
+	SetProtocolL(protocol);
+	CleanupStack::Pop();//protocol
+	protocol.Close();
+    SetPortL(port);
+	SetFormatListL(GetTokenFromStreamL(aStream));	
+	SetInfoL(GetTokenFromStreamL(aStream));
+	SdpCodecTemplate<CSdpConnectionField>::InternalizeArrayL(*iConnectionFields,
+															aStream);
+	SdpCodecTemplate<CSdpBandwidthField>::InternalizeArrayL(*iBandwidthFields,
+															aStream);
+	if(aStream.ReadUint8L())
+		{
+		SetKey(CSdpKeyField::InternalizeL(aStream));
+		}
+	SdpCodecTemplate<CSdpAttributeField>::InternalizeArrayL(*iAttributeFields,
+													aStream);
+	SdpCodecTemplate<CSdpFmtAttributeField>::InternalizeArrayL(*iFmtAttrFields,
+													aStream);
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpMediaField::ParseL
+// ---------------------------------------------------------------------------
+//
+void CSdpMediaField::ParseL (const TDesC8& aText)
+	{
+	iElementArray.Reset();
+	iSdpCodecParseUtil = 
+			CSdpCodecParseUtil::NewL(iPool,aText, KErrSdpCodecMediaField);
+	ParseMediaL();
+	if(iRecurse)
+		{
+		ParseAttributeFieldsL();
+		ParseInformationL();
+		ParseConnectionL();
+		ParseBandwithL();
+		ParseEncryptionKeyL();
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpMediaField::ParseMediaL
+// ---------------------------------------------------------------------------
+//
+void CSdpMediaField::ParseMediaL()
+	{
+	iElementArray = iSdpCodecParseUtil->FirstLineArrayElementL(iPool,
+												SdpCodecStringConstants::EMedia,
+												KErrSdpCodecMediaField);
+	__ASSERT_ALWAYS (iElementArray.Count() >= 4,
+					User::Leave(KErrSdpCodecMediaField));
+
+	RStringF media = iPool.OpenFStringL(iElementArray[1]);
+	CleanupClosePushL(media);
+	SetMediaL(media);
+	CleanupStack::Pop();//media
+	media.Close();
+
+	iProtocol = iPool.OpenFStringL(iElementArray[3]);
+
+    TInt lineEndPosition = iElementArray[2].Locate('/');
+	TUint port;
+	if(lineEndPosition == KErrNotFound)
+		{
+		User::LeaveIfError(
+		TLex8(iElementArray[2]).Val(port, EDecimal));
+		SetPortL(port);
+		}
+	else
+		{
+		User::LeaveIfError(TLex8(
+				(iElementArray[2]).Left(lineEndPosition)).Val(port, EDecimal));
+		SetPortL(port);
+		User::LeaveIfError(TLex8(
+			  (iElementArray[2]).Mid(lineEndPosition +1)).Val(port, EDecimal));
+		SetPortCountL(port);
+		}
+	__ASSERT_ALWAYS(SdpUtil::IsTokenCharWithOptionalSlash(iElementArray[3]),
+					User::Leave(KErrArgument));
+	
+    //iProtocol = iPool.OpenFStringL(iElementArray[3]);
+
+	TInt length = 0;
+	TInt i;
+	for(i=4;i<iElementArray.Count();i++)
+		{
+		length += iElementArray[i].Length();
+		if(i + 1 <iElementArray.Count())
+			{
+			length += KSPStr().Length();
+			}
+		}
+	HBufC8* value = HBufC8::NewLC(length);
+	TPtr8 ptr(value->Des());
+	for(i=4;i<iElementArray.Count();i++)
+		{
+		ptr.Append(iElementArray[i]);
+		if(i + 1 <iElementArray.Count())
+			{
+			ptr.Append(KSPStr);
+			}
+		}
+	SetFormatListL(*value);
+	CleanupStack::Pop();//value
+	delete value;
+	iElementArray.Reset();
+	if (iSdpCodecParseUtil->LineArray().Count() > 0)
+	    {
+	    iSdpCodecParseUtil->LineArray().Remove(0);
+	    }
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpMediaField::ParseInformationL
+// ---------------------------------------------------------------------------
+//
+void CSdpMediaField::ParseInformationL()
+	{
+	SetInfoL(iSdpCodecParseUtil->ParseInformationL(KErrSdpCodecMediaInfoField));
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpMediaField::ParseConnectionL
+// ---------------------------------------------------------------------------
+//
+void CSdpMediaField::ParseConnectionL()
+	{
+	delete iConnectionFields;
+	iConnectionFields = 0;
+	iConnectionFields = iSdpCodecParseUtil->ParseConnectionFieldsL(
+										KErrSdpCodecMediaConnectionField);
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpMediaField::ParseBandwithL
+// ---------------------------------------------------------------------------
+//
+void CSdpMediaField::ParseBandwithL()
+	{
+	delete iBandwidthFields;
+	iBandwidthFields = 0;
+	iBandwidthFields = 
+		iSdpCodecParseUtil->ParseBandwidthL(KErrSdpCodecMediaBandwidthField);
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpMediaField::ParseEncryptionKeyL
+// ---------------------------------------------------------------------------
+//
+void CSdpMediaField::ParseEncryptionKeyL()
+	{
+	SetKey(iSdpCodecParseUtil->ParseEncryptionKeyL(KErrSdpCodecMediaKeyField));
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpMediaField::ParseAttributeFieldsL
+// ---------------------------------------------------------------------------
+//
+void CSdpMediaField::ParseAttributeFieldsL()
+	{
+	CSdpFmtAttributeField* fmtattributefield = 0;
+
+    RArray<TPtrC8>& lineArray = iSdpCodecParseUtil->LineArray();
+	for (TInt i=0; i<lineArray.Count(); i++)
+		{
+		iElementArray = CSdpCodecParseUtil::CheckOptionalFieldNameL(iPool,
+								SdpCodecStringConstants::EAttribute,
+								lineArray[i],
+								KErrSdpCodecMediaAttributeField);
+		if (iElementArray.Count())
+			{
+			CSdpAttributeField* attributefield = 
+	            CSdpAttributeField::DecodeLC(lineArray[i]);		
+		    
+            if ( attributefield->Attribute() == 
+                 iPool.StringF( SdpCodecStringConstants::EAttributeRtpmap,
+                                SdpCodecStringConstants::Table ) ||
+                 attributefield->Attribute() ==
+                 iPool.StringF( SdpCodecStringConstants::EAttributeFmtp,
+                                SdpCodecStringConstants::Table ) )
+                {
+                CleanupStack::PopAndDestroy(attributefield);
+                fmtattributefield = 
+                    CSdpFmtAttributeField::DecodeLC(lineArray[i]);
+				iFmtAttrFields->AppendL(fmtattributefield);
+				CleanupStack::Pop(fmtattributefield);
+                }
+            else
+                {
+                iAttributeFields->AppendL(attributefield);
+			    CleanupStack::Pop(attributefield);
+			    if (fmtattributefield)
+			    	{
+			    	attributefield->AssignTo(*fmtattributefield);
+			    	}
+                }
+                   
+			iElementArray.Reset();
+			lineArray.Remove(i);
+			if (i < lineArray.Count())
+			    {
+			    i--;
+			    }
+			}
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpMediaField::GetTokenFromStreamL
+// ---------------------------------------------------------------------------
+//
+TDesC8& CSdpMediaField::GetTokenFromStreamL(RReadStream& aStream)
+	{
+	TUint32 tokenLength = aStream.ReadUint32L();
+	HBufC8* tmp = 0;
+	if (tokenLength > 0)
+		{
+		tmp = HBufC8::NewLC(tokenLength);
+		TPtr8 tokenptr(tmp->Des());
+		aStream.ReadL (tokenptr, tokenLength);
+		CleanupStack::Pop();//tmp
+		}
+	else
+		{
+		tmp = KNullDesC8().AllocL();
+		}
+	delete iToken;
+	iToken = tmp;
+	return *iToken;
+	}
+
+// ---------------------------------------------------------------------------
+// CSdpMediaField::RemoveFormatL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CSdpMediaField::RemoveFormatL(const TDesC8& aFormat)
+    {
+    if ( !iFormatList || iFormatList->Des().Length() == 0 )
+        {
+        User::Leave( KErrSdpCodecMediaField );
+        }
+    TLex8 lexer( *iFormatList );
+    TBool tokenRemoved( EFalse );
+    while ( !tokenRemoved && !lexer.Eos() )
+        {
+        lexer.SkipSpaceAndMark();
+        lexer.SkipCharacters();
+        if ( lexer.TokenLength() > 0 )
+            {
+             if ( aFormat.CompareF(lexer.MarkedToken()) == 0)
+                {                    
+                RArray<TInt> removedObjs;           
+                CleanupClosePushL( removedObjs );
+                for ( TInt i( 0 ); i < iFmtAttrFields->Count(); i++ )
+                    {
+					if (aFormat.CompareF((*iFmtAttrFields)[i]->Format()) == 0)
+                        {
+                        User::LeaveIfError( removedObjs.Append(i) );                        
+                        }                        
+                    }
+                // Remove all format attributes of type format
+                TInt removedCount( 0 );
+                while ( removedObjs.Count() > 0 )
+                    {
+                    CSdpFmtAttributeField* obj = 
+                        (*iFmtAttrFields)[removedObjs[0] - removedCount];
+                    delete obj;
+					obj = 0;
+                    iFmtAttrFields->Remove( removedObjs[0] - removedCount);
+                    removedObjs.Remove(0);
+                    removedCount++;
+                    }
+                CleanupStack::PopAndDestroy();  // removedObjs
+
+                // Remove format from format list
+                iFormatList->Des().Delete( lexer.MarkedOffset(), 
+                                        lexer.Offset() - lexer.MarkedOffset());
+                iFormatList->Des().TrimAll();
+                tokenRemoved = ETrue;
+                }
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSdpMediaField::KeepFormatL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CSdpMediaField::KeepFormatL(const TDesC8& aFormat)
+    {
+    if ( !iFormatList )
+        {
+        User::Leave( KErrSdpCodecMediaField );
+        }
+    // Empty set will continue to be empty
+    if ( iFormatList->Des().Length() > 0 )
+        {                
+        HBufC8* formatList = aFormat.AllocLC();       
+        // Mark all format attributes not aFormat so that they will be deleted
+        RArray<TInt> removedObjs;  
+        CleanupClosePushL( removedObjs );         
+        for ( TInt i( 0 ); i < iFmtAttrFields->Count(); i++ )
+            {
+			if (aFormat.CompareF((*iFmtAttrFields)[i]->Format()) != 0)
+                {
+                User::LeaveIfError( removedObjs.Append( i ) );                        
+                }                                 
+            }
+        // Delete attribute fields
+        TInt removedCount( 0 );
+        while ( removedObjs.Count() > 0 )
+            {
+            CSdpFmtAttributeField* obj = 
+                (*iFmtAttrFields)[removedObjs[0] - removedCount];
+            delete obj;
+            iFmtAttrFields->Remove( removedObjs[0] - removedCount );
+            removedObjs.Remove( 0 );
+            removedCount++;
+            }
+        CleanupStack::PopAndDestroy();  // removedObjs
+        // Change format list
+        delete iFormatList;
+        iFormatList = formatList;
+        CleanupStack::Pop();    // formatList
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSdpMediaField::RejectMedia
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CSdpMediaField::RejectMedia()
+    {
+    iPort = 0;
+    iPortCount = 0;
+
+    TLex8 lexer( *iFormatList );
+    lexer.SkipSpaceAndMark();
+    lexer.SkipCharacters();
+    if ( lexer.TokenLength() > 0 )
+        {
+        TRAPD(err, KeepFormatL( lexer.MarkedToken() ));
+        err++; // Nothing to do, if error happens. Silence compiler warning.
+        }
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdporiginfield.cpp	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,1038 @@
+// Copyright (c) 2010 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:
+// Name          :  SdpOriginField.cpp
+// Part of       :  Local SDP Codec
+// Version       :  1.0
+//
+
+
+
+#include <in_sock.h>
+#include <s32strm.h>
+#include "sdporiginfield.h"
+#include "sdporiginfieldptrs.h"
+#include "sdputil.h"
+#include "sdpcodecstringconstants.h"
+#include "sdpcodecconstants.h"
+#include "sdpcodecstringpool.h"
+#include "sdpcodecerr.h"
+#include "sdpcodec.pan"
+#include "_sdpdefs.h"
+
+// LOCAL CONSTANTS AND MACROS
+const TUint KMaxIPDesLength = 39;
+const TUint KHeaderIndex = 0;
+const TUint KUserNameIndex = 1;
+const TUint KSessionIdIndex = 2;
+const TUint KSessionVersionIndex = 3;
+const TUint KNetworkTypeIndex = 4;
+const TUint KAddressTypeIndex = 5;
+const TUint KAddressIndex = 6;
+const TInt KTokenCount = 7;
+const TInt64 KDummyValue = 1;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::CSdpOriginField
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSdpOriginField::CSdpOriginField()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSdpOriginField::ConstructL(    
+    const TDesC8& aText )
+	{
+    // aText should be of format:
+    // o=<username> <session id> <version> <network type> 
+    // <address type> <address>     
+    iPool = SdpCodecStringPool::StringPoolL();
+
+    RArray<TPtrC8> array;
+    array = SdpUtil::GetElementsFromLineL( aText, KErrSdpCodecOriginField );
+    
+    CleanupClosePushL( array );
+
+    if ( array.Count() != KTokenCount )
+        {
+        User::Leave( KErrSdpCodecOriginField );
+        }
+
+    // Check that the line contains valid header
+    RStringF origHeader =  iPool.StringF( SdpCodecStringConstants::EOrigin, 
+                                          SdpCodecStringConstants::Table );
+    if ( origHeader.DesC().CompareF( array[KHeaderIndex] ) != 0 )
+        {
+        // Header didn't match
+        User::Leave( KErrSdpCodecOriginField );
+        }
+    
+    iUserName =
+    	reinterpret_cast< HBufC8* >( CSdpOriginFieldPtrs::NewL( 0, 0 ) );
+		
+    
+    // <username>   
+    ParseUserNameL( array );
+    
+    // <session id> & <version>
+    ParseSessionIDAndVersionL( array );
+    
+    // <network type> & <address type>
+    ParseNetTypeAndAddressTypeL( array );
+    
+    // <address>
+    ParseAddressL( array );
+    
+	//If address is IPv4-Mapped IPv6 , it is changed to IPv4
+	TInetAddr addr;
+	TBuf<KMaxAddressLength> address;
+	address.Copy(iAddress);
+
+	TInt err = addr.Input( address );
+	if ( err == KErrNone )
+		{
+        // Valid IP address
+		TBuf<KMaxIPDesLength> buf;
+		addr.Output( buf );
+		iAddress.Copy(buf); 
+
+        SetIPAddressType( addr );
+		}
+
+
+
+    CleanupStack::PopAndDestroy();  // array
+
+	__TEST_INVARIANT;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSdpOriginField::ConstructL(
+    const TDesC8& aUserName, 
+    TInt64 aSessionId, 
+    TInt64 aSessionVersion, 
+    TInetAddr& aUnicastAddress )
+	{
+    iPool = SdpCodecStringPool::StringPoolL();
+
+	__ASSERT_ALWAYS( 
+                   IsValidUserName( aUserName )
+				&& IsValidAddress( aUnicastAddress )
+                && aSessionId >= 0 && aSessionVersion >= 0,
+				User::Leave( KErrSdpCodecOriginField ) );
+
+	iUserName = reinterpret_cast< HBufC8* >
+		( CSdpOriginFieldPtrs::NewL( aSessionId, aSessionVersion ) );
+	OriginFieldPtrs().SetUserNameL( aUserName );
+	
+    TBuf<KMaxIPDesLength> des;
+    aUnicastAddress.Output( des );
+	//if aUnicastAddress was IPv4-Mapped IPv6 address,
+	// the result of Output is IPv4
+	// the address is stored in IPv4 format, so the iAddressType 
+	// must also be IPv4.    
+    iAddress.Copy( des );
+    SetIPAddressType( aUnicastAddress );
+
+    iNetType = iPool.StringF( SdpCodecStringConstants::ENetType, 
+                              SdpCodecStringConstants::Table ).Copy();
+       
+	__TEST_INVARIANT;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSdpOriginField::ConstructL( 
+    const TDesC8& aUserName, 
+    TInt64 aSessionId, 
+    TInt64 aSessionVersion, 
+    RStringF aNetType, 
+    RStringF aAddressType, 
+    const TDesC8& aAddress )
+    {        
+    iPool = SdpCodecStringPool::StringPoolL();
+     
+    __ASSERT_ALWAYS(
+               IsValidUserName( aUserName )
+            && IsValidAddress( aAddress ) &&
+            TypeMatchesWithFormat( aAddress, aAddressType.DesC(), iPool )
+            && ( SdpUtil::IsToken( aNetType.DesC() ) )
+            && ( SdpUtil::IsToken( aAddressType.DesC() ) )
+            && aSessionId >= 0 && aSessionVersion >= 0,
+            User::Leave( KErrSdpCodecOriginField ) );
+    
+    iUserName = reinterpret_cast< HBufC8* >
+		( CSdpOriginFieldPtrs::NewL( aSessionId, aSessionVersion ) );
+	OriginFieldPtrs().SetUserNameL( aUserName );	
+
+    iNetType = aNetType.Copy();
+    	TInetAddr addr;
+	TBuf<KMaxAddressLength> address;
+	address.Copy(aAddress);
+	TInt err = addr.Input(address);
+	if ( err  == KErrNone )
+		{
+		// Valid IP address
+		TBuf< KMaxIPDesLength > buf;
+		addr.Output( buf );
+		iAddress.Copy( buf );		
+		SetIPAddressType( addr );
+		}
+	else
+		{
+		iAddress = aAddress;
+    	iAddressType = aAddressType.Copy();	
+		}
+    __TEST_INVARIANT;    
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::DecodeL
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpOriginField* CSdpOriginField::DecodeL(    
+    const TDesC8& aText )
+	{
+	CSdpOriginField* obj = CSdpOriginField::DecodeLC( aText );
+	CleanupStack::Pop();
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::DecodeLC
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpOriginField* CSdpOriginField::DecodeLC(    
+    const TDesC8& aText )
+	{
+	CSdpOriginField* obj = new ( ELeave ) CSdpOriginField;
+	CleanupStack::PushL( obj );
+	obj->ConstructL(aText );
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::NewL
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpOriginField* CSdpOriginField::NewL(    
+    const TDesC8& aUserName, 
+	TInt64 aSessionId, 
+	TInt64 aSessionVersion, 
+	TInetAddr& aAddress )
+	{
+	CSdpOriginField* obj = CSdpOriginField::NewLC( 
+        aUserName, aSessionId, aSessionVersion, aAddress );
+	CleanupStack::Pop();
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::NewLC
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpOriginField* CSdpOriginField::NewLC(    
+    const TDesC8& aUserName, 
+	TInt64 aSessionId, 
+	TInt64 aSessionVersion, 
+	TInetAddr& aAddress )
+	{
+	CSdpOriginField* obj = new ( ELeave ) CSdpOriginField;
+	CleanupStack::PushL(obj);
+	obj->ConstructL( aUserName, aSessionId, aSessionVersion, aAddress );
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::NewL
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpOriginField* CSdpOriginField::NewL(
+    const TDesC8& aUserName, 
+	TInt64 aSessionId, 
+	TInt64 aSessionVersion, 
+    RStringF aNetType,
+    RStringF aAddressType, 
+	const TDesC8& aAddress )
+    {
+	CSdpOriginField* obj = CSdpOriginField::NewLC( 
+        aUserName, aSessionId, aSessionVersion, aNetType, 
+        aAddressType, aAddress );
+	CleanupStack::Pop();
+	return obj;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::NewLC
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpOriginField* CSdpOriginField::NewLC(
+    const TDesC8& aUserName, 
+	TInt64 aSessionId, 
+	TInt64 aSessionVersion, 
+	RStringF aNetType,
+    RStringF aAddressType, 
+	const TDesC8& aAddress )
+    {    
+    CSdpOriginField* obj = new ( ELeave ) CSdpOriginField;
+	CleanupStack::PushL( obj );
+	obj->ConstructL( aUserName, aSessionId, aSessionVersion, aNetType, 
+                     aAddressType, aAddress );
+    return obj;    
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::~CSdpOriginField
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpOriginField::~CSdpOriginField()
+	{
+	CSdpOriginFieldPtrs* tmp =
+		reinterpret_cast< CSdpOriginFieldPtrs* >( iUserName );
+	delete tmp;
+
+    iNetType.Close();
+    iAddressType.Close();
+	}
+    
+// -----------------------------------------------------------------------------
+// CSdpOriginField::EncodeL
+// Writes attributes in proper format to the stream
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpOriginField::EncodeL(
+    RWriteStream& aStream ) const
+	{
+    __TEST_INVARIANT;
+
+    // o=<username> <session id> <version> <network type> <address type> 
+    //   <address>    
+
+    // "o="
+    RStringF header = iPool.StringF( SdpCodecStringConstants::EOrigin, 
+                                     SdpCodecStringConstants::Table );
+    aStream.WriteL( header.DesC() );
+
+    // <username>
+    aStream.WriteL( OriginFieldPtrs().UserName() );
+	aStream.WriteL( KSPStr );
+
+    // <session id>    
+	aStream.WriteL( OriginFieldPtrs().SessionId() );
+	aStream.WriteL( KSPStr );
+
+    // <version>
+    aStream.WriteL( OriginFieldPtrs().SessionVersion() );
+	aStream.WriteL( KSPStr );
+
+    // <network type>
+    aStream.WriteL( iNetType.DesC() );
+    aStream.WriteL( KSPStr );    
+
+    // <address type>
+    aStream.WriteL( iAddressType.DesC() );
+    aStream.WriteL( KSPStr );
+
+    // <address>
+    aStream.WriteL( iAddress );
+
+    // End-of-Line mark
+	aStream.WriteL( KCRLFStr );
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::CloneL
+// Creates an exact copy of the origin field
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpOriginField* CSdpOriginField::CloneL() const
+	{
+	__TEST_INVARIANT;
+
+    CSdpOriginField* obj = 0;
+
+    if ( InetAddress() )
+        {
+        // Clones instance with TInetAddr
+        TInetAddr addr( *InetAddress() );        
+        obj = CSdpOriginField::NewLC( UserName(), KDummyValue,
+        							  KDummyValue, addr );
+        }
+    else
+        {
+        // Clones instance with Internet address as a standard string               
+        obj = CSdpOriginField::NewLC( UserName(), KDummyValue, KDummyValue,
+                                      iNetType, iAddressType,  Address() );        
+        }
+
+	// Set the real values
+	obj->OriginFieldPtrs().SetSessionIdL( OriginFieldPtrs().SessionId() );
+	obj->OriginFieldPtrs().SetSessionVersionL(
+		OriginFieldPtrs().SessionVersion() );
+	CleanupStack::Pop( obj );
+		
+	__ASSERT_DEBUG( *this == *obj, User::Panic( KSdpCodecPanicCat, 
+                                                KSdpCodecPanicInternal ) );
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::operator ==
+// Checks if two origin fields are equal
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CSdpOriginField::operator == (
+    const CSdpOriginField& aObj) const
+	{
+	__TEST_INVARIANT;
+
+    TBool equalFields = EFalse;
+
+    // Check that username, session ID and address type match before
+    // going to internet address       
+    if ( ( UserName().CompareF( aObj.UserName() ) == 0 ) &&
+         ( SessionId() == aObj.SessionId() ) &&
+         ( AddressType() == aObj.AddressType() ) &&
+         ( Version() == aObj.Version() ) &&
+         ( NetType() == aObj.NetType() ) )
+        {
+        if ( InetAddress() && aObj.InetAddress() )
+            {            
+            if ( (*InetAddress()).Match( *aObj.InetAddress() ) )
+                {
+                equalFields = ETrue;
+                }
+            }
+        else if ( !InetAddress() && !aObj.InetAddress() )            
+            {
+            if ( iAddress.CompareF( aObj.Address() ) == 0 )
+                {
+                equalFields = ETrue;
+                }
+            }                
+        else
+            {
+            // These two are not the same
+            }
+        }   
+        
+    return equalFields;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::UserName
+// Returns username
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC8& CSdpOriginField::UserName() const
+    {
+    __TEST_INVARIANT;
+    return OriginFieldPtrs().UserName();
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::SetUserNameL
+// Sets a new username
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpOriginField::SetUserNameL(
+    const TDesC8& aValue )
+    {
+    __TEST_INVARIANT;
+    if ( IsValidUserName( aValue ) )
+        {
+        OriginFieldPtrs().SetUserNameL( aValue );
+        }
+    else
+        {
+        User::Leave( KErrSdpCodecOriginField );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::SessionId
+// Returns current session id
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt64 CSdpOriginField::SessionId() const
+    {
+    __TEST_INVARIANT;
+
+    return Get63Msbs( OriginFieldPtrs().SessionId() );
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::SetSessionId
+// Sets new session ID
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpOriginField::SetSessionId(
+	TInt64 aValue )
+    {
+    __TEST_INVARIANT;
+    if ( aValue >= 0 )
+        {
+        TRAP_IGNORE( OriginFieldPtrs().SetSessionIdL( aValue ) )
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::Version
+// Returns version number of the announcement
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt64 CSdpOriginField::Version() const
+    {
+    __TEST_INVARIANT;
+
+    return Get63Msbs( OriginFieldPtrs().SessionVersion() );
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::SetVersion
+// Sets new version for this session's announcement
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpOriginField::SetVersion(
+	TInt64 aValue )
+    {
+    __TEST_INVARIANT;
+    if ( aValue >= 0 )
+        {
+        TRAP_IGNORE( OriginFieldPtrs().SetSessionVersionL( aValue ) )        
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::NetType
+// Returns net type (always Internet)
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RStringF CSdpOriginField::NetType() const
+	{
+	__TEST_INVARIANT;
+	return iNetType;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::AddressType
+// Returns address type (IP4/IP6)
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RStringF CSdpOriginField::AddressType() const
+	{
+	__TEST_INVARIANT;    
+    return iAddressType;        
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::InetAddress
+// Returns the unicast address
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TInetAddr* CSdpOriginField::InetAddress() const
+	{
+	__TEST_INVARIANT;
+    
+    TBuf<KMaxAddressLength> address16;
+    address16.Copy( iAddress );
+    TInt err = iUnicastAddress.Input( address16 );
+    
+    if ( !err )
+        {
+        return &iUnicastAddress;
+        }
+    else
+        {
+        return NULL;
+        }
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::Address
+// Returns the address
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC8& CSdpOriginField::Address() const
+    {
+    __TEST_INVARIANT;
+    return iAddress;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::SetInetAddress
+// Sets Internet Address
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpOriginField::SetInetAddress(
+    const TInetAddr& aValue )
+	{    
+	__TEST_INVARIANT;
+    
+	if ( IsValidAddress( aValue ) )
+        {                       
+        TBuf<KMaxIPDesLength> buf;
+        aValue.Output( buf );
+        // Copy new address to safe
+        iAddress.Copy( buf );
+    
+        // Copy network type and address type        
+        SdpUtil::SetDefaultNetTypeAndAddrType( 
+            iPool, aValue, iNetType, iAddressType );
+        SetIPAddressType( aValue );
+        }
+
+    __TEST_INVARIANT;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::SetAddressL
+// Sets address from the buffer
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpOriginField::SetAddressL(
+    const TDesC8& aAddress,
+    RStringF aNetType, 
+    RStringF aAddressType )
+    {
+    __TEST_INVARIANT;
+     
+    __ASSERT_ALWAYS( SdpUtil::IsToken( aNetType.DesC() )  &&
+                     SdpUtil::IsToken( aAddressType.DesC() ) &&
+                     IsValidAddress( aAddress ) &&
+                     TypeMatchesWithFormat( aAddress, 
+                                            aAddressType.DesC(), iPool ),
+                     User::Leave( KErrSdpCodecOriginField ) );
+
+    iAddress = aAddress;
+    iAddressType.Close();
+    iAddressType = aAddressType.Copy();
+
+    __TEST_INVARIANT;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::ExternalizeL
+// Externalizes the field back to string
+// -----------------------------------------------------------------------------
+//	
+void CSdpOriginField::ExternalizeL(
+    RWriteStream& aStream ) const
+    {
+    __TEST_INVARIANT;
+
+    // <username>    
+    aStream.WriteUint32L( UserName().Length() );
+	aStream.WriteL( UserName(), UserName().Length() );
+    // <session id>
+    aStream.WriteUint32L( OriginFieldPtrs().SessionId().Length() );
+    aStream.WriteL( OriginFieldPtrs().SessionId(),
+    				OriginFieldPtrs().SessionId().Length() );
+    // <version>
+    aStream.WriteUint32L( OriginFieldPtrs().SessionVersion().Length() );
+    aStream.WriteL( OriginFieldPtrs().SessionVersion(),
+    				OriginFieldPtrs().SessionVersion().Length() );
+    // <network type>
+    aStream.WriteUint32L( iNetType.DesC().Length() );
+    aStream.WriteL( iNetType.DesC() );
+    // <address type>
+    aStream.WriteUint32L( iAddressType.DesC().Length() );
+    aStream.WriteL( iAddressType.DesC() );    
+    // <address>
+    aStream.WriteUint32L( iAddress.Length() );
+    aStream.WriteL( iAddress );
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::InternalizeL
+// Internalizes from stream
+// -----------------------------------------------------------------------------
+//	
+CSdpOriginField* CSdpOriginField::InternalizeL(
+    RReadStream& aStream )
+    {    
+    RStringPool pool = SdpCodecStringPool::StringPoolL();
+
+    // <username>        
+    TUint32 length = aStream.ReadUint32L();
+	HBufC8* userName = HBufC8::NewLC( length );
+    TPtr8 ptr( userName->Des() );  
+    aStream.ReadL( ptr, length );    
+
+    // <session id>
+    length = aStream.ReadUint32L();
+	HBufC8* sessionId = HBufC8::NewLC( length );
+    ptr.Set( sessionId->Des() );
+    aStream.ReadL( ptr, length );
+
+    // <version>
+    length = aStream.ReadUint32L();
+	HBufC8* version = HBufC8::NewLC( length );
+    ptr.Set( version->Des() );
+    aStream.ReadL( ptr, length );
+
+    // <network type>
+    length = aStream.ReadUint32L();
+    HBufC8* netType = HBufC8::NewLC( length );
+    ptr.Set( netType->Des() );
+    aStream.ReadL( ptr, length );
+
+    // <address type>
+    length = aStream.ReadUint32L();
+    HBufC8* addrType = HBufC8::NewLC( length );
+    ptr.Set( addrType->Des() );
+    aStream.ReadL( ptr, length );
+
+    // <address>        
+    length = aStream.ReadUint32L();
+    HBufC8* address = HBufC8::NewLC( length );
+    TPtr8 ptr2( address->Des() );
+    aStream.ReadL( ptr2, length );
+            
+    RStringF netTypeStr = pool.OpenFStringL( *netType );
+    RStringF addrTypeStr = pool.OpenFStringL( *addrType );
+    CleanupClosePushL( netTypeStr );
+    CleanupClosePushL( addrTypeStr );
+
+	CSdpOriginField* obj = CSdpOriginField::NewLC( *userName, KDummyValue,
+												   KDummyValue, netTypeStr,
+												   addrTypeStr, *address );
+	// Set the real values
+	obj->OriginFieldPtrs().SetSessionIdL( *sessionId );
+	obj->OriginFieldPtrs().SetSessionVersionL( *version );
+	CleanupStack::Pop( obj );
+    CleanupStack::Pop( 2 ); // addrTypeStr, netTypeStr
+    CleanupStack::PopAndDestroy( address );
+    CleanupStack::PopAndDestroy( addrType );
+    CleanupStack::PopAndDestroy( netType );
+    CleanupStack::PopAndDestroy( version );
+    CleanupStack::PopAndDestroy( sessionId );
+    CleanupStack::PopAndDestroy( userName );    
+
+    return obj;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::IsValidAddress
+// Checks if the address is valid
+// -----------------------------------------------------------------------------
+//
+TBool CSdpOriginField::IsValidAddress( 
+    const TDesC8& aAddress ) const
+    {
+    TInetAddr addr;
+    TBool valid = ETrue;
+
+    if ( aAddress.Length() > 0 && aAddress.Length() <= KMaxAddressLength )
+        {
+        TBuf<KMaxAddressLength> address16;
+        address16.Copy( aAddress );
+        TInt err = addr.Input( address16 );
+
+        if ( !err )
+            {
+            valid = ( addr.IsUnicast() || addr.IsUnspecified() );
+            }
+        else
+            {
+            RStringF addrTypeIP4 = 
+                iPool.StringF( SdpCodecStringConstants::EAddressTypeIP4,
+                               SdpCodecStringConstants::Table );
+            RStringF addrTypeIP6 = 
+                iPool.StringF( SdpCodecStringConstants::EAddressType,
+                               SdpCodecStringConstants::Table );
+            
+            if ( iAddressType == addrTypeIP4 || iAddressType == addrTypeIP6 )
+                {
+                // FQDN address, check that it has only valid characters
+                // 0..9, a..z, A..Z, '.', '-'
+                        
+                for ( TInt i( 0 ); i < aAddress.Length() && valid; i++ )
+                    {
+                    if (KValidFQDNChars().Locate(aAddress[i]) == KErrNotFound)
+                        {
+                        valid = EFalse;     
+                        }
+                    }
+                }
+            else
+                {
+                valid = SdpUtil::IsNonWhitespace( aAddress );
+                }
+            }       
+        }
+    else
+    	{
+    	valid = EFalse;
+    	}
+
+    return valid;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::IsValidAddress
+// Checks if the address is valid
+// -----------------------------------------------------------------------------
+//
+TBool CSdpOriginField::IsValidAddress( 
+    const TInetAddr& addr ) const
+    {
+    TBuf<KMaxIPDesLength> buf16;
+    TBuf8<KMaxIPDesLength> buf;
+	//if addr is IPv4-Mapped IPv6, buf value will be IPv4 after Output
+    addr.Output( buf16 );
+    buf.Copy( buf16 );
+
+    return IsValidAddress( buf );
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::TypeMatchesWithFormat
+// Checks if address type is aligned with the address format
+// -----------------------------------------------------------------------------
+//
+TBool CSdpOriginField::TypeMatchesWithFormat( 
+    const TDesC8& aAddress, 
+    const TDesC8& aType,
+    RStringPool aPool ) const
+    {
+    RStringF addrTypeIP4 = 
+        aPool.StringF( SdpCodecStringConstants::EAddressTypeIP4,
+                              SdpCodecStringConstants::Table );
+    RStringF addrTypeIP6 = 
+        aPool.StringF( SdpCodecStringConstants::EAddressType,
+                              SdpCodecStringConstants::Table );
+    
+    TBool valid( ETrue );
+    
+    // Check that address type and address matches together
+    TInetAddr addr;
+    TBuf<KMaxAddressLength> address16;
+    address16.Copy( aAddress );
+    TInt err = addr.Input( address16 );    
+    if ( err == KErrNone && !addr.IsUnspecified())
+        {
+        TBool ip4Type = ( addrTypeIP4.DesC().CompareF( aType ) == 0 );
+        TBool ip6Type = ( addrTypeIP6.DesC().CompareF( aType ) == 0 );
+             
+        if ( ip4Type || ip6Type )
+            {
+            if ( ( addr.Address() && !addr.IsV4Mapped() && !ip4Type ) ||
+				 (addr.Address() && addr.IsV4Mapped() && !ip6Type) ||
+                 ( !addr.Address() && !ip6Type ) )
+                {
+                valid = EFalse;
+                }
+            }
+        } 
+    
+    return valid;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::IsValidUserName
+// Checks if the given username is valid
+// -----------------------------------------------------------------------------
+//
+TBool CSdpOriginField::IsValidUserName( 
+    const TDesC8& aUserName ) const
+    {
+    TBool valid = EFalse;
+
+    if ( aUserName.Length() > 0 && SdpUtil::IsNonWhitespace( aUserName ) )
+        {
+        valid = ETrue;
+        }
+
+    return valid;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::ParseUserNameL
+// Parses username. Can't use CSdpOriginField::SetUserNameL, as invariant would
+// fail.
+// -----------------------------------------------------------------------------
+//
+void CSdpOriginField::ParseUserNameL( 
+    RArray<TPtrC8>& aArray )
+    {
+    __ASSERT_ALWAYS( IsValidUserName( aArray[KUserNameIndex] ), 
+                     User::Leave( KErrSdpCodecOriginField ) );
+	OriginFieldPtrs().SetUserNameL( aArray[KUserNameIndex] );    
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::ParseSessionIDAndVersionL
+// Parses session ID and version
+// -----------------------------------------------------------------------------
+//
+void CSdpOriginField::ParseSessionIDAndVersionL( 
+    RArray<TPtrC8>& aArray )
+    {
+    __ASSERT_ALWAYS( SdpUtil::IsDigit( aArray[KSessionIdIndex] ) &&
+    				 SdpUtil::IsDigit( aArray[KSessionVersionIndex] ),
+    				 User::Leave( KErrSdpCodecOriginField ) );
+
+    OriginFieldPtrs().SetSessionIdL( aArray[KSessionIdIndex] );
+    OriginFieldPtrs().SetSessionVersionL( aArray[KSessionVersionIndex] );    
+    }
+ 
+ // -----------------------------------------------------------------------------
+// CSdpOriginField::ParseNetTypeAndAddressTypeL
+// Parses network type and address type
+// -----------------------------------------------------------------------------
+//
+void CSdpOriginField::ParseNetTypeAndAddressTypeL( 
+    RArray<TPtrC8>& aArray )
+    {
+    if ( !SdpUtil::IsToken( aArray[KNetworkTypeIndex] ) ||
+         !SdpUtil::IsToken( aArray[KAddressTypeIndex] ) )
+        {        
+        User::Leave( KErrSdpCodecOriginField );
+        }
+
+    iNetType = iPool.OpenFStringL( aArray[KNetworkTypeIndex] );  
+    iAddressType = iPool.OpenFStringL( aArray[KAddressTypeIndex] );    
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::ParseAddressL
+// Parses address
+// -----------------------------------------------------------------------------
+//
+void CSdpOriginField::ParseAddressL( 
+    RArray<TPtrC8>& aArray )
+    {    
+    if ( !IsValidAddress( aArray[KAddressIndex] ) )
+        {
+        User::Leave( KErrSdpCodecOriginField );
+        }
+    else
+        {
+        iAddress = aArray[KAddressIndex];
+        }
+
+    // Check that address type and address matches together
+    if ( !TypeMatchesWithFormat( 
+                    aArray[KAddressIndex], aArray[KAddressTypeIndex], iPool ) )
+        {
+        User::Leave( KErrSdpCodecOriginField );            
+        } 
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::OriginFieldPtrs
+// -----------------------------------------------------------------------------
+//  
+inline CSdpOriginFieldPtrs& CSdpOriginField::OriginFieldPtrs()
+    {
+    return *( reinterpret_cast< CSdpOriginFieldPtrs* >( iUserName ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::OriginFieldPtrs
+// -----------------------------------------------------------------------------
+//  
+inline const CSdpOriginFieldPtrs& CSdpOriginField::OriginFieldPtrs() const
+    {
+    return *( reinterpret_cast< CSdpOriginFieldPtrs* >( iUserName ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::Get63Msbs
+// Returns a maximum of 63 bits of information from the descriptor containing a
+// decimal number.
+// -----------------------------------------------------------------------------
+//
+TInt64 CSdpOriginField::Get63Msbs( const TDesC8& aDecimalValue ) const
+	{	
+	// The maximum amount of digits in a decimal number, that is guaranteed to
+  	// fit into 63 bits, is 18. Even if all the 18 digits are 9, the decimal
+  	// number is 999999999999999999.
+  	const TInt64 KMaxAmountOfDecimalDigits = 18;
+
+    TInt64 value( 0 );
+    TPtrC8 msbPart = aDecimalValue.Left( KMaxAmountOfDecimalDigits );
+	TLex8( msbPart ).Val( value );
+    return value;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::SetIPAddressType
+// -----------------------------------------------------------------------------
+//
+void CSdpOriginField::SetIPAddressType( const TInetAddr& aAddr )
+    {
+    iAddressType.Close();
+    if ( aAddr.Address() || aAddr.IsUnspecified() )
+        {
+        //IPv4, IPv4-Mapped IPv6 and 0.0.0.0
+	    iAddressType =
+            iPool.StringF( SdpCodecStringConstants::EAddressTypeIP4,
+                           SdpCodecStringConstants::Table ).Copy();
+        }
+    else
+        {
+        //IPv6
+        iAddressType =
+            iPool.StringF( SdpCodecStringConstants::EAddressType,
+                           SdpCodecStringConstants::Table ).Copy();
+ 		}
+    }
+
+// For DEBUG builds
+
+// -----------------------------------------------------------------------------
+// CSdpOriginField::__DbgTestInvariant
+// Test invariant
+// -----------------------------------------------------------------------------
+//	
+void CSdpOriginField::__DbgTestInvariant() const
+	{	    
+	TBool invariant = 
+				iUserName != NULL	
+                && SdpUtil::IsToken( iAddressType.DesC() )
+                && SdpUtil::IsToken( iNetType.DesC() )
+				&& IsValidAddress( iAddress )
+				&& IsValidUserName( OriginFieldPtrs().UserName() )
+                && TypeMatchesWithFormat(iAddress, iAddressType.DesC(), iPool)
+                && SdpUtil::IsNonWhitespace( OriginFieldPtrs().UserName() );
+	
+    if ( !invariant )
+        {
+		User::Invariant();
+        }
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdporiginfieldptrs.cpp	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,152 @@
+// Copyright (c) 2010 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:
+// Name          : SdpOriginFieldPtrs.cpp
+// Part of       : Local SDP Codec
+// Version       : 1.0
+//
+
+
+
+#include "sdporiginfieldptrs.h"
+
+// -----------------------------------------------------------------------------
+// CSdpOriginFieldPtrs::NewL
+// -----------------------------------------------------------------------------
+//
+CSdpOriginFieldPtrs* CSdpOriginFieldPtrs::NewL( TInt64 aSessionId,
+        								  		TInt64 aSessionVersion )
+	{
+	CSdpOriginFieldPtrs* self = new ( ELeave ) CSdpOriginFieldPtrs;
+	CleanupStack::PushL( self );
+	self->ConstructL( aSessionId, aSessionVersion );
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpOriginFieldPtrs::CSdpOriginFieldPtrs
+// ----------------------------------------------------------------------------
+//
+CSdpOriginFieldPtrs::CSdpOriginFieldPtrs()
+	{
+	}	
+
+// ----------------------------------------------------------------------------
+// CSdpOriginFieldPtrs::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CSdpOriginFieldPtrs::ConstructL( TInt64 aSessionId,
+        							  TInt64 aSessionVersion )
+	{
+	iUserName = KNullDesC8().AllocL();
+	SetSessionIdL( aSessionId );
+	SetSessionVersionL( aSessionVersion );	
+	}
+
+// ----------------------------------------------------------------------------
+// CSdpOriginFieldPtrs::~CSdpOriginFieldPtrs
+// ----------------------------------------------------------------------------
+//
+CSdpOriginFieldPtrs::~CSdpOriginFieldPtrs()
+	{
+	delete iUserName;
+	delete iSessionId;
+	delete iSessionVersion;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpOriginFieldPtrs::SetUserNameL
+// -----------------------------------------------------------------------------
+// 
+void CSdpOriginFieldPtrs::SetUserNameL( const TDesC8& aUserName )
+    {
+    HBufC8* tmp = aUserName.AllocL();
+    delete iUserName;
+    iUserName = tmp;
+    }
+        
+// -----------------------------------------------------------------------------
+// CSdpOriginFieldPtrs::UserName
+// -----------------------------------------------------------------------------
+//
+const TDesC8& CSdpOriginFieldPtrs::UserName() const
+    {
+    return *iUserName;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginFieldPtrs::SetSessionIdL
+// -----------------------------------------------------------------------------
+// 
+void CSdpOriginFieldPtrs::SetSessionIdL( const TDesC8& aSessionId )
+    {
+    HBufC8* tmp = aSessionId.AllocL();
+    delete iSessionId;
+    iSessionId = tmp;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginFieldPtrs::SetSessionIdL
+// -----------------------------------------------------------------------------
+// 
+void CSdpOriginFieldPtrs::SetSessionIdL( TInt64 aSessionId )
+	{
+	TBuf8< KMaxTInt64Digits > number;
+    number.AppendNum( aSessionId );
+    HBufC8* tmp = number.AllocL();
+	delete iSessionId;
+    iSessionId = tmp;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpOriginFieldPtrs::SessionId
+// -----------------------------------------------------------------------------
+//
+const TDesC8& CSdpOriginFieldPtrs::SessionId() const
+    {
+    return *iSessionId;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginFieldPtrs::SetSessionVersionL
+// -----------------------------------------------------------------------------
+// 
+void CSdpOriginFieldPtrs::SetSessionVersionL( const TDesC8& aSessionVersion )
+    {
+    HBufC8* tmp = aSessionVersion.AllocL();
+    delete iSessionVersion;
+    iSessionVersion = tmp;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpOriginFieldPtrs::SetSessionVersionL
+// -----------------------------------------------------------------------------
+// 
+void CSdpOriginFieldPtrs::SetSessionVersionL( TInt64 aSessionVersion )
+	{
+	TBuf8< KMaxTInt64Digits > number;
+    number.AppendNum( aSessionVersion );
+    HBufC8* tmp = number.AllocL();
+	delete iSessionVersion;
+    iSessionVersion = tmp;
+	}
+   
+// -----------------------------------------------------------------------------
+// CSdpOriginFieldPtrs::SessionVersion
+// -----------------------------------------------------------------------------
+//
+const TDesC8& CSdpOriginFieldPtrs::SessionVersion() const
+    {
+    return *iSessionVersion;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdprepeatfield.cpp	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,385 @@
+// Copyright (c) 2010 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:
+// Name          : SdpRepeatField.h
+// Part of       : Local SDP Codec
+// Version       : 1.0
+//
+
+
+
+#include <s32strm.h>
+#include "sdprepeatfield.h"
+#include "sdputil.h"
+#include "sdpcodec.pan"
+#include "_sdpdefs.h"
+#include "sdpcodecstringconstants.h"
+#include "sdpdocument.h"
+#include "sdpcodecConstants.h"
+#include "sdpcodecErr.h"
+#include "sdpcodecStringPool.h"
+
+
+// -----------------------------------------------------------------------------
+// CSdpRepeatField::DecodeL
+// Decodes bandwidth field from TDesC
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpRepeatField* CSdpRepeatField::DecodeL(const TDesC8& aText)
+	{
+	CSdpRepeatField* obj = DecodeLC(aText);
+	CleanupStack::Pop();
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpRepeatField::DecodeLC
+// Decodes bandwidth field from TDesC
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpRepeatField* CSdpRepeatField::DecodeLC(const TDesC8& aText)
+	{
+    CSdpRepeatField* obj = new (ELeave) CSdpRepeatField();
+	CleanupStack::PushL(obj);
+	obj->ConstructL(aText);
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpRepeatField::NewL
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpRepeatField* CSdpRepeatField::NewL(
+                                        const TSdpTypedTime aRepeatInterval,
+										const TSdpTypedTime  aActiveDuration,
+										const RArray<TSdpTypedTime>& aOffsets)
+	{
+	CSdpRepeatField* obj = NewLC(aRepeatInterval, aActiveDuration, aOffsets);
+	CleanupStack::Pop();
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpRepeatField::NewLC
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpRepeatField* CSdpRepeatField::NewLC(
+                                        const TSdpTypedTime aRepeatInterval,
+										const TSdpTypedTime aActiveDuration,
+										const RArray<TSdpTypedTime>& aOffsets)
+	{
+	CSdpRepeatField* obj = new (ELeave) CSdpRepeatField(aRepeatInterval,
+                                                    aActiveDuration);
+	CleanupStack::PushL(obj);
+	obj->ConstructL(aOffsets);
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpRepeatField::~CSdpRepeatField
+// Destructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpRepeatField::~CSdpRepeatField()
+	{
+    iTimeOffsets.Close();
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpRepeatField::EncodeL
+// Writes attributes in proper format to the stream
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpRepeatField::EncodeL(RWriteStream& aStream) const
+    {
+    const TDesC8& repeatName = iPool.StringF(SdpCodecStringConstants::ERepeat, 
+                                        SdpCodecStringConstants::Table).DesC();
+    aStream.WriteL(repeatName);
+    iRepeatInterval.EncodeL(aStream);
+    aStream.WriteL(KSPStr);
+    iActiveDuration.EncodeL(aStream);
+    for (TInt i = 0; i < iTimeOffsets.Count(); i++)
+        {
+        aStream.WriteL(KSPStr);
+        (iTimeOffsets)[i].EncodeL(aStream);
+        }
+    aStream.WriteL(KCRLFStr);
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpRepeatField::CloneL
+// Creates an exact copy of the repeat field
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpRepeatField* CSdpRepeatField::CloneL() const
+	{
+	__TEST_INVARIANT;
+	CSdpRepeatField* obj = NewL(iRepeatInterval, iActiveDuration, 
+                                iTimeOffsets);
+	__ASSERT_DEBUG(*this == *obj, User::Panic(KSdpCodecPanicCat, 
+                                            KSdpCodecPanicInternal));
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpRepeatField::operator ==
+// Checks if two repeat fields are equal
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CSdpRepeatField::operator == (const CSdpRepeatField & aObj) 
+        const
+	{
+	__TEST_INVARIANT;
+	TBool result = iRepeatInterval == aObj.iRepeatInterval
+		&& iActiveDuration == aObj.iActiveDuration
+		&& iTimeOffsets.Count() == (aObj.iTimeOffsets).Count();
+	if (result)
+		{
+		int i = 0;
+		while (result && i < iTimeOffsets.Count())
+			{
+			result = (iTimeOffsets)[i] == (aObj.iTimeOffsets)[i];
+			i++;
+			}
+		}
+	return result;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpRepeatField::RepeatInterval
+// Return repeat interval value
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TSdpTypedTime CSdpRepeatField::RepeatInterval() const
+	{
+	__TEST_INVARIANT;
+	return iRepeatInterval;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpRepeatField::SetRepeatIntervalL
+// Sets repeat interval to one of predefined values
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpRepeatField::SetRepeatIntervalL(const TSdpTypedTime aValue)
+	{
+	__TEST_INVARIANT;
+    __ASSERT_ALWAYS(aValue.iValue > 0, User::Leave(KErrSdpCodecRepeatField));
+    iRepeatInterval = aValue;
+	__TEST_INVARIANT;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpRepeatField::ActiveDuration
+// Returns active duration value
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TSdpTypedTime CSdpRepeatField::ActiveDuration() const
+	{
+	__TEST_INVARIANT;
+	return iActiveDuration;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpRepeatField::SetActiveDuration
+// Sets new active duration value
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpRepeatField::SetActiveDuration(const TSdpTypedTime aValue)
+	{
+	__TEST_INVARIANT;
+	iActiveDuration = aValue;
+	__TEST_INVARIANT;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpRepeatField::TimeOffsets
+// CReturns timeoffsets
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const RArray<TSdpTypedTime>& CSdpRepeatField::TimeOffsets() const
+	{
+	__TEST_INVARIANT;
+	return iTimeOffsets;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpRepeatField::SetTimeOffsetsL
+// Sets timeoffsets
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpRepeatField::SetTimeOffsetsL(
+                                        const RArray<TSdpTypedTime>& aValue)
+    {
+    RArray<TSdpTypedTime> tempOffsets;                 
+    if (aValue.Count() > 0)
+	    {
+        CleanupClosePushL( tempOffsets );         
+		for (TInt i = 0; i < aValue.Count(); i++)
+		    {
+            User::LeaveIfError(tempOffsets.Append(aValue[i]));
+			}
+        CleanupStack::Pop();    // tempOffsets
+        iTimeOffsets.Close();
+        iTimeOffsets = tempOffsets;
+        }
+    else
+        {
+   	    // remove old timeoffsets
+        iTimeOffsets.Reset();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpRepeatField::ExternalizeL
+// Externalizes the object to stream
+// -----------------------------------------------------------------------------
+//
+void CSdpRepeatField::ExternalizeL(RWriteStream& aStream) const
+    {
+    iRepeatInterval.ExternalizeL(aStream);
+    iActiveDuration.ExternalizeL(aStream);
+    aStream.WriteUint32L(iTimeOffsets.Count());
+    for (TInt i = 0; i < iTimeOffsets.Count(); i++)
+        {
+        (iTimeOffsets)[i].ExternalizeL(aStream);
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpRepeatField::InternalizeL
+// Internalizes the object from stream
+// -----------------------------------------------------------------------------
+//
+CSdpRepeatField* CSdpRepeatField::InternalizeL(RReadStream& aStream)
+    {
+    const TSdpTypedTime repeatInterval = TSdpTypedTime::InternalizeL(aStream);
+    TSdpTypedTime activeDuration = TSdpTypedTime::InternalizeL(aStream);
+    TUint32 offsetsCount = aStream.ReadUint32L();
+    RArray<TSdpTypedTime> offsets;
+    CleanupClosePushL(offsets);
+
+    if (offsetsCount > 0)
+        {
+		for (TUint i = 0; i < offsetsCount; i++)
+			{
+            User::LeaveIfError(offsets.Append(
+                TSdpTypedTime::InternalizeL(aStream)));
+			}
+        
+        }
+
+    CSdpRepeatField* obj = CSdpRepeatField::NewL(repeatInterval,
+                                                activeDuration, offsets);
+    
+    CleanupStack::PopAndDestroy(); // offsets
+    return obj;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpRepeatField::CSdpRepeatField
+// Constructor
+// -----------------------------------------------------------------------------
+//
+CSdpRepeatField::CSdpRepeatField(const TSdpTypedTime aRepeatInterval,
+								const TSdpTypedTime aActiveDuration)
+:	iRepeatInterval(aRepeatInterval), iActiveDuration(aActiveDuration)
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpRepeatField::CSdpRepeatField
+// Constructor
+// -----------------------------------------------------------------------------
+//
+CSdpRepeatField::CSdpRepeatField()
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpRepeatField::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSdpRepeatField::ConstructL(const TDesC8& aText)
+	{
+    iPool = SdpCodecStringPool::StringPoolL();
+    RArray <TPtrC8> lines;
+    lines = SdpUtil::DivideToLinesL(aText, KErrSdpCodecRepeatField);
+    CleanupClosePushL(lines);
+    RArray<TPtrC8> repeatArray;
+    repeatArray = SdpUtil::GetElementsFromLineL(lines[0], 
+                                                KErrSdpCodecRepeatField);
+    CleanupClosePushL(repeatArray);
+    const TDesC8& repeatName = iPool.StringF(SdpCodecStringConstants::ERepeat,
+                                        SdpCodecStringConstants::Table).DesC();    
+    __ASSERT_ALWAYS(lines.Count() == 1
+        && repeatArray.Count() >= 3
+        && repeatName.CompareF(repeatArray[0]) == 0,
+        User::Leave(KErrSdpCodecRepeatField));
+
+    // repeat interval
+    __ASSERT_ALWAYS(TLex8(repeatArray[1]).Peek() != '0', 
+        User::Leave(KErrSdpCodecRepeatField));
+    iRepeatInterval = TSdpTypedTime::DecodeL(repeatArray[1]);
+    
+    // active duration
+    iActiveDuration = TSdpTypedTime::DecodeL(repeatArray[2]);
+
+	if (repeatArray.Count() > 3)
+		{
+		for (TInt i = 3; i < repeatArray.Count(); i++)
+			{
+            User::LeaveIfError(iTimeOffsets.Append(
+                TSdpTypedTime::DecodeL(repeatArray[i])));
+			}
+		}
+    CleanupStack::PopAndDestroy(2); // lines, repeatArray
+	__TEST_INVARIANT;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpRepeatField::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSdpRepeatField::ConstructL(const RArray<TSdpTypedTime>& aOffsets)
+	{
+    __ASSERT_ALWAYS(iRepeatInterval.iValue > 0, 
+                    User::Leave(KErrSdpCodecRepeatField));
+    iPool = SdpCodecStringPool::StringPoolL();
+    if (aOffsets.Count() > 0)
+		{
+        for (TInt i = 0; i < aOffsets.Count(); i++)
+			{
+            User::LeaveIfError(iTimeOffsets.Append(aOffsets[i]));
+			}
+		}
+	__TEST_INVARIANT;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpRepeatField::__DbgTestInvariant
+// Test invariant
+// -----------------------------------------------------------------------------
+//
+void CSdpRepeatField::__DbgTestInvariant() const
+	{
+	TBool invariant = iRepeatInterval.iValue > 0;
+	if (!invariant)
+		User::Invariant();
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdprtpmapvalue.cpp	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,131 @@
+// Copyright (c) 2010 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:
+// Name          : SdpRtpmapValue.cpp
+// Part of       : Local SDP Codec
+// Version       : 1.0
+//
+
+
+
+#include <s32strm.h>
+#include "sdprtpmapvalue.h"
+#include "sdputil.h"
+#include "sdpcodecerr.h"
+#include "sdpcodecconstants.h"
+#include "_sdpdefs.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// TSdpRtpmapValue::TSdpRtpmapValue
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TSdpRtpmapValue::TSdpRtpmapValue( 
+    const TPtrC8& aEncodingName,
+    const TPtrC8& aClockrate,
+    const TPtrC8& aEncodingParameters ) :
+    iEncName( aEncodingName ),
+    iClockrate( aClockrate ),
+    iEncParams( aEncodingParameters )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// TSdpRtpmapValue::DecodeL
+// Decodes string and puts it into parts
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TSdpRtpmapValue TSdpRtpmapValue::DecodeL( 
+    const TDesC8& aText )
+    {
+    __ASSERT_ALWAYS(aText.Length() > 0 && 
+                    aText.Locate( KSlashChar ) != KErrNotFound, 
+        User::Leave(KErrSdpCodecMediaAttributeField));
+
+    TInt length( aText.Length() );
+    if ( aText[length - 1] == KLFChar )
+        {
+        if ( length > 1 && aText[length - 2] == KCRChar )
+            {
+            length--;
+            }
+        length--;
+        }  
+    TPtrC8 restValue( aText.Left( length ) );
+
+    __ASSERT_ALWAYS(SdpUtil::IsByteString(restValue), 
+                    User::Leave(KErrSdpCodecMediaAttributeField)); 
+
+    TInt pos = restValue.Locate( KSlashChar );
+    
+    // <encoding name>
+    TPtrC8 encName( restValue.Left( pos ) );    
+    
+    restValue.Set( restValue.Right( restValue.Length() - pos - 1 ) );
+    pos = restValue.Locate( KSlashChar );
+
+    // <clock rate> <encoding parameters>
+    TPtrC8 encParam( KNullDesC8 );
+    TPtrC8 clockRate( KNullDesC8 );
+   
+    if ( pos == KErrNotFound )
+        {              
+        clockRate.Set( restValue );      
+        
+        __ASSERT_ALWAYS( clockRate.Length() > 0 && encParam.Length() == 0,
+                         User::Leave( KErrSdpCodecMediaAttributeField ) );          
+        }
+    else
+        {
+        clockRate.Set( restValue.Left( pos ) );      
+        encParam.Set( restValue.Right( restValue.Length() - pos - 1 ) );
+
+        __ASSERT_ALWAYS( clockRate.Length() > 0 && encParam.Length() > 0,
+                         User::Leave( KErrSdpCodecMediaAttributeField ) );
+        }
+   
+    return TSdpRtpmapValue( encName, clockRate, encParam );
+    }
+
+// -----------------------------------------------------------------------------
+// TSdpRtpmapValue::EncodeL
+// Encodes a string into valid output string format
+// -----------------------------------------------------------------------------
+//
+EXPORT_C HBufC8* TSdpRtpmapValue::EncodeL() const
+    {
+    TUint length = iEncName.Length() + iClockrate.Length() + 2;
+
+    if (iEncParams.Length() > 0)
+        {
+        length += iEncParams.Length() + 1;
+        }
+
+    HBufC8* returnValue = HBufC8::NewL(length);
+
+    TPtr8 retValPtr(returnValue->Des());
+    retValPtr.Append(iEncName);
+    retValPtr.Append(KSlashStr);
+    retValPtr.Append(iClockrate);
+
+    if (iEncParams.Length() > 0)
+        {
+        retValPtr.Append(KSlashStr);
+        retValPtr.Append(iEncParams);
+        }
+
+    return returnValue;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdptimefield.cpp	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,415 @@
+// Copyright (c) 2010 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:
+// Name          : SdpTimeField.h
+// Part of       : Local SDP Codec
+// Version       : 1.0
+//
+
+
+
+#include <s32strm.h>
+#include "sdptimefield.h"
+#include "sdputil.h"
+#include "sdpcodec.pan"
+#include "_sdpdefs.h"
+#include "sdprepeatfield.h"
+#include "sdpcodecstringconstants.h"
+#include "sdpdocument.h"
+#include "sdpcodecerr.h"
+#include "sdpcodecconstants.h"
+#include "sdpcodecerr.h"
+#include "sdpcodecstringpool.h"
+
+// LOCAL CONSTANTS
+_LIT8(KZeroTime, "0");
+
+// -----------------------------------------------------------------------------
+// CSdpTimeField::DecodeL
+// Decodes time field from TDesC
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpTimeField * CSdpTimeField::DecodeL(const TDesC8& aText, 
+                                                TBool aRecurse)
+	{
+	CSdpTimeField* obj = DecodeLC(aText, aRecurse);
+	CleanupStack::Pop();
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpTimeField::DecodeLC
+// Decodes time field from TDesC
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpTimeField * CSdpTimeField::DecodeLC(const TDesC8& aText, 
+                                                TBool aRecurse)
+	{
+	CSdpTimeField* obj = new (ELeave) CSdpTimeField();
+	CleanupStack::PushL(obj);
+	obj->ConstructL(aText, aRecurse);
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpTimeField::NewL
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+EXPORT_C CSdpTimeField * CSdpTimeField::NewL(const TDesC8& aStartTime, 
+                                             const TDesC8& aStopTime)
+	{
+	CSdpTimeField* obj = NewLC(aStartTime, aStopTime);
+	CleanupStack::Pop();
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpTimeField::NewLC
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+EXPORT_C CSdpTimeField * CSdpTimeField::NewLC(const TDesC8& aStartTime, 
+                                              const TDesC8& aStopTime)
+	{
+	CSdpTimeField* obj = new (ELeave) CSdpTimeField();
+	CleanupStack::PushL(obj);
+	obj->ConstructL(aStartTime, aStopTime);
+	return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpTimeField::~CSdpTimeField
+// Destructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpTimeField::~CSdpTimeField ()
+	{
+	iRFields.ResetAndDestroy();
+	delete iStopTime;
+	delete iStartTime;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpTimeField::EncodeL
+// Writes attributes in proper format to the stream
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpTimeField::EncodeL(RWriteStream& aStream, 
+                                     TBool aRecurse) const
+	{
+	__ASSERT_ALWAYS(this->IsValid(), User::Leave(KErrNotReady));
+    const TDesC8& timeName = iStringPool.StringF(SdpCodecStringConstants::ETime, 
+                                        SdpCodecStringConstants::Table).DesC();
+    aStream.WriteL(timeName);
+    aStream.WriteL(*iStartTime);
+    aStream.WriteL(KSPStr);
+    aStream.WriteL(*iStopTime);
+    aStream.WriteL(KCRLFStr);
+    if (aRecurse)
+        {
+        for(TInt i=0; i<iRFields.Count(); i++)
+            {
+            iRFields[i]->EncodeL(aStream);
+            }
+        }
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpTimeField::CloneL
+// Creates an exact copy of the time field
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSdpTimeField* CSdpTimeField::CloneL(TBool aRecurse) const
+	{
+    CSdpTimeField* obj = CSdpTimeField::NewLC(*this->iStartTime, 
+                                            *this->iStopTime);
+	__TEST_INVARIANT;
+    if (aRecurse)
+        {
+        for (TInt i = 0; i < iRFields.Count(); i++)
+            {
+            CSdpRepeatField* repObj = iRFields[i]->CloneL();
+            CleanupStack::PushL(repObj);
+            User::LeaveIfError(obj->RepeatFields().Append(repObj));
+            CleanupStack::Pop(); // repObj
+            }
+        }
+    CleanupStack::Pop(); //obj
+    return obj;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpTimeField::operator ==
+// Checks if two time fields are equal
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CSdpTimeField::operator == (const CSdpTimeField & aObj) const
+	{
+	__TEST_INVARIANT;
+    return (aObj.StartTime().Compare(this->StartTime()) == 0
+            &&  aObj.StopTime().Compare(this->StopTime()) == 0
+            && RepeatFieldsCompare(aObj));
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpTimeField::IsValid
+// Checks if start time and stop time are valid
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CSdpTimeField::IsValid() const
+    {
+    return 	( (iStartTime->Match(KZeroTime) 
+                && iStopTime->Match(KZeroTime)) 
+            || (iStartTime->Length() != 0 
+                && iStopTime->Length() != 0
+				&& *iStartTime <= *iStopTime));
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpTimeField::StartTime
+// Returns start time 
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC8& CSdpTimeField::StartTime() const
+	{
+	__TEST_INVARIANT;
+	return *iStartTime;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpTimeField::StopTime
+// Returns stop time 
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC8& CSdpTimeField::StopTime() const
+	{
+	__TEST_INVARIANT;
+	return *iStopTime;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpTimeField::SetTimesL
+// Sets start time and stop time if they are valid ones 
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSdpTimeField::SetTimesL(const TDesC8& aStartTime, 
+                                       const TDesC8& aStopTime)
+	{
+	__ASSERT_ALWAYS(
+        (aStartTime.Length() == 1 && aStartTime[0] -'0' == 0
+            && ((aStopTime.Length() == 1 && aStopTime[0] -'0' == 0)
+                || (aStopTime.Length() > 1 
+                    && SdpUtil::IsValidNtpTime(aStopTime))))
+        || (aStartTime.Length() > 1 && SdpUtil::IsValidNtpTime(aStartTime)
+            && aStopTime.Length() > 1 && SdpUtil::IsValidNtpTime(aStopTime)
+            && aStartTime < aStopTime),
+        User::Leave(KErrSdpCodecTimeField));
+    
+    HBufC8* tmpStartTime = aStartTime.AllocL();
+    CleanupStack::PushL(tmpStartTime);
+    HBufC8* tmpStopTime = aStopTime.AllocL();
+	
+    tmpStartTime->Des().Trim();
+	delete iStartTime;
+	iStartTime = tmpStartTime;
+	tmpStopTime->Des().Trim();
+	delete iStopTime;
+	iStopTime = tmpStopTime;
+
+    CleanupStack::Pop(); // tmpStartTime
+	__TEST_INVARIANT;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpTimeField::RepeatFields
+// Returns repeat fields
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RPointerArray<CSdpRepeatField>& CSdpTimeField::RepeatFields()
+	{
+	__TEST_INVARIANT;
+	return iRFields;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpTimeField::ExternalizeL
+// Externalizes the object to stream
+// -----------------------------------------------------------------------------
+//
+void CSdpTimeField::ExternalizeL(RWriteStream& aStream) const
+    {
+   	__TEST_INVARIANT;
+    aStream.WriteUint32L(iStartTime->Length());
+    aStream.WriteL(*iStartTime);
+    aStream.WriteUint32L(iStopTime->Length());
+    aStream.WriteL(*iStopTime);
+    aStream.WriteUint32L(iRFields.Count());
+    for(TInt i=0; i<iRFields.Count(); i++)
+       {
+       iRFields[i]->ExternalizeL(aStream);
+       }
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpTimeField::InternalizeL
+// Internalizes the object from stream
+// -----------------------------------------------------------------------------
+//
+CSdpTimeField* CSdpTimeField::InternalizeL(RReadStream& aStream)
+    {
+    CSdpTimeField* self = new (ELeave) CSdpTimeField();
+    CleanupStack::PushL(self);
+    self->iStringPool = SdpCodecStringPool::StringPoolL();
+
+    self->DoInternalizeL(aStream);
+
+    CleanupStack::Pop(); //self
+
+    return self; 
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpTimeField::DoInternalizeL
+// Internalizes the object members from stream
+// -----------------------------------------------------------------------------
+//
+void CSdpTimeField::DoInternalizeL(RReadStream& aStream)
+    {
+    
+    TUint32 valueLength = aStream.ReadUint32L();
+	iStartTime = HBufC8::NewL (valueLength);
+	TPtr8 startTime(iStartTime->Des());
+	aStream.ReadL (startTime,valueLength);
+    valueLength = aStream.ReadUint32L();
+	iStopTime = HBufC8::NewL (valueLength);
+	TPtr8 stopTime(iStopTime->Des());
+	aStream.ReadL (stopTime,valueLength);
+    
+    TUint rFieldsCount = aStream.ReadUint32L();
+    for (TUint i = 0; i < rFieldsCount; i++)
+        {
+        CSdpRepeatField* rField = CSdpRepeatField::InternalizeL(aStream);
+        CleanupStack::PushL(rField);
+        User::LeaveIfError(iRFields.Append(rField));
+        CleanupStack::Pop(); //rField
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpTimeField::CSdpTimeField
+// Constructor
+// -----------------------------------------------------------------------------
+//
+CSdpTimeField::CSdpTimeField()
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpTimeField::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSdpTimeField::ConstructL(const TDesC8& aText, TBool aRecurse)
+	{
+    iStringPool = SdpCodecStringPool::StringPoolL();
+    RArray <TPtrC8> lines;
+    lines = SdpUtil::DivideToLinesL(aText, KErrSdpCodecTimeField);
+    CleanupClosePushL(lines);
+    RArray<TPtrC8> timeArray;
+    timeArray = SdpUtil::GetElementsFromLineL(lines[0], KErrSdpCodecTimeField);
+    CleanupClosePushL(timeArray);
+    const TDesC8& timeName = iStringPool.StringF(SdpCodecStringConstants::ETime, 
+        SdpCodecStringConstants::Table).DesC();        
+    __ASSERT_ALWAYS(lines.Count() > 0
+                    && timeArray.Count() == 3
+                    && timeArray[0].Find(timeName) != KErrNotFound,
+                    User::Leave(KErrSdpCodecTimeField));
+
+    SetTimesL(timeArray[1], timeArray[2]);
+
+    if (aRecurse && lines.Count() > 1)
+        {
+        const TDesC8& repeatName = 
+                    iStringPool.StringF(SdpCodecStringConstants::ERepeat,
+                               SdpCodecStringConstants::Table).DesC();   
+        for( TInt i = 1; i<lines.Count(); i++)
+            {
+            RArray<TPtrC8> lineArray;
+            lineArray = SdpUtil::GetElementsFromLineL(lines[i], KErrSdpCodecTimeField);
+            CleanupClosePushL(lineArray);
+            __ASSERT_ALWAYS(lineArray[0].Find(repeatName) != KErrNotFound,
+                User::Leave(KErrSdpCodecTimeField));
+            CSdpRepeatField* repeatField = CSdpRepeatField::DecodeL(lines[i]);
+            CleanupStack::PushL(repeatField);
+            User::LeaveIfError(iRFields.Append(repeatField));
+            CleanupStack::Pop(); // repeatField
+            CleanupStack::PopAndDestroy(); //lineArray
+            }
+        }
+    CleanupStack::PopAndDestroy(2); // timeArray, lines
+    __TEST_INVARIANT;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpTimeField::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSdpTimeField::ConstructL(const TDesC8& aStartTime, 
+                               const TDesC8& aStopTime)
+	{
+    iStringPool = SdpCodecStringPool::StringPoolL();
+ 	SetTimesL(aStartTime, aStopTime);
+	__TEST_INVARIANT;
+	}
+
+// -----------------------------------------------------------------------------
+// CSdpTimeField::RepeatFieldsCompare
+// Checks if two time field objects repeat fields are equal 
+// -----------------------------------------------------------------------------
+//
+TBool CSdpTimeField::RepeatFieldsCompare(const CSdpTimeField& aObj) const
+    {
+    TBool returnValue = ETrue;
+    if (iRFields.Count() == aObj.iRFields.Count())
+        {
+        for (TInt i = 0; i < iRFields.Count() && returnValue; i++)
+            {
+            if (!(*iRFields[i] == *aObj.iRFields[i]))
+                returnValue = EFalse;
+            }
+        }
+    
+    return returnValue;
+    }
+
+// -----------------------------------------------------------------------------
+// CSdpTimeField::__DbgTestInvariant
+// Test invariant
+// -----------------------------------------------------------------------------
+//
+void CSdpTimeField::__DbgTestInvariant() const
+	{
+    TBool invariant = 
+        ((iStartTime->Length() == 1 && (iStartTime->Des())[0] -'0' == 0)
+            && ((iStopTime->Length() == 1 && (iStopTime->Des())[0] -'0' == 0)
+                || (iStopTime->Length() > 1 
+                    && SdpUtil::IsValidNtpTime(*iStopTime))))
+        || (iStartTime->Length() > 1 && SdpUtil::IsValidNtpTime(*iStartTime)
+            && iStopTime->Length() > 1 && SdpUtil::IsValidNtpTime(*iStopTime)
+            && *iStartTime < *iStopTime);
+
+	if (!invariant)
+		User::Invariant();
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdptypedtime.cpp	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,206 @@
+// Copyright (c) 2010 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:
+// Name          : SdpTypedTime.cpp
+// Part of       : Local SDP Codec
+// Version       : 1.0
+//
+
+
+
+#include <s32strm.h>
+#include "sdptypedtime.h"
+#include "_sdpdefs.h"
+#include "sdpcodecerr.h"
+#include "sdpcodecstringconstants.h"
+#include "sdpcodecstringpool.h"
+
+// LOCAL CONSTANTS
+const TUint KMaxTInt64Digits = 30;
+
+// -----------------------------------------------------------------------------
+// TSdpTypedTime::TSdpTypedTime
+// Contructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TSdpTypedTime::TSdpTypedTime()
+:	iValue(0), iUnit(ETimeUnitNone)
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// TSdpTypedTime::TSdpTypedTime
+// Contructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TSdpTypedTime::TSdpTypedTime(TInt64 aValue, TUnit aUnit)
+:	iValue(aValue), iUnit(aUnit)
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// TSdpTypedTime::operator ==
+// Checks if two TSdpTypedTimes are equal
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool TSdpTypedTime::operator == (const TSdpTypedTime& aObj) const
+	{
+	return iValue == aObj.iValue && iUnit == aObj.iUnit;
+	}
+
+// -----------------------------------------------------------------------------
+// TSdpTypedTime::SetValue
+// Sets typed time value
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TSdpTypedTime::SetValue(TInt64 aValue, TUnit aUnit)
+	{
+	iValue = aValue;
+	iUnit = aUnit;
+	}
+
+// -----------------------------------------------------------------------------
+// TSdpTypedTime::ExternalizeL
+// Externalizes the typed time to stream
+// -----------------------------------------------------------------------------
+//
+void TSdpTypedTime::ExternalizeL(RWriteStream& aStream) const
+    {
+	aStream.WriteUint32L( I64HIGH( iValue ) );
+    aStream.WriteUint32L( I64LOW( iValue ) );
+    aStream.WriteInt16L(iUnit);
+    }
+
+// -----------------------------------------------------------------------------
+// TSdpTypedTime::InternalizeL
+// Internalizes typed time from stream
+// -----------------------------------------------------------------------------
+//
+TSdpTypedTime TSdpTypedTime::InternalizeL(RReadStream& aStream)
+    {
+    TUint32 high = aStream.ReadUint32L();
+    TUint32 low = aStream.ReadUint32L();
+    TInt64 value = MAKE_TINT64( high, low );
+    TUnit unit = static_cast<TUnit>(aStream.ReadInt16L());
+    TSdpTypedTime typedTime(value, unit);
+    return typedTime;
+    }
+
+// -----------------------------------------------------------------------------
+// TSdpTypedTime::EncodeL
+// Writes attributes in proper format to the stream
+// -----------------------------------------------------------------------------
+//
+void TSdpTypedTime::EncodeL(RWriteStream& aStream) const
+    {
+    TBuf8<KMaxTInt64Digits> number;
+    number.AppendNum( iValue );
+	aStream.WriteL( number );
+
+    RStringPool pool = SdpCodecStringPool::StringPoolL();
+    const TDesC8& timeDays = pool.StringF(
+                                    SdpCodecStringConstants::ETimeUnitDays,
+                                    SdpCodecStringConstants::Table).DesC();
+    const TDesC8& timeHours = pool.StringF(
+                                    SdpCodecStringConstants::ETimeUnitHours,
+                                    SdpCodecStringConstants::Table).DesC();
+    const TDesC8& timeMinutes = pool.StringF(
+                                    SdpCodecStringConstants::ETimeUnitMinutes,
+                                    SdpCodecStringConstants::Table).DesC();
+    const TDesC8& timeSeconds = pool.StringF(
+                                    SdpCodecStringConstants::ETimeUnitSeconds,
+                                    SdpCodecStringConstants::Table).DesC();
+
+    if (iUnit != ETimeUnitNone)
+        {
+        TBuf8<1> unit;
+        if (iUnit == ETimeUnitDays)
+            {
+            unit.Append(timeDays);
+            }
+        else if (iUnit == ETimeUnitHours)
+            {
+            unit.Append(timeHours);
+            }
+        else if (iUnit == ETimeUnitMinutes)
+            {
+            unit.Append(timeMinutes);
+            }
+        else if (iUnit == ETimeUnitSeconds)
+            {
+            unit.Append(timeSeconds);
+            }
+        else
+            {}
+
+        aStream.WriteL(unit);
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// TSdpTypedTime::DecodeL
+// Decodes typed time from TDesC
+// -----------------------------------------------------------------------------
+//
+TSdpTypedTime TSdpTypedTime::DecodeL(const TDesC8& aText)
+    {
+    TLex8 typedTimeLex(aText);
+    TSdpTypedTime typedTime;
+    User::LeaveIfError(typedTimeLex.Val(typedTime.iValue, EDecimal));
+
+    if (typedTimeLex.Peek() != 0)
+        {
+        TPtrC8 unitString = typedTimeLex.NextToken();
+
+        RStringPool pool = SdpCodecStringPool::StringPoolL();
+        const TDesC8& timeDays = pool.StringF(
+                            SdpCodecStringConstants::ETimeUnitDays,
+                            SdpCodecStringConstants::Table).DesC();
+        const TDesC8& timeHours = pool.StringF(
+                            SdpCodecStringConstants::ETimeUnitHours,
+                            SdpCodecStringConstants::Table).DesC();
+        const TDesC8& timeMinutes = pool.StringF(
+                            SdpCodecStringConstants::ETimeUnitMinutes,
+                            SdpCodecStringConstants::Table).DesC();
+        const TDesC8& timeSeconds = pool.StringF(
+                            SdpCodecStringConstants::ETimeUnitSeconds,
+                            SdpCodecStringConstants::Table).DesC();
+
+        if (unitString.Compare(timeDays) == 0)
+            {
+            typedTime.iUnit = ETimeUnitDays;
+            }
+        else if (unitString.Compare(timeHours) == 0)
+            {
+            typedTime.iUnit = ETimeUnitHours;
+            }
+        else if (unitString.Compare(timeMinutes) == 0)
+            {
+            typedTime.iUnit = ETimeUnitMinutes;
+            }
+        else if (unitString.Compare(timeSeconds) == 0)
+            {
+            typedTime.iUnit = ETimeUnitSeconds;
+            }
+        else
+            {
+            User::Leave(KErrSdpCodecTypedTime);
+            }
+        }
+    else
+        {
+        typedTime.iUnit = ETimeUnitNone;
+        }
+
+    return typedTime;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdputil.cpp	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,635 @@
+// Copyright (c) 2010 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:
+// Name          : SdpUtil.cpp
+// Part of       : Local SDP Codec
+// Version       : 1.0
+//
+
+
+
+#include <s32strm.h>
+#include <in_sock.h>
+#include "sdputil.h"
+#include "sdpcodecstringconstants.h"
+#include "sdpcodecstringpool.h"
+#include "sdpcodecconstants.h"
+#include "_sdpdefs.h"
+
+// LOCAL CONSTANTS
+const TInt KMaxAddressLength = 256;
+_LIT8(KInvalidTokenCharacters, "\0\r\n\t ()<>@,;:");
+_LIT8(KInvalidByteStringCharacters, "\0\r\n");
+_LIT8(KWhitespaceCharacters, "\0\r\n \t");
+_LIT16(KWildAddr, "0.0.0.0");
+    
+// -----------------------------------------------------------------------------
+// SdpUtil::IsValidCharSet
+// Generic checker to validate that string has only valid characters
+// -----------------------------------------------------------------------------
+//
+TBool SdpUtil::IsValidCharSet(
+    const TDesC8& aIllegalChars,
+    const TDesC8& aValue,
+    TInt aStart,
+    TInt aEnd)
+	{
+	TBool result = EFalse;
+	
+	if ( aIllegalChars.Length() > 0 && aStart >= 0 && 
+         aEnd <= aValue.Length() && aStart < aEnd )
+		{
+		TInt comp = KErrNotFound;
+		while (comp == KErrNotFound && aStart < aEnd)
+			{
+			comp = aIllegalChars.Locate( aValue[aStart] );
+			++aStart;
+			}
+		result = ( comp == KErrNotFound );
+		}
+	else 
+		{
+		result = ( ( aStart < aEnd ) && 
+                   ( aIllegalChars.Length() == 0 || aValue.Length() == 0 ) );
+		}
+
+	return result;
+	}
+
+// -----------------------------------------------------------------------------
+// SdpUtil::IsTokenList
+// Checks that token list is valid
+// -----------------------------------------------------------------------------
+//
+TBool SdpUtil::IsTokenList(
+    const TDesC8& aValue )
+	{	
+	TBool atError = ( aValue.Length() == 0 );
+    
+    // Check that we are starting with valid character, not e.g. with space
+    if ( !atError && 
+         KInvalidTokenCharacters().Locate( aValue[0] ) != KErrNotFound )
+        {
+        atError = ETrue;
+        }
+    
+    TLex8 lexer( aValue );
+    // Go through the tokens to see that they are valid
+    while ( !atError && !lexer.Eos() )
+        {
+        if ( !IsToken( lexer.NextToken() ) )
+            {
+            atError = ETrue;
+            }   
+        }
+
+	return !atError;
+	}
+
+// -----------------------------------------------------------------------------
+// SdpUtil::IsToken
+// Checks if aValue is valid token
+// -----------------------------------------------------------------------------
+//
+TBool SdpUtil::IsToken( 
+    const TDesC8& aValue, 
+    TInt aStart, 
+    TInt aEnd)
+	{
+	return IsValidCharSet( KInvalidTokenCharacters, aValue, aStart, aEnd );
+	}
+
+// -----------------------------------------------------------------------------
+// SdpUtil::IsToken
+// Checks if aValue is valid token
+// -----------------------------------------------------------------------------
+//
+TBool SdpUtil::IsToken(
+    const TDesC8& aValue )
+	{
+	return IsValidCharSet( KInvalidTokenCharacters, aValue, 0, aValue.Length() );
+	}
+
+// -----------------------------------------------------------------------------
+// SdpUtil::IsByteString
+// Checks if aValue is valid byte string
+// -----------------------------------------------------------------------------
+//
+TBool SdpUtil::IsByteString(
+    const TDesC8& aValue, 
+    TInt aStart, 
+    TInt aEnd )
+	{
+	return IsValidCharSet( KInvalidByteStringCharacters, aValue, aStart, aEnd );
+	}
+
+// -----------------------------------------------------------------------------
+// SdpUtil::IsByteString
+// Checks if aValue is valid byte string
+// -----------------------------------------------------------------------------
+//
+TBool SdpUtil::IsByteString(
+    const TDesC8& aValue )
+	{
+	return IsValidCharSet( KInvalidByteStringCharacters, aValue, 0, 
+                           aValue.Length() );
+	}
+
+// -----------------------------------------------------------------------------
+// SdpUtil::IsTokenTextPair
+// Checks if aValue is valid pair ("valid token":"valid byte-string")
+// -----------------------------------------------------------------------------
+//
+TBool SdpUtil::IsTokenTextPair(
+    const TDesC8& aValue, 
+    TInt aStart,
+    TInt aEnd )
+	{
+	// token ":" text
+	TBool result = EFalse;
+	if ( aStart >= 0 && aEnd <= aValue.Length() && aStart < aEnd )
+		{
+		TPtrC8 subVal = aValue.Mid( aStart, aEnd - aStart );
+		TInt colonPos = subVal.Locate( KColonChar );
+		result = colonPos != KErrNone &&
+                 IsToken( subVal, 0, colonPos ) &&
+                 IsByteString( subVal, colonPos + 1, subVal.Length() );
+		}
+	return result;
+	}
+
+// -----------------------------------------------------------------------------
+// SdpUtil::IsTokenTextPair
+// Checks if aValue is valid pair ("valid token":"valid byte-string")
+// -----------------------------------------------------------------------------
+//
+TBool SdpUtil::IsTokenTextPair(
+    const TDesC8& aValue )
+	{
+	return IsTokenTextPair( aValue, 0, aValue.Length() );
+	}
+
+// -----------------------------------------------------------------------------
+// SdpUtil::IsNonWhitepce
+// Checks if aValue contains only non-whitespace characters
+// -----------------------------------------------------------------------------
+//
+TBool SdpUtil::IsNonWhitespace(
+    const TDesC8& aValue )
+	{
+	return IsValidCharSet( KWhitespaceCharacters, aValue, 0, aValue.Length() );
+	}
+
+// -----------------------------------------------------------------------------
+// SdpUtil::IsValidNtpTime
+// Checks if aValue contains only non-whitespace characters
+// -----------------------------------------------------------------------------
+//
+TBool SdpUtil::IsValidNtpTime(
+    const TDesC8& aValue )
+	{
+	// POS-DIGIT 9*DIGIT
+	TUint len = aValue.Length();
+	TBool result = len >= 10 && TChar( aValue[0] ) != TChar('0');
+	if ( result )
+		{
+		for ( TUint i( 0 ); result && i < len; i++)
+			{
+			TInt tmp = aValue[i] - '0';
+			result = ( tmp >= 0 && tmp <= 9 );
+			}
+		}
+	return result;
+	}
+
+// -----------------------------------------------------------------------------
+// SdpUtil::DivideToLinesL
+// Divides descriptor into a number of lines that are separated by
+// CRLF or LF marks
+// -----------------------------------------------------------------------------
+//
+RArray<TPtrC8> SdpUtil::DivideToLinesL( 
+    const TDesC8& aLines,
+    TInt aErrCode )
+    {
+    RArray<TPtrC8> lineArray;
+    CleanupClosePushL( lineArray );
+    
+    TInt lineStartPos( 0 );
+    TInt lineEndPos( aLines.Length() );
+    TInt pos( 0 );
+    
+    TPtrC8 parsedPart( aLines.Right( lineEndPos - lineStartPos ) );
+    // Splits aLines to number of TPtrC8s, each ending to CRLF/LF
+    while ( lineStartPos < lineEndPos && 
+           ( pos = parsedPart.Find( KLFStr ) ) != KErrNotFound )
+        {  
+        if ( ! ( pos == 0 || 
+                ( pos == ( KCRLFStr().Length() - 1 ) && 
+                  parsedPart.Find( KCRLFStr ) == 0 ) ) )
+            {
+            // Lines that contain only CRLF or LF are ignored
+            // Put the valid lines to the array
+            User::LeaveIfError( 
+                lineArray.Append( 
+                    TPtrC8( parsedPart.Left( pos + KLFStr().Length() ) ) ) );
+            }
+        // Advance the start of the line after LF mark
+        lineStartPos += pos + KLFStr().Length();
+        parsedPart.Set( aLines.Right( lineEndPos - lineStartPos ) );
+        }    
+    
+    // This method expects that last line of aLines ends _always_ 
+    // to LF not to '\0'
+    if ( aLines.Length() == 0 ||
+        ( aLines.Length() > 0 && aLines[aLines.Length() - 1] != '\n' ) )
+        {
+        User::Leave( aErrCode );
+        }
+
+    CleanupStack::Pop();    // lineArray
+    return lineArray;    
+    }
+
+// -----------------------------------------------------------------------------
+// SdpUtil::GetElementsFromLineL
+// Gets all the elements from a single line
+// -----------------------------------------------------------------------------
+//
+RArray<TPtrC8> SdpUtil::GetElementsFromLineL(
+    const TDesC8& aLine, 
+    TInt aErrCode )
+    {
+    TLex8 lexer( aLine );
+    RArray<TPtrC8> lineArray = 
+        SdpUtil::GetElementsFromLineL( lexer, KSPChar, aErrCode );    
+    return lineArray;
+    }
+
+// -----------------------------------------------------------------------------
+// SdpUtil::GetElementsFromLineL
+// Gets all the elements from a single line
+// -----------------------------------------------------------------------------
+//
+RArray<TPtrC8> SdpUtil::GetElementsFromLineL( 
+    const TDesC8& aLine, 
+    TChar aDelimiter,
+    TInt aErrCode )
+    {
+    TLex8 lexer( aLine );
+    RArray<TPtrC8> lineArray = 
+        SdpUtil::GetElementsFromLineL( lexer, aDelimiter, aErrCode );
+    return lineArray;
+    }
+
+// -----------------------------------------------------------------------------
+// SdpUtil::GetElementsFromLineL
+// Gets all the elements from a single line
+// -----------------------------------------------------------------------------
+//
+RArray<TPtrC8> SdpUtil::GetElementsFromLineL( 
+    TLex8& aLexer, 
+    TChar aDelimiter,
+    TInt aErrCode )
+    {
+    RArray<TPtrC8> lineArray;    
+    CleanupClosePushL( lineArray );
+   
+    // Header is special case, because it is joined _without_
+    // space character with the first attribute, so it must be
+    // parsed separately        
+            
+    aLexer.Mark();
+    // curChar must be != KEqualChar at first comparison
+    for ( TChar curChar( KSPChar ); curChar != KEqualChar; )
+        {
+        curChar = aLexer.Peek();
+        // Syntax check      
+        if ( curChar == KEofChar || curChar == KLFChar ||
+             curChar == KCRChar )
+            {
+            User::Leave( aErrCode );
+            }        
+        aLexer.Inc();       
+        }
+    // Append header to array
+    User::LeaveIfError( lineArray.Append( aLexer.MarkedToken() ) );
+    
+    // Whitespace MUST NOT be used after the "=" sign
+    if (aLexer.Peek() == KSPChar) 
+	    {
+		User::Leave( aErrCode );	    	 
+	    }
+
+    // Get the other elements from the string to the array
+    ChopElementsFromLineL( lineArray, aLexer, aDelimiter, aErrCode );
+
+    CleanupStack::Pop();    // lineArray
+    return lineArray;
+    }
+
+// -----------------------------------------------------------------------------
+// SdpUtil::IsPosDigit
+// Checks if all the charcaters on the descriptor are POS-DIGITs
+// -----------------------------------------------------------------------------
+//
+TBool SdpUtil::IsPosDigit( 
+    const TDesC8& aDes )
+    {
+    // POS-DIGIT = %x31-39 ; 1 - 9
+    _LIT8( KValidPosDigits, "123456789" );
+    return SdpUtil::IsValidChars( KValidPosDigits, aDes );
+    }
+
+// -----------------------------------------------------------------------------
+// SdpUtil::IsDigit
+// Checks if all the charcaters on the descriptor are DIGITs
+// -----------------------------------------------------------------------------
+//
+TBool SdpUtil::IsDigit( 
+    const TDesC8& aDes )
+    {
+    // DIGIT = "0" / "1" / "2" / "3" / "4" / "5" / "6" /
+    //         "7" / "8" / "9"
+    _LIT8( KValidDigits, "0123456789" );
+
+    return SdpUtil::IsValidChars( KValidDigits, aDes );
+    }
+
+// -----------------------------------------------------------------------------
+// SdpUtil::IsValidChars
+// Checks if all the charcaters on the descriptor are from valid charset
+// -----------------------------------------------------------------------------
+//
+TBool SdpUtil::IsValidChars( 
+    const TDesC8& aValidChars, 
+    const TDesC8& aDes )
+    {
+    TBool valid( aDes.Length() > 0 );
+    for ( TInt i( 0 ); i < aDes.Length() && valid; i++ )
+        {
+        if ( aValidChars.Locate( aDes[i] ) == KErrNotFound )
+            {
+            valid = EFalse;
+            }
+        }
+
+    return valid;
+    }
+        
+// -----------------------------------------------------------------------------
+// SdpUtil::IsTokenCharWithSpacesL
+// Checks if all the elements on the string are valid tokens
+// -----------------------------------------------------------------------------
+//
+TBool SdpUtil::IsTokenCharWithSpacesL(
+    const TDesC8& aValue )
+	{
+	TLex8 lex( aValue );
+	lex.SkipSpace();
+
+	if( lex.Remainder().Length() == 0 )
+		{
+		User::Leave( KErrArgument );
+		}
+
+	while ( !lex.Eos() )
+		{
+		if ( !IsTokenChar( lex.NextToken() ) )
+			{
+			return EFalse;
+			}
+		lex.SkipSpace();
+		}
+	return ETrue;
+	}
+
+// -----------------------------------------------------------------------------
+// SdpUtil::IsTokenCharWithOptionalSlash
+// Checks if all the possible two elements divided by slash are valid tokens
+// -----------------------------------------------------------------------------
+//
+TBool SdpUtil::IsTokenCharWithOptionalSlash(const TDesC8& aValue)
+	{
+	TInt lineEndPosition = aValue.Locate('/');
+
+	if ( lineEndPosition != KErrNotFound )
+		{
+		TPtrC8 firstToken( aValue.Left( lineEndPosition ) );
+		if( !IsTokenChar( firstToken ) ||
+		    !IsTokenChar( aValue.Mid( lineEndPosition + 1 ) ) )
+			{
+			return EFalse;
+			}
+		}
+	else
+		{
+		return IsTokenChar( aValue );
+		}
+	return ETrue;
+	}
+
+// -----------------------------------------------------------------------------
+// SdpUtil::IsTokenChar
+// Checks if all the elements on the string are valid tokens
+// -----------------------------------------------------------------------------
+//
+TBool SdpUtil::IsTokenChar(
+    const TDesC8& aValue )
+	{	
+    TLex8 lex( aValue );
+	while( !lex.Eos() )
+		{
+		TChar ch = lex.Get();
+		lex.Inc();
+
+		if( ch == '\r' ||ch == '\n' || ch == '\0' || !IsTokenChar( ch ) )
+			{
+			return EFalse;
+			}
+		}
+	return ETrue;
+	}
+
+// -----------------------------------------------------------------------------
+// SdpUtil::IsTokenChar
+// Checks if the character is a valid token character
+// -----------------------------------------------------------------------------
+//
+TBool SdpUtil::IsTokenChar( 
+    TChar aChar )
+	{
+    return ( ( aChar == '!')||
+	         ( aChar >= '#' && aChar <= '\'' ) ||
+	         ( aChar == '*' || aChar == '+' ) ||
+	         ( aChar == '-' || aChar == '.' ) ||
+	         ( aChar.IsDigit() ) ||
+	         ( aChar >= 'a' && aChar <= 'z' ) ||
+	         ( aChar >= 'A' && aChar <= 'Z' ) ||
+	         ( aChar >= '^' && aChar <= '~' ) );	
+	}
+
+// ---------------------------------------------------------------------------
+// SdpUtil::EncodeBufferL
+// Encodes headername and a value to the stream
+// ---------------------------------------------------------------------------
+//
+void SdpUtil::EncodeBufferL(
+    const TDesC8& aValue, 
+    TInt aIndex,
+    RWriteStream& aStream )
+	{
+	if( aValue.Length() != 0 )
+		{
+        RStringPool pool = SdpCodecStringPool::StringPoolL();
+		RStringF headername = pool.StringF( aIndex, 
+                                        SdpCodecStringPool::StringTableL() );
+		aStream.WriteL( headername.DesC() );
+		aStream.WriteL( aValue );
+		aStream.WriteL( KCRLFStr );
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// SdpUtil::SetDefaultNetTypeAndAddrType
+// Sets network type and address type to their "default" values
+// ---------------------------------------------------------------------------
+//
+void SdpUtil::SetDefaultNetTypeAndAddrType( 
+    RStringPool aPool, 
+    const TInetAddr& aAddress,
+    RStringF& aNetType, 
+    RStringF& aAddressType )
+    {
+     // Sets network type to IN
+    aNetType.Close();
+    aNetType = aPool.StringF( SdpCodecStringConstants::ENetType,
+                              SdpCodecStringConstants::Table ).Copy();
+    // Address type       
+    aAddressType.Close();
+
+    TBuf16 <KMaxAddressLength> output;
+    aAddress.Output(output);
+
+
+    //addresstype for IPv4    
+	if((aAddress.Address() &&  !aAddress.IsV4Mapped()) ||
+       (!aAddress.Address() && aAddress.IsWildAddr() && 
+        output.Match(KWildAddr) == 0))
+        {
+        aAddressType = aPool.StringF( SdpCodecStringConstants::EAddressTypeIP4,
+                                      SdpCodecStringConstants::Table ).Copy();
+        }
+    else
+        {
+		//addresstype for IPv4-Mapped IPv6 && IPv6
+        aAddressType = aPool.StringF( SdpCodecStringConstants::EAddressType,
+                                      SdpCodecStringConstants::Table ).Copy();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// SdpUtil::SkipSpacesUntilNextLineBreak
+// Skips spaces until next line break, if the line break can be found.
+// Examples: "   \r\n" -> "\r\n", "abc def\r\n" -> "abc def\r\n"
+// ---------------------------------------------------------------------------
+//       
+TBool SdpUtil::SkipSpacesUntilNextLineBreak( TLex8& aLexer )
+    {
+    TBool found = EFalse;
+    if ( aLexer.Peek() == KSPChar )
+        {
+        TInt spaceCount = 0;
+        while ( aLexer.Peek() == KSPChar )
+            {
+            spaceCount++;
+            aLexer.Get();
+            }
+        if ( aLexer.Peek() != KCRChar && aLexer.Peek() != KLFChar )
+            {
+            for ( TInt i=0; i < spaceCount; i++ )
+                {
+                aLexer.UnGet();
+                }
+            }
+        else
+            {
+            found = ETrue;
+            }
+        }
+    return found;
+    }
+
+// ---------------------------------------------------------------------------
+// SdpUtil::ChopElementsFromLineL
+// Chops all the elements that are divided by delimiter from the string
+// ---------------------------------------------------------------------------
+//
+void SdpUtil::ChopElementsFromLineL( 
+    RArray<TPtrC8>& aArray, 
+    TLex8& aLexer,
+    TChar aDelimiter,
+    TInt aErrCode )
+    {
+    // Chop the elements to the array from lexer
+    TBool eofcFound = EFalse;
+    while (!eofcFound)
+        {
+        aLexer.Mark();        
+        // Parse single token, leave other special characters
+        // to token except aDelimiter | '\r' | '\n' | '\0'
+        while ( aLexer.Peek() != aDelimiter && 
+                aLexer.Peek() != KCRChar &&
+                aLexer.Peek() != KLFChar && 
+                aLexer.Peek() != KEofChar )
+            {
+            aLexer.Inc();
+            }
+		
+        if ( aLexer.MarkedToken().Length() > 0 )
+            {            
+            aArray.AppendL( aLexer.MarkedToken() );
+            }
+
+        if ( aDelimiter == KSPChar &&
+             aLexer.Peek() == aDelimiter )
+            {
+            SkipSpacesUntilNextLineBreak( aLexer );
+            }
+
+        // Check if its end-of-line
+        if ( aLexer.Peek() == KCRChar )
+            {
+            aLexer.Inc();
+            }
+
+        if ( aLexer.Peek() == KLFChar )
+            {
+            aLexer.Inc();
+            if ( aLexer.Peek() != KEofChar )
+                {
+                User::Leave( aErrCode );
+                }
+            eofcFound = ETrue;
+            }
+        else if ( aLexer.Peek() == KEofChar )
+            {
+            // EoF character not tolerated at the middle of the string
+            User::Leave( aErrCode );
+            }
+        else
+            {
+            aLexer.Inc();
+            }
+        }
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/strings/localsdpcodecstringconstants.st	Thu May 27 14:32:46 2010 +0300
@@ -0,0 +1,148 @@
+!/**
+! * @publishedAll
+! * @released
+!*/
+# SDPCodec String table
+fstringtable SdpCodecStringConstants
+# Strings are case-sensitive
+#
+#
+!// SDP field names:
+EVersion v=
+EOrigin o=
+ESession s=
+EInfo i=
+EUri u=
+EEmail e=
+EPhone p=
+EConnection c=
+EBandwidth b=
+EZone z=
+EKey k=
+EAttribute a=
+ETime t=
+ERepeat r=
+EMedia m=
+#
+#
+!// Predefined bandwidth modifiers:
+EModifierCT CT
+EModifierAS AS
+#
+#
+!// Typed time units:
+ETimeUnitDays d
+ETimeUnitHours h
+ETimeUnitMinutes m
+ETimeUnitSeconds s
+!// No typed time unit defined:
+ETimeUnitNone
+#
+#
+!// Predefined encryption methods:
+EMethodClear clear
+EMethodBase64 base64
+EMethodUri uri
+EMethodPrompt prompt
+#
+#
+!// Predefined attributes:
+# Defined in RFC2327 if no comment
+EAttributeCat cat
+EAttributeKeywds keywds
+EAttributeTool tool
+EAttributePtime ptime
+# draft-ietf-mmusic-sdp-new
+EAttributeMaxptime maxptime
+EAttributeRecvonly recvonly
+EAttributeSendrecv sendrecv
+EAttributeSendonly sendonly
+# draft-ietf-mmusic-sdp-new
+EAttributeInactive inactive
+EAttributeOrient orient
+!// Predefined Orient attribute values
+EAttributeOrientValuePortrait portrait
+EAttributeOrientValueLandscape landscape
+EAttributeOrientValueSeascape seascape
+EAttributeType type
+EAttributeCharset charset
+EAttributeSdplang sdplang
+EAttributeLang lang
+EAttributeFramerate framerate
+EAttributeQuality quality
+# RFC2326
+EAttributeControl control
+# RFC2326
+EAttributeRange range
+# RFC2326
+EAttributeEtag etag
+# RFC3312
+EAttributeDes des
+# RFC3312
+EAttributeCurr curr
+# RFC3312
+EAttributeConf conf
+# RFC3312
+!// Predefined Strength tag for Curr, Conf and Des attributes
+EAttributeStatusStrengthTagMandatory mandatory
+# RFC3312
+EAttributeStatusStrengthTagOptional optional
+# RFC3312
+EAttributeStatusStrengthTagNone none
+# RFC3312
+EAttributeStatusStrengthTagFailure failure
+# RFC3312
+EAttributeStatusStrengthTagUnknown unknown
+# RFC3312
+!// Predefined Status type for Curr, Conf and Des attributes
+EAttributeStatusTypeE2e e2e
+# RFC3312
+EAttributeStatusTypeLocal local
+# RFC3312
+EAttributeStatusTypeRemote remote
+# RFC3312
+!// Predefined Direction tag for Curr, Conf and Des attributes
+EAttributeStatusDirectionTagNone none
+# RFC3312
+EAttributeStatusDirectionTagSend send
+# RFC3312
+EAttributeStatusDirectionTagRecv recv
+# RFC3312
+EAttributeStatusDirectionTagSendrecv sendrecv
+# RFC3388
+EAttributeMid mid
+# RFC3388
+EAttributeGroup group
+# RFC3388
+!// Predefined semantics for Group attribute
+EAttributeGroupSemanticLS LS
+# RFC3388
+EAttributeGroupSemanticFID FID
+# RFC3524
+EAttributeGroupSemanticSRF SRF
+EAttributeRtpmap rtpmap
+EAttributeFmtp fmtp
+#
+#
+!// Predefined media types:
+EMediaAudio audio
+EMediaVideo video
+EMediaApplication application
+EMediaData data
+EMediaControl control
+EMediaImage image
+#
+#
+!// Predefined media transport protocols:
+EProtocolRtpAvp RTP/AVP
+EProtocolUdp udp
+EProtocolTcp TCP
+#
+#
+!// Network type:
+ENetType IN
+#
+#
+!// Address types:
+EAddressTypeIP4 IP4
+EAddressType IP6
--- a/contentmgmt/referencedrmagent/RefTestAgent/streamingrefagent/inc/sracommon.h	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/referencedrmagent/RefTestAgent/streamingrefagent/inc/sracommon.h	Thu May 27 14:32:46 2010 +0300
@@ -34,14 +34,12 @@
 #include <s32mem.h>
 #include <stringpool.h>
 
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
-#include <sdpdocument.h>
-#include <sdpmediafield.h>
-#include <sdpattributefield.h>
-#include <sdpcodecstringpool.h>
-#include <sdpfmtattributefield.h>
-#include <sdpcodecstringconstants.h>
-#endif
+#include "sdpdocument.h"
+#include "sdpmediafield.h"
+#include "sdpattributefield.h"
+#include "sdpcodecstringpool.h"
+#include "sdpfmtattributefield.h"
+#include "sdpcodecstringconstants.h"
 
 #include <caf/streaming/streamcaftypes.h>
 #include <caf/streaming/keyassociation.h>
--- a/contentmgmt/referencedrmagent/RefTestAgent/streamingrefagent/inc/sraserver.h	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/referencedrmagent/RefTestAgent/streamingrefagent/inc/sraserver.h	Thu May 27 14:32:46 2010 +0300
@@ -97,10 +97,8 @@
 	CSraProcessor* iProcessor;
 	CKeyStreamSink* iKeyStreamSink;
 	CSraRightsObject* iRo;
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	CSdpMediaField* iSdp;
 	CSdpDocument* iSdpDoc;
-#endif
 	/**
 	 A handle to a mutex which is used to signal the client that the key has been implemented. 
 	 Not necessary in real-life agents and is present here only for testing.
--- a/contentmgmt/referencedrmagent/RefTestAgent/streamingrefagent/inc/srautils.h	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/referencedrmagent/RefTestAgent/streamingrefagent/inc/srautils.h	Thu May 27 14:32:46 2010 +0300
@@ -27,11 +27,7 @@
 #define SRAUTILS_H
 
 #include "srarightsobject.h"
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
-#include <sdpmediafield.h>
-#else
-class CSdpMediaField;
-#endif
+#include "sdpmediafield.h"
 #include <f32file.h>
 
 
--- a/contentmgmt/referencedrmagent/RefTestAgent/streamingrefagent/source/client/sraclient.cpp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/referencedrmagent/RefTestAgent/streamingrefagent/source/client/sraclient.cpp	Thu May 27 14:32:46 2010 +0300
@@ -185,14 +185,10 @@
  	@param aKey An SDP object data.
  */
 	{
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	HBufC8* sdpBuf(0);
 	TPtr8 ptr(EncodeLC(aSdp, sdpBuf));
 	User::LeaveIfError(RSessionBase::SendReceive(ESetSdpKeyStream, TIpcArgs(&ptr)));
 	CleanupStack::PopAndDestroy(sdpBuf);
-#else
-	(void) aSdp;
-#endif
 	}
 
 EXPORT_C void RSraClient::SendSdpDocumentL(const CSdpDocument& aSdpDoc) const
@@ -201,13 +197,8 @@
  	@param aKey An SDP object data.
  */
 	{
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	HBufC8* sdpDocBuf(0);
 	TPtr8 ptr(EncodeLC(aSdpDoc, sdpDocBuf));
 	User::LeaveIfError(RSessionBase::SendReceive(ESetSdpDocument, TIpcArgs(&ptr)));
 	CleanupStack::PopAndDestroy(sdpDocBuf);
-#else
-	(void) aSdpDoc;
-#endif
-
 	}
--- a/contentmgmt/referencedrmagent/RefTestAgent/streamingrefagent/source/server/sraserver.cpp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/referencedrmagent/RefTestAgent/streamingrefagent/source/server/sraserver.cpp	Thu May 27 14:32:46 2010 +0300
@@ -61,9 +61,7 @@
 	
 	delete iShutdownTimer;
 	iFs.Close();
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	SdpCodecStringPool::Close();
-#endif
 	}
 
 
@@ -81,9 +79,7 @@
 	User::LeaveIfError(iFs.Connect());
 	User::LeaveIfError(iFs.ShareProtected());
 	User::LeaveIfError(iFs.CreatePrivatePath(iFs.GetSystemDrive()));
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	SdpCodecStringPool::OpenL();
-#endif
 	StartL(KSraName);
 	iShutdownTimer = CShutdownTimer::NewL(KSraShutdownPeriod);
 	iShutdownTimer->Restart();
--- a/contentmgmt/referencedrmagent/RefTestAgent/streamingrefagent/source/server/srasession.cpp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/referencedrmagent/RefTestAgent/streamingrefagent/source/server/srasession.cpp	Thu May 27 14:32:46 2010 +0300
@@ -23,9 +23,7 @@
 #include "sraprocessor.h"
 #include "srautils.h"
 #include <s32file.h>
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
-#include <sdpconnectionfield.h>
-#endif
+#include "sdpconnectionfield.h"
 
 CSraSession::CSraSession()
 //constructor
@@ -42,10 +40,8 @@
 		
 	delete iKeyStreamSink;
 	delete iRo;
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	delete iSdp;
 	delete iSdpDoc;
-#endif
 	delete iProcessor;
 	iMutex.Close();
 	}
@@ -331,7 +327,6 @@
  	@param	aMessage	Standard server-side handle to message.
   */
 	{
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	TInt len = aMessage.GetDesMaxLengthL(0);
 	HBufC8* des = HBufC8::NewLC(len);
 	TPtr8 ptr(des->Des());
@@ -355,10 +350,6 @@
 		}
 	StartProcessorL();
 	aMessage.Complete(KErrNone);
-#else
-	(void) aMessage;
-	User::Leave(KErrCANoRights);
-#endif
 	}
 
 
@@ -369,7 +360,6 @@
  	@param	aMessage	Standard server-side handle to message.
   */
 	{
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	TInt len = aMessage.GetDesMaxLengthL(0);
 	HBufC8* des = HBufC8::NewLC(len);
 	TPtr8 ptr(des->Des());
@@ -384,9 +374,6 @@
 	CleanupStack::PopAndDestroy(des);
 	
 	aMessage.Complete(KErrNone);
-#else
-	(void) aMessage;
-#endif
 	}
 
 
@@ -396,7 +383,6 @@
  	and then process that by using the key stream sink.
  */
 	{
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	// Mutex is used to synchronise the agent with the test harness.
 	// A real-life agent should not need to use a mutex object.
 	User::LeaveIfError(iMutex.CreateGlobal(KSraMutexName));
@@ -433,5 +419,4 @@
 	
 	// Launch the processor
 	iProcessor->StartProcessing();
-#endif
 	}
--- a/contentmgmt/referencedrmagent/RefTestAgent/streamingrefagent/source/utils/srautils.cpp	Fri May 14 17:39:00 2010 +0300
+++ b/contentmgmt/referencedrmagent/RefTestAgent/streamingrefagent/source/utils/srautils.cpp	Thu May 27 14:32:46 2010 +0300
@@ -19,11 +19,9 @@
 
 #include "srautils.h"
 #include <s32file.h>
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
-#include <sdpfmtattributefield.h>
-#include <sdpcodecstringpool.h>
-#include <sdpattributefield.h>
-#endif
+#include "sdpfmtattributefield.h"
+#include "sdpcodecstringpool.h"
+#include "sdpattributefield.h"
 
 HBufC8* ExtractKmsIdLC(const TDesC8& aValue)
 /**
@@ -75,7 +73,6 @@
  */
 	{
 	TBool supported = EFalse;
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	//FormatAttributeFields method is not constant. So create a new instance.
 	CSdpMediaField* sdp = aSdpKeyStream.CloneL();
 	CleanupStack::PushL(sdp);
@@ -103,10 +100,6 @@
 		CleanupStack::PopAndDestroy(kmsid);
 		}
 	CleanupStack::PopAndDestroy(sdp);
-#else 
-	(void) aSdpKeyStream;
-	(void) aSupportedKmsIds;
-#endif
 	return supported;
 	}
 
@@ -175,7 +168,6 @@
  	Finds and loads the Rights Object specified in the SDP given.
  */
 	{
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	// Find the rights object if it is defined in the SDP
 	CSdpAttributeField* roAttrField = NULL;
 	TInt count = aSdp.AttributeFields().Count();
@@ -209,12 +201,6 @@
 		{//the rights object is defined in the SDP
 		FindAndLoadRightsObjectL(aFs, roAttrField->Value(), aPrivateFolder, aRo);
 		}
-#else
-	(void) aFs;
-	(void) aSdp;
-	(void) aRo;
-	(void) aPrivateFolder;
-#endif
 	}
 
 EXPORT_C void DoSetSdpMediaFieldL(RFs& aFs, CSdpMediaField*& aSdp, CSraRightsObject*& aRo, const TDesC8& aSdpData, const TDesC& aPrivateFolder)
@@ -228,17 +214,9 @@
  	@param aPrivateFolder The private folder of the agent.
   */
 	{
-#ifdef INTERNALLY_ENABLE_UPWARD_DEPENDENCY
 	ASSERT(!aSdp);
 	// Decode the received message into an SDP object
 	aSdp = CSdpMediaField::DecodeL(aSdpData,ETrue);
 	// Set the specified RO
 	DoSetRightsObjectL(aFs, *aSdp, aRo, aPrivateFolder);
-#else
-	(void) aFs;
-	(void) aSdp;
-	(void) aRo;
-	(void) aSdpData;
-	(void) aPrivateFolder;
-#endif
 	}
--- a/securityanddataprivacytools/securitytools/openssllib/import/bin/deb/distribution.policy	Fri May 14 17:39:00 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-Category E
-OSD:	Optional Replaceable	Software Install Tools PC Side
-Export Restricted
-# This code has been obtained from www.OpenSSL.org and is
-# potentially subject to license and export restrictions.
-
--- a/securityanddataprivacytools/securitytools/openssllib/import/bin/linux-x86/deb/distribution.policy	Fri May 14 17:39:00 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-Category E
-OSD:	Optional Replaceable	Software Install Tools PC Side
-Export Restricted
-# This code has been obtained from www.OpenSSL.org and is
-# potentially subject to license and export restrictions.
-
--- a/securityanddataprivacytools/securitytools/openssllib/import/bin/linux-x86/rel/distribution.policy	Fri May 14 17:39:00 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-Category E
-OSD:	Optional Replaceable	Software Install Tools PC Side
-Export Restricted
-# This code has been obtained from www.OpenSSL.org and is
-# potentially subject to license and export restrictions.
-
--- a/securityanddataprivacytools/securitytools/openssllib/import/bin/rel/distribution.policy	Fri May 14 17:39:00 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-Category E
-OSD:	Optional Replaceable	Software Install Tools PC Side
-Export Restricted
-# This code has been obtained from www.OpenSSL.org and is
-# potentially subject to license and export restrictions.
-