diff -r 000000000000 -r b16258d2340f applayerprotocols/httpservice/src/chttpdatasender.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/applayerprotocols/httpservice/src/chttpdatasender.cpp Tue Feb 02 01:09:52 2010 +0200 @@ -0,0 +1,143 @@ +// 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 "chttpdatasender.h" +#include "chttpcontentreader.h" +#include "chttpclienttransaction.h" +#include + +CHttpDataSender* CHttpDataSender::New(RHTTPTransaction aTrans, CHttpClientTransaction& aClientTrans, MHttpContentSource* aSource) + { + return new CHttpDataSender(aTrans, aClientTrans, aSource); + } + +CHttpDataSender* CHttpDataSender::New(RHTTPTransaction aTrans, CHttpClientTransaction& aClientTrans, RFile& aFile) + { + CHttpDataSender* self = new CHttpDataSender(aTrans, aClientTrans); + if(self) + { + if(self->Construct(aFile) != KErrNone) + { + delete self; + self = NULL; + } + } + return self; + } + + +CHttpDataSender::CHttpDataSender(RHTTPTransaction aTrans, CHttpClientTransaction& aClientTrans) +: iTransaction(aTrans),iClientTrans(aClientTrans), +iDynamicContentLen(KErrNotFound) + { + } + +CHttpDataSender::CHttpDataSender(RHTTPTransaction aTrans, CHttpClientTransaction& aClientTrans, MHttpContentSource* aSource) +: iTransaction(aTrans),iDynamicSource(aSource), +iClientTrans(aClientTrans) + { + + } + +CHttpDataSender::~CHttpDataSender() + { + delete iFileReader; + } + +TInt CHttpDataSender::Construct(RFile& aFile) + { + iFileReader = CHttpFileReader::New(aFile, *this); + return iFileReader ? KErrNone : KErrNoMemory; + } + +// From MHttpDataSender +void CHttpDataSender::Notify(const TDesC8& aData, TBool aLast) + { + __ASSERT_DEBUG(iDataPtr.Length() == 0, User::Invariant()); + iDataPtr.Set(aData.Ptr(), aData.Length()); + iLastPart = aLast; + if(!iInCallback) + { + iTransaction.SendEvent(THTTPEvent::ENotifyNewRequestBodyPart, THTTPEvent::EOutgoing, THTTPFilterHandle::EClient); + } + } + +void CHttpDataSender::Error(TInt aError) + { + THTTPEvent evt(aError); + iTransaction.SendEvent(evt, THTTPEvent::EIncoming, THTTPFilterHandle::EClient); + } + +// From MHTTPDataSupplier +TBool CHttpDataSender::GetNextDataPart(TPtrC8& aDataPart) + { + aDataPart.Set(KNullDesC8()); + iInCallback = ETrue; + if(iDataPtr.Length() == 0) + { + RequestData(); + } + + if(iDataPtr.Length() > 0) + { + iTransfferedDataSize += iDataPtr.Length(); + iClientTrans.OnTransferProgress(iTransaction.Request().Body()->OverallDataSize(), iTransfferedDataSize); + aDataPart.Set(iDataPtr); + iWaitingForRelease = ETrue; + } + iInCallback = EFalse; + return iLastPart; + } + +void CHttpDataSender::ReleaseData() + { + if(iWaitingForRelease) + { + iDataPtr.Set(NULL, 0); + if(!iLastPart) + RequestData(); + iWaitingForRelease = EFalse; + } + } + +TInt CHttpDataSender::OverallDataSize() + { + if(iFileReader) + return iFileReader->Size(); + return iDynamicContentLen; + } + +TInt CHttpDataSender::Reset() + { + return KErrNone; + } + +void CHttpDataSender::RequestData() + { + if(iDynamicSource) + { + THttpContentSourceOp op(this); + iDynamicSource->OnData(op); + } + else if(iFileReader) + { + iFileReader->Read(); + } + } + +void CHttpDataSender::SetDynamicContentLen(TInt aLen) + { + iDynamicContentLen = aLen; + }