diff -r 7259cf1302ad -r 169364e7e4b4 hti/HtiServicePlugins/HtiFtpServicePlugin/inc/HtiFtpServicePlugin.h --- a/hti/HtiServicePlugins/HtiFtpServicePlugin/inc/HtiFtpServicePlugin.h Tue Jul 06 16:05:13 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,488 +0,0 @@ -/* -* Copyright (c) 2009 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: Implementation of ECOM plug-in service interface providing -* the FTP service. -* -*/ - - -#ifndef HTIFTPSERVICEPLUGIN_H__ -#define HTIFTPSERVICEPLUGIN_H__ - -// INCLUDES -#include -#include -#include - -// CONSTANTS -enum TFtpCommand - { - EFtpSTOR = 0x02, - EFtpSTOR_u = 0x03, - EFtpRETR = 0x04, - EFtpRETR_u = 0x05, - EFtpLIST = 0x06, - EFtpLIST_u = 0x07, - EFtpMKD = 0x08, - EFtpMKD_u = 0x09, - EFtpRMD = 0x0A, - EFtpRMD_u = 0x0B, - EFtpDELE = 0x0C, - EFtpDELE_u = 0x0D, - EFtpCANCEL = 0x0E, - EFtpFILESIZE = 0x0F, - EFtpLISTDIR = 0x10, - EFtpLISTDIR_u = 0x11, - EFtpLISTSIZES = 0x12, - EFtpLISTSIZES_u = 0x13, - EFtpLISTDRIVES = 0x14, - EFtpLISTDRIVES_u = 0x15, - EFtpRENAME = 0x16, - EFtpRENAME_u = 0x17, - EFtpCOPY = 0x18, - EFtpCOPY_u = 0x19, - EFtpMOVE = 0x1A, - EFtpMOVE_u = 0x1B, - EFtpSETFORCE = 0x20, - EFtpCHECKSUM = 0x30, - EFtpCHECKSUM_u = 0x31, - EFtpListDetail = 0x32, - EFtpListDetail_u = 0x33, - EFtpListDirDetail = 0x34, - EFtpListDirDetail_u = 0x35, - EFtpFORMAT = 0x40, - EFtpOK = 0xF0, - }; - -enum TAlgorithm - { - EMD5 = 0x01, - }; - -_LIT(KHtiFileHlp, "HtiFileHlp.exe"); - -//temporary file used if file is uploaded to Tcb -_LIT(KTmpFileName, "C:\\htitemp.bin"); - -//tokens used for command line for HtiFileHlp.exe -_LIT( KHtiFileHlpDeleteCmd, "d" ); -_LIT( KHtiFileHlpCopyCmd, "c" ); -_LIT( KHtiFileHlpMkdCmd, "m" ); -_LIT( KHtiFileHlpRmdCmd, "r" ); -_LIT( KHtiFileHlpMoveCmd, "mv" ); -_LIT( KHtiFileHlpRenameCmd, "re" ); -_LIT( KHtiFileHlpDelim, "|" ); - -//tokens used to id Tcb folders -_LIT(KHtiTcbSys, "\\sys\\"); -_LIT(KHtiTcbResource, "\\resource\\"); - -//offset where first folder's backslash starts in absolute filename - // 012 -const static TInt KPathOffset = 2; //"C:\" - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS -class CHtiFtpBackupFakeBase; - -// CLASS DECLARATION -/** -* Callback interface for AO -*/ -class MFtpObserverAO - { -public: - virtual void FtpComplete( TInt anError) = 0; - }; - - -// CLASS DECLARATION -/** -* AO for async request to CFileMan and RFile -*/ -class CFtpHandlerAO : public CActive, public MFileManObserver - { -public: - CFtpHandlerAO(MFtpObserverAO* anObserver); - ~CFtpHandlerAO(); - - /** Set AO active */ - void Start(); - -public: //MFileManObserver - virtual MFileManObserver::TControl NotifyFileManStarted(); - virtual MFileManObserver::TControl NotifyFileManOperation(); - virtual MFileManObserver::TControl NotifyFileManEnded(); - -protected: //from CActive - void RunL(); - /** - * no direct cancel for RFile and CFileMan - */ - void DoCancel(); - //TInt RunError(TInt aError); - -protected: - MFtpObserverAO* iObserver; - /** set to ERtue if CFileMan operation should be canceled */ - TBool iCancelFileMan; - }; - - -class CProcessLogonAO : public CActive - { -public: - CProcessLogonAO(MFtpObserverAO* anObserver); - ~CProcessLogonAO(); - - /** Set AO active */ - void Start(const TDesC& aCmdLine); - -protected: //from CActive - void RunL(); - void DoCancel(); - -protected: - MFtpObserverAO* iObserver; - RProcess iProcess; - }; - - -// CLASS DECLARATION -/** -* FTP plugin implementation -*/ -class CHtiFtpServicePlugin : public CHTIServicePluginInterface, - public MFtpObserverAO - { -protected: - /** - * Major states of FPT plug-in - */ - enum TFtpServiceState - { - EIdle, /** waits for a new command */ - EListBusy, /** waits for memory to send LIST response */ - ERmdBusy, /** outstanding request CFileMan::RmDir() */ - EDeleBusy, /** outstanding request CFileMan::Delete() */ - EStorWait, /** waits for data packages */ - EStorBusy, /** outstanding request to RFile::Write() */ - ERetrBusy, /** outstanding request to RFile::Read() */ - ERetrWait, /** waits for memory to send data package */ - EStorTcbBusy, /** outstandig request to HtiFileHlp.exe */ - EDeleTcbBusy, /** outstandig request to HtiFileHlp.exe */ - EMkdTcbBusy, /** outstandig request to HtiFileHlp.exe */ - ERmdTcbBusy, /** outstandig request to HtiFileHlp.exe */ - ERenameBusy, /** outstanding request CFileMan::Rename() */ - ERenameTcbBusy, /** outstandig request to HtiFileHlp.exe */ - ECopyBusy, /** outstanding request CFileMan::Copy() */ - ECopyTcbBusy, /** outstandig request to HtiFileHlp.exe */ - EMoveBusy, /** outstanding request CFileMan::Move() */ - EMoveTcbBusy /** outstandig request to HtiFileHlp.exe */ - }; -public: - - static CHtiFtpServicePlugin* NewL(); - - // Interface implementation - - /** - * Calculates iBufferSize based on iDispatcher->FreeMemory() value - */ - void InitL(); - - /** - * @return ETrue when in any EXXXBusy state - */ - TBool IsBusy(); - - /** - * Process either control or data message depending on aPriority - * - * @param aMessage message with commands or data - * @param aPriority indicates type of aMessage - */ - void ProcessMessageL( const TDesC8& aMessage, - THtiMessagePriority aPriority ); - - void NotifyMemoryChange( TInt aAvailableMemory ); - -public: // MFtpObserverAO - void FtpComplete( TInt anError ); - -protected: - CHtiFtpServicePlugin(); - void ConstructL(); - - virtual ~CHtiFtpServicePlugin(); - - /** - * Handle FTP control messages - * - * @param aMessage message with command - */ - void HandleControlMessageL( const TDesC8& aMessage ); - - /** - * Handle expected CANCEL control message - * received in EStorWait or ERetrWait state - * If aMessage does not contain CANCEL command, - * BUSY message is sent, otherwise current operation is canceled - * and plugin goes to EIdle state and sends OK message. - * - * @param aMessage message with command - */ - void HandleCancelL( const TDesC8& aMessage ); - - /** - * Accepts data messages for STOR command - * - * @param aMessage message with file data - */ - void HandleDataMessageL( const TDesC8& aMessage ); - - //command handlers - - /** - * Handle STOR command request - */ - void HandleReceiveFileL(); - - /** - * Handle RETR command request - */ - void HandleSendFileL(); - - /** - * Reads one portion of file data during RETR command handeling. - */ - void ReadToBuffer(); - - /** - * Sends one portion of file data during RETR command handeling. - */ - void SendBuffer(); - - /** - * Handle LIST command - * - * @param aUnicodText if ETrue then response in unicode - * @param aReadingAtt specifies what entries to read from a dir - * @param aSizes if ETrue filesizes are included in the response - */ - void HandleListL( TBool aUnicodText, TUint aReadingAtt, TBool aSizes ); - - /** - * Handle LIST FILES DETAIL command - * - * @param aUnicodText if ETrue then response in unicode - * @param aReadingAtt specifies what entries to read from a dir - */ - void HandleListDetailL( TBool aUnicodText, TUint aReadingAtt); - - /** - * Extracts and validate file name to iFileName - * If error sends err msg - * Return ETrue when filename is valid - * @param aFilename descriptor with filename - * @param aToUnicode flag indicates that data in aFilename - * should be treated as an unicode string - */ - TBool GetFileNameL( const TDesC8& aFilename, TBool aToUnicode ); - - /** - * Extracts and validates path to iFileName - * If error sends err msg - * Return ETrue when directory is valid - * @param aDirname descriptor with directory name - * @param aToUnicode flag indicates that data in aFilename - * should be treated as an unicode string - */ - TBool GetDirectoryL( const TDesC8& aDirname, TBool aToUnicode ); - - /** - * Helper to send short control messages - * (e.g. OK, BUSY, FILESIZE) - * @param aCmd command code - * @param aMsg additional command parameters - * @return KErrNone or Symbian error code - */ - TInt SendControlMsg( TFtpCommand aCmd, const TDesC8& aMsg ); - - /** - * Helper to send error message - * @return KErrNone or some system-wide error code - */ - inline TInt SendErrorMsg( TInt anError, const TDesC8& aMsg ); - - /** - * Handle delete command - * @param aFilename the file to delete - */ - void HandleDeleteL( const TDesC& aFilename ); - - /** - * Handle rename command - * @param aMessage message that contains - * old and new file/directory names. - * @param aToUnicode flag indicates that data in aFilename - * should be treated as an unicode string - */ - void HandleRenameL( const TDesC8& aMessage, TBool aUnicode ); - - /** - * Handle copy command - * @param aMessage message that contains the file/directory to be copied - * and the location and name of the copy. - * @param aToUnicode flag indicates that data in aFilename - * should be treated as an unicode string - */ - void HandleCopyL( const TDesC8& aMessage, TBool aUnicode ); - - /** - * Handle move command - * @param aMessage message that contains the file/directory to be moved - * and the new location - * @param aToUnicode flag indicates that data in aFilename - * should be treated as an unicode string - */ - void HandleMoveL( const TDesC8& aMessage, TBool aUnicode ); - - /** - * Safe unicode copying from 8bit descr to 16bit buffer - * @param aTo destination descriptor - * @param aFrom source descriptor - */ - void CopyUnicode( TDes& aTo, const TDesC8& aFrom ); - - /** - * Check either aFilename point in a TCB directories (sys, private, resource) - * @param aFilename the file to check - */ - TBool IsFileTcb( const TDesC& aFilename ); - - /** - * Uses HtiFileHlp.exe to delete file from TCB directories - * @param aFilename the file to delete - */ - void HandleTcbDeleteL( const TDesC& aFilename ); - - /** - * Uses HtiFileHlp.exe to copy files/folders to TCB directories - * @param aFromFilename the source path - * @param aToFilename the destination path - */ - void HandleTcbCopyL( const TDesC& aFromFilename, const TDesC& aToFilename ); - - /** - * Uses HtiFileHlp.exe to makedir in TCB directories - * @param aDirname the directory to create - */ - void HandleTcbMkdL( const TDesC& aDirname ); - - /** - * Uses HtiFileHlp.exe to delete dir in TCB directories - * @param aDirname the directory to delete - */ - void HandleTcbRmdL( const TDesC& aDirname ); - - /** - * Uses HtiFileHlp.exe to do rename in TCB folders - * @param aTargetName the path to rename - * @param aDestName the new path name - */ - void HandleTcbRenameL( const TDesC& aTargetName, const TDesC& aDestName ); - - /** - * Uses HtiFileHlp.exe to do move to TCB folders - * @param aTargetName the path to move - * @param aDestName the destination path - */ - void HandleTcbMoveL( const TDesC& aTargetName, const TDesC& aDestName ); - - /** - * Sets the faking of backup/restore operation on/off. - * If aOn is ETrue sets backup/restore on, otherwise sets it off. - * @return KErrNone on success, otherwise system error code - */ - TInt SetBURFakeState( TBool aOn ); - - /** - * Calculates a checksum for the given file with the given algorithm. - */ - void HandleCheckSumCalcL( TAlgorithm aAlgorithm, - const TDesC& aFilename ); - - /** - * Formats a drive. - */ - void HandleFormat( const TUint8 aDrive, const TUint8 aMode ); - - /** - * Creates a list of drives. - */ - void HandleListDrivesL( TBool aUnicode ); - -private: - void RemoveEndBackslash( TFileName& aFileName ); - -protected: - /** plugin state */ - TFtpServiceState iState; - /** File server */ - RFs iFs; - /** File manager used for RMD and DELE */ - CFileMan* iFileMan; - /** current file for STOR and RETR*/ - RFile iFile; - /** file name of iFile */ - TFileName iFileName; - - /** current offset in file during STOR or RETR */ - TInt iCurrentOffset; //mean received bytes or sent bytes - /** the final size of iFile */ - TInt iFileSize; - - /** the size of iSendBuffer, calculated in InitL() */ - TInt iBufferSize; - /** send buffer for RETR and LIST commands */ - HBufC8* iSendBuffer; - /** des of iSendBuffer, used for RETR */ - TPtr8 iSendBufferDes; - - /** AO to handle current asyn request */ - CFtpHandlerAO* iHandlerAO; - - /** used for HtiFileHlp.exe */ - CProcessLogonAO* iProcessLogonAO; - - /** - * Class for activating/deactivating a backup session. - * This is used for forced operations to locked files. Activating backup - * should release locks on files that are in use by some other application. - */ - CHtiFtpBackupFakeBase* iBackupFake; - - /** Handle to the DLL for activating/deactivating backup */ - RLibrary iBackupFakeLib; - }; - -#endif - -// End of File