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() )
164 return WriteImpl( size, buffer, handler, timeout );
183 uint16_t timeout = 0 );
194 if( openstage != Done )
197 auto cditr = cdmap.find( fn );
198 if( cditr == cdmap.end() )
201 info = make_stat( fn );
215 return Stat( openfn, info );
227 if( openstage != Done )
230 auto cditr = cdmap.find( fn );
231 if( cditr == cdmap.end() )
233 cksum = cdvec[cditr->second]->ZCRC32;
245 uint16_t timeout = 0 );
253 if( openstage != Done || openfn.empty() )
272 return openstage == Done;
278 inline bool SetProperty(
const std::string &name,
const std::string &value )
280 return archive.SetProperty( name, value );
311 uint16_t timeout = 0 );
325 void SetCD(
const buffer_t &buffer );
333 template<
typename Response>
336 if( !rsp )
return nullptr;
345 template<
typename Response>
360 template<
typename Response>
363 if( !handler )
return Free( st, rsp );
401 std::unique_ptr<StatInfo> stinfo( infoptr );
402 auto itr = cdmap.find( fn );
403 if( itr == cdmap.end() )
return nullptr;
404 size_t index = itr->second;
405 return make_stat( *stinfo, cdvec[index]->uncompressedSize );
447 typedef std::unordered_map<std::string, ZipCache>
zipcache_t;
Write access is allowed.
Definition: XrdClXRootDResponses.hh:410
A synchronized queue.
Definition: XrdClJobManager.hh:50
Definition: XrdClAnyObject.hh:32
static void Free(XRootDStatus *st, Response *rsp)
Free status and response.
Definition: XrdClZipArchive.hh:346
buffer_t orgcdbuf
Definition: XrdClZipArchive.hh:460
std::vector< char > buffer_t
Definition: XrdZipUtils.hh:54
Definition: XrdClZipArchive.hh:435
cdvec_t cdvec
Definition: XrdClZipArchive.hh:455
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
Directory list.
Definition: XrdClXRootDResponses.hh:645
Object stat info.
Definition: XrdClXRootDResponses.hh:395
Call the user callback.
Definition: XrdClResponseJob.hh:30
void Clear()
Clear internal ZipArchive objects.
Definition: XrdClZipArchive.hh:419
Definition: XrdClZipArchive.hh:437
StatInfo * make_stat(const std::string &fn)
Definition: XrdClZipArchive.hh:397
Definition: XrdClZipArchive.hh:436
File archive
Definition: XrdClZipArchive.hh:449
XRootDStatus Stat(const std::string &fn, StatInfo *&info)
Definition: XrdClZipArchive.hh:192
std::unordered_map< std::string, ZipCache > zipcache_t
Type that maps file name to its cache.
Definition: XrdClZipArchive.hh:447
Definition: XrdEcStrmWriter.hh:52
XRootDStatus CloseFile()
Definition: XrdClZipArchive.hh:251
static XRootDStatus * make_status(const XRootDStatus &status=XRootDStatus())
Allocate new XRootDStatus object.
Definition: XrdClZipArchive.hh:411
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
void QueueJob(Job *job, void *arg=0)
Add a job to be run.
Definition: XrdClJobManager.hh:92
uint32_t GetFlags() const
Get flags.
cdmap_t cdmap
Definition: XrdClZipArchive.hh:456
A file.
Definition: XrdClFile.hh:45
XRootDStatus Write(uint32_t size, const void *buffer, ResponseHandler *handler, uint16_t timeout=0)
Definition: XrdClZipArchive.hh:155
std::unique_ptr< ZIP64_EOCD > zip64eocd
Definition: XrdClZipArchive.hh:461
Definition: XrdZipCDFH.hh:38
CloseArchiveImpl< false > CloseArchive(Ctx< ZipArchive > zip, uint16_t timeout=0)
Factory for creating CloseFileImpl objects.
Definition: XrdClZipOperations.hh:621
Definition: XrdClZipArchive.hh:440
zipcache_t zipcache
Definition: XrdClZipArchive.hh:464
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:98
Request status.
Definition: XrdClXRootDResponses.hh:214
Definition: XrdClAnyObject.hh:25
StatImpl< false > Stat(Ctx< File > file, Arg< bool > force, uint16_t timeout=0)
Definition: XrdClFileOperations.hh:358
static StatInfo * make_stat(const StatInfo &starch, uint64_t size)
Definition: XrdClZipArchive.hh:382
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 void Schedule(ResponseHandler *handler, XRootDStatus *st, Response *rsp=nullptr)
Definition: XrdClZipArchive.hh:361
std::unique_ptr< EOCD > eocd
Definition: XrdClZipArchive.hh:454
std::unordered_map< std::string, size_t > cdmap_t
Definition: XrdZipCDFH.hh:53
uint32_t orgcdsz
Definition: XrdClZipArchive.hh:458
bool SetProperty(const std::string &name, const std::string &value)
Set property on the underlying File object.
Definition: XrdClZipArchive.hh:278
bool IsWorker()
Definition: XrdClJobManager.hh:102
OpenStages
Stages of opening and parsing a ZIP archive.
Definition: XrdClZipArchive.hh:432
Handle an async response.
Definition: XrdClXRootDResponses.hh:1036
virtual void HandleResponse(XRootDStatus *status, AnyObject *response)
Definition: XrdClXRootDResponses.hh:1066
bool IsOpen()
Definition: XrdClZipArchive.hh:270
bool cdexists
Definition: XrdClZipArchive.hh:451
Definition: XrdEcReader.hh:57
uint32_t orgcdcnt
Definition: XrdClZipArchive.hh:459
void SetFlags(uint32_t flags)
Set flags.
Definition: XrdClZipArchive.hh:438
JobManager * GetJobManager()
Get the job manager object user by the post master.
XRootDStatus GetCRC32(const std::string &fn, uint32_t &cksum)
Definition: XrdClZipArchive.hh:225
XRootDStatus Read(uint64_t offset, uint32_t size, void *buffer, ResponseHandler *handler, uint16_t timeout=0)
Definition: XrdClZipArchive.hh:118
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
std::vector< std::unique_ptr< CDFH > > cdvec_t
Definition: XrdZipCDFH.hh:43
std::string openfn
Definition: XrdClZipArchive.hh:463
OpenStages openstage
Definition: XrdClZipArchive.hh:462
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.
XRootDStatus Stat(StatInfo *&info)
Definition: XrdClZipArchive.hh:211
Write operation (.
Definition: XrdClFileOperations.hh:367
Definition: XrdClZipArchive.hh:439
uint64_t cdoff
Definition: XrdClZipArchive.hh:457
std::unique_ptr< LFH > lfh
Definition: XrdClZipArchive.hh:465
const uint16_t errInvalidOp
Definition: XrdClStatus.hh:50
std::unique_ptr< char[]> buffer
Definition: XrdClZipArchive.hh:453
uint64_t archsize
Definition: XrdClZipArchive.hh:450
Definition: XrdClZipArchive.hh:45
bool updated
Definition: XrdClZipArchive.hh:452
ZipListImpl< false > List(Ctx< ZipArchive > zip)
Factory for creating ZipStatImpl objects.
Definition: XrdClZipOperations.hh:574
static AnyObject * PkgRsp(Response *rsp)
Definition: XrdClZipArchive.hh:334