upnpavcontrolpoint/upnpaccessplugin/inc/upnpaccess.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:52:00 +0200
changeset 0 7f85d04be362
permissions -rw-r--r--
Revision: 200947 Kit: 200951

/** @file
* 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:  UPnP plugin interface for RSFW
*
*/


#ifndef C_CUPNPACCESS_H
#define C_CUPNPACCESS_H

// INCLUDES
#include <rsfwremoteaccess.h>
#include "upnpavcpenginerfsclient.h"

// CLASS DECLARATION

/**
 *  UPnP plugin for Rsfw.
 *  It enables mounting MS as new filesystem.
 *
 *  @lib upnpaccess.lib
 *  @since Series 60 3.1
 */
class CUpnpAccess: public CRsfwRemoteAccess
	{
	public: // Constructors and destructor
		/**
		 * Two-phased constructor.
		 */
		static CUpnpAccess* NewL();
		
		/**
		 * Destructor.
		 */
    virtual ~CUpnpAccess();
    /**
     * Set up parameters for operation.
     * @param aRsfwRemoteAccessObserver MRsfwRemoteAccessObserver for receiving
     *  asynchronous events from the accessor plugin,
     *  e.g. changes in connectivity.
     *  This parameter may be NULL
     *  NOTICE: this function is not supported by UPnP access plugin
     */
    void SetupL(MRsfwRemoteAccessObserver* /* aRsfwRemoteAccessObserver */);

    /**
     * Opens a connection to the server given by aServerName parameter.
     * For UPnPAccess only serve has to be defined and 
     * value should be equal to UDN of MS
     * So format URI for mounting has to be:
     * upnp://UDN
     *
     * @param aUri URI of the remote repository.
     *   The URI must not contain authority part (user name/password)
     * @param aFriendlyName server friendly name for access control dialog 
     *                                  (can be empty)
     * @param aUserName user name for access control (can be empty)
     * @param aPassword password for access control (can be empty)
     * @param aAuxData auxiliary parameters for connection setup (eg IAP info)
     * @param aResponseHandler response handler
     * @return identifier of the created transaction
     */
    TUint OpenL(const TUriC& aUri,
    	    const TDesC& aFriendlyName,
			const TDesC& aUserName,
			const TDesC& aPassword,
			const TDesC& aAuxData,
			MRsfwRemoteAccessResponseHandler* aResponseHandler) ;

		/**
		* Gets contents of the directory given by aPathName parameter.
		*
		* @param aPathName path name of the directory
		* @param aDirentsp an array of directory entries to be filled.
		* @param aResponseHandler response handler
		* @return identifier of the created transaction
		*/    
		TUint GetDirectoryL(const TDesC& aPathName,
                        RPointerArray<CRsfwDirEnt>& aDirEnts,
                        MRsfwRemoteAccessResponseHandler* aResponseHandler);

		/**
		* 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
		* @param aResponseHandler response handler
		* @return identifier of the created transaction
		*/    
    TUint GetDirectoryAttributesL(
			const TDesC& aPathName,
			CRsfwDirEntAttr*& aAttr,
			MRsfwRemoteAccessResponseHandler* aResponseHandler);
    /**
     * Gets attributes of the file given by aPathName parameter.
     *
     * @param aPathName path name of the file
     * @param aAttr attribute structure to be filled
     * @param aResponseHandler response handler
     * @return identifier of the created transaction
     */         
		TUint GetFileAttributesL(const TDesC& aPathName,	CRsfwDirEntAttr*& aAttr,
			MRsfwRemoteAccessResponseHandler* aResponseHandler);
    /** 
     * 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.
     * NOTICE: this function is not supported by UPnP access plugin
     *
     * @param aPathName path name of the file or directory
     * @param aAttr attribute structure
     * @param aResponseHandler response handler
     * @return identifier of the created transaction
     */    
    TUint SetAttributesL(const TDesC& aPathName,
                         CRsfwDirEntAttr& aAttr,
                         MRsfwRemoteAccessResponseHandler* aResponseHandler);
    /**
     * 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 (NULL/0=all)
     * @param aFlags operation qualifier.
     *   The following flags have been defined:
     *   KRemoteAccessOptionGetToStartOfFile: even if an offset is specified
     *      the fetched data is still put at the beginning of the local file.     
     * @param aResponseHandler response handler
     * @return identifier of the created transaction
     */    
    TUint GetFileL(const TDesC& aRemotePathName,
                   const TDesC& aLocalPathName,
                   TInt aOffset,
                   TInt* aLength,
                   TUint aFlags,
                   MRsfwRemoteAccessResponseHandler* aResponseHandler);
    /**
     * Puts a file to the server.
     * NOTICE: this function is not supported by UPnP access plugin     
     *
     * @param aLocalPathName path name of the local file
     * @param aRemotePathName path name of the remote file
     * @param aMimeType MIME-type of the file
     *   (will be put to Content-Type, e.g. text/plain or
     *   application/octet-stream)     
     * @param aOffset offset of the first byte to be accessed
     * @param aLength length of data to be accessed (NULL/0=all)
     * @param aTotalLength total length of the file     
     * @param aResponseHandler response handler
     * @return identifier of the created transaction
     */   
    TUint PutFileL(const TDesC& aLocalPathName,
                   const TDesC& aRemotePathName,
                   const TDesC8& aMimeType,                   
                   TInt aOffset,
                   TInt aLength,
                   TInt aTotalLength,                   
                   MRsfwRemoteAccessResponseHandler* aResponseHandler);
    /**
     * Puts a file to the server.
     *
     * @param aLocalPathName path name of the local file
     * @param aRemotePathName path name of the remote file
     * @param aMimeType MIME-type of the file (will be put to Content-Type,
     *   e.g. text/plain or application/octet-stream)    
     * @param aResponseHandler response handler
     * @return identifier of the created transaction
     */    
    TUint PutFileL(const TDesC& aLocalPathName,
                   const TDesC& aRemotePathName,
                   const TDesC8& aMimeType,                   
                   MRsfwRemoteAccessResponseHandler* aResponseHandler);
    /**
     * Creates an empty file on the remote server
     *
     * @param aPathName path name of the new file
     * @param aOverWriting whether we are overwriting an existing file     
     * @param aResponseHandler response handler
     * @return identifier of the created transaction
     */    
    TUint CreateFileL(const TDesC& aPathName, TBool aOverWriting,
                      MRsfwRemoteAccessResponseHandler* aResponseHandler);
    /**
     * Makes a directory.
     *
     * @param aPathName path name of the new directory
     * @param aResponseHandler response handler
     * @return identifier of the created transaction
     */
    TUint MakeDirectoryL(const TDesC& aPathName,
                         MRsfwRemoteAccessResponseHandler* aResponseHandler);
    /**
     * Deletes a directory.
     *
     * @param aPathName path name of the directory to be deleted
     * @param aResponseHandler response handler
     * @return identifier of the created transaction
     */    
    TUint DeleteDirectoryL(const TDesC& aPathName,
                           MRsfwRemoteAccessResponseHandler* aResponseHandler);
    /**
     * Deletes a file.
     *
     * @param aPathName path name of the file to be deleted
     * @param aResponseHandler response handler
     * @return identifier of the created transaction
     */
    TUint DeleteFileL(const TDesC& aPathName,
                      MRsfwRemoteAccessResponseHandler* aResponseHandler);
		/**
     * Renames a file or a directory.
     * (may involve movement to another directory).
     * NOTICE: this function is not supported by UPnP access plugin        
     *
     * @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
     * @param aResponseHandler response handler
     * @return identifier of the created transaction
     */
    TUint RenameL(const TDesC& aSrcPathName,
                  const TDesC& aDstPathName,
                  TBool aOverwrite,
                  MRsfwRemoteAccessResponseHandler* aResponseHandler);

    /**
     * Obtains a lock for the given file system object
     * NOTICE: this function is not supported by UPnP access plugin       
     *
     * @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 lock token
     * @param aResponseHandler response handler
     * @return identifier of the created transaction
     */
    TUint ObtainLockL(const TDesC& aPathName,
                      TUint aLockFlags,
                      TUint& aTimeout,
                      TDesC8*& aLockToken,
                      MRsfwRemoteAccessResponseHandler* aResponseHandler);
    /**
     * Releases the lock of the given file system object
     * NOTICE: this function is not supported by UPnP access plugin       
     *
     * @param aPathName path name of the object to be locked
     * @param aResponseHandler response handler
     */    
    TUint ReleaseLockL(const TDesC& aPathName,
                       MRsfwRemoteAccessResponseHandler* aResponseHandler);
    /**
     * Refreshes the lock of the given file system object
     * NOTICE: this function is not supported by UPnP access plugin       
     *
     * @param aPathName path name of the object to be locked
     * @param aTimeout the timeout that is requested and granted
     * @param aResponseHandler response handler
     * @return identifier of the created transaction
     */    
    TUint RefreshLockL(const TDesC& aPathName,
                       TUint& aTimeout,
                       MRsfwRemoteAccessResponseHandler* aResponseHandler);

    /**
     * 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);
                           
    /**
     * Cancels a transaction
     * Eventually the transaction will/should call HandleRemoteAccessResponseL
     * with status KErrCancel
     * NOTICE: this function is not supported by UPnP access plugin       
     *
     * @param aId the identifier of the transaction to be canceled
     */
    void Cancel(TUint aId);
    
    /**
     * Cancels a transaction
     * Eventually the transaction will/should call HandleRemoteAccessResponseL
     * with status KErrCancel
     * NOTICE: this function is not supported by UPnP access plugin       
     *
     * @param aTargetPath the identifier of the transaction to be canceled
     */    
    void Cancel(TDesC& aTargetPath);

	private:
		/**
		* Symbian 2nd phase constructor.
		*/	
    void ConstructL();

	private:
    // UDN of MS
    HBufC8* iUUID;
    // client to target server
    RUpnpAVCPEngineRFSClient iAVCPEngineClient;
    };

#endif // C_CUPNPACCESS_H

// End of File