applayerpluginsandutils/httpprotocolplugins/httpheadercodec/chttpdefaultheaderreader.cpp
changeset 0 b16258d2340f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerpluginsandutils/httpprotocolplugins/httpheadercodec/chttpdefaultheaderreader.cpp	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,94 @@
+// Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include "chttpdefaultheaderreader.h"
+#include "CHeaderField.h"
+#include <inetprottextutils.h>
+
+
+_LIT8(KNewLine, "\n");
+
+CHttpDefaultHeaderReader* CHttpDefaultHeaderReader::NewL(RStringPool aStringPool)
+/** 
+	Factory constructor.
+	@internalComponent
+	@param		aStringPool	The current string pool.
+	@return		A pointer to a fully initialised object.
+	@leave		KErrNoMemory	Not enough memory to create object.
+*/
+	{
+	return new (ELeave) CHttpDefaultHeaderReader(aStringPool);
+	}
+
+CHttpDefaultHeaderReader::~CHttpDefaultHeaderReader()
+/**
+	Destructor
+	@internalComponent
+*/
+	{
+	}
+
+CHttpDefaultHeaderReader::CHttpDefaultHeaderReader(RStringPool aStringPool)
+: CHeaderReader(), iStringPool(aStringPool)
+/**
+	Constructor
+	@internalComponent
+	@param		aStringPool	The current string pool.
+*/
+	{
+	}
+
+/*
+ *	Methods from CHeaderReader
+ */
+
+void CHttpDefaultHeaderReader::DecodeHeaderL(RHeaderField& aHeader)
+/** 
+	Decodes the raw header field value. The default behaviour for fields which 
+	are unknown consists of copying the raw data into the header fields first 
+	part as a string.
+	@internalComponent
+	@param		aHeader		The header field to decode.
+	@todo
+*/
+	{
+	// Get the over-the-air encoded data and trim white space from it
+	TPtrC8 rawData;
+	aHeader.RawDataL(rawData);
+	TBool moreParts = ETrue;
+	TPtrC8 currentPartData(KNullDesC8);
+	TInt remaining = rawData.Length();
+	TInt index =0;	
+		
+	do
+		{
+		// Search for '\n' separator.
+		remaining -= InetProtTextUtils::ExtractNextTokenFromList(rawData, currentPartData, KNewLine);
+		if (remaining <= 0)
+			{
+			moreParts =  EFalse;
+			}		
+					
+		// create and set the new header part at position zero, using the OTA data without modification
+		RStringF partStr = iStringPool.OpenFStringL(currentPartData);
+		CleanupClosePushL(partStr);
+		CHeaderFieldPart* part = CHeaderFieldPart::NewL(partStr);
+		CleanupStack::PushL(part);
+		aHeader.SetPartL(part,index);
+		CleanupStack::Pop(part);
+		CleanupStack::PopAndDestroy(&partStr);
+		++index;
+		} while (moreParts);
+	}