Go to the documentation of this file.
25 #ifndef SRC_XRDZIP_XRDZIPARCHIVE_HH_
26 #define SRC_XRDZIP_XRDZIPARCHIVE_HH_
40 #include <unordered_map>
66 friend class ::MicroTest;
91 uint16_t timeout = 0 );
105 uint32_t crc32 = 0 );
122 uint16_t timeout = 0 )
125 return ReadFrom( openfn, offset, size, buffer, handler, timeout );
144 uint16_t timeout = 0 );
158 uint16_t timeout = 0 )
160 if( openstage != Done || openfn.empty() )
163 return WriteImpl( size, buffer, handler, timeout );
190 uint16_t timeout = 0 );
201 if( openstage != Done )
204 auto cditr = cdmap.find( fn );
205 if( cditr == cdmap.end() )
208 info = make_stat( fn );
222 return Stat( openfn, info );
234 if( openstage != Done )
237 auto cditr = cdmap.find( fn );
238 if( cditr == cdmap.end() )
240 cksum = cdvec[cditr->second]->ZCRC32;
252 uint16_t timeout = 0 );
260 if( openstage != Done || openfn.empty() )
262 0,
"Archive not opened." );
279 return openstage == Done;
285 inline bool SetProperty(
const std::string &name,
const std::string &value )
287 return archive.SetProperty( name, value );
293 inline bool GetProperty(
const std::string &name, std::string &value )
295 return archive.GetProperty( name, value );
327 uint16_t timeout = 0 );
349 template<
typename Response>
352 if( !rsp )
return nullptr;
361 template<
typename Response>
376 template<
typename Response>
379 if( !handler )
return Free( st, rsp );
410 std::unique_ptr<StatInfo> stinfo( infoptr );
411 auto itr = cdmap.find( fn );
412 if( itr == cdmap.end() )
return nullptr;
413 size_t index = itr->second;
414 return make_stat( *stinfo, cdvec[index]->uncompressedSize );
458 NewFile( uint64_t offset, std::unique_ptr<LFH> lfh ) : offset( offset ),
459 lfh( std::move( lfh ) ),
465 lfh( std::move( nf.lfh ) ),
466 overwrt( nf.overwrt )
478 typedef std::unordered_map<std::string, ZipCache>
zipcache_t;
XRootDStatus Stat(const std::string &fn, StatInfo *&info)
Definition: XrdClZipArchive.hh:199
Write operation (.
Definition: XrdClFileOperations.hh:369
Handle an async response.
Definition: XrdClXRootDResponses.hh:1051
std::unique_ptr< LFH > lfh
Definition: XrdClZipArchive.hh:497
std::unique_ptr< EOCD > eocd
Definition: XrdClZipArchive.hh:486
XRootDStatus Read(uint64_t offset, uint32_t size, void *buffer, ResponseHandler *handler, uint16_t timeout=0)
Definition: XrdClZipArchive.hh:118
std::unique_ptr< LFH > lfh
Definition: XrdClZipArchive.hh:471
std::unordered_map< std::string, ZipCache > zipcache_t
Type that maps file name to its cache.
Definition: XrdClZipArchive.hh:478
Definition: XrdClZipArchive.hh:45
static void Free(XRootDStatus *st, Response *rsp)
Free status and response.
Definition: XrdClZipArchive.hh:362
cdvec_t cdvec
Definition: XrdClZipArchive.hh:487
static XRootDStatus * make_status(const XRootDStatus &status=XRootDStatus())
Allocate new XRootDStatus object.
Definition: XrdClZipArchive.hh:420
std::unordered_map< std::string, NewFile > new_files_t
Definition: XrdClZipArchive.hh:479
@ None
Nothing.
Definition: XrdClFileSystem.hh:77
XRootDStatus Stat(StatInfo *&info)
Definition: XrdClZipArchive.hh:218
void Set(Type object, bool own=true)
Definition: XrdClAnyObject.hh:59
static AnyObject * PkgRsp(Response *rsp)
Definition: XrdClZipArchive.hh:350
A file.
Definition: XrdClFile.hh:46
static void Schedule(ResponseHandler *handler, XRootDStatus *st, Response *rsp=nullptr)
Definition: XrdClZipArchive.hh:377
XRootDStatus CloseArchive(ResponseHandler *handler, uint16_t timeout=0)
Create the central directory at the end of ZIP archive and close it.
StatImpl< false > Stat(Ctx< File > file, Arg< bool > force, uint16_t timeout=0)
Definition: XrdClFileOperations.hh:358
bool GetProperty(const std::string &name, std::string &value)
Get property on the underlying File object.
Definition: XrdClZipArchive.hh:293
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
Call the user callback.
Definition: XrdClResponseJob.hh:31
buffer_t orgcdbuf
Definition: XrdClZipArchive.hh:492
static StatInfo * make_stat(const StatInfo &starch, uint64_t size)
Definition: XrdClZipArchive.hh:391
XRootDStatus CloseFile()
Definition: XrdClZipArchive.hh:258
XRootDStatus UpdateMetadata(uint32_t crc32)
bool SetProperty(const std::string &name, const std::string &value)
Set property on the underlying File object.
Definition: XrdClZipArchive.hh:285
zipcache_t zipcache
Definition: XrdClZipArchive.hh:496
Request status.
Definition: XrdClXRootDResponses.hh:219
uint64_t offset
Definition: XrdClZipArchive.hh:470
NewFile(uint64_t offset, std::unique_ptr< LFH > lfh)
Definition: XrdClZipArchive.hh:458
@ HaveEocdBlk
Definition: XrdClZipArchive.hh:444
File archive
Definition: XrdClZipArchive.hh:481
@ IsWritable
Write access is allowed.
Definition: XrdClXRootDResponses.hh:414
bool IsOpen()
Definition: XrdClZipArchive.hh:277
Directory list.
Definition: XrdClXRootDResponses.hh:650
uint32_t orgcdcnt
Definition: XrdClZipArchive.hh:491
std::unique_ptr< ZIP64_EOCD > zip64eocd
Definition: XrdClZipArchive.hh:493
@ Error
Definition: XrdClZipArchive.hh:449
XRootDStatus GetCRC32(const std::string &fn, uint32_t &cksum)
Definition: XrdClZipArchive.hh:232
std::vector< std::unique_ptr< CDFH > > cdvec_t
Definition: XrdZipCDFH.hh:44
XRootDStatus OpenArchive(const std::string &url, OpenFlags::Flags flags, ResponseHandler *handler, uint16_t timeout=0)
@ HaveZip64EocdBlk
Definition: XrdClZipArchive.hh:446
cdmap_t cdmap
Definition: XrdClZipArchive.hh:488
LFH of a newly appended file (in case it needs to be overwritten)
Definition: XrdClZipArchive.hh:457
XRootDStatus Write(uint32_t size, const void *buffer, ResponseHandler *handler, uint16_t timeout=0)
Definition: XrdClZipArchive.hh:155
Definition: XrdEcReader.hh:58
bool ckpinit
Definition: XrdClZipArchive.hh:498
uint32_t GetFlags() const
Get flags.
NewFile(NewFile &&nf)
Definition: XrdClZipArchive.hh:464
std::vector< char > buffer_t
Definition: XrdZipUtils.hh:54
Definition: XrdZipCDFH.hh:40
bool cdexists
Definition: XrdClZipArchive.hh:483
std::unique_ptr< char[]> buffer
Definition: XrdClZipArchive.hh:485
void QueueJob(Job *job, void *arg=0)
Add a job to be run.
Definition: XrdClJobManager.hh:92
void SetCD(const buffer_t &buffer)
uint32_t orgcdsz
Definition: XrdClZipArchive.hh:490
OpenStages
Stages of opening and parsing a ZIP archive.
Definition: XrdClZipArchive.hh:442
bool overwrt
Definition: XrdClZipArchive.hh:472
Definition: XrdClAnyObject.hh:26
Definition: XrdClZipArchive.hh:45
XRootDStatus ReadFrom(const std::string &fn, uint64_t offset, uint32_t size, void *buffer, ResponseHandler *handler, uint16_t timeout=0)
XRootDStatus AppendFile(const std::string &fn, uint32_t crc32, uint32_t size, const void *buffer, ResponseHandler *handler, uint16_t timeout=0)
static PostMaster * GetPostMaster()
Get default post master.
XRootDStatus OpenFile(const std::string &fn, OpenFlags::Flags flags=OpenFlags::None, uint64_t size=0, uint32_t crc32=0)
void SetSize(uint64_t size)
Set size.
uint64_t archsize
Definition: XrdClZipArchive.hh:482
XRootDStatus WriteImpl(uint32_t size, const void *buffer, ResponseHandler *handler, uint16_t timeout)
uint64_t cdoff
Definition: XrdClZipArchive.hh:489
OpenStages openstage
Definition: XrdClZipArchive.hh:494
Definition: XrdEcStrmWriter.hh:53
@ Done
Definition: XrdClZipArchive.hh:448
std::string openfn
Definition: XrdClZipArchive.hh:495
const uint16_t stError
An error occurred that could potentially be retried.
Definition: XrdClStatus.hh:32
virtual ~ZipArchive()
Destructor.
Object stat info.
Definition: XrdClXRootDResponses.hh:400
bool updated
Definition: XrdClZipArchive.hh:484
const uint16_t errNotFound
Definition: XrdClStatus.hh:100
JobManager * GetJobManager()
Get the job manager object user by the post master.
void SetFlags(uint32_t flags)
Set flags.
Definition: XrdClAnyObject.hh:33
const uint16_t errInvalidOp
Definition: XrdClStatus.hh:51
new_files_t newfiles
Definition: XrdClZipArchive.hh:499
ZipArchive(bool enablePlugIns=true)
Constructor.
Flags
Open flags, may be or'd when appropriate.
Definition: XrdClFileSystem.hh:76
@ HaveZip64EocdlBlk
Definition: XrdClZipArchive.hh:445
Definition: XrdClZipArchive.hh:61
XRootDStatus List(DirectoryList *&list)
std::unordered_map< std::string, size_t > cdmap_t
Definition: XrdZipCDFH.hh:54
void Clear()
Clear internal ZipArchive objects.
Definition: XrdClZipArchive.hh:428
XRootDStatus OpenOnly(const std::string &url, bool update, ResponseHandler *handler, uint16_t timeout=0)
none object for initializing empty Optional
Definition: XrdClOptional.hh:35
StatInfo * make_stat(const std::string &fn)
Definition: XrdClZipArchive.hh:406
@ HaveCdRecords
Definition: XrdClZipArchive.hh:447