applayerprotocols/httpservice/src/chttpdatareceiver.cpp
changeset 0 b16258d2340f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerprotocols/httpservice/src/chttpdatareceiver.cpp	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,84 @@
+// Copyright (c) 2003-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 "chttpdatareceiver.h"
+#include "chttpclienttransaction.h"
+#include "chttpcontentwriter.h"
+
+CHttpDataReceiver::CHttpDataReceiver(RHTTPTransaction aTrans, CHttpClientTransaction& aClientTrans)
+: iTransaction(aTrans),iClientTrans(aClientTrans)
+    {
+    }
+
+CHttpDataReceiver::~CHttpDataReceiver()
+    {
+    delete iFileWriter;
+    }
+
+TInt CHttpDataReceiver::SetFile(RFile& aFile)
+    {
+    iFileWriter = CHttpFileWriter::New(aFile, *this);
+    return iFileWriter ? KErrNone : KErrNoMemory;
+    }
+
+void CHttpDataReceiver::DataAvailable()
+    {
+    if(iDynamicSink)
+        {
+        THttpContentSinkOp op(*this);
+        iDynamicSink->OnData(op);
+        }
+    else 
+        {
+        Store();
+        }
+    }
+
+TBool CHttpDataReceiver::GetData(TPtrC8& aData)
+    {
+    return iDataSupplier->GetNextDataPart(aData);
+    }
+
+void CHttpDataReceiver::Store()
+    {
+    if(iFileWriter)
+        {
+        TPtrC8 ptr;
+        iDataSupplier->GetNextDataPart(ptr);
+        iFileWriter->Write(ptr);
+        if(!iDynamicSink)
+            {
+            iTransfferedDataSize += ptr.Length();
+            iClientTrans.OnTransferProgress(iTransaction.Response().Body()->OverallDataSize(), iTransfferedDataSize);
+            }
+        }
+    else
+        {
+        Release();
+        }
+    }
+
+void CHttpDataReceiver::Release()
+    {
+    iDataSupplier->ReleaseData();
+    }
+
+
+void CHttpDataReceiver::Error(TInt aError)
+    {
+    THTTPEvent evt(aError);
+    iTransaction.SendEvent(evt, THTTPEvent::EIncoming, THTTPFilterHandle::EClient);  
+    }