applayerprotocols/httpexamples/nwsswsptrhnd/CNwssWspTrHndDataSupplier.cpp
changeset 0 b16258d2340f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerprotocols/httpexamples/nwsswsptrhnd/CNwssWspTrHndDataSupplier.cpp	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,114 @@
+// 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:
+//
+
+// System includes
+#include <wapcli.h>
+
+// Local includes
+#include "tnwsswsptrhndpanic.h"
+#include "testoom.h"
+
+// Class signature
+#include "cnwsswsptrhnddatasupplier.h"
+
+// Constants used in this file
+#define LOGDIR "http"
+#define LOGFILE "nwsswsptrhnd.txt"
+
+CNwssWspTrHndDataSupplier* CNwssWspTrHndDataSupplier::NewL(RWSPCOTrans& aStackTrans, MNwssOomHandler& aOomHandler)
+	{
+	CNwssWspTrHndDataSupplier* me = new(ELeave)CNwssWspTrHndDataSupplier(aStackTrans, aOomHandler);
+	CleanupStack::PushL(me);
+	me->ConstructL();
+	CleanupStack::Pop(me);
+	return me;
+	}
+
+CNwssWspTrHndDataSupplier::~CNwssWspTrHndDataSupplier()
+	{
+	__CLOSELOG
+	}
+
+TBool CNwssWspTrHndDataSupplier::GetNextDataPart(TPtrC8& aDataPart)
+	{
+	// Set the data buffer
+	aDataPart.Set(iBuffer);
+
+	return (iRemainingBytes == 0);
+	}
+
+void CNwssWspTrHndDataSupplier::ReleaseData()
+	{
+	// If more data is expected, then extract the next chunk from the WAP Stack
+	if (iRemainingBytes > 0)
+		{
+		// Extract the next chunk of data from the transaction, handling OOM appropriately
+		// should it occur
+		if (ExtractBodyData() == KErrNoMemory)
+			{
+			// Ensure the buffer is empty (should the client call again to GetNextDataPart after
+			// releasing), then mimic a method abort.  No stack abort to occur since this can
+			// only execute following a MethodResult-ind
+			iBuffer.Zero();
+			iRemainingBytes = 0;
+			iOomHandler.SendOomMethodAbort(iStackTransId, EFalse);
+			}
+		}
+	}
+
+TInt CNwssWspTrHndDataSupplier::OverallDataSize()
+	{
+	return iOverallDataSize;
+	}
+
+TInt CNwssWspTrHndDataSupplier::Reset()
+	{
+	return KErrNotSupported;
+	}
+
+CNwssWspTrHndDataSupplier::CNwssWspTrHndDataSupplier(RWSPCOTrans& aStackTrans, MNwssOomHandler& aOomHandler)
+	: iStackTrans(aStackTrans), iOomHandler(aOomHandler)
+	{
+	__OPENLOG(LOGDIR, LOGFILE)
+	}
+
+void CNwssWspTrHndDataSupplier::ConstructL()
+	{
+	// Store the transaction ID for later
+	__TESTOOMD(stkErr, iStackTrans.Id(iStackTransId));
+	__LOG1("--RWSPCOTrans::Id() returned %d", stkErr)
+	User::LeaveIfError(stkErr);
+
+	// Extract the first chunk of data from the transaction.
+	User::LeaveIfError( ExtractBodyData() );
+
+	// Calculate the overall data size
+	iOverallDataSize = iBuffer.Length() + iRemainingBytes;
+
+	__LOG1("--Overall data size is %d", iOverallDataSize)
+	}
+
+TInt CNwssWspTrHndDataSupplier::ExtractBodyData()
+	{
+	__TESTOOMD(stkErr, iStackTrans.GetData(iBuffer, RWSPCOTrans::EResultBody, &iRemainingBytes));
+	__LOG1("--RWSPCOTrans::GetData(EResultBody) returned %d", stkErr)
+	if ((stkErr != KErrNone) && (stkErr != RWAPConn::EMoreData))
+		return stkErr;
+
+	__LOG("--Result Body is:")
+	__DUMP("--", "--", iBuffer)
+	__LOG1("--Remaining bytes to extract is %d", iRemainingBytes)
+	return KErrNone;
+	}