diff -r 88ee4cf65e19 -r 1aa8c82cb4cb remotestoragefw/remotefileengine/inc/rsfwremoteaccesssync.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remotestoragefw/remotefileengine/inc/rsfwremoteaccesssync.h Wed Sep 01 12:15:08 2010 +0100 @@ -0,0 +1,259 @@ +/* +* 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: Synchronous layer on top of the Access Protocol plug-in API + * +*/ + + +#ifndef CRSFWREMOTEACCESSSYNC_H +#define CRSFWREMOTEACCESSSYNC_H + +// INCLUDES +#include + +#include "rsfwremoteaccess.h" + +// FORWARD DECLARATIONS +class CRsfwRemoteAccess; + +// CLASS DECLARATION +/** + * Class for accessing files via a file transport protocol + * by using synchronous calls. + * + * The derived classes are supposed to be registered and instantiated + * by using the the ECOM architecture. + */ + +class CRsfwRemoteAccessSync: public CBase, public MRsfwRemoteAccessResponseHandler + { +public: + /** + * Two-phased constructor. + * + * @param aProtocol protocol name, like "http", "https", or "ftp" + * @return a pointer to an object instance that implements + * this interface by using the given protocol. + */ + static CRsfwRemoteAccessSync* NewL(const TDesC8& aProtocol, + CRsfwRemoteAccess* aRemoteAccess = NULL); + + ~CRsfwRemoteAccessSync(); + + /** + * Configures the remote access module. + * Sets the connection state observer if available + * In davaccess creates the WebDAV session class + * + * @param aRemoteAccess asynchronous accessor (may be NULL) + * @param aRsfwRemoteAccessObserver connection event observer + * @return error code + */ + TInt Setup(MRsfwRemoteAccessObserver* aRsfwRemoteAccessObserver); + + /** + * Opens a connection to the server given by aServerName parameter. + * + * @param aUserName user name for access control (can be empty) + * @param aPassword password for access control (can be empty) + * @param aServerName the server's DNS name or IP address + * @param aPortNumber port number (like 80 for HTTP) + * @param aRootDirectory sub directory to be accessed (can be empty) + * @param aAuxData auxiliary parameters for connection setup (IAP info) + */ + TInt Open(const TDesC& aUserName, + const TDesC& aPassword, + const TDesC& aServerName, + TInt aPortNumber, + const TDesC& aRootDirectory, + const TDesC& aAuxData); + + /** + * Gets contents of the directory given by aPathName parameter. + * + * @param aPathName path name of the directory + * @param aDirEnts an array of directory entries to be filled. + */ + TInt GetDirectory(const TDesC& aPathName, + RPointerArray& aDirEntsp); + + /** + * Gets attributes of the directory given by aPathName parameter. + * This function may also be called if the type of the object is + * not yet known (e.g., the object could be a file). + * + * @param aPathName path name of the directory + * @param aAttr attribute structure to be filled + */ + TInt GetDirectoryAttributes(const TDesC& aPathName, + CRsfwDirEntAttr*& aAttr); + + /** + * Gets attributes of the file given by aPathName parameter. + * + * @param aPathName path name of the file + * @param aAttr attribute structure to be filled + */ + TInt GetFileAttributes(const TDesC& aPathName, + CRsfwDirEntAttr*& aAttr); + + /** + * Sets attributes of the file or directory given by aPathName parameter. + * This function is typically only used for files and even then + * the implementation may do nothing since standard file attributes + * are implied by the contents of the file or set in conjunction with + * other operations on the file system object. + * + * @param aPathName path name of the file or directory + * @param aAttr attribute structure + */ + TInt SetAttributes(const TDesC& aPathName, + CRsfwDirEntAttr& aAttr); + + /** + * Gets a remote file and copies it to a local file. + * Note that byte ranges are not be implemented by all + * file access protocols. + * + * @param aRemotePathName path name of the remote file + * @param aLocalPathName path name of the local file + * @param aOffset offset of the first byte to be accessed + * @param aLength length of data to be accessed/was accessed (0=all) + * @param aFlags operation flags (see RemoteAccess.h) + */ + TInt GetFile(const TDesC& aRemotePathName, + const TDesC& aLocalPathName, + TInt aOffset, + TInt* aLength, + TUint aFlags); + + /** + * Makes a directory. + * + * @param aPathName path name of the new directory + */ + TInt MakeDirectory(const TDesC& aPathName); + + + /** + * Creates an empty file on the remote server + * + * @param aPathName path name of the new file + */ + TInt CreateFile(const TDesC& aPathName); + + /** + * Puts a file to the server. + * + * @param aLocalPathName path name of the local file + * @param aRemotePathName path name of the remote file + */ + TInt PutFile(const TDesC& aLocalPathName, + const TDesC& aRemotePathName); + + /** + * Deletes a directory. + * + * @param aPathName path name of the directory to be deleted + */ + + TInt DeleteDirectory(const TDesC& aPathName); + + /** + * Deletes a file. + * + * @param aPathName path name of the file to be deleted + */ + TInt DeleteFile(const TDesC& aPathName); + + + /** + * Renames a file or a directory. + * (may involve movement to another directory). + * + * @param aSrcPathName path name of the object to be renamed + * @param aDstPathName new path name of the object + * @param aOverwrite allow overwriting an existing object + */ + TInt Rename(const TDesC& aSrcPathName, + const TDesC& aDstPathName, + TBool aOverwrite); + + /** + * Obtains a lock for the given file system object + * Note that this function is not be implemented by all + * file access protocols (e.g., FTP), some protocols only + * implement write locking (e.g., WebDAV). + * + * @param aPathName path name of the object to be locked + * @param aLockFlags indicates whether a write or read lock is requested + * @param aTimeout the timeout that is requested and granted + * @param aLockToken acquired lock token - the caller gets ownership + */ + TInt ObtainLock(const TDesC& aPathName, + TUint aLockFlags, + TUint& aTimeout, + TDesC8*& aLockToken + ); + + /** + * Releases the lock of the given file system object + * Note that this function is not be implemented by all + * file access protocols (e.g., FTP). + * + * @param aPathName path name of the object to be locked + */ + TInt ReleaseLock(const TDesC& aPathName); + + /** + * Refreshes the lock of the given file system object + * Note that this function is not be implemented by all + * file access protocols (e.g., FTP). + * + * @param aPathName path name of the object to be locked + * @param aTimeout the timeout that is requested and granted + * @param aResponseHandler response handler + */ + TInt RefreshLock(const TDesC& aPathName, TUint& aTimeout); + + // from MRemoteAccessResponseHandler + virtual void HandleRemoteAccessResponse(TUint aId, TInt aStatus); + + /** + * Sets lock token for the a given resource + * This lock token value replaces any previously cached token value + * + * @param aPathName path name + * @param aLockToken lock token + * @return error code + */ + TInt SetLockToken(const TDesC& aPathName, const TDesC8& aLockToken); + +private: + void ConstructL(const TDesC8& aProtocol, + CRsfwRemoteAccess* aRemoteAccess = NULL); + TInt Epilog(); + + +private: + CRsfwRemoteAccess* iRemoteAccess; + TBool iOwnRemoteAccess; // whether we own iRemoteAccess + CActiveSchedulerWait* iSchedulerWait; + TInt iStatus; // operation return status + TBool iPending; // is there a pending request + }; + +#endif // CRSFWREMOTEACCESSSYNC_H + +// End of File