diff -r 000000000000 -r 3ad9d5175a89 remotestoragefw/webdavaccessplugin/inc/rsfwdavtransaction.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remotestoragefw/webdavaccessplugin/inc/rsfwdavtransaction.h Thu Dec 17 09:07:59 2009 +0200 @@ -0,0 +1,164 @@ +/* +* Copyright (c) 2002-2004 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: WebDAV transaction + * +*/ + + +#ifndef CRSFWDAVTRANSACTION_H +#define CRSFWDAVTRANSACTION_H + +// INCLUDES +#include +#include +//#include +//#include +//#include +#include +//#include +#include + +//#include + +#include "rsfwdavdefs.h" +//#include "rsfwremoteaccess.h" +//#include "rsfwdavsession.h" + +// FORWARD DECLARATIONS +class CRsfwDavSession; +class CRsfwDirEnt; +class CRsfwDavFileInfo; + +// CONSTANTS +const TInt KHttpPortNumber = 80; +const TInt KHttpsPortNumber = 443; +_LIT(KHttpScheme, "http"); +_LIT(KHttpsScheme, "https"); +_LIT8(KHttpsScheme8, "https"); + +/** + * WebDAV transaction + * + * @lib davaccess.lib + * @since Series 60 3.1 + */ +class CRsfwDavTransaction: public CBase, + public MHTTPTransactionCallback, + public MHTTPDataSupplier + + { +public: // Constructors and destructor + /** + * Two-phased constructor. + */ + static CRsfwDavTransaction* NewL(CRsfwDavSession* aWebDavSession, + TWebDavOp aWebDavOp, + const TUriC8& aUri, + RStringF aMethod, + TUint aTransactionId); + /** + * Destructor. + */ + virtual ~CRsfwDavTransaction(); + +public: // New functions + void SetBodyData(HBufC8* aRequestBodyBuffer); + void SetBodyFileL(const TDesC& aPath, + TInt aOffset, + TInt* aLength, + TUint aFlags); + void SetPropFindPath(HBufC* aPropFindPath); + void SetPropFindDirEntryArray(RPointerArray& aDirEnts); + void SubmitL(); + void Cancel(); + void SetDavFileInfoL(CRsfwDavFileInfo** aDavFileInfo, const TDesC& aPath); + inline RHTTPTransaction HttpTransaction() {return iHttpTransaction;}; + inline TUint Id() {return iTransactionId;}; + inline TInt Status() {return iStatus;}; + +public: // Functions from base classes + // From MHTTPTransactionCallback + void MHFRunL(RHTTPTransaction aTransaction, + const THTTPEvent& aEvent); + TInt MHFRunError(TInt aError, + RHTTPTransaction aTransaction, + const THTTPEvent& aEvent); + + // From MHTTPDataSupplier + TBool GetNextDataPart(TPtrC8& aDataPart); + void ReleaseData(); + TInt OverallDataSize(); + TInt Reset(); + +private: + void ConstructL(CRsfwDavSession* aWebDavSession, + TWebDavOp aWebDavOp, + const TUriC8& aUri, + RStringF aMethod, + TInt aTransactionId); + void TransactionCompleteL(); + void TransactionError(); + void Cleanup(); + void PropFindResponseBeginL(TInt aDepth); + void LockQueryResponseBegin(); + void ParsePropFindResponseL(const TDesC8& aFragment); + void ParseLockResponseL(const TDesC8& aFragment); + void PropFindResponseEndL(); + void LockResponseEndL(); + +public: // data + TWebDavOp iWebDavOp; + +private: // Data + TUint iTransactionId; + CRsfwDavSession* iWebDavSession; + RHTTPTransaction iHttpTransaction; + TBool iMoreToCome; + RFs iFs; + + // files used with PUT and GET + RFile iBodyFile; + TFileName iBodyFilePath; + TInt iBodyFileOffset; + TUint iBodyFileFlags; + TParse iParsedBodyFilePath; + + // pointer to client's "length" variable + // GET operation will set this based on "content-length" from the server + TInt* iClientsLength; + + HBufC8* iRequestBodyBuffer; + + // PROPFIND parser needs to now where it is prop finding.... + HBufC* iPropFindPath; + // PROPFIND etc: response body is copied to a memory buffer + HBufC8* iResponseBuffer; + // how much body data has been sent to the HTTP stack + TInt iSendDataCount; + // total size of body the data + TInt iOverallDataSize; + TInt iStatus; + TBool iNoContentLength; + TBool iDiscardBody; // there may be body that we discard + + // Used with LOCKs to store files lock token + CRsfwDavFileInfo* iDavFileInfo; + + // Used with PROPFIND to store metadata of all entries in a directory + RPointerArray* iDirEnts; + }; + +#endif // CRSFWDAVTRANSACTION_H + +// End of File