contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdpmediafield.cpp
author hgs
Thu, 24 Jun 2010 15:39:07 +0530
changeset 72 de46a57f75fb
permissions -rw-r--r--
201023_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
72
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     1
// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     2
// All rights reserved.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     7
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     8
// Initial Contributors:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    10
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    11
// Contributors:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    12
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    13
// Description:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    14
// Name          : SdpMediaField.cpp
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    15
// Part of       : Local SDP Codec
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    16
// Version       : 1.0
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    17
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    18
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    19
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    20
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    21
#include <s32mem.h>
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    22
#include <s32strm.h>
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    23
#include "sdpmediafield.h"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    24
#include "sdpconnectionfield.h"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    25
#include "sdpbandwidthfield.h"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    26
#include "sdpattributefield.h"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    27
#include "sdpkeyfield.h"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    28
#include "sdpcodecstringconstants.h"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    29
#include "sdputil.h"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    30
#include "sdpcodec.pan"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    31
#include "_sdpdefs.h"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    32
#include "sdpcodecstringpool.h"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    33
#include "sdpfmtattributefield.h"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    34
#include "sdpcodectemplate.h"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    35
#include "sdpcodecerr.h"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    36
#include "sdpcodecparseutil.h"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    37
#include "sdpcodecconstants.h"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    38
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    39
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    40
// CSdpMediaField::DecodeL
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    41
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    42
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    43
EXPORT_C CSdpMediaField* 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    44
CSdpMediaField::DecodeL(const TDesC8& aText, TBool aRecurse)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    45
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    46
	CSdpMediaField* obj = DecodeLC(aText,aRecurse);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    47
	CleanupStack::Pop();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    48
	return obj;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    49
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    50
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    51
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    52
// CSdpMediaField::DecodeLC
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    53
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    54
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    55
EXPORT_C CSdpMediaField* 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    56
CSdpMediaField::DecodeLC(const TDesC8& aText, TBool aRecurse)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    57
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    58
	__ASSERT_ALWAYS (aText.Length() > 0, User::Leave(KErrSdpCodecMediaField));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    59
	CSdpMediaField* obj = new(ELeave)CSdpMediaField;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    60
	CleanupStack::PushL(obj);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    61
	obj->ConstructL(aRecurse);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    62
	obj->ParseL(aText);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    63
	return obj;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    64
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    65
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    66
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    67
// CSdpMediaField::NewL
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    68
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    69
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    70
EXPORT_C CSdpMediaField* CSdpMediaField::NewL(RStringF aMedia,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    71
											TUint aPort,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    72
											RStringF aProtocol,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    73
											const TDesC8& aFormatList)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    74
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    75
	CSdpMediaField* obj = NewLC(aMedia, aPort, aProtocol, aFormatList);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    76
	CleanupStack::Pop();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    77
	return obj;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    78
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    79
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    80
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    81
// CSdpMediaField::NewLC
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    82
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    83
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    84
EXPORT_C CSdpMediaField* CSdpMediaField::NewLC(RStringF aMedia,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    85
											TUint aPort,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    86
											RStringF aProtocol,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    87
											const TDesC8& aFormatList)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    88
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    89
	CSdpMediaField* obj = new(ELeave)CSdpMediaField;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    90
	CleanupStack::PushL(obj);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    91
	obj->ConstructL(aMedia, aPort, aProtocol, aFormatList);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    92
	return obj;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    93
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    94
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    95
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    96
// CSdpMediaField::~CSdpMediaField
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    97
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    98
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    99
EXPORT_C CSdpMediaField::~CSdpMediaField()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   100
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   101
	delete iInfo;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   102
	delete iSdpKeyField;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   103
	iElementArray.Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   104
	iMedia.Close();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   105
	iProtocol.Close();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   106
	delete iFormatList;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   107
	delete iToken;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   108
	if(iBandwidthFields)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   109
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   110
		iBandwidthFields->ResetAndDestroy();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   111
		delete iBandwidthFields;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   112
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   113
	if(iAttributeFields)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   114
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   115
		iAttributeFields->ResetAndDestroy();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   116
		delete iAttributeFields;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   117
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   118
	if(iConnectionFields)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   119
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   120
		iConnectionFields->ResetAndDestroy();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   121
		delete iConnectionFields;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   122
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   123
	if(iFmtAttrFields)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   124
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   125
		iFmtAttrFields->ResetAndDestroy();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   126
		delete iFmtAttrFields;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   127
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   128
	delete iSdpCodecParseUtil;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   129
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   130
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   131
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   132
// CSdpMediaField::CloneL
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   133
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   134
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   135
EXPORT_C CSdpMediaField * CSdpMediaField::CloneL(TBool aRecurse) const
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   136
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   137
	CSdpMediaField* obj = new(ELeave)CSdpMediaField;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   138
	CleanupStack::PushL(obj);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   139
	obj->ConstructL(aRecurse);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   140
	obj->ConstructL(*this);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   141
	CleanupStack::Pop();//obj
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   142
	return obj;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   143
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   144
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   145
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   146
// CSdpMediaField::operator ==
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   147
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   148
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   149
EXPORT_C TBool CSdpMediaField::operator == (const CSdpMediaField& aObj) const
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   150
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   151
	TBool result = ETrue;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   152
	if(	!(iMedia==aObj.Media()) ||
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   153
		!(iPort == aObj.Port()) ||
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   154
		!(iPortCount == aObj.iPortCount) ||
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   155
		!(iProtocol == aObj.Protocol()) ||
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   156
		!(*iFormatList==(*aObj.iFormatList)) ||
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   157
		(!(*iInfo==(*aObj.iInfo)))||
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   158
		(!iSdpKeyField && aObj.Key())||
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   159
		(iSdpKeyField && !aObj.Key())||
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   160
		((iSdpKeyField && aObj.Key()) && (!(*iSdpKeyField==(*aObj.Key()))))||
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   161
		(iBandwidthFields->Count() != aObj.iBandwidthFields->Count())||
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   162
		(iAttributeFields->Count() != aObj.iAttributeFields->Count())||
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   163
		(iFmtAttrFields->Count() != aObj.iFmtAttrFields->Count())||
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   164
		(iConnectionFields->Count() != aObj.iConnectionFields->Count()))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   165
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   166
		result = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   167
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   168
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   169
	TInt i  = 0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   170
	if(result)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   171
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   172
		for (i=0; i < (aObj.iConnectionFields)->Count(); i++)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   173
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   174
			if((!(*iConnectionFields)[i] && (*aObj.iConnectionFields)[i]) ||
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   175
				((*iConnectionFields)[i] && !(*aObj.iConnectionFields)[i]))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   176
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   177
				return EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   178
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   179
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   180
			if(((*iConnectionFields)[i] && (*aObj.iConnectionFields)[i]) &&
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   181
				(!(*(*iConnectionFields)[i]==(*(*aObj.iConnectionFields)[i]))))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   182
				{	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   183
				return EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   184
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   185
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   186
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   187
		for (i=0; i < (aObj.iBandwidthFields)->Count(); i++)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   188
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   189
			if((!(*iBandwidthFields)[i] && (*aObj.iBandwidthFields)[i]) ||
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   190
				((*iBandwidthFields)[i] && !(*aObj.iBandwidthFields)[i]))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   191
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   192
				return EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   193
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   194
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   195
			if(((*iBandwidthFields)[i] && (*aObj.iBandwidthFields)[i]) &&
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   196
				(!(*(*iBandwidthFields)[i]==(*(*aObj.iBandwidthFields)[i]))))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   197
				{	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   198
				return EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   199
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   200
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   201
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   202
		for (i=0; i < (aObj.iAttributeFields)->Count(); i++)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   203
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   204
			if((!((*iAttributeFields)[i]) && ((*aObj.iAttributeFields)[i]))||
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   205
				((*iAttributeFields)[i] && !(*aObj.iAttributeFields)[i]))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   206
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   207
				return EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   208
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   209
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   210
			if(((*iAttributeFields)[i] && (*aObj.iAttributeFields)[i]) &&
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   211
				(!(*(*iAttributeFields)[i]==(*(*aObj.iAttributeFields)[i]))))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   212
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   213
				return EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   214
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   215
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   216
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   217
		for (i=0; i < (aObj.iFmtAttrFields)->Count(); i++)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   218
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   219
			if((!((*iFmtAttrFields)[i]) && ((*aObj.iFmtAttrFields)[i]))||
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   220
				((*iFmtAttrFields)[i] && !(*aObj.iFmtAttrFields)[i]))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   221
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   222
				return EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   223
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   224
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   225
			if(((*iFmtAttrFields)[i] && (*aObj.iFmtAttrFields)[i]) &&
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   226
				(!(*(*iFmtAttrFields)[i]==(*(*aObj.iFmtAttrFields)[i]))))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   227
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   228
				return EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   229
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   230
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   231
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   232
	return result;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   233
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   234
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   235
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   236
// CSdpMediaField::Media
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   237
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   238
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   239
EXPORT_C RStringF CSdpMediaField::Media() const
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   240
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   241
	return iMedia;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   242
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   243
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   244
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   245
// CSdpMediaField::SetMedia
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   246
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   247
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   248
EXPORT_C void CSdpMediaField::SetMediaL(RStringF aMedia)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   249
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   250
	__ASSERT_ALWAYS(SdpUtil::IsTokenChar(aMedia.DesC()), 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   251
					User::Leave(KErrSdpCodecMediaField));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   252
	iMedia.Close();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   253
	iMedia = aMedia.Copy();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   254
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   255
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   256
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   257
// CSdpMediaField::Protocol
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   258
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   259
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   260
EXPORT_C RStringF CSdpMediaField::Protocol() const
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   261
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   262
	return iProtocol;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   263
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   264
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   265
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   266
// CSdpMediaField::SetProtocol
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   267
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   268
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   269
EXPORT_C void CSdpMediaField::SetProtocolL(RStringF aProtocol)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   270
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   271
	__ASSERT_ALWAYS(SdpUtil::IsTokenCharWithOptionalSlash(aProtocol.DesC()),
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   272
					User::Leave(KErrSdpCodecMediaField));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   273
    if (aProtocol == iPool.StringF( SdpCodecStringConstants::EProtocolUdp, 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   274
                            SdpCodecStringConstants::Table ))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   275
        {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   276
	    __ASSERT_ALWAYS((iPort == 0 || (iPort >= 1024 && iPort <= 65535)),
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   277
					User::Leave(KErrSdpCodecMediaField));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   278
        }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   279
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   280
	iProtocol.Close();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   281
	iProtocol = aProtocol.Copy();    
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   282
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   283
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   284
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   285
// CSdpMediaField::Port
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   286
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   287
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   288
EXPORT_C TUint CSdpMediaField::Port() const
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   289
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   290
	return iPort;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   291
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   292
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   293
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   294
// CSdpMediaField::SetPortL
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   295
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   296
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   297
EXPORT_C void CSdpMediaField::SetPortL(TUint aPort)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   298
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   299
    if ( iProtocol == iPool.StringF( SdpCodecStringConstants::EProtocolUdp, 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   300
                            SdpCodecStringConstants::Table ))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   301
        {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   302
	    __ASSERT_ALWAYS((aPort == 0 || (aPort >= 1024 && aPort <= 65535)),
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   303
					User::Leave(KErrSdpCodecMediaField));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   304
        }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   305
	iPort = aPort;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   306
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   307
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   308
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   309
// CSdpMediaField::PortCount
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   310
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   311
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   312
EXPORT_C TUint CSdpMediaField::PortCount() const
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   313
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   314
	return iPortCount;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   315
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   316
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   317
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   318
// CSdpMediaField::SetPortCount
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   319
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   320
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   321
EXPORT_C void CSdpMediaField::SetPortCountL(TUint aCount)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   322
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   323
	__ASSERT_ALWAYS(aCount > 0, User::Leave(KErrSdpCodecMediaField));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   324
	iPortCount = aCount;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   325
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   326
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   327
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   328
// CSdpMediaField::FormatList
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   329
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   330
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   331
EXPORT_C const TDesC8& CSdpMediaField::FormatList() const
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   332
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   333
	return *iFormatList;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   334
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   335
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   336
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   337
// CSdpMediaField::SetFormatListL
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   338
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   339
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   340
EXPORT_C void CSdpMediaField::SetFormatListL(const TDesC8& aValue)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   341
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   342
	__ASSERT_ALWAYS(SdpUtil::IsTokenCharWithSpacesL(aValue), 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   343
										User::Leave(KErrSdpCodecMediaField));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   344
	HBufC8* tmp = aValue.AllocL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   345
	delete iFormatList;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   346
	iFormatList = tmp;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   347
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   348
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   349
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   350
// CSdpMediaField::CSdpMediaField
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   351
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   352
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   353
CSdpMediaField::CSdpMediaField()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   354
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   355
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   356
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   357
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   358
// CSdpMediaField::ConstructL
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   359
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   360
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   361
void CSdpMediaField::ConstructL()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   362
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   363
	iPool = SdpCodecStringPool::StringPoolL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   364
	iInfo = KNullDesC8().AllocL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   365
	iFormatList = KNullDesC8().AllocL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   366
	iToken = KNullDesC8().AllocL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   367
	iBandwidthFields = new(ELeave)RPointerArray<CSdpBandwidthField>;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   368
	iConnectionFields = new(ELeave)RPointerArray<CSdpConnectionField>;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   369
	iAttributeFields = new(ELeave)RPointerArray<CSdpAttributeField>;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   370
	iFmtAttrFields = new(ELeave)RPointerArray<CSdpFmtAttributeField>;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   371
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   372
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   373
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   374
// CSdpMediaField::ConstructL
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   375
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   376
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   377
void CSdpMediaField::ConstructL(TBool aRecurse)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   378
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   379
	ConstructL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   380
	iRecurse = aRecurse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   381
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   382
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   383
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   384
// CSdpMediaField::ConstructL
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   385
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   386
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   387
void 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   388
CSdpMediaField::ConstructL(RStringF aMedia, TUint aPort, RStringF aProtocol,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   389
						const TDesC8& aFormatList)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   390
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   391
	__ASSERT_ALWAYS(SdpUtil::IsTokenChar(aMedia.DesC()) &&
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   392
					(aPort== 0 || (aPort >= 1024 && aPort <= 65535)) &&
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   393
					SdpUtil::IsTokenCharWithOptionalSlash(aProtocol.DesC()) &&
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   394
					SdpUtil::IsTokenCharWithSpacesL(aFormatList), 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   395
					User::Leave(KErrArgument));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   396
	ConstructL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   397
	iMedia = aMedia.Copy();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   398
	iProtocol = aProtocol.Copy(); 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   399
	SetPortL(aPort);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   400
	delete iFormatList;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   401
	iFormatList = 0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   402
	iFormatList = aFormatList.AllocL();	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   403
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   404
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   405
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   406
// CSdpMediaField::ConstructL
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   407
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   408
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   409
void CSdpMediaField::ConstructL(const CSdpMediaField& aSdpMediaField)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   410
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   411
	iMedia = aSdpMediaField.Media().Copy();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   412
	iProtocol = aSdpMediaField.Protocol().Copy();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   413
    SetPortL(aSdpMediaField.Port());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   414
	iPortCount = aSdpMediaField.PortCount();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   415
	HBufC8* tmp = aSdpMediaField.FormatList().AllocL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   416
	delete iFormatList;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   417
	iFormatList = 0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   418
	iFormatList = tmp;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   419
	if(iRecurse)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   420
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   421
		tmp = aSdpMediaField.Info().AllocL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   422
		delete iInfo;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   423
		iInfo = tmp;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   424
		SdpCodecTemplate<CSdpConnectionField>::CloneArrayL(*iConnectionFields,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   425
			*aSdpMediaField.iConnectionFields);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   426
		SdpCodecTemplate<CSdpBandwidthField>::CloneArrayL(*iBandwidthFields,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   427
			*aSdpMediaField.iBandwidthFields);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   428
		if(aSdpMediaField.Key())
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   429
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   430
			iSdpKeyField = aSdpMediaField.Key()->CloneL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   431
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   432
		SdpCodecTemplate<CSdpAttributeField>::CloneArrayL(*iAttributeFields,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   433
			*aSdpMediaField.iAttributeFields);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   434
		SdpCodecTemplate<CSdpFmtAttributeField>::CloneArrayL(*iFmtAttrFields,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   435
			*aSdpMediaField.iFmtAttrFields);		
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   436
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   437
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   438
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   439
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   440
// CSdpMediaField::Info
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   441
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   442
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   443
EXPORT_C const TDesC8& CSdpMediaField::Info() const
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   444
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   445
	return *iInfo;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   446
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   447
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   448
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   449
// CSdpMediaField::SetInfoL
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   450
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   451
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   452
EXPORT_C void CSdpMediaField::SetInfoL(const TDesC8& aValue)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   453
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   454
	__ASSERT_ALWAYS (aValue.Compare(KNullDesC8) == 0||
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   455
					SdpUtil::IsByteString(aValue),
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   456
					User::Leave(KErrSdpCodecMediaInfoField));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   457
	HBufC8* tmp = aValue.AllocL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   458
	tmp->Des().Trim();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   459
	delete iInfo;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   460
	iInfo = tmp;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   461
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   462
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   463
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   464
// CSdpMediaField::Key
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   465
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   466
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   467
EXPORT_C CSdpKeyField* CSdpMediaField::Key()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   468
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   469
	return iSdpKeyField;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   470
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   471
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   472
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   473
// CSdpMediaField::Key
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   474
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   475
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   476
EXPORT_C const CSdpKeyField* CSdpMediaField::Key() const
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   477
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   478
	return iSdpKeyField;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   479
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   480
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   481
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   482
// CSdpMediaField::SetKey
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   483
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   484
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   485
EXPORT_C void CSdpMediaField::SetKey(CSdpKeyField* aObj)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   486
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   487
	delete iSdpKeyField;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   488
	iSdpKeyField = aObj;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   489
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   490
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   491
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   492
// CSdpMediaField::ConnectionFields
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   493
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   494
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   495
EXPORT_C RPointerArray<CSdpConnectionField>& CSdpMediaField::ConnectionFields()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   496
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   497
	return *iConnectionFields;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   498
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   499
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   500
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   501
// CSdpMediaField::BandwidthFields
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   502
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   503
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   504
EXPORT_C RPointerArray<CSdpBandwidthField>& CSdpMediaField::BandwidthFields()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   505
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   506
	return *iBandwidthFields;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   507
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   508
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   509
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   510
// CSdpMediaField::AttributeFields
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   511
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   512
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   513
EXPORT_C RPointerArray<CSdpAttributeField>& CSdpMediaField::AttributeFields()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   514
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   515
	return *iAttributeFields;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   516
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   517
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   518
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   519
// CSdpMediaField::FormatAttributeFields()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   520
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   521
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   522
EXPORT_C RPointerArray<CSdpFmtAttributeField>& 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   523
CSdpMediaField::FormatAttributeFields()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   524
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   525
	return *iFmtAttrFields;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   526
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   527
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   528
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   529
// CSdpMediaField::EncodeL
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   530
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   531
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   532
EXPORT_C void 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   533
CSdpMediaField::EncodeL(RWriteStream& aStream, TBool aRecurse) const
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   534
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   535
	RStringF headername = iPool.StringF( SdpCodecStringConstants::EMedia, 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   536
                                               SdpCodecStringConstants::Table );
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   537
    aStream.WriteL(headername.DesC());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   538
	aStream.WriteL(iMedia.DesC());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   539
	aStream.WriteL(KSPStr);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   540
	TBuf8<80> text;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   541
	text.Format(_L8("%u"), iPort);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   542
	aStream.WriteL(text);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   543
	if(iPortCount>0)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   544
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   545
		aStream.WriteL(_L8("/"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   546
		text.Format(_L8("%u"), iPortCount);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   547
	    aStream.WriteL(text);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   548
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   549
	aStream.WriteL(KSPStr);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   550
	aStream.WriteL(iProtocol.DesC());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   551
	aStream.WriteL(KSPStr);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   552
	aStream.WriteL(*iFormatList);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   553
	aStream.WriteL(KCRLFStr);	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   554
	if(aRecurse)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   555
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   556
		SdpUtil::EncodeBufferL(*iInfo, 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   557
						SdpCodecStringConstants::EInfo, aStream);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   558
		SdpCodecTemplate<CSdpConnectionField>::EncodeArrayL(*iConnectionFields,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   559
															aStream);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   560
		SdpCodecTemplate<CSdpBandwidthField>::EncodeArrayL(*iBandwidthFields,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   561
															aStream);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   562
		SdpCodecTemplate<CSdpKeyField>::EncodeL(Key(), aStream);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   563
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   564
		for (TInt i = 0;i < iAttributeFields->Count();i++)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   565
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   566
			if (!(((*iAttributeFields)[i])->IsFmtAttribute()))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   567
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   568
				((*iAttributeFields)[i])->EncodeL(aStream);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   569
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   570
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   571
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   572
		for (TInt i = 0;i < iFmtAttrFields->Count();i++)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   573
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   574
			((*iFmtAttrFields)[i])->EncodeL(aStream);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   575
			
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   576
			for (TInt j=0; j<iAttributeFields->Count(); j++)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   577
				{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   578
				if ((((*iAttributeFields)[j])->IsFmtAttribute()) &&
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   579
					((*iAttributeFields)[j])->BelongsTo(*(*iFmtAttrFields)[i]))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   580
					{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   581
					((*iAttributeFields)[j])->EncodeL(aStream);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   582
					}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   583
				}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   584
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   585
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   586
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   587
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   588
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   589
// CSdpMediaField::IsValid
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   590
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   591
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   592
EXPORT_C TBool CSdpMediaField::IsValid() const
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   593
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   594
	TBool result = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   595
	if(!(iMedia.DesC()==(KNullDesC8)) &&
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   596
		!(iProtocol.DesC()==(KNullDesC8))&&
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   597
		!(*iFormatList==(KNullDesC8)))
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   598
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   599
		result = ETrue;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   600
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   601
	return result;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   602
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   603
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   604
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   605
// CSdpMediaField::IsContactPresent
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   606
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   607
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   608
TBool CSdpMediaField::IsContactPresent() const
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   609
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   610
	TBool result = EFalse;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   611
	if(iConnectionFields->Count() > 0)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   612
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   613
		result = ETrue;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   614
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   615
	return result;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   616
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   617
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   618
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   619
// CSdpMediaField::ExternalizeL
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   620
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   621
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   622
void CSdpMediaField::ExternalizeL(RWriteStream& aStream) const
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   623
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   624
	aStream.WriteUint32L (iMedia.DesC().Length());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   625
	if (iMedia.DesC().Length() > 0)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   626
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   627
		aStream.WriteL (iMedia.DesC());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   628
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   629
	aStream.WriteUint32L (iPort);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   630
	if(iPortCount)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   631
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   632
		aStream.WriteUint8L (1);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   633
		aStream.WriteUint32L (iPortCount);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   634
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   635
	else
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   636
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   637
		aStream.WriteUint8L (0);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   638
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   639
	aStream.WriteUint32L (iProtocol.DesC().Length());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   640
	if (iProtocol.DesC().Length() > 0)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   641
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   642
		aStream.WriteL (iProtocol.DesC());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   643
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   644
	aStream.WriteUint32L (iFormatList->Length());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   645
	if (iFormatList->Length() > 0)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   646
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   647
		aStream.WriteL (*iFormatList);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   648
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   649
	aStream.WriteUint32L (iInfo->Length());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   650
	if (iInfo->Length() > 0)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   651
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   652
		aStream.WriteL (*iInfo);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   653
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   654
	SdpCodecTemplate<CSdpConnectionField>::ExternalizeArrayL(*iConnectionFields,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   655
															aStream);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   656
	SdpCodecTemplate<CSdpBandwidthField>::ExternalizeArrayL(*iBandwidthFields,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   657
															aStream);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   658
	SdpCodecTemplate<CSdpKeyField>::ExternalizeL(Key(), aStream);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   659
	SdpCodecTemplate<CSdpAttributeField>::ExternalizeArrayL(*iAttributeFields,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   660
															aStream);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   661
	SdpCodecTemplate<CSdpFmtAttributeField>::ExternalizeArrayL(*iFmtAttrFields,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   662
																aStream);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   663
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   664
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   665
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   666
// CSdpMediaField::InternalizeL
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   667
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   668
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   669
CSdpMediaField* CSdpMediaField::InternalizeL(RReadStream& aStream)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   670
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   671
	CSdpMediaField* obj = new(ELeave)CSdpMediaField();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   672
	CleanupStack::PushL(obj);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   673
	obj->ConstructL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   674
	obj->DoInternalizeL (aStream);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   675
	CleanupStack::Pop();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   676
	return obj;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   677
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   678
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   679
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   680
// CSdpMediaField::DoInternalizeL
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   681
// ----------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   682
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   683
void CSdpMediaField::DoInternalizeL(RReadStream& aStream)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   684
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   685
	RStringF media = iPool.OpenFStringL(GetTokenFromStreamL(aStream));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   686
	CleanupClosePushL(media);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   687
	SetMediaL(media);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   688
	CleanupStack::Pop();//media
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   689
	media.Close();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   690
    TUint32 port = aStream.ReadUint32L();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   691
	//SetPortL(aStream.ReadUint32L());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   692
	TUint flag = aStream.ReadUint8L();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   693
	if(flag)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   694
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   695
		SetPortCountL(aStream.ReadUint32L());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   696
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   697
	RStringF protocol =iPool.OpenFStringL(GetTokenFromStreamL(aStream));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   698
	CleanupClosePushL(protocol);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   699
	SetProtocolL(protocol);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   700
	CleanupStack::Pop();//protocol
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   701
	protocol.Close();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   702
    SetPortL(port);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   703
	SetFormatListL(GetTokenFromStreamL(aStream));	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   704
	SetInfoL(GetTokenFromStreamL(aStream));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   705
	SdpCodecTemplate<CSdpConnectionField>::InternalizeArrayL(*iConnectionFields,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   706
															aStream);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   707
	SdpCodecTemplate<CSdpBandwidthField>::InternalizeArrayL(*iBandwidthFields,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   708
															aStream);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   709
	if(aStream.ReadUint8L())
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   710
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   711
		SetKey(CSdpKeyField::InternalizeL(aStream));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   712
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   713
	SdpCodecTemplate<CSdpAttributeField>::InternalizeArrayL(*iAttributeFields,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   714
													aStream);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   715
	SdpCodecTemplate<CSdpFmtAttributeField>::InternalizeArrayL(*iFmtAttrFields,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   716
													aStream);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   717
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   718
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   719
// ---------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   720
// CSdpMediaField::ParseL
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   721
// ---------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   722
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   723
void CSdpMediaField::ParseL (const TDesC8& aText)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   724
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   725
	iElementArray.Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   726
	iSdpCodecParseUtil = 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   727
			CSdpCodecParseUtil::NewL(iPool,aText, KErrSdpCodecMediaField);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   728
	ParseMediaL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   729
	if(iRecurse)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   730
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   731
		ParseAttributeFieldsL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   732
		ParseInformationL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   733
		ParseConnectionL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   734
		ParseBandwithL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   735
		ParseEncryptionKeyL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   736
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   737
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   738
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   739
// ---------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   740
// CSdpMediaField::ParseMediaL
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   741
// ---------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   742
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   743
void CSdpMediaField::ParseMediaL()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   744
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   745
	iElementArray = iSdpCodecParseUtil->FirstLineArrayElementL(iPool,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   746
												SdpCodecStringConstants::EMedia,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   747
												KErrSdpCodecMediaField);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   748
	__ASSERT_ALWAYS (iElementArray.Count() >= 4,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   749
					User::Leave(KErrSdpCodecMediaField));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   750
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   751
	RStringF media = iPool.OpenFStringL(iElementArray[1]);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   752
	CleanupClosePushL(media);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   753
	SetMediaL(media);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   754
	CleanupStack::Pop();//media
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   755
	media.Close();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   756
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   757
	iProtocol = iPool.OpenFStringL(iElementArray[3]);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   758
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   759
    TInt lineEndPosition = iElementArray[2].Locate('/');
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   760
	TUint port;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   761
	if(lineEndPosition == KErrNotFound)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   762
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   763
		User::LeaveIfError(
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   764
		TLex8(iElementArray[2]).Val(port, EDecimal));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   765
		SetPortL(port);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   766
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   767
	else
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   768
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   769
		User::LeaveIfError(TLex8(
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   770
				(iElementArray[2]).Left(lineEndPosition)).Val(port, EDecimal));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   771
		SetPortL(port);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   772
		User::LeaveIfError(TLex8(
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   773
			  (iElementArray[2]).Mid(lineEndPosition +1)).Val(port, EDecimal));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   774
		SetPortCountL(port);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   775
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   776
	__ASSERT_ALWAYS(SdpUtil::IsTokenCharWithOptionalSlash(iElementArray[3]),
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   777
					User::Leave(KErrArgument));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   778
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   779
    //iProtocol = iPool.OpenFStringL(iElementArray[3]);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   780
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   781
	TInt length = 0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   782
	TInt i;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   783
	for(i=4;i<iElementArray.Count();i++)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   784
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   785
		length += iElementArray[i].Length();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   786
		if(i + 1 <iElementArray.Count())
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   787
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   788
			length += KSPStr().Length();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   789
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   790
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   791
	HBufC8* value = HBufC8::NewLC(length);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   792
	TPtr8 ptr(value->Des());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   793
	for(i=4;i<iElementArray.Count();i++)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   794
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   795
		ptr.Append(iElementArray[i]);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   796
		if(i + 1 <iElementArray.Count())
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   797
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   798
			ptr.Append(KSPStr);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   799
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   800
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   801
	SetFormatListL(*value);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   802
	CleanupStack::Pop();//value
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   803
	delete value;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   804
	iElementArray.Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   805
	if (iSdpCodecParseUtil->LineArray().Count() > 0)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   806
	    {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   807
	    iSdpCodecParseUtil->LineArray().Remove(0);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   808
	    }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   809
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   810
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   811
// ---------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   812
// CSdpMediaField::ParseInformationL
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   813
// ---------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   814
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   815
void CSdpMediaField::ParseInformationL()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   816
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   817
	SetInfoL(iSdpCodecParseUtil->ParseInformationL(KErrSdpCodecMediaInfoField));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   818
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   819
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   820
// ---------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   821
// CSdpMediaField::ParseConnectionL
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   822
// ---------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   823
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   824
void CSdpMediaField::ParseConnectionL()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   825
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   826
	delete iConnectionFields;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   827
	iConnectionFields = 0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   828
	iConnectionFields = iSdpCodecParseUtil->ParseConnectionFieldsL(
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   829
										KErrSdpCodecMediaConnectionField);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   830
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   831
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   832
// ---------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   833
// CSdpMediaField::ParseBandwithL
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   834
// ---------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   835
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   836
void CSdpMediaField::ParseBandwithL()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   837
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   838
	delete iBandwidthFields;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   839
	iBandwidthFields = 0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   840
	iBandwidthFields = 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   841
		iSdpCodecParseUtil->ParseBandwidthL(KErrSdpCodecMediaBandwidthField);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   842
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   843
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   844
// ---------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   845
// CSdpMediaField::ParseEncryptionKeyL
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   846
// ---------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   847
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   848
void CSdpMediaField::ParseEncryptionKeyL()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   849
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   850
	SetKey(iSdpCodecParseUtil->ParseEncryptionKeyL(KErrSdpCodecMediaKeyField));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   851
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   852
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   853
// ---------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   854
// CSdpMediaField::ParseAttributeFieldsL
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   855
// ---------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   856
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   857
void CSdpMediaField::ParseAttributeFieldsL()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   858
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   859
	CSdpFmtAttributeField* fmtattributefield = 0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   860
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   861
    RArray<TPtrC8>& lineArray = iSdpCodecParseUtil->LineArray();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   862
	for (TInt i=0; i<lineArray.Count(); i++)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   863
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   864
		iElementArray = CSdpCodecParseUtil::CheckOptionalFieldNameL(iPool,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   865
								SdpCodecStringConstants::EAttribute,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   866
								lineArray[i],
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   867
								KErrSdpCodecMediaAttributeField);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   868
		if (iElementArray.Count())
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   869
			{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   870
			CSdpAttributeField* attributefield = 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   871
	            CSdpAttributeField::DecodeLC(lineArray[i]);		
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   872
		    
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   873
            if ( attributefield->Attribute() == 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   874
                 iPool.StringF( SdpCodecStringConstants::EAttributeRtpmap,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   875
                                SdpCodecStringConstants::Table ) ||
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   876
                 attributefield->Attribute() ==
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   877
                 iPool.StringF( SdpCodecStringConstants::EAttributeFmtp,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   878
                                SdpCodecStringConstants::Table ) )
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   879
                {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   880
                CleanupStack::PopAndDestroy(attributefield);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   881
                fmtattributefield = 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   882
                    CSdpFmtAttributeField::DecodeLC(lineArray[i]);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   883
				iFmtAttrFields->AppendL(fmtattributefield);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   884
				CleanupStack::Pop(fmtattributefield);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   885
                }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   886
            else
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   887
                {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   888
                iAttributeFields->AppendL(attributefield);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   889
			    CleanupStack::Pop(attributefield);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   890
			    if (fmtattributefield)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   891
			    	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   892
			    	attributefield->AssignTo(*fmtattributefield);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   893
			    	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   894
                }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   895
                   
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   896
			iElementArray.Reset();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   897
			lineArray.Remove(i);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   898
			if (i < lineArray.Count())
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   899
			    {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   900
			    i--;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   901
			    }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   902
			}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   903
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   904
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   905
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   906
// ---------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   907
// CSdpMediaField::GetTokenFromStreamL
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   908
// ---------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   909
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   910
TDesC8& CSdpMediaField::GetTokenFromStreamL(RReadStream& aStream)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   911
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   912
	TUint32 tokenLength = aStream.ReadUint32L();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   913
	HBufC8* tmp = 0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   914
	if (tokenLength > 0)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   915
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   916
		tmp = HBufC8::NewLC(tokenLength);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   917
		TPtr8 tokenptr(tmp->Des());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   918
		aStream.ReadL (tokenptr, tokenLength);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   919
		CleanupStack::Pop();//tmp
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   920
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   921
	else
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   922
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   923
		tmp = KNullDesC8().AllocL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   924
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   925
	delete iToken;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   926
	iToken = tmp;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   927
	return *iToken;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   928
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   929
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   930
// ---------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   931
// CSdpMediaField::RemoveFormatL
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   932
// ---------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   933
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   934
EXPORT_C void CSdpMediaField::RemoveFormatL(const TDesC8& aFormat)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   935
    {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   936
    if ( !iFormatList || iFormatList->Des().Length() == 0 )
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   937
        {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   938
        User::Leave( KErrSdpCodecMediaField );
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   939
        }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   940
    TLex8 lexer( *iFormatList );
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   941
    TBool tokenRemoved( EFalse );
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   942
    while ( !tokenRemoved && !lexer.Eos() )
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   943
        {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   944
        lexer.SkipSpaceAndMark();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   945
        lexer.SkipCharacters();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   946
        if ( lexer.TokenLength() > 0 )
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   947
            {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   948
             if ( aFormat.CompareF(lexer.MarkedToken()) == 0)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   949
                {                    
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   950
                RArray<TInt> removedObjs;           
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   951
                CleanupClosePushL( removedObjs );
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   952
                for ( TInt i( 0 ); i < iFmtAttrFields->Count(); i++ )
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   953
                    {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   954
					if (aFormat.CompareF((*iFmtAttrFields)[i]->Format()) == 0)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   955
                        {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   956
                        User::LeaveIfError( removedObjs.Append(i) );                        
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   957
                        }                        
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   958
                    }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   959
                // Remove all format attributes of type format
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   960
                TInt removedCount( 0 );
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   961
                while ( removedObjs.Count() > 0 )
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   962
                    {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   963
                    CSdpFmtAttributeField* obj = 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   964
                        (*iFmtAttrFields)[removedObjs[0] - removedCount];
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   965
                    delete obj;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   966
					obj = 0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   967
                    iFmtAttrFields->Remove( removedObjs[0] - removedCount);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   968
                    removedObjs.Remove(0);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   969
                    removedCount++;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   970
                    }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   971
                CleanupStack::PopAndDestroy();  // removedObjs
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   972
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   973
                // Remove format from format list
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   974
                iFormatList->Des().Delete( lexer.MarkedOffset(), 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   975
                                        lexer.Offset() - lexer.MarkedOffset());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   976
                iFormatList->Des().TrimAll();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   977
                tokenRemoved = ETrue;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   978
                }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   979
            }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   980
        }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   981
    }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   982
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   983
// ---------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   984
// CSdpMediaField::KeepFormatL
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   985
// ---------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   986
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   987
EXPORT_C void CSdpMediaField::KeepFormatL(const TDesC8& aFormat)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   988
    {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   989
    if ( !iFormatList )
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   990
        {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   991
        User::Leave( KErrSdpCodecMediaField );
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   992
        }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   993
    // Empty set will continue to be empty
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   994
    if ( iFormatList->Des().Length() > 0 )
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   995
        {                
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   996
        HBufC8* formatList = aFormat.AllocLC();       
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   997
        // Mark all format attributes not aFormat so that they will be deleted
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   998
        RArray<TInt> removedObjs;  
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   999
        CleanupClosePushL( removedObjs );         
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1000
        for ( TInt i( 0 ); i < iFmtAttrFields->Count(); i++ )
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1001
            {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1002
			if (aFormat.CompareF((*iFmtAttrFields)[i]->Format()) != 0)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1003
                {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1004
                User::LeaveIfError( removedObjs.Append( i ) );                        
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1005
                }                                 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1006
            }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1007
        // Delete attribute fields
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1008
        TInt removedCount( 0 );
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1009
        while ( removedObjs.Count() > 0 )
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1010
            {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1011
            CSdpFmtAttributeField* obj = 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1012
                (*iFmtAttrFields)[removedObjs[0] - removedCount];
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1013
            delete obj;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1014
            iFmtAttrFields->Remove( removedObjs[0] - removedCount );
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1015
            removedObjs.Remove( 0 );
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1016
            removedCount++;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1017
            }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1018
        CleanupStack::PopAndDestroy();  // removedObjs
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1019
        // Change format list
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1020
        delete iFormatList;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1021
        iFormatList = formatList;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1022
        CleanupStack::Pop();    // formatList
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1023
        }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1024
    }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1025
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1026
// ---------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1027
// CSdpMediaField::RejectMedia
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1028
// ---------------------------------------------------------------------------
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1029
//
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1030
EXPORT_C void CSdpMediaField::RejectMedia()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1031
    {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1032
    iPort = 0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1033
    iPortCount = 0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1034
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1035
    TLex8 lexer( *iFormatList );
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1036
    lexer.SkipSpaceAndMark();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1037
    lexer.SkipCharacters();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1038
    if ( lexer.TokenLength() > 0 )
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1039
        {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1040
        TRAPD(err, KeepFormatL( lexer.MarkedToken() ));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1041
        err++; // Nothing to do, if error happens. Silence compiler warning.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1042
        }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1043
    }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
  1044