remotestoragefw/webdavaccessplugin/inc/rsfwdavaccesscontext.h
branchRCL_3
changeset 16 1aa8c82cb4cb
parent 0 3ad9d5175a89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/remotestoragefw/webdavaccessplugin/inc/rsfwdavaccesscontext.h	Wed Sep 01 12:15:08 2010 +0100
@@ -0,0 +1,589 @@
+/*
+* 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:  Contexts for keeping transaction state
+ *
+*/
+
+
+#ifndef CRSFWDAVACCESSCONTEXT_H
+#define CRSFWDAVACCESSCONTEXT_H
+
+// INCLUDES
+#include <e32base.h>
+//#include <HttpErr.h>
+
+#include "rsfwremoteaccess.h"
+//#include "rsfwdavsession.h"
+#include "rsfwdavtransaction.h"
+//#include "rsfwdavfileinfo.h"
+
+// FORWARD DECLARATIONS
+class CRsfwDavAccess;
+//class CRsfwDirEntAttr;
+
+// CONSTANTS
+const TInt KMaxMimeTypeLength = 64;
+
+// CLASS DECLARATIONS
+
+/**
+ *  WebDAV access contexts (state machines)
+ *
+ *  @lib davaccess.lib
+ *  @since Series 60 3.1
+ */
+
+class CRsfwDavAccessContext : public CBase
+    {
+public: // Constructors and destructor
+    /**
+     * Destructor.
+     */
+    virtual ~CRsfwDavAccessContext();
+    
+public: // New functions
+     /**
+     * This is used for GET and PUT operations, to allow cancelling
+     * the operations by target path name (local dialog from File Manager will
+     * call CancelByPath)
+     * @return TDesC, the target path for the operation
+     */
+    virtual const TDesC& TargetPath();
+
+    /**
+     * Start transaction
+     */
+    virtual void StartL() = 0;
+
+    /**
+     * Receive a notification of a complete transaction
+     */
+    virtual void TransactionCompleteL() = 0;
+    
+    /**
+     * Receive a notification of a failed transaction
+     * @param aError error code
+     */
+    virtual void TransactionError(TInt aError) = 0;
+   
+
+    /**
+     * Return the underlying WebDAV transaction
+     * @return WebDAV transaction
+     */
+    inline CRsfwDavTransaction* WebDavTransaction()
+        { return iWebDavTransaction; };
+
+    /**
+     * Set context id
+     * @param aId id
+     */
+    inline void SetId(TUint aId) { iId = aId; };
+
+    /**
+     * Get id of the current WebDAV transaction
+     * @return id
+     */
+    inline TUint WebDavTransactionId() { return iWebDavTransactionId; };
+
+    /**
+     * Get context id
+     * @return id
+     */
+    inline TUint Id() { return iId; };
+
+    /**
+     * Get context status
+     * @return status
+     */
+    inline TUint Status() { return iStatus; };
+
+    /**
+     * Get response handler
+     * @return response handler
+     */
+    inline MRsfwRemoteAccessResponseHandler* ResponseHandler()
+        { return iResponseHandler; };
+
+    /**
+     * Tell wether the context is in finished state
+     * @return ETrue, if the context has finished
+     */
+    inline TBool Done() { return iDone; };
+   
+  
+protected: // New functions
+    /**
+     * Submit transaction
+     * @return none
+     */
+    void SubmitL();
+    
+    /**
+     * Retry transaction
+     * @return none
+     */
+    void Retry();
+    
+    /**
+     * Map HTTP error code to SymbianOS error code
+     * @param aError, input and output error code
+     */
+    void MapError(TInt& aError);
+    
+
+protected: // Data
+    TUint                         iId;
+    CRsfwDavAccess*                   iDavAccess;
+    TUint                         iStatus;
+    MRsfwRemoteAccessResponseHandler* iResponseHandler;
+    CRsfwDavTransaction*           iWebDavTransaction;
+    TUint                         iWebDavTransactionId;
+    TBool                         iDone;
+    TInt                          iTryCount;
+    // allows to cancel the operation by path
+    TBufC<KMaxPath>               iRemotePathName; 
+
+    };
+
+// ---------------------------------------------------------------------
+// Options
+// ---------------------------------------------------------------------
+
+class CRsfwDavAccessContextOptions: public CRsfwDavAccessContext
+    {
+public:
+    /**
+     * Two-phased constructor.
+     */
+    static CRsfwDavAccessContextOptions* NewL(
+        CRsfwDavAccess* aDavAccess,
+        MRsfwRemoteAccessResponseHandler* aResponseHandler);
+
+public: // Functions from base classes
+    // From CRsfwDavAccessContext
+    void StartL();
+    void TransactionCompleteL();
+    void TransactionError(TInt aError);
+
+private:
+    void ConstructL(CRsfwDavAccess* aDavAccess,
+                    MRsfwRemoteAccessResponseHandler* aResponseHandler);
+    };
+
+// -----------------------------------------------------------------
+// PropFindDir
+// -----------------------------------------------------------------
+
+class CRsfwDavAccessContextPropFindDir: public CRsfwDavAccessContext
+    {
+public: // Constructors and destructor
+    /**
+     * Two-phased constructor.
+     * 
+     */
+    static CRsfwDavAccessContextPropFindDir* NewL(
+        CRsfwDavAccess* aDavAccess,
+        MRsfwRemoteAccessResponseHandler* aResponseHandler,
+        const TDesC& aPathName,
+        TInt aDepth,
+        CRsfwDirEntAttr** aDirEntAttr,
+        RPointerArray<CRsfwDirEnt>* aDirEnts);
+
+    /**
+     * Destructor.
+     */
+    virtual ~CRsfwDavAccessContextPropFindDir();
+
+public: // Functions from base classes
+    // From CRsfwDavAccessContext
+    void StartL();
+    void TransactionCompleteL();
+    void TransactionError(TInt aError);
+
+private:
+    void ConstructL(CRsfwDavAccess* aDavAccess,
+                    MRsfwRemoteAccessResponseHandler* aResponseHandler,
+                    const TDesC& aPathName,
+                    TInt aDepth,
+                    CRsfwDirEntAttr** aDirEntAttr,
+                    RPointerArray<CRsfwDirEnt>* aDirEnts);
+private: // Data
+    TInt                    iDepth;
+    CRsfwDirEntAttr**           iDirEntAttr;
+    RPointerArray<CRsfwDirEnt>* iDirEnts;
+    RPointerArray<CRsfwDirEnt>  iOwnDirEnts;
+    };
+
+// -----------------------------------------------------------------
+// PropFindFile
+// -----------------------------------------------------------------
+
+class CRsfwDavAccessContextPropFindFile: public CRsfwDavAccessContext
+    {
+public:
+    /**
+     * Two-phased constructor.
+     * 
+     */
+    static CRsfwDavAccessContextPropFindFile* NewL(
+        CRsfwDavAccess* aDavAccess,
+        MRsfwRemoteAccessResponseHandler* aResponseHandler,
+        const TDesC& aPathName,
+        CRsfwDirEntAttr** aDirEntAttr);
+
+    /**
+     * Destructor.
+     */
+    virtual ~CRsfwDavAccessContextPropFindFile();
+
+public: // Functions from base classes
+    // From CRsfwDavAccessContext
+    void StartL();
+    void TransactionCompleteL();
+    void TransactionError(TInt aError);
+
+private:
+    void ConstructL(CRsfwDavAccess* aDavAccess,
+                    MRsfwRemoteAccessResponseHandler* aResponseHandler,
+                    const TDesC& aPathName,
+                    CRsfwDirEntAttr** aDirEntAttr);
+
+private: // Data
+    CRsfwDirEntAttr**           iDirEntAttr;
+    RPointerArray<CRsfwDirEnt>  iOwnDirEnts;
+    };
+
+// -----------------------------------------------------------------
+// Get
+// -----------------------------------------------------------------
+
+class CRsfwDavAccessContextGet: public CRsfwDavAccessContext
+    {
+public:
+    /**
+     * Two-phased constructor.
+     * 
+     */
+    static CRsfwDavAccessContextGet* NewL(
+        CRsfwDavAccess* aDavAccess,
+        MRsfwRemoteAccessResponseHandler* aResponseHandler,
+        const TDesC& aRemotePathName,
+        const TDesC& aLocalPathName,
+        TInt aOffset,
+        TInt* aLength,
+        TUint aFlags);
+    void StartL();
+    void TransactionCompleteL();
+    void TransactionError(TInt aError);
+
+private:
+    void ConstructL(CRsfwDavAccess* aDavAccess,
+                    MRsfwRemoteAccessResponseHandler* aResponseHandler,
+                    const TDesC& aRemotePathName,
+                    const TDesC& aLocalPathName,
+                    TInt aOffset,
+                    TInt* aLength,
+                    TUint aFlags);
+
+private: // Data
+    TBufC<KMaxPath>  iLocalPathName;
+    TInt             iOffset;
+    TInt*            iLength;
+    TUint            iFlags;
+    };
+
+// -----------------------------------------------------------------
+// Put
+// -----------------------------------------------------------------
+
+class CRsfwDavAccessContextPut: public CRsfwDavAccessContext
+    {
+public:
+    /**
+     * Two-phased constructor.
+     * 
+     */
+    static CRsfwDavAccessContextPut* NewL(
+        CRsfwDavAccess* aDavAccess,
+        MRsfwRemoteAccessResponseHandler* aResponseHandler,
+        const TDesC& aLocalPathName,
+        const TDesC& aRemotePathName,
+        const TDesC8& aMimeType,
+        TInt aOffset,
+        TInt aLength,
+        TInt aTotalLength,
+        const TDesC8* aLockToken);
+
+public: // Functions from base classes
+    // From CRsfwDavAccessContext
+    void StartL();
+    void TransactionCompleteL();
+    void TransactionError(TInt aError);
+
+private:
+    void ConstructL(CRsfwDavAccess* aDavAccess,
+                    MRsfwRemoteAccessResponseHandler* aResponseHandler,
+                    const TDesC& aLocalPathName,
+                    const TDesC& aRemotePathName,
+                    const TDesC8& aMimeType,
+                    TInt aOffset,
+                    TInt aLength,
+                    TInt aTotalLength,
+                    const TDesC8* aLockToken);
+
+private: // Data
+    TBufC<KMaxPath>            iLocalPathName;
+    TBufC8<KMaxMimeTypeLength> iMimeType;
+    TInt                       iOffset;
+    TInt                       iLength;
+    TInt                       iTotalLength;
+    const TDesC8*              iLockToken;
+    
+    // The recipient of the entity MUST NOT ignore any Content-*
+    // (e.g. Content-Range) headers that it does not understand or implement
+    // and MUST return a 501 (Not Implemented) response in such cases.
+    TBool            iContentRangeSupported;
+    };
+
+// -----------------------------------------------------------------
+// MkDir
+// -----------------------------------------------------------------
+
+class CRsfwDavAccessContextMkDir: public CRsfwDavAccessContext
+    {
+public:
+    /**
+     * Two-phased constructor.
+     * 
+     */
+    static CRsfwDavAccessContextMkDir* NewL(
+        CRsfwDavAccess* aDavAccess,
+        MRsfwRemoteAccessResponseHandler* aResponseHandler,
+        const TDesC& aPathName);
+
+public: // Functions from base classes
+    // From CRsfwDavAccessContext
+    void StartL();
+    void TransactionCompleteL();
+    void TransactionError(TInt aError);
+
+private:
+    void ConstructL(CRsfwDavAccess* aDavAccess,
+                    MRsfwRemoteAccessResponseHandler* aResponseHandler,
+                    const TDesC& aPathName);
+    };
+
+// -----------------------------------------------------------------
+// Delete
+// -----------------------------------------------------------------
+
+class CRsfwDavAccessContextDelete: public CRsfwDavAccessContext
+    {
+public:
+    /**
+     * Two-phased constructor.
+     * 
+     */
+    static CRsfwDavAccessContextDelete* NewL(
+        CRsfwDavAccess* aDavAccess,
+        MRsfwRemoteAccessResponseHandler* aResponseHandler,
+        const TDesC& aPathName,
+        TBool aIsDir,
+        const TDesC8* aLockToken);
+
+public: // Functions from base classes
+    // From CRsfwDavAccessContext
+    void StartL();
+    void TransactionCompleteL();
+    void TransactionError(TInt aError);
+
+private:
+    void ConstructL(CRsfwDavAccess* aDavAccess,
+                    MRsfwRemoteAccessResponseHandler* aResponseHandler,
+                    const TDesC& aPathName,
+                    TBool aIsdir,
+                    const TDesC8* aLockToken);
+
+private: // Data
+    TBool            iIsDir;
+    const TDesC8*    iLockToken;
+    };
+
+// -----------------------------------------------------------------
+// Move
+// -----------------------------------------------------------------
+
+class CRsfwDavAccessContextMove: public CRsfwDavAccessContext
+    {
+public:
+    /**
+     * Two-phased constructor.
+     * 
+     */
+    static CRsfwDavAccessContextMove* NewL(
+        CRsfwDavAccess* aDavAccess,
+        MRsfwRemoteAccessResponseHandler* aResponseHandler,
+        const TDesC& aSrcPathName,
+        const TDesC& aDstPathName,
+        TBool aOverwrite,
+        const TDesC8* aSrcLockToken,
+        const TDesC8* aDstLockToken);
+
+public: // Functions from base classes
+    // From CRsfwDavAccessContext
+    void StartL();
+    void TransactionCompleteL();
+    void TransactionError(TInt aError);
+
+private:
+    void ConstructL(CRsfwDavAccess* aDavAccess,
+                    MRsfwRemoteAccessResponseHandler* aResponseHandler,
+                    const TDesC& aSrcPathName,
+                    const TDesC& aDstPathName,
+                    TBool aOverwrite,
+                    const TDesC8* aSrcLockToken,
+                    const TDesC8* aDstLockToken);
+
+private: // Data
+    TBufC<KMaxPath>  iSrcPathName;
+    const TDesC8*    iSrcLockToken;
+    const TDesC8*    iDstLockToken;
+    TBool            iOverwrite;
+    };
+
+// -----------------------------------------------------------------
+// Lock
+// -----------------------------------------------------------------
+
+class CRsfwDavAccessContextLock: public CRsfwDavAccessContext
+    {
+public:
+    /**
+     * Two-phased constructor.
+     * 
+     */
+    static CRsfwDavAccessContextLock* NewL(
+        CRsfwDavAccess* aDavAccess,
+        MRsfwRemoteAccessResponseHandler* aResponseHandler,
+        const TDesC& aPathName,
+        TUint aLockFlags,
+        TUint& aTimeout,
+        TDesC8** aLockToken);
+
+    /**
+     * Destructor.
+     */
+    virtual ~CRsfwDavAccessContextLock();
+
+public: // Functions from base classes
+    // From CRsfwDavAccessContext
+    void StartL();
+    void TransactionCompleteL();
+    void TransactionError(TInt aError);
+
+private:
+    void ConstructL(CRsfwDavAccess* aDavAccess,
+                    MRsfwRemoteAccessResponseHandler* aResponseHandler,
+                    const TDesC& aPathName,
+                    TUint aLockFlags,
+                    TUint& aTimeout,
+                    TDesC8** aLockToken);
+
+private: // Data
+    TUint            iLockFlags;
+    TUint*           iTimeout;
+    TDesC8**         iLockToken;
+    CRsfwDavFileInfo*    iDavFileInfo;
+    };
+
+// -----------------------------------------------------------------
+// RefreshLock
+// -----------------------------------------------------------------
+
+class CRsfwDavAccessContextRefreshLock: public CRsfwDavAccessContext
+    {
+public:
+    /**
+     * Two-phased constructor.
+     * 
+     */
+    static CRsfwDavAccessContextRefreshLock* NewL(
+        CRsfwDavAccess* aDavAccess,
+        MRsfwRemoteAccessResponseHandler* aResponseHandler,
+        const TDesC& aPathName,
+        const TDesC8* aLockToken,
+        TUint& aTimeout);
+    
+    /**
+     * Destructor.
+     */
+    virtual ~CRsfwDavAccessContextRefreshLock();
+
+public: // Functions from base classes
+    // From CRsfwDavAccessContext
+    void StartL();
+    void TransactionCompleteL();
+    void TransactionError(TInt aError);
+
+private:
+    void ConstructL(CRsfwDavAccess* aDavAccess,
+                    MRsfwRemoteAccessResponseHandler* aResponseHandler,
+                    const TDesC& aPathName,
+                    const TDesC8* aLockToken,
+                    TUint& aTimeout);
+
+private: // Data
+    TBufC<KMaxPath>  iPathName;
+    const TDesC8*    iLockToken;
+    TUint*           iTimeout;
+    CRsfwDavFileInfo*    iDavFileInfo;
+    };
+
+// -----------------------------------------------------------------
+// Unlock
+// -----------------------------------------------------------------
+
+class CRsfwDavAccessContextUnlock: public CRsfwDavAccessContext
+    {
+public:
+    /**
+     * Two-phased constructor.
+     * 
+     */
+    static CRsfwDavAccessContextUnlock* NewL(
+        CRsfwDavAccess* aDavAccess,
+        MRsfwRemoteAccessResponseHandler* aResponseHandler,
+        const TDesC& aPathName,
+        const TDesC8* aLockToken);
+
+public: // Functions from base classes
+    // From CRsfwDavAccessContext
+    void StartL();
+    void TransactionCompleteL();
+    void TransactionError(TInt aError);
+
+private:
+    void ConstructL(CRsfwDavAccess* aDavAccess,
+                    MRsfwRemoteAccessResponseHandler* aResponseHandler,
+                    const TDesC& aPathName,
+                    const TDesC8* aLockToken);
+    
+private: // Data
+    const TDesC8*    iLockToken;
+    };
+
+#endif // CRSFWDAVACCESSCONTEXT_H
+
+// End of File