diff -r 000000000000 -r b16258d2340f applayerprotocols/httpexamples/nwsswsptrhnd/CNwssWspTrHndDataSupplier.cpp --- /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 + +// 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; + }