libclamunrar/rdwrfn.hpp
01eebc13
 #ifndef _RAR_DATAIO_
 #define _RAR_DATAIO_
 
 class CmdAdd;
 class Unpack;
 
 #if 0
 // We use external i/o calls for Benchmark command.
 #define COMPRDATAIO_EXTIO
 #endif
 
 class ComprDataIO
 {
   private:
     void ShowUnpRead(int64 ArcPos,int64 ArcSize);
     void ShowUnpWrite();
 
 
     bool UnpackFromMemory;
     size_t UnpackFromMemorySize;
     byte *UnpackFromMemoryAddr;
 
     bool UnpackToMemory;
     size_t UnpackToMemorySize;
     byte *UnpackToMemoryAddr;
 
     size_t UnpWrSize;
     byte *UnpWrAddr;
 
     int64 UnpPackedSize;
 
     bool ShowProgress;
     bool TestMode;
     bool SkipUnpCRC;
     bool NoFileHeader;
 
     File *SrcFile;
     File *DestFile;
 
     CmdAdd *Command;
 
     FileHeader *SubHead;
     int64 *SubHeadPos;
 
 #ifndef RAR_NOCRYPT
     CryptData *Crypt;
     CryptData *Decrypt;
 #endif
 
 
     int LastPercent;
 
     wchar CurrentCommand;
 
   public:
     ComprDataIO();
     ~ComprDataIO();
     void Init();
     int UnpRead(byte *Addr,size_t Count);
     void UnpWrite(byte *Addr,size_t Count);
     void EnableShowProgress(bool Show) {ShowProgress=Show;}
     void GetUnpackedData(byte **Data,size_t *Size);
     void SetPackedSizeToRead(int64 Size) {UnpPackedSize=Size;}
     void SetTestMode(bool Mode) {TestMode=Mode;}
     void SetSkipUnpCRC(bool Skip) {SkipUnpCRC=Skip;}
     void SetNoFileHeader(bool Mode) {NoFileHeader=Mode;}
     void SetFiles(File *SrcFile,File *DestFile);
     void SetCommand(CmdAdd *Cmd) {Command=Cmd;}
     void SetSubHeader(FileHeader *hd,int64 *Pos) {SubHead=hd;SubHeadPos=Pos;}
     void SetEncryption(bool Encrypt,CRYPT_METHOD Method,SecPassword *Password,
          const byte *Salt,const byte *InitV,uint Lg2Cnt,byte *HashKey,byte *PswCheck);
     void SetAV15Encryption();
     void SetCmt13Encryption();
     void SetUnpackToMemory(byte *Addr,uint Size);
     void SetCurrentCommand(wchar Cmd) {CurrentCommand=Cmd;}
 
 
     bool PackVolume;
     bool UnpVolume;
     bool NextVolumeMissing;
     int64 UnpArcSize;
     int64 CurPackRead,CurPackWrite,CurUnpRead,CurUnpWrite;
 
 
     // Size of already processed archives.
     // Used to calculate the total operation progress.
     int64 ProcessedArcSize;
 
     int64 TotalArcSize;
 
     DataHash PackedDataHash; // Packed write and unpack read hash.
     DataHash PackHash; // Pack read hash.
     DataHash UnpHash;  // Unpack write hash.
 
     bool Encryption;
     bool Decryption;
 };
 
 #endif