--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerprotocols/httptransportfw/Test/t_httpmessage/cmessagedatasupplier.cpp Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,109 @@
+// Copyright (c) 2002-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 "cmessagedatasupplier.h"
+
+#include "mdatasupplierobserver.h"
+
+CMessageDataSupplier* CMessageDataSupplier::NewL(MDataSupplierObserver& aObserver, const TDesC8& aData, TInt aBufferSize)
+ {
+ CMessageDataSupplier* self = new(ELeave) CMessageDataSupplier(aObserver, aData, aBufferSize);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CMessageDataSupplier::~CMessageDataSupplier()
+ {
+ Cancel();
+
+ delete iBuffer;
+ }
+
+CMessageDataSupplier::CMessageDataSupplier(MDataSupplierObserver& aObserver, const TDesC8& aData, TInt aBufferSize)
+: CActive(CActive::EPriorityStandard), iObserver(aObserver), iRemainingData(aData), iBufferSize(aBufferSize)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+void CMessageDataSupplier::ConstructL()
+ {
+ iBuffer = HBufC8::NewL(iBufferSize);
+
+ SetData();
+ }
+
+
+TBool CMessageDataSupplier::GetData(TPtrC8& aData)
+ {
+ aData.Set(*iBuffer);
+
+ return iLast;
+ }
+
+void CMessageDataSupplier::ReleaseData()
+ {
+ iBuffer->Des().Zero();
+
+ if( !iLast )
+ CompleteSelf();
+ }
+
+void CMessageDataSupplier::CompleteSelf()
+ {
+ TRequestStatus* pStat = &iStatus;
+ User::RequestComplete(pStat, KErrNone);
+ SetActive();
+ }
+
+void CMessageDataSupplier::SetData()
+ {
+ // Need to set the new data...
+ TInt dataLength = iBufferSize;
+
+ if( dataLength > iRemainingData.Length() )
+ {
+ dataLength = iRemainingData.Length();
+ }
+ // Copy the data...
+ iBuffer->Des().Copy(iRemainingData.Left(dataLength));
+
+ // Update the remaining data
+ iRemainingData.Set(iRemainingData.Mid(dataLength));
+
+ // Is this the last part?
+ iLast = iRemainingData.Length() == 0;
+ }
+
+/*
+ * Methods from CActive
+ */
+
+void CMessageDataSupplier::RunL()
+ {
+ // Set the data...
+ SetData();
+
+ // Notify the observer that the data is ready
+ iObserver.DataReady();
+ }
+
+void CMessageDataSupplier::DoCancel()
+ {
+ // Do nothing...
+ }
+
+