telephonyprotocols/qosextnapi/src/umtsextn.cpp
changeset 0 3553901f7fa8
child 24 6638e7f4bd8f
child 42 3adadc800673
equal deleted inserted replaced
-1:000000000000 0:3553901f7fa8
       
     1 // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // umtsapi.h - UMTS QoS API
       
    15 //
       
    16 
       
    17 #include "umtsextn.h"
       
    18 #include "qosextn_constants.h"
       
    19 #include "qosextn_log.h"
       
    20 #include <networking/pfqos.h>
       
    21 //
       
    22 // TUmtsQoSParameters
       
    23 //
       
    24 //lint -e{1927} would like initializing in initializer list instead of in body.
       
    25 EXPORT_C TUmtsQoSParameters::TUmtsQoSParameters()
       
    26 	{
       
    27 	iTrafficClass = ETrafficClassUnspecified;
       
    28 	iDeliveryOrder = EDeliveryOrderUnspecified;
       
    29 	iDeliveryOfErroneusSdu = EErroneousSDUDeliveryUnspecified;
       
    30 	iResidualBer = EBERUnspecified;
       
    31 	iErrorRatio = ESDUErrorRatioUnspecified;
       
    32 	iPriority = ETrafficPriorityUnspecified;
       
    33 	iTransferDelay = KTransferDelayUnspecified;
       
    34 	iMaxSduSize = KMaxSDUUnspecified;
       
    35 	iMaxBitrateUplink = KMaxBitRateUnspecified;
       
    36 	iMaxBitrateDownlink = KMaxBitRateUnspecified;
       
    37 	iGuaBitrateUplink = KGrtdBitRateUnspecified;
       
    38 	iGuaBitrateDownlink = KGrtdBitRateUnspecified;
       
    39 	}
       
    40 
       
    41 EXPORT_C TUmtsTrafficClass TUmtsQoSParameters::TrafficClass() const
       
    42 	{
       
    43 	return iTrafficClass;
       
    44 	}
       
    45 
       
    46 
       
    47 EXPORT_C TUmtsDeliveryOrder TUmtsQoSParameters::DeliveryOrder() const
       
    48 	{
       
    49 	return iDeliveryOrder;
       
    50 	}
       
    51 
       
    52 EXPORT_C TUmtsErroneousSDUDelivery TUmtsQoSParameters::DeliveryOfErroneusSdu() const
       
    53 	{
       
    54 	return iDeliveryOfErroneusSdu;
       
    55 	}
       
    56 
       
    57 EXPORT_C TUmtsBitErrorRatio TUmtsQoSParameters::ResidualBer() const
       
    58 	{
       
    59 	return iResidualBer;
       
    60 	}
       
    61 
       
    62 EXPORT_C TUmtsSDUErrorRatio TUmtsQoSParameters::ErrorRatio() const
       
    63 	{
       
    64 	return iErrorRatio;
       
    65 	}
       
    66 
       
    67 EXPORT_C TUmtsTrafficHandlingPriority TUmtsQoSParameters::Priority() const
       
    68 	{
       
    69 	return iPriority;
       
    70 	}
       
    71 
       
    72 EXPORT_C TInt TUmtsQoSParameters::TransferDelay() const
       
    73 	{
       
    74 	return iTransferDelay;
       
    75 	}
       
    76 
       
    77 EXPORT_C TInt TUmtsQoSParameters::MaxSduSize() const
       
    78 	{
       
    79 	return iMaxSduSize;
       
    80 	}
       
    81 
       
    82 EXPORT_C TInt TUmtsQoSParameters::MaxBitrateUplink() const
       
    83 	{
       
    84 	return iMaxBitrateUplink;
       
    85 	}
       
    86 
       
    87 EXPORT_C TInt TUmtsQoSParameters::MaxBitrateDownlink() const
       
    88 	{
       
    89 	return iMaxBitrateDownlink;
       
    90 	}
       
    91 
       
    92 EXPORT_C TInt TUmtsQoSParameters::GuaranteedBitrateUplink() const
       
    93 	{
       
    94 	return iGuaBitrateUplink;
       
    95 	}
       
    96 
       
    97 EXPORT_C TInt TUmtsQoSParameters::GuaranteedBitrateDownlink() const
       
    98 	{
       
    99 	return iGuaBitrateDownlink;
       
   100 	}
       
   101 
       
   102 
       
   103 EXPORT_C TInt TUmtsQoSParameters::SetTrafficClass(TUmtsTrafficClass aTrafficClass)
       
   104 	{
       
   105 	iTrafficClass = aTrafficClass;
       
   106 	return KErrNone;
       
   107 	}
       
   108 
       
   109 EXPORT_C TInt TUmtsQoSParameters::SetDeliveryOrder(TUmtsDeliveryOrder aDeliveryOrder)
       
   110 	{
       
   111 	iDeliveryOrder = aDeliveryOrder;
       
   112 	return KErrNone;
       
   113 	}
       
   114 
       
   115 EXPORT_C TInt TUmtsQoSParameters::SetDeliveryOfErroneusSdu(TUmtsErroneousSDUDelivery aDeliveryOfErroneusSdu)
       
   116 	{
       
   117 	iDeliveryOfErroneusSdu = aDeliveryOfErroneusSdu;
       
   118 	return KErrNone;
       
   119 	}
       
   120 
       
   121 EXPORT_C TInt TUmtsQoSParameters::SetResidualBer(TUmtsBitErrorRatio aResidualBer)
       
   122 	{
       
   123 	iResidualBer = aResidualBer;
       
   124 	return KErrNone;
       
   125 	}
       
   126 
       
   127 EXPORT_C TInt TUmtsQoSParameters::SetErrorRatio(TUmtsSDUErrorRatio aErrorRatio)
       
   128 	{
       
   129 	iErrorRatio = aErrorRatio;
       
   130 	return KErrNone;
       
   131 	}
       
   132 
       
   133 EXPORT_C TInt TUmtsQoSParameters::SetPriority(TUmtsTrafficHandlingPriority aPriority)
       
   134 	{
       
   135 	iPriority = aPriority;
       
   136 	return KErrNone;
       
   137 	}
       
   138 
       
   139 EXPORT_C TInt TUmtsQoSParameters::SetTransferDelay(TUint aTransferDelay)
       
   140 	{
       
   141 	if (aTransferDelay > KTransferDelayMax)
       
   142 		return KErrArgument;
       
   143 	iTransferDelay = aTransferDelay;
       
   144 	return KErrNone;
       
   145 	}
       
   146 
       
   147 EXPORT_C TInt TUmtsQoSParameters::SetMaxSduSize(TUint aMaxSduSize)
       
   148 	{
       
   149 	if (aMaxSduSize > KMaxSDUMaximum)
       
   150 		return KErrArgument;
       
   151 	iMaxSduSize = aMaxSduSize;
       
   152 	return KErrNone;
       
   153 	}
       
   154 
       
   155 EXPORT_C TInt TUmtsQoSParameters::SetMaxBitrateUplink(TUint aMaxBitrateUplink)
       
   156 	{
       
   157 	if (aMaxBitrateUplink > KMaxBitRateMaximum)
       
   158 		return KErrArgument;
       
   159 	iMaxBitrateUplink = aMaxBitrateUplink;
       
   160 	return KErrNone;
       
   161 	}
       
   162 
       
   163 EXPORT_C TInt TUmtsQoSParameters::SetMaxBitrateDownlink(TUint aMaxBitrateDownlink)
       
   164 	{
       
   165 	if (aMaxBitrateDownlink > KMaxBitRateMaximum)
       
   166 		return KErrArgument;
       
   167 	iMaxBitrateDownlink = aMaxBitrateDownlink;
       
   168 	return KErrNone;
       
   169 	}
       
   170 
       
   171 EXPORT_C TInt TUmtsQoSParameters::SetGuaranteedBitrateUplink(TUint aGuaBitrateUplink)
       
   172 	{
       
   173 	if (aGuaBitrateUplink > KGrtdBitRateMaximum)
       
   174 		return KErrArgument;
       
   175 	iGuaBitrateUplink = aGuaBitrateUplink;
       
   176 	return KErrNone;
       
   177 	}
       
   178 
       
   179 EXPORT_C TInt TUmtsQoSParameters::SetGuaranteedBitrateDownlink(TUint aGuaBitrateDownlink)
       
   180 	{
       
   181 	if (aGuaBitrateDownlink > KGrtdBitRateMaximum)
       
   182 		return KErrArgument;
       
   183 	iGuaBitrateDownlink = aGuaBitrateDownlink;
       
   184 	return KErrNone;
       
   185 	}
       
   186 
       
   187 
       
   188 //
       
   189 // TNegotiatedUmtsQoSParameters
       
   190 //
       
   191 EXPORT_C TNegotiatedUmtsQoSParameters::TNegotiatedUmtsQoSParameters() : iCompression(0), iErrorCode(KErrNone)
       
   192 	{
       
   193 	}
       
   194 
       
   195 EXPORT_C TUint TNegotiatedUmtsQoSParameters::HeaderCompression() const
       
   196 	{
       
   197 	return iCompression;
       
   198 	}
       
   199 
       
   200 EXPORT_C TInt TNegotiatedUmtsQoSParameters::ErrorCode() const
       
   201 	{
       
   202 	return iErrorCode;
       
   203 	}
       
   204 
       
   205 // Buffer size
       
   206 const TUint KUmtsApiBufSize = 8192;
       
   207 
       
   208 //
       
   209 // TUmtsQoSPolicy
       
   210 //
       
   211 EXPORT_C CUmtsQoSPolicy* CUmtsQoSPolicy::NewL()
       
   212 	{
       
   213 	CUmtsQoSPolicy* policy = new (ELeave) CUmtsQoSPolicy();
       
   214 	CleanupStack::PushL(policy);
       
   215 	policy->ConstructL();
       
   216 	CleanupStack::Pop();
       
   217 	return policy;
       
   218 	}
       
   219 
       
   220 CUmtsQoSPolicy::CUmtsQoSPolicy() : iBufPtr(0,0)
       
   221 	{
       
   222 	iType = KPfqosExtensionUmts;
       
   223 	}
       
   224 
       
   225 void CUmtsQoSPolicy::ConstructL()
       
   226 	{
       
   227 	iData = HBufC8::NewL(KUmtsApiBufSize);
       
   228 	TPtr8 tmp(iData->Des());
       
   229 	iBufPtr.Set(tmp);
       
   230 	}
       
   231 
       
   232 EXPORT_C CUmtsQoSPolicy::~CUmtsQoSPolicy()
       
   233 	{
       
   234 	delete iData;
       
   235 	iData = 0;
       
   236 	}
       
   237 
       
   238 static void SetIntValue(pfqos_configblock_int& data, TInt aValue, const TDesC8& aName)
       
   239 	{
       
   240 	data.len = sizeof(pfqos_configblock_int)/8;
       
   241 	data.padding = data.reserved = 0;
       
   242 	data.type = KPfqosTypeInteger;
       
   243 	data.value = aValue;
       
   244 	Mem::FillZ(data.id, KPfqosMaxName);
       
   245 	Mem::Copy(data.id, aName.Ptr(), aName.Length());
       
   246 	}
       
   247 
       
   248 EXPORT_C TDesC8& CUmtsQoSPolicy::Data()
       
   249 	{
       
   250 	iBufPtr.SetLength(0);
       
   251 	const int byte_len = (sizeof(pfqos_configure)+sizeof(pfqos_extension)+sizeof(pfqos_configblock_int)*37);
       
   252 
       
   253 	pfqos_configure iHeader;
       
   254 	iHeader.pfqos_configure_len = (TUint16)((byte_len + 7) / 8);
       
   255 	iHeader.pfqos_ext_type = EPfqosExtExtension;
       
   256 	iHeader.reserved = 0;
       
   257 	iHeader.protocol_id = 0;
       
   258 	iBufPtr.Append((TUint8*)&iHeader, sizeof(pfqos_configure));
       
   259 
       
   260 	pfqos_extension aExtensionType;
       
   261 	aExtensionType.pfqos_ext_len = 0;
       
   262 	aExtensionType.pfqos_ext_type = EPfqosExtExtension;
       
   263 	aExtensionType.pfqos_extension_type = KPfqosExtensionUmts;
       
   264 	iBufPtr.Append((TUint8*)&aExtensionType, sizeof(pfqos_extension));
       
   265 
       
   266 	pfqos_configblock_int iExt;
       
   267 
       
   268 	// Minimum
       
   269 	SetIntValue(iExt, iMinimum.iTrafficClass, KDescTrafficClassMinimum);
       
   270 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   271 
       
   272 	SetIntValue(iExt, iMinimum.iDeliveryOrder, KDescDeliveryOrderMinimum);
       
   273 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   274 
       
   275 	SetIntValue(iExt, iMinimum.iDeliveryOfErroneusSdu, KDescDeliveryOfErroneusSduMinimum);
       
   276 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   277 
       
   278 	SetIntValue(iExt, iMinimum.iResidualBer, KDescResidualBerMinimum);
       
   279 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   280 
       
   281 	SetIntValue(iExt, iMinimum.iErrorRatio, KDescErrorRatioMinimum);
       
   282 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   283 
       
   284 	SetIntValue(iExt, iMinimum.iPriority, KDescPriorityMinimum);
       
   285 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   286 
       
   287 	SetIntValue(iExt, iMinimum.iTransferDelay, KDescTransferDelayMinimum);
       
   288 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   289 
       
   290 	SetIntValue(iExt, iMinimum.iMaxSduSize, KDescMaxSduSizeMinimum);
       
   291 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   292 
       
   293 	SetIntValue(iExt, iMinimum.iMaxBitrateUplink, KDescMaxBitrateUplinkMinimum);
       
   294 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   295 
       
   296 	SetIntValue(iExt, iMinimum.iMaxBitrateDownlink, KDescMaxBitrateDownlinkMinimum);
       
   297 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   298 
       
   299 	SetIntValue(iExt, iMinimum.iGuaBitrateUplink, KDescGuaBitrateUplinkMinimum);
       
   300 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   301 
       
   302 	SetIntValue(iExt, iMinimum.iGuaBitrateDownlink, KDescGuaBitrateDownlinkMinimum);
       
   303 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   304 
       
   305 	// Requested
       
   306 	SetIntValue(iExt, iRequested.iTrafficClass, KDescTrafficClassRequested);
       
   307 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   308 
       
   309 	SetIntValue(iExt, iRequested.iDeliveryOrder, KDescDeliveryOrderRequested);
       
   310 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   311 
       
   312 	SetIntValue(iExt, iRequested.iDeliveryOfErroneusSdu, KDescDeliveryOfErroneusSduRequested);
       
   313 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   314 
       
   315 	SetIntValue(iExt, iRequested.iResidualBer, KDescResidualBerRequested);
       
   316 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   317 
       
   318 	SetIntValue(iExt, iRequested.iErrorRatio, KDescErrorRatioRequested);
       
   319 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   320 
       
   321 	SetIntValue(iExt, iRequested.iPriority, KDescPriorityRequested);
       
   322 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   323 
       
   324 	SetIntValue(iExt, iRequested.iTransferDelay, KDescTransferDelayRequested);
       
   325 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   326 
       
   327 	SetIntValue(iExt, iRequested.iMaxSduSize, KDescMaxSduSizeRequested);
       
   328 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   329 
       
   330 	SetIntValue(iExt, iRequested.iMaxBitrateUplink, KDescMaxBitrateUplinkRequested);
       
   331 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   332 
       
   333 	SetIntValue(iExt, iRequested.iMaxBitrateDownlink, KDescMaxBitrateDownlinkRequested);
       
   334 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   335 
       
   336 	SetIntValue(iExt, iRequested.iGuaBitrateUplink, KDescGuaBitrateUplinkRequested);
       
   337 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   338 
       
   339 	SetIntValue(iExt, iRequested.iGuaBitrateDownlink, KDescGuaBitrateDownlinkRequested);
       
   340 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   341 
       
   342 	// Negotiated
       
   343 	SetIntValue(iExt, iNegotiated.iTrafficClass, KDescTrafficClassNegotiated);
       
   344 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   345 
       
   346 	SetIntValue(iExt, iNegotiated.iDeliveryOrder, KDescDeliveryOrderNegotiated);
       
   347 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   348 
       
   349 	SetIntValue(iExt, iNegotiated.iDeliveryOfErroneusSdu, KDescDeliveryOfErroneusSduNegotiated);
       
   350 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   351 
       
   352 	SetIntValue(iExt, iNegotiated.iResidualBer, KDescResidualBerNegotiated);
       
   353 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   354 
       
   355 	SetIntValue(iExt, iNegotiated.iErrorRatio, KDescErrorRatioNegotiated);
       
   356 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   357 
       
   358 	SetIntValue(iExt, iNegotiated.iPriority, KDescPriorityNegotiated);
       
   359 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   360 
       
   361 	SetIntValue(iExt, iNegotiated.iTransferDelay, KDescTransferDelayNegotiated);
       
   362 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   363 
       
   364 	SetIntValue(iExt, iNegotiated.iMaxSduSize, KDescMaxSduSizeNegotiated);
       
   365 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   366 
       
   367 	SetIntValue(iExt, iNegotiated.iMaxBitrateUplink, KDescMaxBitrateUplinkNegotiated);
       
   368 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   369 
       
   370 	SetIntValue(iExt, iNegotiated.iMaxBitrateDownlink, KDescMaxBitrateDownlinkNegotiated);
       
   371 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   372 
       
   373 	SetIntValue(iExt, iNegotiated.iGuaBitrateUplink, KDescGuaBitrateUplinkNegotiated);
       
   374 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   375 
       
   376 	SetIntValue(iExt, iNegotiated.iGuaBitrateDownlink, KDescGuaBitrateDownlinkNegotiated);
       
   377 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   378 
       
   379 
       
   380 	SetIntValue(iExt, iCompression, KDescHeaderCompression);
       
   381 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   382 
       
   383 	iBufPtr.AppendFill(0, iHeader.pfqos_configure_len * 8 - byte_len);
       
   384 	return iBufPtr;
       
   385 	}
       
   386 
       
   387 EXPORT_C TInt CUmtsQoSPolicy::ParseMessage(const TDesC8& aData)
       
   388 	{
       
   389 	const TUint8 *p = aData.Ptr();
       
   390 	TInt length = aData.Length();
       
   391 	//lint --e{826} Not a suspicious conversion, as lint thinks (shut off all of them for this function)
       
   392 	struct pfqos_configure *ext = (struct pfqos_configure *) p;
       
   393 
       
   394 	if (length < (TInt)sizeof(pfqos_configure))
       
   395 		return KErrGeneral;		// EMSGSIZE (impossible message size)
       
   396 
       
   397 	if (ext->pfqos_configure_len * 8 != length)
       
   398 		return KErrGeneral;		// EMSGSIZE (incorrect message length)
       
   399 
       
   400 	if (ext->pfqos_ext_type == EPfqosExtExtension)
       
   401 		{
       
   402 		p += sizeof(struct pfqos_configure);
       
   403 		pfqos_extension *aExtensionType = (pfqos_extension *) p;
       
   404 
       
   405 		if (aExtensionType->pfqos_extension_type != KPfqosExtensionUmts)
       
   406 			return KErrGeneral;
       
   407 	
       
   408 		while (length > 0)
       
   409 			{
       
   410 			struct pfqos_configblock *block = (struct pfqos_configblock *)(p + sizeof(pfqos_extension));
       
   411 			int block_len = block->len;
       
   412 
       
   413 			if (block_len < 1)
       
   414 				break;
       
   415 			block_len *= 8;
       
   416 
       
   417 			if (block_len > length)
       
   418 				break;
       
   419 
       
   420 			if (block->type == KPfqosTypeInteger)
       
   421 				{
       
   422 				TPtrC8 tmp((TUint8 *)&block->id[0]);
       
   423 				struct pfqos_configblock_int *block_int = (struct pfqos_configblock_int*) block;
       
   424 
       
   425 				// Negotiated set
       
   426 				//lint -e{961} would like terminating 'else' here...
       
   427 				if (tmp.Compare(_L8("DeliveryOfErroneusSduNegotiated"))==0)
       
   428 					{
       
   429 					iNegotiated.iDeliveryOfErroneusSdu = (TUmtsErroneousSDUDelivery)block_int->value;
       
   430 					}
       
   431 				else if (tmp.Compare(_L8("DeliveryOrderNegotiated"))==0)
       
   432 					{
       
   433 					iNegotiated.iDeliveryOrder = (TUmtsDeliveryOrder)block_int->value;
       
   434 					}
       
   435 				else if (tmp.Compare(_L8("ErrorRatioNegotiated"))==0)
       
   436 					{
       
   437 					iNegotiated.iErrorRatio = (TUmtsSDUErrorRatio)block_int->value;
       
   438 					}
       
   439 				else if (tmp.Compare(_L8("GuaBitrateDownlinkNegotiated"))==0)
       
   440 					{
       
   441 					iNegotiated.iGuaBitrateDownlink = block_int->value;
       
   442 					}
       
   443 				else if (tmp.Compare(_L8("GuaBitrateUplinkNegotiated"))==0)
       
   444 					{
       
   445 					iNegotiated.iGuaBitrateUplink = block_int->value;
       
   446 					}
       
   447 				else if (tmp.Compare(_L8("MaxBitrateDownlinkNegotiated"))==0)
       
   448 					{
       
   449 					iNegotiated.iMaxBitrateDownlink = block_int->value;
       
   450 					}
       
   451 				else if (tmp.Compare(_L8("MaxBitrateUplinkNegotiated"))==0)
       
   452 					{
       
   453 					iNegotiated.iMaxBitrateUplink = block_int->value;
       
   454 					}
       
   455 				else if (tmp.Compare(_L8("MaxSduSizeNegotiated"))==0)
       
   456 					{
       
   457 					iNegotiated.iMaxSduSize = block_int->value;
       
   458 					}
       
   459 				else if (tmp.Compare(_L8("PriorityNegotiated"))==0)
       
   460 					{
       
   461 					iNegotiated.iPriority = (TUmtsTrafficHandlingPriority)block_int->value;
       
   462 					}
       
   463 				else if (tmp.Compare(_L8("ResidualBerNegotiated"))==0)
       
   464 					{
       
   465 					iNegotiated.iResidualBer = (TUmtsBitErrorRatio)block_int->value;
       
   466 					}
       
   467 				else if (tmp.Compare(_L8("TrafficClassNegotiated"))==0)
       
   468 					{
       
   469 					iNegotiated.iTrafficClass = (TUmtsTrafficClass)block_int->value;
       
   470 					}
       
   471 				else if (tmp.Compare(_L8("TransferDelayNegotiated"))==0)
       
   472 					{
       
   473 					iNegotiated.iTransferDelay = block_int->value;
       
   474 					}
       
   475 				// Minimum set
       
   476 				else if (tmp.Compare(_L8("DeliveryOfErroneusSduMinimum"))==0)
       
   477 					{
       
   478 					iMinimum.iDeliveryOfErroneusSdu = (TUmtsErroneousSDUDelivery)block_int->value;
       
   479 					}
       
   480 				else if (tmp.Compare(_L8("DeliveryOrderMinimum"))==0)
       
   481 					{
       
   482 					iMinimum.iDeliveryOrder = (TUmtsDeliveryOrder)block_int->value;
       
   483 					}
       
   484 				else if (tmp.Compare(_L8("ErrorRatioMinimum"))==0)
       
   485 					{
       
   486 					iMinimum.iErrorRatio = (TUmtsSDUErrorRatio)block_int->value;
       
   487 					}
       
   488 				else if (tmp.Compare(_L8("GuaBitrateDownlinkMinimum"))==0)
       
   489 					{
       
   490 					iMinimum.iGuaBitrateDownlink = block_int->value;
       
   491 					}
       
   492 				else if (tmp.Compare(_L8("GuaBitrateUplinkMinimum"))==0)
       
   493 					{
       
   494 					iMinimum.iGuaBitrateUplink = block_int->value;
       
   495 					}
       
   496 				else if (tmp.Compare(_L8("MaxBitrateDownlinkMinimum"))==0)
       
   497 					{
       
   498 					iMinimum.iMaxBitrateDownlink = block_int->value;
       
   499 					}
       
   500 				else if (tmp.Compare(_L8("MaxBitrateUplinkMinimum"))==0)
       
   501 					{
       
   502 					iMinimum.iMaxBitrateUplink = block_int->value;
       
   503 					}
       
   504 				else if (tmp.Compare(_L8("MaxSduSizeMinimum"))==0)
       
   505 					{
       
   506 					iMinimum.iMaxSduSize = block_int->value;
       
   507 					}
       
   508 				else if (tmp.Compare(_L8("PriorityMinimum"))==0)
       
   509 					{
       
   510 					iMinimum.iPriority = (TUmtsTrafficHandlingPriority)block_int->value;
       
   511 					}
       
   512 				else if (tmp.Compare(_L8("ResidualBerMinimum"))==0)
       
   513 					{
       
   514 					iMinimum.iResidualBer = (TUmtsBitErrorRatio)block_int->value;
       
   515 					}
       
   516 				else if (tmp.Compare(_L8("TrafficClassMinimum"))==0)
       
   517 					{
       
   518 					iMinimum.iTrafficClass = (TUmtsTrafficClass)block_int->value;
       
   519 					}
       
   520 				else if (tmp.Compare(_L8("TransferDelayMinimum"))==0)
       
   521 					{
       
   522 					iMinimum.iTransferDelay = block_int->value;
       
   523 					}
       
   524 				// Requested set
       
   525 				else if (tmp.Compare(_L8("DeliveryOfErroneusSduRequested"))==0)
       
   526 					{
       
   527 					iRequested.iDeliveryOfErroneusSdu = (TUmtsErroneousSDUDelivery)block_int->value;
       
   528 					}
       
   529 				else if (tmp.Compare(_L8("DeliveryOrderRequested"))==0)
       
   530 					{
       
   531 					iRequested.iDeliveryOrder = (TUmtsDeliveryOrder)block_int->value;
       
   532 					}
       
   533 				else if (tmp.Compare(_L8("ErrorRatioRequested"))==0)
       
   534 					{
       
   535 					iRequested.iErrorRatio = (TUmtsSDUErrorRatio)block_int->value;
       
   536 					}
       
   537 				else if (tmp.Compare(_L8("GuaBitrateDownlinkRequested"))==0)
       
   538 					{
       
   539 					iRequested.iGuaBitrateDownlink = block_int->value;
       
   540 					}
       
   541 				else if (tmp.Compare(_L8("GuaBitrateUplinkRequested"))==0)
       
   542 					{
       
   543 					iRequested.iGuaBitrateUplink = block_int->value;
       
   544 					}
       
   545 				else if (tmp.Compare(_L8("MaxBitrateDownlinkRequested"))==0)
       
   546 					{
       
   547 					iRequested.iMaxBitrateDownlink = block_int->value;
       
   548 					}
       
   549 				else if (tmp.Compare(_L8("MaxBitrateUplinkRequested"))==0)
       
   550 					{
       
   551 					iRequested.iMaxBitrateUplink = block_int->value;
       
   552 					}
       
   553 				else if (tmp.Compare(_L8("MaxSduSizeRequested"))==0)
       
   554 					{
       
   555 					iRequested.iMaxSduSize = block_int->value;
       
   556 					}
       
   557 				else if (tmp.Compare(_L8("PriorityRequested"))==0)
       
   558 					{
       
   559 					iRequested.iPriority = (TUmtsTrafficHandlingPriority)block_int->value;
       
   560 					}
       
   561 				else if (tmp.Compare(_L8("ResidualBerRequested"))==0)
       
   562 					{
       
   563 					iRequested.iResidualBer = (TUmtsBitErrorRatio)block_int->value;
       
   564 					}
       
   565 				else if (tmp.Compare(_L8("TrafficClassRequested"))==0)
       
   566 					{
       
   567 					iRequested.iTrafficClass = (TUmtsTrafficClass)block_int->value;
       
   568 					}
       
   569 				else if (tmp.Compare(_L8("TransferDelayRequested"))==0)
       
   570 					{
       
   571 					iRequested.iTransferDelay = block_int->value;
       
   572 					}
       
   573 				else if (tmp.Compare(_L8("HeaderCompression"))==0)
       
   574 					{
       
   575 					iNegotiated.iCompression = block_int->value;
       
   576 					}
       
   577 				else if (tmp.Compare(_L8("ErrorCode"))==0)
       
   578 					{
       
   579 					iNegotiated.iErrorCode = block_int->value;
       
   580 					}
       
   581 				}
       
   582 			p += block_len;
       
   583 			length -= block_len;
       
   584 			}
       
   585 		}
       
   586 	return KErrNone;
       
   587 	}
       
   588 
       
   589 EXPORT_C CExtensionBase* CUmtsQoSPolicy::CreateL()
       
   590 	{
       
   591 	CUmtsQoSPolicy *extension = CUmtsQoSPolicy::NewL();
       
   592 	return extension;
       
   593 	}
       
   594 
       
   595 EXPORT_C TInt CUmtsQoSPolicy::Copy(const CExtensionBase& aExtension)
       
   596 	{
       
   597 	if (aExtension.Type() != iType)
       
   598 		return KErrArgument;
       
   599 	const CUmtsQoSPolicy& policy = (const CUmtsQoSPolicy&)aExtension;
       
   600 	policy.GetQoSMinimum(iMinimum);
       
   601 	policy.GetQoSRequested(iRequested);
       
   602 	policy.GetQoSNegotiated(iNegotiated);
       
   603 	iCompression = policy.HeaderCompression();
       
   604 	return KErrNone;
       
   605 	}
       
   606 
       
   607 EXPORT_C void CUmtsQoSPolicy::SetQoSRequested(const TUmtsQoSParameters& aRequested)
       
   608 	{
       
   609 
       
   610 	LOG(Log::Printf(_L("<------------------------------------------------\n")));
       
   611 	LOG(Log::Printf(_L("CUmtsQoSPolicy::SetQoSRequested")));
       
   612     LOG(Log::Printf(_L("\n")));
       
   613     LOG(Log::Printf(_L("REQUESTED R99 VALUES SUPPLIED BY CLIENT IS \n")));
       
   614     LOG(Log::Printf(_L("\n")));
       
   615 	LOG(Log::Printf(_L(" [aRequested.iTrafficClass 			= %d]\n"),aRequested.iTrafficClass));
       
   616 	LOG(Log::Printf(_L(" [aRequested.iDeliveryOrder 		= %d]\n"),aRequested.iDeliveryOrder));
       
   617 	LOG(Log::Printf(_L(" [aRequested.iDeliveryOfErroneusSdu = %d]\n"),aRequested.iDeliveryOfErroneusSdu));
       
   618 	LOG(Log::Printf(_L(" [aRequested.iMaxSduSize			= %d]\n"),aRequested.iMaxSduSize));
       
   619 	LOG(Log::Printf(_L(" [aRequested.iMaxBitrateUplink		= %d]\n"),aRequested.iMaxBitrateUplink));
       
   620 	LOG(Log::Printf(_L(" [aRequested.iMaxBitrateDownlink	= %d]\n"),aRequested.iMaxBitrateDownlink));
       
   621 	LOG(Log::Printf(_L(" [aRequested.iResidualBer			= %d]\n"),aRequested.iResidualBer));
       
   622 	LOG(Log::Printf(_L(" [aRequested.iErrorRatio			= %d]\n"),aRequested.iErrorRatio));
       
   623 	LOG(Log::Printf(_L(" [aRequested.iPriority				= %d]\n"),aRequested.iPriority));
       
   624 	LOG(Log::Printf(_L(" [aRequested.iTransferDelay			= %d]\n"),aRequested.iTransferDelay));
       
   625 	LOG(Log::Printf(_L(" [aRequested.iGuaBitrateUplink		= %d]\n"),aRequested.iGuaBitrateUplink));
       
   626 	LOG(Log::Printf(_L(" [aRequested.iGuaBitrateDownlink	= %d]\n"),aRequested.iGuaBitrateDownlink));
       
   627 	LOG(Log::Printf(_L("------------------------------------------------>\n")));
       
   628 	
       
   629 	iRequested = aRequested;
       
   630 	}
       
   631 
       
   632 EXPORT_C void CUmtsQoSPolicy::SetQoSMinimum(const TUmtsQoSParameters& aMinimum)
       
   633 	{
       
   634 	LOG(Log::Printf(_L("<------------------------------------------------\n")));
       
   635 	LOG(Log::Printf(_L("CUmtsQoSPolicy::SetQoSMinimum")));
       
   636     LOG(Log::Printf(_L("\n")));
       
   637     LOG(Log::Printf(_L("MINIMUM R99 VALUES SUPPLIED BY CLIENT IS \n")));
       
   638     LOG(Log::Printf(_L("\n")));
       
   639 	LOG(Log::Printf(_L(" [aMinimum.iTrafficClass 			= %d]\n"),aMinimum.iTrafficClass));
       
   640 	LOG(Log::Printf(_L(" [aMinimum.iDeliveryOrder 			= %d]\n"),aMinimum.iDeliveryOrder));
       
   641 	LOG(Log::Printf(_L(" [aMinimum.iDeliveryOfErroneusSdu 	= %d]\n"),aMinimum.iDeliveryOfErroneusSdu));
       
   642 	LOG(Log::Printf(_L(" [aMinimum.iMaxSduSize				= %d]\n"),aMinimum.iMaxSduSize));
       
   643 	LOG(Log::Printf(_L(" [aMinimum.iMaxBitrateUplink		= %d]\n"),aMinimum.iMaxBitrateUplink));
       
   644 	LOG(Log::Printf(_L(" [aMinimum.iMaxBitrateDownlink		= %d]\n"),aMinimum.iMaxBitrateDownlink));
       
   645 	LOG(Log::Printf(_L(" [aMinimum.iResidualBer				= %d]\n"),aMinimum.iResidualBer));
       
   646 	LOG(Log::Printf(_L(" [aMinimum.iErrorRatio				= %d]\n"),aMinimum.iErrorRatio));
       
   647 	LOG(Log::Printf(_L(" [aMinimum.iPriority				= %d]\n"),aMinimum.iPriority));
       
   648 	LOG(Log::Printf(_L(" [aMinimum.iTransferDelay			= %d]\n"),aMinimum.iTransferDelay));
       
   649 	LOG(Log::Printf(_L(" [aMinimum.iGuaBitrateUplink		= %d]\n"),aMinimum.iGuaBitrateUplink));
       
   650 	LOG(Log::Printf(_L(" [aMinimum.iGuaBitrateDownlink		= %d]\n"),aMinimum.iGuaBitrateDownlink));
       
   651 	LOG(Log::Printf(_L("------------------------------------------------>\n")));
       
   652 	
       
   653 	iMinimum = aMinimum;
       
   654 	}
       
   655 
       
   656 EXPORT_C void CUmtsQoSPolicy::GetQoSRequested(TUmtsQoSParameters& aRequested) const
       
   657 	{
       
   658 	aRequested = iRequested;
       
   659 	}
       
   660 
       
   661 EXPORT_C void CUmtsQoSPolicy::GetQoSMinimum(TUmtsQoSParameters& aMinimum) const
       
   662 	{
       
   663 	aMinimum = iMinimum;
       
   664 	}
       
   665 
       
   666 EXPORT_C void CUmtsQoSPolicy::GetQoSNegotiated(TNegotiatedUmtsQoSParameters& aNegotiated) const
       
   667 	{
       
   668 	aNegotiated = iNegotiated;
       
   669 	}
       
   670 
       
   671 EXPORT_C TInt CUmtsQoSPolicy::SetHeaderCompression(TUint aCompression)
       
   672 	{
       
   673 	if (aCompression & ~(KPdpDataCompression|KPdpHeaderCompression))
       
   674 		return KErrNotSupported;
       
   675 	iCompression = aCompression;
       
   676 	return KErrNone;
       
   677 	}
       
   678 
       
   679 EXPORT_C TUint CUmtsQoSPolicy::HeaderCompression() const
       
   680 	{
       
   681 	return iCompression;
       
   682 	}
       
   683 
       
   684 //
       
   685 // TUmtsR5QoSParameters
       
   686 //
       
   687 EXPORT_C TUmtsR5QoSParameters::TUmtsR5QoSParameters()
       
   688 	: TUmtsQoSParameters(),
       
   689 	  iSignallingIndicator(EFalse),
       
   690 	  iSrcStatisticsDesc(ESourceStatisticsDescriptorUnknown)
       
   691 	{
       
   692 	}
       
   693 
       
   694 EXPORT_C TBool TUmtsR5QoSParameters::SignallingIndicator() const
       
   695 	{
       
   696 	return iSignallingIndicator;
       
   697 	}
       
   698 
       
   699 EXPORT_C TUmtsSourceStatisticsDescriptor TUmtsR5QoSParameters::SourceStatisticsDescriptor() const
       
   700 	{
       
   701 	return iSrcStatisticsDesc;
       
   702 	}
       
   703 
       
   704 EXPORT_C TInt TUmtsR5QoSParameters::SetSignallingIndicator(TBool aSignallingIndicator)
       
   705 	{
       
   706 	iSignallingIndicator = aSignallingIndicator;
       
   707 	return KErrNone;
       
   708 	}
       
   709 
       
   710 EXPORT_C TInt TUmtsR5QoSParameters::SetSourceStatisticsDescriptor(TUmtsSourceStatisticsDescriptor aSrcStatisticsDesc)
       
   711 	{
       
   712 	iSrcStatisticsDesc = aSrcStatisticsDesc;
       
   713 	return KErrNone;
       
   714 	}
       
   715 
       
   716 
       
   717 //
       
   718 // TNegotiatedUmtsR5QoSParameters
       
   719 //
       
   720 EXPORT_C TNegotiatedUmtsR5QoSParameters::TNegotiatedUmtsR5QoSParameters() : iCompression(0), iErrorCode(KErrNone)
       
   721 	{
       
   722 	}
       
   723 
       
   724 EXPORT_C TUint TNegotiatedUmtsR5QoSParameters::HeaderCompression() const
       
   725 	{
       
   726 	return iCompression;
       
   727 	}
       
   728 
       
   729 EXPORT_C TInt TNegotiatedUmtsR5QoSParameters::ErrorCode() const
       
   730 	{
       
   731 	return iErrorCode;
       
   732 	}
       
   733 
       
   734 
       
   735 // Buffer size
       
   736 // const TUint KUmtsApiBufSize = 8192; should be defined in case
       
   737 // if the umts r5 and r99 needs to be supported seperately
       
   738 
       
   739 //
       
   740 // CUmtsR5QoSPolicy
       
   741 //
       
   742 EXPORT_C CUmtsR5QoSPolicy* CUmtsR5QoSPolicy::NewL()
       
   743 	{
       
   744 	CUmtsR5QoSPolicy* policy = new (ELeave) CUmtsR5QoSPolicy();
       
   745 	CleanupStack::PushL(policy);
       
   746 	policy->ConstructL();
       
   747 	CleanupStack::Pop();
       
   748 	return policy;
       
   749 	}
       
   750 
       
   751 CUmtsR5QoSPolicy::CUmtsR5QoSPolicy() : iBufPtr(0,0)
       
   752 	{
       
   753 	iType = KPfqosR5ExtensionUmts;
       
   754 	}
       
   755 
       
   756 void CUmtsR5QoSPolicy::ConstructL()
       
   757 	{
       
   758 	iData = HBufC8::NewL(KUmtsApiBufSize);
       
   759 	TPtr8 tmp(iData->Des());
       
   760 	iBufPtr.Set(tmp);
       
   761 	}
       
   762 
       
   763 EXPORT_C CUmtsR5QoSPolicy::~CUmtsR5QoSPolicy()
       
   764 	{
       
   765 	delete iData;
       
   766 	iData = 0;
       
   767 	}
       
   768 
       
   769 EXPORT_C TDesC8& CUmtsR5QoSPolicy::Data()
       
   770 	{
       
   771 	iBufPtr.SetLength(0);
       
   772 	const int byte_len = (sizeof(pfqos_configure)+sizeof(pfqos_extension)+sizeof(pfqos_configblock_int)*43);
       
   773 
       
   774 	pfqos_configure iHeader;
       
   775 	iHeader.pfqos_configure_len = (TUint16)((byte_len + 7) / 8);
       
   776 	iHeader.pfqos_ext_type = EPfqosExtExtension;
       
   777 	iHeader.reserved = 0;
       
   778 	iHeader.protocol_id = 0;
       
   779 	iBufPtr.Append((TUint8*)&iHeader, sizeof(pfqos_configure));
       
   780 
       
   781 	pfqos_extension aExtensionType;
       
   782 	aExtensionType.pfqos_ext_len = 0;
       
   783 	aExtensionType.pfqos_ext_type = EPfqosExtExtension;
       
   784 	aExtensionType.pfqos_extension_type = KPfqosR5ExtensionUmts;
       
   785 	iBufPtr.Append((TUint8*)&aExtensionType, sizeof(pfqos_extension));
       
   786 
       
   787 	pfqos_configblock_int iExt;
       
   788 
       
   789 	// Minimum
       
   790 	SetIntValue(iExt, iMinimum.iTrafficClass, KDescTrafficClassMinimum);
       
   791 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   792 
       
   793 	SetIntValue(iExt, iMinimum.iDeliveryOrder, KDescDeliveryOrderMinimum);
       
   794 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   795 
       
   796 	SetIntValue(iExt, iMinimum.iDeliveryOfErroneusSdu, KDescDeliveryOfErroneusSduMinimum);
       
   797 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   798 
       
   799 	SetIntValue(iExt, iMinimum.iResidualBer, KDescResidualBerMinimum);
       
   800 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   801 
       
   802 	SetIntValue(iExt, iMinimum.iErrorRatio, KDescErrorRatioMinimum);
       
   803 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   804 
       
   805 	SetIntValue(iExt, iMinimum.iPriority, KDescPriorityMinimum);
       
   806 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   807 
       
   808 	SetIntValue(iExt, iMinimum.iTransferDelay, KDescTransferDelayMinimum);
       
   809 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   810 
       
   811 	SetIntValue(iExt, iMinimum.iMaxSduSize, KDescMaxSduSizeMinimum);
       
   812 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   813 
       
   814 	SetIntValue(iExt, iMinimum.iMaxBitrateUplink, KDescMaxBitrateUplinkMinimum);
       
   815 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   816 
       
   817 	SetIntValue(iExt, iMinimum.iMaxBitrateDownlink, KDescMaxBitrateDownlinkMinimum);
       
   818 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   819 
       
   820 	SetIntValue(iExt, iMinimum.iGuaBitrateUplink, KDescGuaBitrateUplinkMinimum);
       
   821 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   822 
       
   823 	SetIntValue(iExt, iMinimum.iGuaBitrateDownlink, KDescGuaBitrateDownlinkMinimum);
       
   824 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   825 	
       
   826 	SetIntValue(iExt, iMinimum.iSignallingIndicator, KDescSignallingIndicatorMinimum);
       
   827 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   828 	
       
   829 	SetIntValue(iExt, iMinimum.iSrcStatisticsDesc, KDescSrcStatDescMinimum);
       
   830 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   831 
       
   832 	// Requested
       
   833 	SetIntValue(iExt, iRequested.iTrafficClass, KDescTrafficClassRequested);
       
   834 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   835 
       
   836 	SetIntValue(iExt, iRequested.iDeliveryOrder, KDescDeliveryOrderRequested);
       
   837 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   838 
       
   839 	SetIntValue(iExt, iRequested.iDeliveryOfErroneusSdu, KDescDeliveryOfErroneusSduRequested);
       
   840 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   841 
       
   842 	SetIntValue(iExt, iRequested.iResidualBer, KDescResidualBerRequested);
       
   843 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   844 
       
   845 	SetIntValue(iExt, iRequested.iErrorRatio, KDescErrorRatioRequested);
       
   846 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   847 
       
   848 	SetIntValue(iExt, iRequested.iPriority, KDescPriorityRequested);
       
   849 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   850 
       
   851 	SetIntValue(iExt, iRequested.iTransferDelay, KDescTransferDelayRequested);
       
   852 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   853 
       
   854 	SetIntValue(iExt, iRequested.iMaxSduSize, KDescMaxSduSizeRequested);
       
   855 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   856 
       
   857 	SetIntValue(iExt, iRequested.iMaxBitrateUplink, KDescMaxBitrateUplinkRequested);
       
   858 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   859 
       
   860 	SetIntValue(iExt, iRequested.iMaxBitrateDownlink, KDescMaxBitrateDownlinkRequested);
       
   861 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   862 
       
   863 	SetIntValue(iExt, iRequested.iGuaBitrateUplink, KDescGuaBitrateUplinkRequested);
       
   864 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   865 
       
   866 	SetIntValue(iExt, iRequested.iGuaBitrateDownlink, KDescGuaBitrateDownlinkRequested);
       
   867 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   868 	
       
   869 	SetIntValue(iExt, iRequested.iSignallingIndicator, KDescSignallingIndicatorRequested);
       
   870 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   871 	
       
   872 	SetIntValue(iExt, iRequested.iSrcStatisticsDesc, KDescSrcStatDescRequested);
       
   873 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   874 
       
   875 	// Negotiated
       
   876 	SetIntValue(iExt, iNegotiated.iTrafficClass, KDescTrafficClassNegotiated);
       
   877 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   878 
       
   879 	SetIntValue(iExt, iNegotiated.iDeliveryOrder, KDescDeliveryOrderNegotiated);
       
   880 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   881 
       
   882 	SetIntValue(iExt, iNegotiated.iDeliveryOfErroneusSdu, KDescDeliveryOfErroneusSduNegotiated);
       
   883 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   884 
       
   885 	SetIntValue(iExt, iNegotiated.iResidualBer, KDescResidualBerNegotiated);
       
   886 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   887 
       
   888 	SetIntValue(iExt, iNegotiated.iErrorRatio, KDescErrorRatioNegotiated);
       
   889 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   890 
       
   891 	SetIntValue(iExt, iNegotiated.iPriority, KDescPriorityNegotiated);
       
   892 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   893 
       
   894 	SetIntValue(iExt, iNegotiated.iTransferDelay, KDescTransferDelayNegotiated);
       
   895 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   896 
       
   897 	SetIntValue(iExt, iNegotiated.iMaxSduSize, KDescMaxSduSizeNegotiated);
       
   898 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   899 
       
   900 	SetIntValue(iExt, iNegotiated.iMaxBitrateUplink, KDescMaxBitrateUplinkNegotiated);
       
   901 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   902 
       
   903 	SetIntValue(iExt, iNegotiated.iMaxBitrateDownlink, KDescMaxBitrateDownlinkNegotiated);
       
   904 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   905 
       
   906 	SetIntValue(iExt, iNegotiated.iGuaBitrateUplink, KDescGuaBitrateUplinkNegotiated);
       
   907 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   908 
       
   909 	SetIntValue(iExt, iNegotiated.iGuaBitrateDownlink, KDescGuaBitrateDownlinkNegotiated);
       
   910 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   911 	
       
   912 	SetIntValue(iExt, iNegotiated.iSignallingIndicator, KDescSignallingIndicatorNegotiated);
       
   913 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   914 
       
   915 	SetIntValue(iExt, iNegotiated.iSrcStatisticsDesc, KDescSrcStatDescNegotiated);
       
   916 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   917 
       
   918 	SetIntValue(iExt, iCompression, KDescHeaderCompression);
       
   919 	iBufPtr.Append((TUint8*)&iExt, sizeof(pfqos_configblock_int));
       
   920 
       
   921 	iBufPtr.AppendFill(0, iHeader.pfqos_configure_len * 8 - byte_len);
       
   922 	return iBufPtr;
       
   923 	}
       
   924 
       
   925 EXPORT_C TInt CUmtsR5QoSPolicy::ParseMessage(const TDesC8& aData)
       
   926 	{
       
   927 	const TUint8 *p = aData.Ptr();
       
   928 	TInt length = aData.Length();
       
   929 	//lint --e{826} Not a suspicious conversion, as lint thinks (shut off all of them for this function)
       
   930 	struct pfqos_configure *ext = (struct pfqos_configure *) p;
       
   931 
       
   932 	if (length < (TInt)sizeof(pfqos_configure))
       
   933 		return KErrGeneral;		// EMSGSIZE (impossible message size)
       
   934 
       
   935 	if (ext->pfqos_configure_len * 8 != length)
       
   936 		return KErrGeneral;		// EMSGSIZE (incorrect message length)
       
   937 
       
   938 	if (ext->pfqos_ext_type == EPfqosExtExtension)
       
   939 		{
       
   940 		p += sizeof(struct pfqos_configure);
       
   941 		pfqos_extension *aExtensionType = (pfqos_extension *) p;
       
   942 
       
   943 		if (aExtensionType->pfqos_extension_type != KPfqosR5ExtensionUmts)
       
   944 			return KErrGeneral;
       
   945 	
       
   946 		while (length > 0)
       
   947 			{
       
   948 			struct pfqos_configblock *block = (struct pfqos_configblock *)(p + sizeof(pfqos_extension));
       
   949 			int block_len = block->len;
       
   950 
       
   951 			if (block_len < 1)
       
   952 				break;
       
   953 			block_len *= 8;
       
   954 
       
   955 			if (block_len > length)
       
   956 				break;
       
   957 
       
   958 			if (block->type == KPfqosTypeInteger)
       
   959 				{
       
   960 				TPtrC8 tmp((TUint8 *)&block->id[0]);
       
   961 				struct pfqos_configblock_int *block_int = (struct pfqos_configblock_int*) block;
       
   962 
       
   963 				// Negotiated set
       
   964 				//lint -e{961} would like terminating 'else' here...
       
   965 				if (tmp.Compare(_L8("DeliveryOfErroneusSduNegotiated"))==0)
       
   966 					{
       
   967 					iNegotiated.iDeliveryOfErroneusSdu = (TUmtsErroneousSDUDelivery)block_int->value;
       
   968 					}
       
   969 				else if (tmp.Compare(_L8("DeliveryOrderNegotiated"))==0)
       
   970 					{
       
   971 					iNegotiated.iDeliveryOrder = (TUmtsDeliveryOrder)block_int->value;
       
   972 					}
       
   973 				else if (tmp.Compare(_L8("ErrorRatioNegotiated"))==0)
       
   974 					{
       
   975 					iNegotiated.iErrorRatio = (TUmtsSDUErrorRatio)block_int->value;
       
   976 					}
       
   977 				else if (tmp.Compare(_L8("GuaBitrateDownlinkNegotiated"))==0)
       
   978 					{
       
   979 					iNegotiated.iGuaBitrateDownlink = block_int->value;
       
   980 					}
       
   981 				else if (tmp.Compare(_L8("GuaBitrateUplinkNegotiated"))==0)
       
   982 					{
       
   983 					iNegotiated.iGuaBitrateUplink = block_int->value;
       
   984 					}
       
   985 				else if (tmp.Compare(_L8("MaxBitrateDownlinkNegotiated"))==0)
       
   986 					{
       
   987 					iNegotiated.iMaxBitrateDownlink = block_int->value;
       
   988 					}
       
   989 				else if (tmp.Compare(_L8("MaxBitrateUplinkNegotiated"))==0)
       
   990 					{
       
   991 					iNegotiated.iMaxBitrateUplink = block_int->value;
       
   992 					}
       
   993 				else if (tmp.Compare(_L8("MaxSduSizeNegotiated"))==0)
       
   994 					{
       
   995 					iNegotiated.iMaxSduSize = block_int->value;
       
   996 					}
       
   997 				else if (tmp.Compare(_L8("PriorityNegotiated"))==0)
       
   998 					{
       
   999 					iNegotiated.iPriority = (TUmtsTrafficHandlingPriority)block_int->value;
       
  1000 					}
       
  1001 				else if (tmp.Compare(_L8("ResidualBerNegotiated"))==0)
       
  1002 					{
       
  1003 					iNegotiated.iResidualBer = (TUmtsBitErrorRatio)block_int->value;
       
  1004 					}
       
  1005 				else if (tmp.Compare(_L8("TrafficClassNegotiated"))==0)
       
  1006 					{
       
  1007 					iNegotiated.iTrafficClass = (TUmtsTrafficClass)block_int->value;
       
  1008 					}
       
  1009 				else if (tmp.Compare(_L8("TransferDelayNegotiated"))==0)
       
  1010 					{
       
  1011 					iNegotiated.iTransferDelay = block_int->value;
       
  1012 					}
       
  1013 				else if (tmp.Compare(_L8("SignallingIndicatorNegotiated"))==0)
       
  1014 					{
       
  1015 					iNegotiated.iSignallingIndicator = block_int->value;
       
  1016 					}
       
  1017 				else if (tmp.Compare(_L8("SrcStatDescNegotiated"))==0)
       
  1018 					{
       
  1019 					iNegotiated.iSrcStatisticsDesc = (TUmtsSourceStatisticsDescriptor)block_int->value;
       
  1020 					}
       
  1021 				// Minimum set
       
  1022 				else if (tmp.Compare(_L8("DeliveryOfErroneusSduMinimum"))==0)
       
  1023 					{
       
  1024 					iMinimum.iDeliveryOfErroneusSdu = (TUmtsErroneousSDUDelivery)block_int->value;
       
  1025 					}
       
  1026 				else if (tmp.Compare(_L8("DeliveryOrderMinimum"))==0)
       
  1027 					{
       
  1028 					iMinimum.iDeliveryOrder = (TUmtsDeliveryOrder)block_int->value;
       
  1029 					}
       
  1030 				else if (tmp.Compare(_L8("ErrorRatioMinimum"))==0)
       
  1031 					{
       
  1032 					iMinimum.iErrorRatio = (TUmtsSDUErrorRatio)block_int->value;
       
  1033 					}
       
  1034 				else if (tmp.Compare(_L8("GuaBitrateDownlinkMinimum"))==0)
       
  1035 					{
       
  1036 					iMinimum.iGuaBitrateDownlink = block_int->value;
       
  1037 					}
       
  1038 				else if (tmp.Compare(_L8("GuaBitrateUplinkMinimum"))==0)
       
  1039 					{
       
  1040 					iMinimum.iGuaBitrateUplink = block_int->value;
       
  1041 					}
       
  1042 				else if (tmp.Compare(_L8("MaxBitrateDownlinkMinimum"))==0)
       
  1043 					{
       
  1044 					iMinimum.iMaxBitrateDownlink = block_int->value;
       
  1045 					}
       
  1046 				else if (tmp.Compare(_L8("MaxBitrateUplinkMinimum"))==0)
       
  1047 					{
       
  1048 					iMinimum.iMaxBitrateUplink = block_int->value;
       
  1049 					}
       
  1050 				else if (tmp.Compare(_L8("MaxSduSizeMinimum"))==0)
       
  1051 					{
       
  1052 					iMinimum.iMaxSduSize = block_int->value;
       
  1053 					}
       
  1054 				else if (tmp.Compare(_L8("PriorityMinimum"))==0)
       
  1055 					{
       
  1056 					iMinimum.iPriority = (TUmtsTrafficHandlingPriority)block_int->value;
       
  1057 					}
       
  1058 				else if (tmp.Compare(_L8("ResidualBerMinimum"))==0)
       
  1059 					{
       
  1060 					iMinimum.iResidualBer = (TUmtsBitErrorRatio)block_int->value;
       
  1061 					}
       
  1062 				else if (tmp.Compare(_L8("TrafficClassMinimum"))==0)
       
  1063 					{
       
  1064 					iMinimum.iTrafficClass = (TUmtsTrafficClass)block_int->value;
       
  1065 					}
       
  1066 				else if (tmp.Compare(_L8("TransferDelayMinimum"))==0)
       
  1067 					{
       
  1068 					iMinimum.iTransferDelay = block_int->value;
       
  1069 					}
       
  1070 				else if (tmp.Compare(_L8("SignallingIndicatorMinimum"))==0)
       
  1071 					{
       
  1072 					iMinimum.iSignallingIndicator = block_int->value;
       
  1073 					}
       
  1074 				else if (tmp.Compare(_L8("SrcStatDescMinimum"))==0)
       
  1075 					{
       
  1076 					iMinimum.iSrcStatisticsDesc = (TUmtsSourceStatisticsDescriptor)block_int->value;
       
  1077 					}
       
  1078 				// Requested set
       
  1079 				else if (tmp.Compare(_L8("DeliveryOfErroneusSduRequested"))==0)
       
  1080 					{
       
  1081 					iRequested.iDeliveryOfErroneusSdu = (TUmtsErroneousSDUDelivery)block_int->value;
       
  1082 					}
       
  1083 				else if (tmp.Compare(_L8("DeliveryOrderRequested"))==0)
       
  1084 					{
       
  1085 					iRequested.iDeliveryOrder = (TUmtsDeliveryOrder)block_int->value;
       
  1086 					}
       
  1087 				else if (tmp.Compare(_L8("ErrorRatioRequested"))==0)
       
  1088 					{
       
  1089 					iRequested.iErrorRatio = (TUmtsSDUErrorRatio)block_int->value;
       
  1090 					}
       
  1091 				else if (tmp.Compare(_L8("GuaBitrateDownlinkRequested"))==0)
       
  1092 					{
       
  1093 					iRequested.iGuaBitrateDownlink = block_int->value;
       
  1094 					}
       
  1095 				else if (tmp.Compare(_L8("GuaBitrateUplinkRequested"))==0)
       
  1096 					{
       
  1097 					iRequested.iGuaBitrateUplink = block_int->value;
       
  1098 					}
       
  1099 				else if (tmp.Compare(_L8("MaxBitrateDownlinkRequested"))==0)
       
  1100 					{
       
  1101 					iRequested.iMaxBitrateDownlink = block_int->value;
       
  1102 					}
       
  1103 				else if (tmp.Compare(_L8("MaxBitrateUplinkRequested"))==0)
       
  1104 					{
       
  1105 					iRequested.iMaxBitrateUplink = block_int->value;
       
  1106 					}
       
  1107 				else if (tmp.Compare(_L8("MaxSduSizeRequested"))==0)
       
  1108 					{
       
  1109 					iRequested.iMaxSduSize = block_int->value;
       
  1110 					}
       
  1111 				else if (tmp.Compare(_L8("PriorityRequested"))==0)
       
  1112 					{
       
  1113 					iRequested.iPriority = (TUmtsTrafficHandlingPriority)block_int->value;
       
  1114 					}
       
  1115 				else if (tmp.Compare(_L8("ResidualBerRequested"))==0)
       
  1116 					{
       
  1117 					iRequested.iResidualBer = (TUmtsBitErrorRatio)block_int->value;
       
  1118 					}
       
  1119 				else if (tmp.Compare(_L8("TrafficClassRequested"))==0)
       
  1120 					{
       
  1121 					iRequested.iTrafficClass = (TUmtsTrafficClass)block_int->value;
       
  1122 					}
       
  1123 				else if (tmp.Compare(_L8("TransferDelayRequested"))==0)
       
  1124 					{
       
  1125 					iRequested.iTransferDelay = block_int->value;
       
  1126 					}
       
  1127 				else if (tmp.Compare(_L8("SignallingIndicatorRequested"))==0)
       
  1128 					{
       
  1129 					iRequested.iSignallingIndicator = block_int->value;
       
  1130 					}
       
  1131 				else if (tmp.Compare(_L8("SrcStatDescRequested"))==0)
       
  1132 					{
       
  1133 					iRequested.iSrcStatisticsDesc = (TUmtsSourceStatisticsDescriptor)block_int->value;
       
  1134 					}
       
  1135 				else if (tmp.Compare(_L8("HeaderCompression"))==0)
       
  1136 					{
       
  1137 					iNegotiated.iCompression = block_int->value;
       
  1138 					}
       
  1139 				else if (tmp.Compare(_L8("ErrorCode"))==0)
       
  1140 					{
       
  1141 					iNegotiated.iErrorCode = block_int->value;
       
  1142 					}
       
  1143 				}
       
  1144 			p += block_len;
       
  1145 			length -= block_len;
       
  1146 			}
       
  1147 		}
       
  1148 	return KErrNone;
       
  1149 	}
       
  1150 
       
  1151 EXPORT_C CExtensionBase* CUmtsR5QoSPolicy::CreateL()
       
  1152 	{
       
  1153 	CUmtsR5QoSPolicy *extension = CUmtsR5QoSPolicy::NewL();
       
  1154 	return extension;
       
  1155 	}
       
  1156 
       
  1157 EXPORT_C TInt CUmtsR5QoSPolicy::Copy(const CExtensionBase& aExtension)
       
  1158 	{
       
  1159 	if (aExtension.Type() != iType)
       
  1160 		return KErrArgument;
       
  1161 	const CUmtsR5QoSPolicy& policy = (const CUmtsR5QoSPolicy&)aExtension;
       
  1162 	policy.GetQoSMinimum(iMinimum);
       
  1163 	policy.GetQoSRequested(iRequested);
       
  1164 	policy.GetQoSNegotiated(iNegotiated);
       
  1165 	iCompression = policy.HeaderCompression();
       
  1166 	return KErrNone;
       
  1167 	}
       
  1168 
       
  1169 EXPORT_C void CUmtsR5QoSPolicy::SetQoSRequested(const TUmtsR5QoSParameters& aRequested)
       
  1170 	{
       
  1171     
       
  1172    	LOG(Log::Printf(_L("<------------------------------------------------\n")));
       
  1173 	LOG(Log::Printf(_L("CUmtsR5QoSPolicy::SetQoSRequested")));
       
  1174     LOG(Log::Printf(_L("\n")));
       
  1175     LOG(Log::Printf(_L("REQUESTED R5 VALUES SUPPLIED BY CLIENT IS \n")));
       
  1176     LOG(Log::Printf(_L("\n")));
       
  1177 	LOG(Log::Printf(_L(" [aRequested.iTrafficClass 			= %d]\n"),aRequested.iTrafficClass));
       
  1178 	LOG(Log::Printf(_L(" [aRequested.iDeliveryOrder 		= %d]\n"),aRequested.iDeliveryOrder));
       
  1179 	LOG(Log::Printf(_L(" [aRequested.iDeliveryOfErroneusSdu = %d]\n"),aRequested.iDeliveryOfErroneusSdu));
       
  1180 	LOG(Log::Printf(_L(" [aRequested.iMaxSduSize			= %d]\n"),aRequested.iMaxSduSize));
       
  1181 	LOG(Log::Printf(_L(" [aRequested.iMaxBitrateUplink		= %d]\n"),aRequested.iMaxBitrateUplink));
       
  1182 	LOG(Log::Printf(_L(" [aRequested.iMaxBitrateDownlink	= %d]\n"),aRequested.iMaxBitrateDownlink));
       
  1183 	LOG(Log::Printf(_L(" [aRequested.iResidualBer			= %d]\n"),aRequested.iResidualBer));
       
  1184 	LOG(Log::Printf(_L(" [aRequested.iErrorRatio			= %d]\n"),aRequested.iErrorRatio));
       
  1185 	LOG(Log::Printf(_L(" [aRequested.iPriority				= %d]\n"),aRequested.iPriority));
       
  1186 	LOG(Log::Printf(_L(" [aRequested.iTransferDelay			= %d]\n"),aRequested.iTransferDelay));
       
  1187 	LOG(Log::Printf(_L(" [aRequested.iGuaBitrateUplink		= %d]\n"),aRequested.iGuaBitrateUplink));
       
  1188 	LOG(Log::Printf(_L(" [aRequested.iGuaBitrateDownlink	= %d]\n"),aRequested.iGuaBitrateDownlink));
       
  1189 	LOG(Log::Printf(_L(" [aRequested.iSignallingIndicator	= %d]\n"),aRequested.iSignallingIndicator));
       
  1190 	LOG(Log::Printf(_L(" [aRequested.iSrcStatisticsDesc	    = %d]\n"),aRequested.iSrcStatisticsDesc));	
       
  1191 	LOG(Log::Printf(_L("------------------------------------------------>\n")));
       
  1192 	
       
  1193 	iRequested = aRequested;
       
  1194 	}
       
  1195 
       
  1196 EXPORT_C void CUmtsR5QoSPolicy::SetQoSMinimum(const TUmtsR5QoSParameters& aMinimum)
       
  1197 	{
       
  1198     LOG(Log::Printf(_L("<------------------------------------------------\n")));
       
  1199 	LOG(Log::Printf(_L("CUmtsR5QoSPolicy::SetQoSMinimum")));
       
  1200     LOG(Log::Printf(_L("\n")));
       
  1201     LOG(Log::Printf(_L("MINIMUM R5 VALUES SUPPLIED BY CLIENT IS \n")));
       
  1202     LOG(Log::Printf(_L("\n")));
       
  1203 	LOG(Log::Printf(_L(" [aMinimum.iTrafficClass 			= %d]\n"),aMinimum.iTrafficClass));
       
  1204 	LOG(Log::Printf(_L(" [aMinimum.iDeliveryOrder 			= %d]\n"),aMinimum.iDeliveryOrder));
       
  1205 	LOG(Log::Printf(_L(" [aMinimum.iDeliveryOfErroneusSdu 	= %d]\n"),aMinimum.iDeliveryOfErroneusSdu));
       
  1206 	LOG(Log::Printf(_L(" [aMinimum.iMaxSduSize				= %d]\n"),aMinimum.iMaxSduSize));
       
  1207 	LOG(Log::Printf(_L(" [aMinimum.iMaxBitrateUplink		= %d]\n"),aMinimum.iMaxBitrateUplink));
       
  1208 	LOG(Log::Printf(_L(" [aMinimum.iMaxBitrateDownlink		= %d]\n"),aMinimum.iMaxBitrateDownlink));
       
  1209 	LOG(Log::Printf(_L(" [aMinimum.iResidualBer				= %d]\n"),aMinimum.iResidualBer));
       
  1210 	LOG(Log::Printf(_L(" [aMinimum.iErrorRatio				= %d]\n"),aMinimum.iErrorRatio));
       
  1211 	LOG(Log::Printf(_L(" [aMinimum.iPriority				= %d]\n"),aMinimum.iPriority));
       
  1212 	LOG(Log::Printf(_L(" [aMinimum.iTransferDelay			= %d]\n"),aMinimum.iTransferDelay));
       
  1213 	LOG(Log::Printf(_L(" [aMinimum.iGuaBitrateUplink		= %d]\n"),aMinimum.iGuaBitrateUplink));
       
  1214 	LOG(Log::Printf(_L(" [aMinimum.iGuaBitrateDownlink		= %d]\n"),aMinimum.iGuaBitrateDownlink));
       
  1215 	LOG(Log::Printf(_L(" [aMinimum.iSignallingIndicator	    = %d]\n"),aMinimum.iSignallingIndicator));
       
  1216 	LOG(Log::Printf(_L(" [aMinimum.iSrcStatisticsDesc	    = %d]\n"),aMinimum.iSrcStatisticsDesc));
       
  1217 	LOG(Log::Printf(_L("------------------------------------------------>\n")));
       
  1218 	
       
  1219 	iMinimum = aMinimum;
       
  1220 	}
       
  1221 
       
  1222 EXPORT_C void CUmtsR5QoSPolicy::GetQoSRequested(TUmtsR5QoSParameters& aRequested) const
       
  1223 	{
       
  1224 	aRequested = iRequested;
       
  1225 	}
       
  1226 
       
  1227 EXPORT_C void CUmtsR5QoSPolicy::GetQoSMinimum(TUmtsR5QoSParameters& aMinimum) const
       
  1228 	{
       
  1229 	aMinimum = iMinimum;
       
  1230 	}
       
  1231 
       
  1232 EXPORT_C void CUmtsR5QoSPolicy::GetQoSNegotiated(TNegotiatedUmtsR5QoSParameters& aNegotiated) const
       
  1233 	{
       
  1234 	aNegotiated = iNegotiated;
       
  1235 	}
       
  1236 
       
  1237 EXPORT_C TInt CUmtsR5QoSPolicy::SetHeaderCompression(TUint aCompression)
       
  1238 	{
       
  1239 	if (aCompression & ~(KPdpDataCompression|KPdpHeaderCompression))
       
  1240 		return KErrNotSupported;
       
  1241 	iCompression = aCompression;
       
  1242 	return KErrNone;
       
  1243 	}
       
  1244 
       
  1245 EXPORT_C TUint CUmtsR5QoSPolicy::HeaderCompression() const
       
  1246 	{
       
  1247 	return iCompression;
       
  1248 	}
       
  1249