25 #ifndef SRC_XRDZIP_XRDZIPARCHIVE_HH_
26 #define SRC_XRDZIP_XRDZIPARCHIVE_HH_
40 #include <unordered_map>
51 using namespace XrdZip;
66 friend class ::MicroTest;
67 friend class ::XrdEcTests;
69 template<
typename RSP>
95 uint16_t timeout = 0 );
109 uint32_t crc32 = 0 );
126 uint16_t timeout = 0 )
129 return ReadFrom( openfn, offset, size, buffer, handler, timeout );
147 uint16_t timeout = 0 )
150 return PgReadFrom( openfn, offset, size, buffer, handler, timeout );
169 uint16_t timeout = 0 );
187 uint16_t timeout = 0 );
201 uint16_t timeout = 0 )
203 if( openstage != Done || openfn.empty() )
206 return WriteImpl( size, buffer, handler, timeout );
233 uint16_t timeout = 0 );
244 if( openstage != Done )
247 auto cditr = cdmap.find( fn );
248 if( cditr == cdmap.end() )
251 info = make_stat( fn );
268 return Stat( openfn, info );
280 if( openstage != Done )
283 auto cditr = cdmap.find( fn );
284 if( cditr == cdmap.end() )
286 cksum = cdvec[cditr->second]->ZCRC32;
294 auto cditr = cdmap.find( fn );
295 if( cditr == cdmap.end() )
304 0,
"The compression algorithm is not supported!" );
313 uint64_t cdOffset = zip64eocd ? zip64eocd->cdOffset : eocd->cdOffset;
314 uint64_t nextRecordOffset = ( cditr->second + 1 < cdvec.size() ) ?
317 if( filesize == std::numeric_limits<uint32_t>::max() && cdfh->
extra )
318 filesize = cdfh->
extra->compressedSize;
321 offset = nextRecordOffset - filesize - descsize;
333 uint16_t timeout = 0 );
341 if( openstage != Done || openfn.empty() )
343 0,
"Archive not opened." );
360 return openstage == Done;
368 return archive.IsSecure();
374 inline bool SetProperty(
const std::string &name,
const std::string &value )
376 return archive.SetProperty( name, value );
382 inline bool GetProperty(
const std::string &name, std::string &value )
384 return archive.GetProperty( name, value );
423 uint16_t timeout = 0 );
437 void SetCD(
const buffer_t &buffer );
445 template<
typename Response>
448 if( !rsp )
return nullptr;
457 template<
typename Response>
472 template<
typename Response>
475 if( !handler )
return Free( st, rsp );
506 if (!st.
IsOK())
return nullptr;
507 std::unique_ptr<StatInfo> stinfo( infoptr );
508 auto itr = cdmap.find( fn );
509 if( itr == cdmap.end() )
return nullptr;
510 size_t index = itr->second;
511 uint64_t uncompressedSize = cdvec[index]->uncompressedSize;
512 if( cdvec[index]->extra && uncompressedSize == std::numeric_limits<uint32_t>::max() )
513 uncompressedSize = cdvec[index]->extra->uncompressedSize;
514 return make_stat( *stinfo, uncompressedSize );
558 NewFile( uint64_t offset, std::unique_ptr<LFH> lfh ) : offset( offset ),
559 lfh( std::move( lfh ) ),
565 lfh( std::move( nf.lfh ) ),
566 overwrt( nf.overwrt )
578 typedef std::unordered_map<std::string, ZipCache>
zipcache_t;
Write access is allowed.
Definition: XrdClXRootDResponses.hh:414
ZipReadFromImpl< false > ReadFrom(Ctx< ZipArchive > zip, Arg< std::string > fn, Arg< uint64_t > offset, Arg< uint32_t > size, Arg< void * > buffer, uint16_t timeout=0)
Factory for creating ArchiveReadImpl objects.
Definition: XrdClZipOperations.hh:302
Definition: XrdClAnyObject.hh:32
static void Free(XRootDStatus *st, Response *rsp)
Free status and response.
Definition: XrdClZipArchive.hh:458
buffer_t orgcdbuf
Definition: XrdClZipArchive.hh:592
std::vector< char > buffer_t
Definition: XrdZipUtils.hh:56
Definition: XrdClZipArchive.hh:544
cdvec_t cdvec
Definition: XrdClZipArchive.hh:587
NewFile(uint64_t offset, std::unique_ptr< LFH > lfh)
Definition: XrdClZipArchive.hh:558
Directory list.
Definition: XrdClXRootDResponses.hh:649
static uint64_t GetOffset(const CDFH &cdfh)
Definition: XrdZipCDFH.hh:227
Object stat info.
Definition: XrdClXRootDResponses.hh:399
Call the user callback.
Definition: XrdClResponseJob.hh:30
bool ckpinit
Definition: XrdClZipArchive.hh:598
void Clear()
Clear internal ZipArchive objects.
Definition: XrdClZipArchive.hh:528
Definition: XrdClZipArchive.hh:546
LFH of a newly appended file (in case it needs to be overwritten)
Definition: XrdClZipArchive.hh:556
StatInfo * make_stat(const std::string &fn)
Definition: XrdClZipArchive.hh:502
uint64_t offset
Definition: XrdClZipArchive.hh:570
const uint16_t errNotSupported
Definition: XrdClStatus.hh:62
Definition: XrdClZipArchive.hh:545
bool IsSecure()
Check if the underlying file is using an encrypted connection.
Definition: XrdClZipArchive.hh:366
File archive
Definition: XrdClZipArchive.hh:581
XRootDStatus Stat(const std::string &fn, StatInfo *&info)
Definition: XrdClZipArchive.hh:242
std::unordered_map< std::string, ZipCache > zipcache_t
Type that maps file name to its cache.
Definition: XrdClZipArchive.hh:578
Definition: XrdEcStrmWriter.hh:52
XRootDStatus CloseFile()
Definition: XrdClZipArchive.hh:339
static XRootDStatus * make_status(const XRootDStatus &status=XRootDStatus())
Allocate new XRootDStatus object.
Definition: XrdClZipArchive.hh:520
void QueueJob(Job *job, void *arg=0)
Add a job to be run.
Definition: XrdClJobManager.hh:92
XRootDStatus GetOffset(const std::string &fn, uint64_t &offset)
Definition: XrdClZipArchive.hh:290
std::unordered_map< std::string, NewFile > new_files_t
Definition: XrdClZipArchive.hh:579
std::unique_ptr< Extra > extra
Definition: XrdZipCDFH.hh:345
bool overwrt
Definition: XrdClZipArchive.hh:572
uint32_t compressedSize
Definition: XrdZipCDFH.hh:335
XRootDStatus PgRead(uint64_t offset, uint32_t size, void *buffer, ResponseHandler *handler, uint16_t timeout=0)
Definition: XrdClZipArchive.hh:143
uint32_t GetFlags() const
Get flags.
cdmap_t cdmap
Definition: XrdClZipArchive.hh:588
A file.
Definition: XrdClFile.hh:45
XRootDStatus Write(uint32_t size, const void *buffer, ResponseHandler *handler, uint16_t timeout=0)
Definition: XrdClZipArchive.hh:198
std::unique_ptr< ZIP64_EOCD > zip64eocd
Definition: XrdClZipArchive.hh:593
CloseArchiveImpl< false > CloseArchive(Ctx< ZipArchive > zip, uint16_t timeout=0)
Factory for creating CloseFileImpl objects.
Definition: XrdClZipOperations.hh:621
Definition: XrdZipCDFH.hh:66
Definition: XrdClZipArchive.hh:549
zipcache_t zipcache
Definition: XrdClZipArchive.hh:596
none object for initializing empty Optional
Definition: XrdClOptional.hh:35
void Set(Type object, bool own=true)
Definition: XrdClAnyObject.hh:59
const uint16_t stError
An error occurred that could potentially be retried.
Definition: XrdClStatus.hh:32
const uint16_t errNotFound
Definition: XrdClStatus.hh:100
bool GetProperty(const std::string &name, std::string &value)
Get property on the underlying File object.
Definition: XrdClZipArchive.hh:382
Request status.
Definition: XrdClXRootDResponses.hh:218
StatImpl< false > Stat(Ctx< File > file, Arg< bool > force, uint16_t timeout=0)
Definition: XrdClFileOperations.hh:535
static StatInfo * make_stat(const StatInfo &starch, uint64_t size)
Definition: XrdClZipArchive.hh:487
OpenArchiveImpl< false > OpenArchive(Ctx< ZipArchive > zip, Arg< std::string > fn, Arg< OpenFlags::Flags > flags, uint16_t timeout=0)
Factory for creating OpenArchiveImpl objects.
Definition: XrdClZipOperations.hh:123
static uint8_t GetSize(bool zip64)
Definition: XrdZipDataDescriptor.hh:37
static void Schedule(ResponseHandler *handler, XRootDStatus *st, Response *rsp=nullptr)
Definition: XrdClZipArchive.hh:473
std::unique_ptr< EOCD > eocd
Definition: XrdClZipArchive.hh:586
std::unordered_map< std::string, size_t > cdmap_t
Definition: XrdZipCDFH.hh:56
uint32_t orgcdsz
Definition: XrdClZipArchive.hh:590
bool SetProperty(const std::string &name, const std::string &value)
Set property on the underlying File object.
Definition: XrdClZipArchive.hh:374
std::unique_ptr< LFH > lfh
Definition: XrdClZipArchive.hh:571
OpenStages
Stages of opening and parsing a ZIP archive.
Definition: XrdClZipArchive.hh:541
Handle an async response.
Definition: XrdClXRootDResponses.hh:1125
bool IsOpen()
Definition: XrdClZipArchive.hh:358
bool IsZIP64() const
Definition: XrdZipCDFH.hh:316
bool cdexists
Definition: XrdClZipArchive.hh:583
Definition: XrdEcReader.hh:58
uint32_t orgcdcnt
Definition: XrdClZipArchive.hh:591
void SetFlags(uint32_t flags)
Set flags.
Definition: XrdClZipArchive.hh:547
uint16_t compressionMethod
Definition: XrdZipCDFH.hh:332
JobManager * GetJobManager()
Get the job manager object user by the post master.
XRootDStatus GetCRC32(const std::string &fn, uint32_t &cksum)
Definition: XrdClZipArchive.hh:278
File & GetFile()
Get the underlying File object.
Definition: XrdClZipArchive.hh:390
XRootDStatus Read(uint64_t offset, uint32_t size, void *buffer, ResponseHandler *handler, uint16_t timeout=0)
Definition: XrdClZipArchive.hh:122
Definition: XrdClZipArchive.hh:45
Definition: XrdClZipArchive.hh:60
OpenFileImpl< false > OpenFile(Ctx< ZipArchive > zip, Arg< std::string > fn, Arg< OpenFlags::Flags > flags=OpenFlags::None, Arg< uint64_t > size=0, Arg< uint32_t > crc32=0, uint16_t timeout=0)
Factory for creating OpenFileImpl objects.
Definition: XrdClZipOperations.hh:184
Nothing.
Definition: XrdClFileSystem.hh:77
bool HasDataDescriptor()
Definition: XrdZipCDFH.hh:324
NewFile(NewFile &&nf)
Definition: XrdClZipArchive.hh:564
std::vector< std::unique_ptr< CDFH > > cdvec_t
Definition: XrdZipCDFH.hh:46
std::string openfn
Definition: XrdClZipArchive.hh:595
OpenStages openstage
Definition: XrdClZipArchive.hh:594
new_files_t newfiles
Definition: XrdClZipArchive.hh:599
static PostMaster * GetPostMaster()
Get default post master.
Flags
Open flags, may be or'd when appropriate.
Definition: XrdClFileSystem.hh:75
void SetSize(uint64_t size)
Set size.
bool IsOK() const
We're fine.
Definition: XrdClStatus.hh:124
XRootDStatus Stat(StatInfo *&info)
Definition: XrdClZipArchive.hh:264
Write operation (.
Definition: XrdClFileOperations.hh:544
Definition: XrdClZipArchive.hh:548
uint64_t cdoff
Definition: XrdClZipArchive.hh:589
std::unique_ptr< LFH > lfh
Definition: XrdClZipArchive.hh:597
const uint16_t errInvalidOp
Definition: XrdClStatus.hh:51
std::unique_ptr< char[]> buffer
Definition: XrdClZipArchive.hh:585
uint64_t archsize
Definition: XrdClZipArchive.hh:582
AppendFileImpl< false > AppendFile(Ctx< ZipArchive > zip, Arg< std::string > fn, Arg< uint32_t > crc32, Arg< uint32_t > size, Arg< const void * > buffer, uint16_t timeout=0)
Factory for creating ArchiveReadImpl objects.
Definition: XrdClZipOperations.hh:421
bool updated
Definition: XrdClZipArchive.hh:584
ZipListImpl< false > List(Ctx< ZipArchive > zip)
Factory for creating ZipStatImpl objects.
Definition: XrdClZipOperations.hh:574
static AnyObject * PkgRsp(Response *rsp)
Definition: XrdClZipArchive.hh:446