25#ifndef SRC_XRDZIP_XRDZIPARCHIVE_HH_
26#define SRC_XRDZIP_XRDZIPARCHIVE_HH_
40#include <unordered_map>
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 )
147 uint16_t timeout = 0 )
169 uint16_t timeout = 0 );
187 uint16_t timeout = 0 );
201 uint16_t timeout = 0 )
233 uint16_t timeout = 0 );
247 auto cditr =
cdmap.find( fn );
248 if( cditr ==
cdmap.end() )
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!" );
314 uint64_t nextRecordOffset = ( cditr->second + 1 <
cdvec.size() ) ?
315 XrdCl::CDFH::GetOffset( *
cdvec[cditr->second + 1] ) : cdOffset;
317 if( filesize == std::numeric_limits<uint32_t>::max() && cdfh->
extra )
318 filesize = cdfh->
extra->compressedSize;
320 XrdCl::DataDescriptor::GetSize( cdfh->
IsZIP64() ) : 0;
321 offset = nextRecordOffset - filesize - descsize;
333 uint16_t timeout = 0 );
343 0,
"Archive not opened." );
374 inline bool SetProperty(
const std::string &name,
const std::string &value )
382 inline bool GetProperty(
const std::string &name, std::string &value )
423 uint16_t timeout = 0 );
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 );
578 typedef std::unordered_map<std::string, ZipCache>
zipcache_t;
Definition XrdClAnyObject.hh:33
void Set(Type object, bool own=true)
Definition XrdClAnyObject.hh:59
static PostMaster * GetPostMaster()
Get default post master.
Directory list.
Definition XrdClXRootDResponses.hh:650
A file.
Definition XrdClFile.hh:46
bool IsSecure() const
Check if the file is using an encrypted connection.
bool IsOpen() const
Check if the file is open.
bool GetProperty(const std::string &name, std::string &value) const
XRootDStatus Stat(bool force, ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
bool SetProperty(const std::string &name, const std::string &value)
void QueueJob(Job *job, void *arg=0)
Add a job to be run.
Definition XrdClJobManager.hh:92
JobManager * GetJobManager()
Get the job manager object user by the post master.
Handle an async response.
Definition XrdClXRootDResponses.hh:1126
Call the user callback.
Definition XrdClResponseJob.hh:31
Object stat info.
Definition XrdClXRootDResponses.hh:400
@ IsWritable
Write access is allowed.
Definition XrdClXRootDResponses.hh:414
uint32_t GetFlags() const
Get flags.
void SetSize(uint64_t size)
Set size.
void SetFlags(uint32_t flags)
Set flags.
Write operation (.
Definition XrdClFileOperations.hh:546
Request status.
Definition XrdClXRootDResponses.hh:219
Definition XrdClZipArchive.hh:61
OpenStages
Stages of opening and parsing a ZIP archive.
Definition XrdClZipArchive.hh:542
@ None
Definition XrdClZipArchive.hh:543
@ HaveCdRecords
Definition XrdClZipArchive.hh:547
@ HaveZip64EocdlBlk
Definition XrdClZipArchive.hh:545
@ Done
Definition XrdClZipArchive.hh:548
@ NotParsed
Definition XrdClZipArchive.hh:550
@ HaveEocdBlk
Definition XrdClZipArchive.hh:544
@ HaveZip64EocdBlk
Definition XrdClZipArchive.hh:546
@ Error
Definition XrdClZipArchive.hh:549
XRootDStatus ReadFrom(const std::string &fn, uint64_t offset, uint32_t size, void *buffer, ResponseHandler *handler, uint16_t timeout=0)
buffer_t orgcdbuf
Definition XrdClZipArchive.hh:592
XRootDStatus PgRead(uint64_t offset, uint32_t size, void *buffer, ResponseHandler *handler, uint16_t timeout=0)
Definition XrdClZipArchive.hh:143
bool IsSecure()
Check if the underlying file is using an encrypted connection.
Definition XrdClZipArchive.hh:366
bool cdexists
Definition XrdClZipArchive.hh:583
XRootDStatus Stat(const std::string &fn, StatInfo *&info)
Definition XrdClZipArchive.hh:242
XRootDStatus Write(uint32_t size, const void *buffer, ResponseHandler *handler, uint16_t timeout=0)
Definition XrdClZipArchive.hh:198
XRootDStatus UpdateMetadata(uint32_t crc32)
uint64_t archsize
Definition XrdClZipArchive.hh:582
bool GetProperty(const std::string &name, std::string &value)
Get property on the underlying File object.
Definition XrdClZipArchive.hh:382
XRootDStatus WriteImpl(uint32_t size, const void *buffer, ResponseHandler *handler, uint16_t timeout)
static void Schedule(ResponseHandler *handler, XRootDStatus *st, Response *rsp=nullptr)
Definition XrdClZipArchive.hh:473
std::unique_ptr< char[]> buffer
Definition XrdClZipArchive.hh:585
static StatInfo * make_stat(const StatInfo &starch, uint64_t size)
Definition XrdClZipArchive.hh:487
XRootDStatus OpenArchive(const std::string &url, OpenFlags::Flags flags, ResponseHandler *handler, uint16_t timeout=0)
XRootDStatus OpenOnly(const std::string &url, bool update, ResponseHandler *handler, uint16_t timeout=0)
StatInfo * make_stat(const std::string &fn)
Definition XrdClZipArchive.hh:502
XRootDStatus List(DirectoryList *&list)
bool ckpinit
Definition XrdClZipArchive.hh:598
XRootDStatus AppendFile(const std::string &fn, uint32_t crc32, uint32_t size, const void *buffer, ResponseHandler *handler, uint16_t timeout=0)
bool SetProperty(const std::string &name, const std::string &value)
Set property on the underlying File object.
Definition XrdClZipArchive.hh:374
new_files_t newfiles
Definition XrdClZipArchive.hh:599
std::unique_ptr< LFH > lfh
Definition XrdClZipArchive.hh:597
XRootDStatus Stat(StatInfo *&info)
Definition XrdClZipArchive.hh:264
void Clear()
Clear internal ZipArchive objects.
Definition XrdClZipArchive.hh:528
cdvec_t cdvec
Definition XrdClZipArchive.hh:587
uint32_t orgcdsz
Definition XrdClZipArchive.hh:590
OpenStages openstage
Definition XrdClZipArchive.hh:594
zipcache_t zipcache
Definition XrdClZipArchive.hh:596
XRootDStatus CloseArchive(ResponseHandler *handler, uint16_t timeout=0)
Create the central directory at the end of ZIP archive and close it.
std::unique_ptr< EOCD > eocd
Definition XrdClZipArchive.hh:586
std::unordered_map< std::string, NewFile > new_files_t
Definition XrdClZipArchive.hh:579
bool IsOpen()
Definition XrdClZipArchive.hh:358
XRootDStatus GetOffset(const std::string &fn, uint64_t &offset)
Definition XrdClZipArchive.hh:290
XRootDStatus PgReadFrom(const std::string &fn, uint64_t offset, uint32_t size, void *buffer, ResponseHandler *handler, uint16_t timeout=0)
virtual ~ZipArchive()
Destructor.
XRootDStatus CloseFile()
Definition XrdClZipArchive.hh:339
File archive
Definition XrdClZipArchive.hh:581
friend XRootDStatus ReadFromImpl(ZipArchive &, const std::string &, uint64_t, uint32_t, void *, ResponseHandler *, uint16_t)
uint32_t orgcdcnt
Definition XrdClZipArchive.hh:591
std::unique_ptr< ZIP64_EOCD > zip64eocd
Definition XrdClZipArchive.hh:593
std::unordered_map< std::string, ZipCache > zipcache_t
Type that maps file name to its cache.
Definition XrdClZipArchive.hh:578
bool updated
Definition XrdClZipArchive.hh:584
XRootDStatus GetCRC32(const std::string &fn, uint32_t &cksum)
Definition XrdClZipArchive.hh:278
ZipArchive(bool enablePlugIns=true)
Constructor.
cdmap_t cdmap
Definition XrdClZipArchive.hh:588
XRootDStatus OpenFile(const std::string &fn, OpenFlags::Flags flags=OpenFlags::None, uint64_t size=0, uint32_t crc32=0)
XRootDStatus Read(uint64_t offset, uint32_t size, void *buffer, ResponseHandler *handler, uint16_t timeout=0)
Definition XrdClZipArchive.hh:122
std::string openfn
Definition XrdClZipArchive.hh:595
static AnyObject * PkgRsp(Response *rsp)
Definition XrdClZipArchive.hh:446
uint64_t cdoff
Definition XrdClZipArchive.hh:589
static void Free(XRootDStatus *st, Response *rsp)
Free status and response.
Definition XrdClZipArchive.hh:458
void SetCD(const buffer_t &buffer)
File & GetFile()
Get the underlying File object.
Definition XrdClZipArchive.hh:390
static XRootDStatus * make_status(const XRootDStatus &status=XRootDStatus())
Allocate new XRootDStatus object.
Definition XrdClZipArchive.hh:520
Definition XrdClZipArchive.hh:45
Definition XrdEcReader.hh:59
Definition XrdEcStrmWriter.hh:53
Definition XrdClAction.hh:34
const uint16_t stError
An error occurred that could potentially be retried.
Definition XrdClStatus.hh:32
const uint16_t errNotFound
Definition XrdClStatus.hh:100
const uint16_t errInvalidOp
Definition XrdClStatus.hh:51
const uint16_t errNotSupported
Definition XrdClStatus.hh:62
Definition XrdClZipArchive.hh:45
Definition XrdZipCDFH.hh:42
std::vector< std::unique_ptr< CDFH > > cdvec_t
Definition XrdZipCDFH.hh:51
std::vector< char > buffer_t
Definition XrdZipUtils.hh:56
std::unordered_map< std::string, size_t > cdmap_t
Definition XrdZipCDFH.hh:56
Definition XrdOucJson.hh:4517
none object for initializing empty Optional
Definition XrdClOptional.hh:35
Flags
Open flags, may be or'd when appropriate.
Definition XrdClFileSystem.hh:76
@ None
Nothing.
Definition XrdClFileSystem.hh:77
bool IsOK() const
We're fine.
Definition XrdClStatus.hh:124
LFH of a newly appended file (in case it needs to be overwritten)
Definition XrdClZipArchive.hh:557
uint64_t offset
Definition XrdClZipArchive.hh:570
bool overwrt
Definition XrdClZipArchive.hh:572
NewFile(NewFile &&nf)
Definition XrdClZipArchive.hh:564
std::unique_ptr< LFH > lfh
Definition XrdClZipArchive.hh:571
NewFile(uint64_t offset, std::unique_ptr< LFH > lfh)
Definition XrdClZipArchive.hh:558
Definition XrdZipCDFH.hh:67
std::unique_ptr< Extra > extra
Definition XrdZipCDFH.hh:345
uint16_t compressionMethod
Definition XrdZipCDFH.hh:332
bool HasDataDescriptor()
Definition XrdZipCDFH.hh:324
uint32_t compressedSize
Definition XrdZipCDFH.hh:335
bool IsZIP64() const
Definition XrdZipCDFH.hh:316