remotestoragefw/webdavaccessplugin/inc/rsfwdavaccess.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 09:07:59 +0200
changeset 0 3ad9d5175a89
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* 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 plugin interface for RSFW
 *
*/


#ifndef CRSFWDAVACCESS_H
#define CRSFWDAVACCESS_H

// INCLUDES
//#include <HttpErr.h>

#include "rsfwremoteaccess.h"
#include "rsfwdavsession.h"
//#include "rsfwdavfileinfo.h"
#include "rsfwconnectionmanager.h"

// CONSTANTS
const TInt KCommRetries      = 3;

// DATA TYPES
enum TRemoteAccessOp
    {
    ERemoteAccessOpNone = 0,
    ERemoteAccessOpOpen,
    ERemoteAccessOpGetDirectory,
    ERemoteAccessOpGetDirectoryAttributes,
    ERemoteAccessOpGetFileAttributes,
    ERemoteAccessOpSetAttributes,
    ERemoteAccessOpGetFile,
    ERemoteAccessOpMakeDirectory,
    ERemoteAccessOpCreateFile,
    ERemoteAccessOpPutFile,
    ERemoteAccessOpDeleteDirectory,
    ERemoteAccessOpDeleteFile,
    ERemoteAccessOpRename,
    ERemoteAccessOpObtainLock,
    ERemoteAccessOpReleaseLock,
    ERemoteAccessOpRefreshLock
    };

// FORWARD DECLARATIONS
class CRsfwDavAccessContext;
//class CRsfwDirEnt;
//class CRsfwDirEntAttr;

// CLASS DECLARATION

/**
 *  WebDAV protocol plugin for Rsfw
 *
 *  @lib davaccess.lib
 *  @since Series 60 3.1
 */

class CRsfwDavAccess: public CRsfwRemoteAccess,
                  public MRsfwDavResponseObserver,
                  public MRsfwConnectionObserver
    {
public: // Constructors and destructor
    /**
     * Two-phased constructor.
     */
    static CRsfwDavAccess* NewL();
    
    /**
     * Destructor.
     */
    virtual ~CRsfwDavAccess();

public: // New functions
   
    /**
       Return information about the given object
       @param aPath path of the object
       @return file information
    */
    CRsfwDavFileInfo* DavFileInfoL(const TDesC& aPath);

    /**
       Add information about the given object
       @param aDavFileInfo information about the object
    */
    void AddDavFileInfo(CRsfwDavFileInfo* aDavFileInfo);

    /**
       Remove all information about the given object
       @param aPath path of the object
       @return file information
    */
    void RemoveDavFileInfoL(const TDesC& aPath);

    /**
       Return the WebDAV session object
       @return WebDAV session
    */
    inline CRsfwDavSession* WebDavSession() { return iWebDavSession; };

    /**
       Return next access context id
       @return id
    */
    inline TUint GetNextAccessContextId() { return ++iCurrentDavContextId; };

public: // Functions from base classes
    // From CRsfwRemoteAccess
    void SetupL(MRsfwRemoteAccessObserver* aRsfwRemoteAccessObserver);

	/*  In this plug-in aAuxData is the access point
		 special values for IAP selection
		DefaultPreferences = *
		AskUser = ?
	*/
    TUint OpenL(const TUriC& aUri,
                const TDesC& aFriendlyName,
                const TDesC& aUserName,
                const TDesC& aPassword,
                const TDesC& aAuxData,
                MRsfwRemoteAccessResponseHandler* aResponseHandler);
    
    TUint GetDirectoryL(const TDesC& aPathName,
                        RPointerArray<CRsfwDirEnt>& aDirEnts,
                        MRsfwRemoteAccessResponseHandler* aResponseHandler);
    
    TUint GetDirectoryAttributesL(
        const TDesC& aPathName,
        CRsfwDirEntAttr*& aAttr,
        MRsfwRemoteAccessResponseHandler* aResponseHandler);
    
    TUint GetFileAttributesL(const TDesC& aPathName,
                             CRsfwDirEntAttr*& aAttr,
                             MRsfwRemoteAccessResponseHandler* aResponseHandler);
    
    TUint SetAttributesL(const TDesC& aPathName,
                         CRsfwDirEntAttr& aAttr,
                         MRsfwRemoteAccessResponseHandler* aResponseHandler);
    
    TUint GetFileL(const TDesC& aRemotePathName,
                   const TDesC& aLocalPathName,
                   TInt aOffset,
                   TInt* aLength,
                   TUint aFlags,
                   MRsfwRemoteAccessResponseHandler* aResponseHandler);
    
    TUint PutFileL(const TDesC& aLocalPathName,
                   const TDesC& aRemotePathName,
                   const TDesC8& aMimeType,
                   TInt aOffset,
                   TInt aLength,
                   TInt aTotalLength,
                   MRsfwRemoteAccessResponseHandler* aResponseHandler);
    
    TUint PutFileL(const TDesC& aLocalPathName,
                   const TDesC& aRemotePathName,
                   const TDesC8& aMimeType,
                   MRsfwRemoteAccessResponseHandler* aResponseHandler);
    
    TUint CreateFileL(const TDesC& aPathName,
                      TBool aIsOverwriting,
                      MRsfwRemoteAccessResponseHandler* aResponseHandler);

    TUint MakeDirectoryL(const TDesC& aPathName,
                         MRsfwRemoteAccessResponseHandler* aResponseHandler);
    
    TUint DeleteDirectoryL(const TDesC& aPathName,
                           MRsfwRemoteAccessResponseHandler* aResponseHandler);

    TUint DeleteFileL(const TDesC& aPathName,
                      MRsfwRemoteAccessResponseHandler* aResponseHandler);
    
    TUint RenameL(const TDesC& aSrcPathName,
                  const TDesC& aDstPathName,
                  TBool aOverwrite,
                  MRsfwRemoteAccessResponseHandler* aResponseHandler);

    TUint ObtainLockL(const TDesC& aPathName,
                      TUint aLockFlags,
                      TUint& aTimeout,
                      TDesC8*& aLockToken,
                      MRsfwRemoteAccessResponseHandler* aResponseHandler);
    
    TUint ReleaseLockL(const TDesC& aPathName,
                       MRsfwRemoteAccessResponseHandler* aResponseHandler);
    
    TUint RefreshLockL(const TDesC& aPathName,
                       TUint& aTimeout,
                       MRsfwRemoteAccessResponseHandler* aResponseHandler);

    void Cancel(TUint aId);
    
    void Cancel(TDesC& aTargetPath);

    TInt SetLockToken(const TDesC& aPathName, const TDesC8& aLockToken);

    // From MRsfwDavResponseObserver
    void RequestCompleteL(TUint aWebDavTransactionId);
    void RequestError(TUint aWebDavTransactionId, TInt aStatus);

    // From MRsfwConnectionObserver
    void HandleConnectionEventL(TInt aConnectionEvent, TAny* aArg);
    
private: 
    void ConstructL();
    TUint AddAccessContext(CRsfwDavAccessContext* aDavAccessContext);
    TInt LookupAccessContextByTransactionId(TUint aWebDavTransactionId);
    TInt LookupAccessContextByContextId(TUint aId);
    TInt LookupAccessContextByPath(TDesC& aTargetPath);
    TInt DavFileInfoIndexL(const TDesC& aPath);
    TUint OptionsL(MRsfwRemoteAccessResponseHandler* aResponseHandler);
    void SetLockTokenL(const TDesC& aPathName, const TDesC8& aLockToken);

private: // Data
    TBuf<KMaxPath>                          iRootDirectory;
    CRsfwDavSession*                         iWebDavSession;
    RPointerArray<CRsfwDavFileInfo>             iDavFileInfos; 
    RPointerArray<CRsfwDavAccessContext>    iDavAccessContexts;
    TUint                                   iCurrentDavContextId;
    MRsfwRemoteAccessObserver*              iRsfwRemoteAccessObserver;
    };

#endif // CRSFWDAVACCESS_H

// End of File