ROOT logo
ROOT » NET » NET » TS3WebFile

class TS3WebFile: public TWebFile


TS3WebFile

A TS3WebFile is a TWebFile which retrieves the file contents from a
web server implementing the REST API of the Amazon S3 protocol. This
class is meant to be as generic as possible to be used with files
hosted not only by Amazon S3 servers but also by other providers
implementing the core of the S3 protocol.

The S3 protocol works on top of HTTPS (and HTTP) and imposes that
each HTTP request be signed using a specific convention: the request
must include an 'Authorization' header which contains the signature
of a concatenation of selected request fields. For signing the
request, an 'Access Key Id' and a 'Secret Access Key' need to be
known. These keys are used by the S3 servers to identify the client
and to authenticate the request as genuine.

As an end user, you must know the Access Key and Secret Access Key
in order to access each S3 file. They are provided to you by your S3
service provider. Those two keys can be provided to ROOT when
initializing an object of this class by two means:
a) by using the environmental variables S3_ACCESS_KEY and
S3_SECRET_KEY, or
b) by specifying them when opening each file.

The first method is convenient if all the S3 files you want to
access are hosted by a single provider. The second one is more
flexible as it allows you to specify which credentials to use
on a per-file basis. See the documentation of the constructor of
this class for details on the syntax.

For generating and signing the HTTP request, this class uses
TS3HTTPRequest.

For more information on the details of S3 protocol please refer to:
"Amazon Simple Storage Service Developer Guide":
http://docs.amazonwebservices.com/AmazonS3/latest/dev/Welcome.html

"Amazon Simple Storage Service REST API Reference"
http://docs.amazonwebservices.com/AmazonS3/latest/API/APIRest.html

Function Members (Methods)

public:
TS3WebFile(const char* url, Option_t* options = "")
virtual~TS3WebFile()
voidTObject::AbstractMethod(const char* method) const
virtual voidTDirectoryFile::Add(TObject* obj, Bool_t replace = kFALSE)
static voidTDirectory::AddDirectory(Bool_t add = kTRUE)
static Bool_tTDirectory::AddDirectoryStatus()
virtual voidTDirectoryFile::Append(TObject* obj, Bool_t replace = kFALSE)
virtual Int_tTDirectoryFile::AppendKey(TKey* key)
virtual voidTObject::AppendPad(Option_t* option = "")
static TFileOpenHandle*TFile::AsyncOpen(const char* name, Option_t* option = "", const char* ftitle = "", Int_t compress = 1, Int_t netopt = 0)
virtual voidTDirectoryFile::Browse(TBrowser* b)
virtual voidTDirectoryFile::Build(TFile* motherFile = 0, TDirectory* motherDir = 0)
virtual Bool_tTDirectoryFile::cd(const char* path = 0)
static Bool_tTDirectory::Cd(const char* path)
static TClass*Class()
virtual const char*TObject::ClassName() const
virtual voidTDirectory::Clear(Option_t* option = "")
virtual TObject*TNamed::Clone(const char* newname = "") const
virtual TObject*TDirectoryFile::CloneObject(const TObject* obj, Bool_t autoadd = kTRUE)
virtual voidTFile::Close(Option_t* option = "")MENU
virtual Int_tTNamed::Compare(const TObject* obj) const
virtual voidTFile::Copy(TObject&) const
virtual Bool_tTFile::Cp(const char* dst, Bool_t progressbar = kTRUE, UInt_t buffersize = 1000000)
static Bool_tTFile::Cp(const char* src, const char* dst, Bool_t progressbar = kTRUE, UInt_t buffersize = 1000000)
virtual TKey*TFile::CreateKey(TDirectory* mother, const TObject* obj, const char* name, Int_t bufsize)
virtual TKey*TFile::CreateKey(TDirectory* mother, const void* obj, const TClass* cl, const char* name, Int_t bufsize)
static TDirectory*&TDirectory::CurrentDirectory()
static TFile*&TFile::CurrentFile()
static voidTDirectory::DecodeNameCycle(const char* namecycle, char* name, Short_t& cycle, const size_t namesize = 0)
virtual voidTFile::Delete(const char* namecycle = "")
virtual voidTDirectory::DeleteAll(Option_t* option = "")
virtual Int_tTObject::DistancetoPrimitive(Int_t px, Int_t py)
virtual voidTFile::Draw(Option_t* option = "")
virtual voidTObject::DrawClass() constMENU
virtual TObject*TObject::DrawClone(Option_t* option = "") constMENU
virtual voidTFile::DrawMap(const char* keys = "*", Option_t* option = "")MENU
virtual voidTObject::Dump() constMENU
static voidTDirectory::EncodeNameCycle(char* buffer, const char* name, Short_t cycle)
virtual voidTObject::Error(const char* method, const char* msgfmt) const
virtual voidTObject::Execute(const char* method, const char* params, Int_t* error = 0)
virtual voidTObject::Execute(TMethod* method, TObjArray* params, Int_t* error = 0)
virtual voidTObject::ExecuteEvent(Int_t event, Int_t px, Int_t py)
virtual voidTObject::Fatal(const char* method, const char* msgfmt) const
virtual voidTFile::FillBuffer(char*& buffer)
virtual TKey*TDirectoryFile::FindKey(const char* keyname) const
virtual TKey*TDirectoryFile::FindKeyAny(const char* keyname) const
virtual TObject*TDirectory::FindObject(const char* name) const
virtual TObject*TDirectory::FindObject(const TObject* obj) const
virtual TObject*TDirectoryFile::FindObjectAny(const char* name) const
virtual TObject*TDirectoryFile::FindObjectAnyFile(const char* name) const
virtual voidTFile::Flush()
virtual TObject*TDirectoryFile::Get(const char* namecycle)
const TString&GetAccessKey() const
TArchiveFile*TFile::GetArchive() const
Long64_tTFile::GetArchiveOffset() const
static TFile::EAsyncOpenStatusTFile::GetAsyncOpenStatus(const char* name)
static TFile::EAsyncOpenStatusTFile::GetAsyncOpenStatus(TFileOpenHandle* handle)
Int_tTFile::GetBestBuffer() const
const TString&GetBucket() const
virtual Int_tTDirectoryFile::GetBufferSize() const
virtual Long64_tTFile::GetBytesRead() const
virtual Long64_tTFile::GetBytesReadExtra() const
virtual Int_tTFile::GetBytesToPrefetch() const
virtual Long64_tTFile::GetBytesWritten() const
static const char*TFile::GetCacheFileDir()
TFileCacheRead*TFile::GetCacheRead(TObject* tree = 0) const
TFileCacheWrite*TFile::GetCacheWrite() const
TArrayC*TFile::GetClassIndex() const
Int_tTFile::GetCompressionAlgorithm() const
Float_tTFile::GetCompressionFactor()
Int_tTFile::GetCompressionLevel() const
Int_tTFile::GetCompressionSettings() const
const TDatime&TDirectoryFile::GetCreationDate() const
virtual TDirectory*TDirectoryFile::GetDirectory(const char* apath, Bool_t printError = false, const char* funcname = "GetDirectory")
virtual Option_t*TObject::GetDrawOption() const
static Long_tTObject::GetDtorOnly()
virtual Long64_tTFile::GetEND() const
virtual const TUrl*TFile::GetEndpointUrl() const
static const TUrl*TFile::GetEndpointUrl(const char* name)
virtual Int_tTFile::GetErrno() const
Int_tTFile::GetFd() const
virtual TFile*TDirectoryFile::GetFile() const
static Long64_tTFile::GetFileBytesRead()
static Long64_tTFile::GetFileBytesWritten()
static Long64_tTFile::GetFileCounter()
static Int_tTFile::GetFileReadCalls()
virtual const char*TObject::GetIconName() const
virtual TKey*TDirectoryFile::GetKey(const char* name, Short_t cycle = 9999) const
virtual TList*TDirectory::GetList() const
TList*TFile::GetListOfFree() const
virtual TList*TDirectoryFile::GetListOfKeys() const
TObjArray*TFile::GetListOfProcessIDs() const
const TDatime&TDirectoryFile::GetModificationDate() const
virtual TObject*TDirectory::GetMother() const
virtual TDirectory*TDirectory::GetMotherDir() const
virtual const char*TNamed::GetName() const
virtual Int_tTFile::GetNbytesFree() const
virtual Int_tTFile::GetNbytesInfo() const
virtual Int_tTDirectoryFile::GetNbytesKeys() const
virtual TStringTFile::GetNewUrl()
virtual Int_tTFile::GetNfree() const
virtual Int_tTDirectoryFile::GetNkeys() const
virtual Int_tTFile::GetNProcessIDs() const
voidTDirectory::GetObject(const char* namecycle, void*& ptr)
virtual void*TDirectoryFile::GetObjectChecked(const char* namecycle, const char* classname)
virtual void*TDirectoryFile::GetObjectChecked(const char* namecycle, const TClass* cl)
virtual char*TObject::GetObjectInfo(Int_t px, Int_t py) const
const TString&GetObjectKey() const
static Bool_tTObject::GetObjectStat()
virtual void*TDirectoryFile::GetObjectUnchecked(const char* namecycle)
static Bool_tTFile::GetOnlyStaged()
static UInt_tTFile::GetOpenTimeout()
virtual Option_t*TFile::GetOption() const
virtual const char*TDirectory::GetPath() const
virtual const char*TDirectory::GetPathStatic() const
static const char*TWebFile::GetProxy()
static Int_tTFile::GetReadaheadSize()
virtual Int_tTFile::GetReadCalls() const
Int_tTFile::GetRecordHeader(char* buf, Long64_t first, Int_t maxbytes, Int_t& nbytes, Int_t& objlen, Int_t& keylen)
Long64_tTFile::GetRelOffset() const
const TString&GetSecretKey() const
virtual Long64_tTDirectoryFile::GetSeekDir() const
virtual Long64_tTFile::GetSeekFree() const
virtual Long64_tTFile::GetSeekInfo() const
virtual Long64_tTDirectoryFile::GetSeekKeys() const
virtual Long64_tTDirectoryFile::GetSeekParent() const
virtual Long64_tTWebFile::GetSize() const
const TList*TFile::GetStreamerInfoCache()
virtual TList*TFile::GetStreamerInfoList()
virtual const char*TNamed::GetTitle() const
static TFile::EFileTypeTFile::GetType(const char* name, Option_t* option = "", TString* prefix = 0)
virtual UInt_tTObject::GetUniqueID() const
const TUrl&GetUrl() const
TUUIDTDirectory::GetUUID() const
Int_tTFile::GetVersion() const
virtual Bool_tTObject::HandleTimer(TTimer* timer)
virtual ULong_tTNamed::Hash() const
static voidTFile::IncrementFileCounter()
virtual voidTFile::IncrementProcessIDs()
virtual voidTObject::Info(const char* method, const char* msgfmt) const
virtual Bool_tTObject::InheritsFrom(const char* classname) const
virtual Bool_tTObject::InheritsFrom(const TClass* cl) const
virtual voidTObject::Inspect() constMENU
voidTObject::InvertBit(UInt_t f)
virtual TClass*IsA() const
virtual Bool_tTFile::IsArchive() const
Bool_tTFile::IsBinary() const
virtual Bool_tTObject::IsEqual(const TObject* obj) const
virtual Bool_tTDirectory::IsFolder() const
virtual Bool_tTDirectoryFile::IsModified() const
Bool_tTObject::IsOnHeap() const
virtual Bool_tTWebFile::IsOpen() const
Bool_tTFile::IsRaw() const
virtual Bool_tTNamed::IsSortable() const
virtual Bool_tTDirectoryFile::IsWritable() const
Bool_tTObject::IsZombie() const
virtual voidTFile::ls(Option_t* option = "") const
virtual voidTFile::MakeFree(Long64_t first, Long64_t last)
virtual voidTFile::MakeProject(const char* dirname, const char* classes = "*", Option_t* option = "new")MENU
virtual voidTFile::Map()MENU
virtual Bool_tTFile::Matches(const char* name)
voidTObject::MayNotUse(const char* method) const
virtual TDirectory*TDirectoryFile::mkdir(const char* name, const char* title = "")
virtual Bool_tTFile::MustFlush() const
virtual Bool_tTObject::Notify()
voidTObject::Obsolete(const char* method, const char* asOfVers, const char* removedFromVers) const
static TFile*TFile::Open(TFileOpenHandle* handle)
static TFile*TFile::Open(const char* name, Option_t* option = "", const char* ftitle = "", Int_t compress = 1, Int_t netopt = 0)
virtual TFile*TDirectoryFile::OpenFile(const char* name, Option_t* option = "", const char* ftitle = "", Int_t compress = 1, Int_t netopt = 0)
static voidTObject::operator delete(void* ptr)
static voidTObject::operator delete(void* ptr, void* vp)
static voidTObject::operator delete[](void* ptr)
static voidTObject::operator delete[](void* ptr, void* vp)
void*TObject::operator new(size_t sz)
void*TObject::operator new(size_t sz, void* vp)
void*TObject::operator new[](size_t sz)
void*TObject::operator new[](size_t sz, void* vp)
virtual voidTFile::Paint(Option_t* option = "")
virtual voidTObject::Pop()
virtual voidTFile::Print(Option_t* option = "") const
virtual voidTDirectoryFile::Purge(Short_t nkeep = 1)
virtual voidTDirectory::pwd() const
virtual Int_tTObject::Read(const char* name)
virtual voidTDirectoryFile::ReadAll(Option_t* option = "")
virtual Bool_tTWebFile::ReadBuffer(char* buf, Int_t len)
virtual Bool_tTWebFile::ReadBuffer(char* buf, Long64_t pos, Int_t len)
virtual Bool_tTFile::ReadBufferAsync(Long64_t offs, Int_t len)
virtual Bool_tReadBuffers(char* buf, Long64_t* pos, Int_t* len, Int_t nbuf)
virtual voidTFile::ReadFree()
virtual Int_tTDirectoryFile::ReadKeys(Bool_t forceRead = kTRUE)
virtual TProcessID*TFile::ReadProcessID(UShort_t pidf)
virtual voidTFile::ReadStreamerInfo()
virtual Int_tTDirectoryFile::ReadTObject(TObject* obj, const char* keyname)
virtual Int_tTFile::Recover()
virtual voidTDirectory::RecursiveRemove(TObject* obj)
virtual TObject*TDirectory::Remove(TObject*)
virtual Int_tTWebFile::ReOpen(Option_t* mode)
virtual voidTDirectoryFile::ResetAfterMerge(TFileMergeInfo*)
voidTObject::ResetBit(UInt_t f)
virtual voidTFile::ResetErrno() const
virtual voidTDirectoryFile::rmdir(const char* name)
virtual voidTDirectoryFile::Save()
virtual voidTObject::SaveAs(const char* filename = "", Option_t* option = "") constMENU
virtual Int_tTDirectoryFile::SaveObjectAs(const TObject* obj, const char* filename = "", Option_t* option = "") const
virtual voidTObject::SavePrimitive(ostream& out, Option_t* option = "")
virtual voidTDirectoryFile::SaveSelf(Bool_t force = kFALSE)
virtual voidTWebFile::Seek(Long64_t offset, TFile::ERelativeTo pos = kBeg)
voidTObject::SetBit(UInt_t f)
voidTObject::SetBit(UInt_t f, Bool_t set)
virtual voidTDirectoryFile::SetBufferSize(Int_t bufsize)
static Bool_tTFile::SetCacheFileDir(const char* cacheDir, Bool_t operateDisconnected = kTRUE, Bool_t forceCacheread = kFALSE)
virtual voidTFile::SetCacheRead(TFileCacheRead* cache, TObject* tree = 0, TFile::ECacheAction action = kDisconnect)
virtual voidTFile::SetCacheWrite(TFileCacheWrite* cache)
virtual voidTFile::SetCompressionAlgorithm(Int_t algorithm = 0)
virtual voidTFile::SetCompressionLevel(Int_t level = 1)
virtual voidTFile::SetCompressionSettings(Int_t settings = 1)
virtual voidTObject::SetDrawOption(Option_t* option = "")MENU
static voidTObject::SetDtorOnly(void* obj)
virtual voidTFile::SetEND(Long64_t last)
static voidTFile::SetFileBytesRead(Long64_t bytes = 0)
static voidTFile::SetFileBytesWritten(Long64_t bytes = 0)
static voidTFile::SetFileReadCalls(Int_t readcalls = 0)
virtual voidTDirectoryFile::SetModified()
virtual voidTDirectory::SetMother(TObject* mother)
virtual voidTDirectory::SetName(const char* newname)
virtual voidTNamed::SetNameTitle(const char* name, const char* title)
static voidTObject::SetObjectStat(Bool_t stat)
virtual voidTFile::SetOffset(Long64_t offset, TFile::ERelativeTo pos = kBeg)
static Bool_tTFile::SetOnlyStaged(Bool_t onlystaged)
static UInt_tTFile::SetOpenTimeout(UInt_t timeout)
virtual voidTFile::SetOption(Option_t* option = ">")
static voidTWebFile::SetProxy(const char* url)
static voidTFile::SetReadaheadSize(Int_t bufsize = 256000)
virtual voidTFile::SetReadCalls(Int_t readcalls = 0)
static voidTFile::SetReadStreamerInfo(Bool_t readinfo = kTRUE)
virtual voidTDirectoryFile::SetSeekDir(Long64_t v)
virtual voidTNamed::SetTitle(const char* title = "")MENU
virtual voidTDirectoryFile::SetTRefAction(TObject* ref, TObject* parent)
virtual voidTObject::SetUniqueID(UInt_t uid)
virtual voidTDirectoryFile::SetWritable(Bool_t writable = kTRUE)
virtual voidShowMembers(TMemberInspector&)
virtual voidTFile::ShowStreamerInfo()
static Bool_tTFile::ShrinkCacheFileDir(Long64_t shrinkSize, Long_t cleanupInteval = 0)
virtual Int_tTFile::Sizeof() const
virtual voidStreamer(TBuffer&)
voidStreamerNVirtual(TBuffer& ClassDef_StreamerNVirtual_b)
voidTFile::SumBuffer(Int_t bufsize)
virtual voidTObject::SysError(const char* method, const char* msgfmt) const
Bool_tTObject::TestBit(UInt_t f) const
Int_tTObject::TestBits(UInt_t f) const
virtual voidTFile::UseCache(Int_t maxCacheSize = 10, Int_t pageSize = 0)
virtual voidTObject::UseCurrentStyle()
virtual voidTObject::Warning(const char* method, const char* msgfmt) const
virtual Int_tTFile::Write(const char* name = 0, Int_t opt = 0, Int_t bufsiz = 0)
virtual Int_tTFile::Write(const char* name = 0, Int_t opt = 0, Int_t bufsiz = 0) const
virtual Bool_tTFile::WriteBuffer(const char* buf, Int_t len)
virtual voidTDirectoryFile::WriteDirHeader()
virtual voidTFile::WriteFree()
virtual voidTFile::WriteHeader()
virtual voidTDirectoryFile::WriteKeys()
Int_tTDirectory::WriteObject(const void* obj, const char* name, Option_t* option = "", Int_t bufsize = 0)
virtual Int_tTDirectoryFile::WriteObjectAny(const void* obj, const char* classname, const char* name, Option_t* option = "", Int_t bufsize = 0)
virtual Int_tTDirectoryFile::WriteObjectAny(const void* obj, const TClass* cl, const char* name, Option_t* option = "", Int_t bufsize = 0)
virtual UShort_tTFile::WriteProcessID(TProcessID* pid)
virtual voidTFile::WriteStreamerInfo()
virtual Int_tTDirectoryFile::WriteTObject(const TObject* obj, const char* name = 0, Option_t* option = "", Int_t bufsize = 0)
protected:
virtual TStringTWebFile::BasicAuthentication()
Bool_tTDirectory::cd1(const char* path)
static Bool_tTDirectory::Cd1(const char* path)
virtual voidTWebFile::CheckProxy()
virtual voidTDirectoryFile::CleanTargets()
virtual Long64_tTFile::DirCreateEntry(TDirectory*)
virtual Int_tTFile::DirReadKeys(TDirectory*)
virtual voidTFile::DirWriteHeader(TDirectory*)
virtual voidTFile::DirWriteKeys(TDirectory*)
virtual voidTObject::DoError(int level, const char* location, const char* fmt, va_list va) const
voidTDirectory::FillFullPath(TString& buf) const
Bool_tTFile::FlushWriteCache()
virtual TFile::EAsyncOpenStatusTFile::GetAsyncOpenStatus()
virtual Int_tTWebFile::GetFromWeb(char* buf, Int_t len, const TString& msg)
virtual Int_tTWebFile::GetFromWeb10(char* buf, Int_t len, const TString& msg)
virtual Int_tGetHead()
virtual Int_tTWebFile::GetHunk(TSocket* s, char* hunk, Int_t maxsize)
virtual Int_tTWebFile::GetLine(TSocket* s, char* line, Int_t maxsize)
virtual const char*TWebFile::HttpTerminator(const char* start, const char* peeked, Int_t peeklen)
virtual voidTWebFile::Init(Bool_t readHeadOnly)
Int_tTFile::MakeProjectParMake(const char* packname, const char* filename)
Int_tTFile::MakeProjectParProofInf(const char* packname, const char* proofinfdir)
voidTObject::MakeZombie()
voidTDirectory::operator=(const TDirectory&)
virtual voidProcessHttpHeader(const TString& headerLine)
virtual Bool_tTWebFile::ReadBuffer10(char* buf, Int_t len)
virtual Bool_tTWebFile::ReadBuffers10(char* buf, Long64_t* pos, Int_t* len, Int_t nbuf)
Int_tTFile::ReadBufferViaCache(char* buf, Int_t len)
voidTDirectory::RegisterContext(TDirectory::TContext* ctxt)
voidSetAccessKey(const TString& accessKey)
virtual voidSetMsgReadBuffer10(const char* redirectLocation = 0, Bool_t tempRedirect = kFALSE)
voidSetSecretKey(const TString& secretKey)
virtual Int_tTFile::SysClose(Int_t fd)
virtual Int_tTFile::SysOpen(const char* pathname, Int_t flags, UInt_t mode)
virtual Int_tTFile::SysRead(Int_t fd, void* buf, Int_t len)
virtual Long64_tTFile::SysSeek(Int_t fd, Long64_t offset, Int_t whence)
virtual Int_tTFile::SysStat(Int_t fd, Long_t* id, Long64_t* size, Long_t* flags, Long_t* modtime)
virtual Int_tTFile::SysSync(Int_t fd)
virtual Int_tTFile::SysWrite(Int_t fd, const void* buf, Int_t len)
voidTDirectory::UnregisterContext(TDirectory::TContext* ctxt)
Int_tTFile::WriteBufferViaCache(const char* buf, Int_t len)
private:
TS3WebFile()
Bool_tGetCredentialsFromEnv(const char* accessKeyEnv, const char* secretKeyEnv, TString& outAccessKey, TString& outSecretKey)
Bool_tParseOptions(Option_t* options, TString& accessKey, TString& secretKey)

Data Members

public:
enum TFile::EAsyncOpenStatus { kAOSNotAsync
kAOSFailure
kAOSInProgress
kAOSSuccess
};
enum TFile::EOpenTimeOut { kInstantTimeout
kEternalTimeout
};
enum TFile::ECacheAction { kDisconnect
kDoNotDisconnect
};
enum TFile::EStatusBits { kRecovered
kHasReferences
kDevNull
kWriteError
kBinaryFile
kRedirected
};
enum TFile::ERelativeTo { kBeg
kCur
kEnd
};
enum TFile::[unnamed] { kStartBigFile
};
enum TFile::EFileType { kDefault
kLocal
kNet
kWeb
kFile
kMerge
};
enum TDirectoryFile::[unnamed] { kCloseDirectory
};
enum TObject::EStatusBits { kCanDelete
kMustCleanup
kObjInCanvas
kIsReferenced
kHasUUID
kCannotPick
kNoContextMenu
kInvalidObject
};
enum TObject::[unnamed] { kIsOnHeap
kNotDeleted
kZombie
kBitMask
kSingleKey
kOverwrite
kWriteDelete
};
protected:
TArchiveFile*TFile::fArchive!Archive file from which we read this file
Long64_tTFile::fArchiveOffset!Offset at which file starts in archive
TFileOpenHandle*TFile::fAsyncHandle!For proper automatic cleanup
TFile::EAsyncOpenStatusTFile::fAsyncOpenStatus!Status of an asynchronous open request
Long64_tTFile::fBEGINFirst used byte in file
TStringTWebFile::fBasicUrlbasic url without authentication and options
TStringTWebFile::fBasicUrlOrgsave original url in case of temp redirection
Int_tTDirectoryFile::fBufferSizeDefault buffer size to create new TKeys
Long64_tTFile::fBytesReadNumber of bytes read from this file
Long64_tTFile::fBytesReadExtraNumber of extra bytes (overhead) read by the readahead buffer
Long64_tTFile::fBytesWriteNumber of bytes written to this file
TFileCacheRead*TFile::fCacheRead!Pointer to the read cache (if any)
TMap*TFile::fCacheReadMap!Pointer to the read cache (if any)
TFileCacheWrite*TFile::fCacheWrite!Pointer to the write cache (if any)
TArrayC*TFile::fClassIndex!Index of TStreamerInfo classes written to this file
Int_tTFile::fCompressCompression level and algorithm
TDirectory::TContext*TDirectory::fContext!Pointer to a list of TContext object pointing to this TDirectory
Int_tTFile::fDFile descriptor
TDatimeTDirectoryFile::fDatimeCDate and time when directory is created
TDatimeTDirectoryFile::fDatimeMDate and time of last modification
Long64_tTFile::fENDLast used byte in file
TFile*TDirectoryFile::fFilepointer to current file in memory
TList*TFile::fFreeFree segments linked list table
Bool_tTWebFile::fHTTP11true if server support HTTP/1.1
Bool_tTWebFile::fHasModRoottrue if server has mod_root installed
TList*TFile::fInfoCache!Cached list of the streamer infos in this file
Bool_tTFile::fInitDone!True if the file has been initialized
Bool_tTFile::fIsArchive!True if this is a pure archive file
Bool_tTFile::fIsRootFile!True is this is a ROOT file, raw file otherwise
TList*TDirectoryFile::fKeysPointer to keys list in memory
TList*TDirectory::fListList of objects in memory
Bool_tTDirectoryFile::fModifiedtrue if directory has been modified
TObject*TDirectory::fMotherpointer to mother of the directory
TStringTWebFile::fMsgGetHeadcache GetHead() msg
TStringTWebFile::fMsgReadBuffercache ReadBuffer() msg
TStringTWebFile::fMsgReadBuffer10cache ReadBuffer10() msg
Bool_tTFile::fMustFlush!True if the file buffers must be flushed
Int_tTFile::fNProcessIDsNumber of TProcessID written to this file
TStringTNamed::fNameobject identifier
Int_tTFile::fNbytesFreeNumber of bytes for free segments structure
Int_tTFile::fNbytesInfoNumber of bytes for StreamerInfo record
Int_tTDirectoryFile::fNbytesKeysNumber of bytes for the keys
Int_tTDirectoryFile::fNbytesNameNumber of bytes in TNamed at creation time
Bool_tTFile::fNoAnchorInName!True if we don't want to force the anchor to be appended to the file name
Bool_tTWebFile::fNoProxydon't use proxy
Long64_tTFile::fOffset!Seek offset cache
TList*TFile::fOpenPhases!Time info about open phases
TStringTFile::fOptionFile options
TStringTDirectory::fPathBuffer!Buffer for GetPath() function
TObjArray*TFile::fProcessIDs!Array of pointers to TProcessIDs
TUrlTWebFile::fProxyproxy URL
Int_tTFile::fReadCallsNumber of read calls ( not counting the cache calls )
TStringTFile::fRealNameEffective real file name (not original url)
TS3HTTPRequestfS3RequestS3 HTTP request
Long64_tTDirectoryFile::fSeekDirLocation of directory on file
Long64_tTFile::fSeekFreeLocation on disk of free segments structure
Long64_tTFile::fSeekInfoLocation on disk of StreamerInfo record
Long64_tTDirectoryFile::fSeekKeysLocation of Keys record on file
Long64_tTDirectoryFile::fSeekParentLocation of parent directory on file
Long64_tTWebFile::fSizefile size
TSocket*TWebFile::fSocketsocket for HTTP/1.1 (stays alive between calls)
Double_tTFile::fSum2BufferSum of squares of buffer sizes of objects written so far
Double_tTFile::fSumBufferSum of buffer sizes of objects written so far
TStringTNamed::fTitleobject title
TUUIDTDirectory::fUUIDUnique identifier
Char_tTFile::fUnitsNumber of bytes for file pointers
TUrlTFile::fUrl!URL of file
TUrlTWebFile::fUrlOrgsave original url in case of temp redirection
Bool_tfUseMultiRangeIs the S3 server capable of serving multirange requests?
Int_tTFile::fVersionFile format version
Bool_tTDirectoryFile::fWritabletrue if directory is writable
Int_tTFile::fWrittenNumber of objects written so far
static Bool_tTDirectory::fgAddDirectory!flag to add histograms, graphs,etc to the directory
static TList*TFile::fgAsyncOpenRequestsList of handles for pending open requests
static Long64_tTFile::fgBytesReadNumber of bytes read by all TFile objects
static Long64_tTFile::fgBytesWriteNumber of bytes written by all TFile objects
static TStringTFile::fgCacheFileDirDirectory where to locally stage files
static Bool_tTFile::fgCacheFileDisconnectedIndicates, we trust in the files in the cache dir without stat on the cached file
static Bool_tTFile::fgCacheFileForceIndicates, to force all READ to CACHEREAD
static Long64_tTFile::fgFileCounterCounter for all opened files
static Bool_tTFile::fgOnlyStagedBefore the file is opened, it is checked, that the file is staged, if not, the open fails
static UInt_tTFile::fgOpenTimeoutTimeout for open operations in ms - 0 corresponds to blocking i/o
static TUrlTWebFile::fgProxyglobally set proxy URL
static Int_tTFile::fgReadCallsNumber of bytes read from all TFile objects
static Bool_tTFile::fgReadInfoif true (default) ReadStreamerInfo is called when opening a file
static Int_tTFile::fgReadaheadSizeReadahead buffer size

Class Charts

Inheritance Inherited Members Includes Libraries
Class Charts

Function documentation

TS3WebFile(const char* url, Option_t* options = "")
 Construct a TS3WebFile object. The path argument is a URL of one of the
 following forms:

         s3://host.example.com/bucket/path/to/my/file
     s3http://host.example.com/bucket/path/to/my/file
    s3https://host.example.com/bucket/path/to/my/file
        as3://host.example.com/bucket/path/to/my/file

 For files hosted by Google Storage, use the following forms:

        gs://storage.googleapis.com/bucket/path/to/my/file
    gshttp://storage.googleapis.com/bucket/path/to/my/file
  gsthttps://storage.googleapis.com/bucket/path/to/my/file

 The 'as3' scheme is accepted for backwards compatibility but its usage is
 deprecated.

 The recommended way to create an instance of this class is through
 TFile::Open, for instance:

 TFile* f1 = TFile::Open("s3://host.example.com/bucket/path/to/my/file")
 TFile* f2 = TFile::Open("gs://storage.googleapis.com/bucket/path/to/my/file")

 The specified scheme (i.e. s3, s3http, s3https, ...) determines the underlying
 transport protocol to use for downloading the file contents, namely HTTP or HTTPS.
 The 's3', 's3https', 'gs' and 'gshttps' schemes imply using HTTPS as the transport
 protocol. The 's3http', 'as3' and 'gshttp' schemes imply using HTTP as the transport
 protocol.

 The 'options' argument can contain 'NOPROXY' if you want to bypass
 the HTTP proxy when retrieving this file's contents. As for any TWebFile-derived
 object, the URL of the web proxy can be specified by setting an environmental
 variable 'http_proxy'. If this variable is set, we ask that proxy to route our
 requests HTTP(S) requests to the file server.

 In addition, you can also use the 'options' argument to provide the access key
 and secret key to be used for authentication purposes for this file by using a
 string of the form "AUTH=myAccessKey:mySecretkey". This may be useful to
 open several files hosted by different providers in the same program/macro,
 where the environemntal variables solution is not convenient (see below).

 If you need to specify both NOPROXY and AUTH separate them by ' '
 (blank), for instance:
 "NOPROXY AUTH=F38XYZABCDeFgH4D0E1F:V+frt4re7J1euSNFnmaf8wwmI4AAAE7kzxZ/TTM+"

 Examples:
    TFile* f1 = TFile::Open("s3://host.example.com/bucket/path/to/my/file",
                            "NOPROXY AUTH=F38XYZABCDeFgH4D0E1F:V+frt4re7J1euSNFnmaf8wwmI4AAAE7kzxZ/TTM+");
    TFile* f2 = TFile::Open("s3://host.example.com/bucket/path/to/my/file",
                            "AUTH=F38XYZABCDeFgH4D0E1F:V+frt4re7J1euSNFnmaf8wwmI4AAAE7kzxZ/TTM+");

 If there is no authentication information in the 'options' argument
 (i.e. not AUTH="....") the values of the environmental variables
 S3_ACCESS_KEY and S3_SECRET_KEY (if set) are expected to contain
 the access key id and the secret access key, respectively. You have
 been provided with these credentials by your S3 service provider.

 If neither the AUTH information is provided in the 'options' argument
 nor the environmental variables are set, we try to open the file
 without providing any authentication information to the server. This
 is useful when the file is set an access control that allows for
 any unidentified user to read the file.
Bool_t ParseOptions(Option_t* options, TString& accessKey, TString& secretKey)
 Extracts the S3 authentication key pair (access key and secret key)
 from the options. The authentication credentials can be specified in
 the options provided to the constructor of this class as a string
 containing: "AUTH=<access key>:<secret key>" and can include other
 options, for instance "NOPROXY" for not using the HTTP proxy for
 accessing this file's contents.
 For instance:
 "NOPROXY AUTH=F38XYZABCDeFgHiJkLm:V+frt4re7J1euSNFnmaf8wwmI401234E7kzxZ/TTM+"
Int_t GetHead()
 Overwrites TWebFile::GetHead() for retrieving the HTTP headers of this
 file. Uses TS3HTTPRequest to generate an HTTP HEAD request which includes
 the authorization header expected by the S3 server.
void SetMsgReadBuffer10(const char* redirectLocation = 0, Bool_t tempRedirect = kFALSE)
 Overwrites TWebFile::SetMsgReadBuffer10() for setting the HTTP GET
 request compliant to the authentication mechanism used by the S3
 protocol. The GET request must contain an "Authorization" header with
 the signature of the request, generated using the user's secret access
 key.
Bool_t ReadBuffers(char* buf, Long64_t* pos, Int_t* len, Int_t nbuf)
void ProcessHttpHeader(const TString& headerLine)
 This method is called by the super-class TWebFile when a HTTP header
 for this file is retrieved. We scan the 'Server' header to detect the
 type of S3 server this file is hosted on and to determine if it is
 known to support multi-range HTTP GET requests. Some S3 servers (for
 instance Amazon's) do not support that feature and when they
 receive a multi-range request they sent back the whole file contents.
 For this class, if the server do not support multirange requests
 we issue multiple single-range requests instead.
Bool_t GetCredentialsFromEnv(const char* accessKeyEnv, const char* secretKeyEnv, TString& outAccessKey, TString& outSecretKey)
 Sets the access and secret keys from the environmental variables, if
 they are both set.
TS3WebFile()
void SetAccessKey(const TString& accessKey)
 Modifiers of data members (to be used mainly by subclasses)
{ fS3Request.SetAccessKey(accessKey); }
void SetSecretKey(const TString& secretKey)
{ fS3Request.SetSecretKey(secretKey); }
virtual ~TS3WebFile()
{}
const TString& GetAccessKey() const
 Selectors
{ return fS3Request.GetAccessKey(); }
const TString& GetSecretKey() const
{ return fS3Request.GetSecretKey(); }
const TString& GetBucket() const
{ return fS3Request.GetBucket(); }
const TString& GetObjectKey() const
{ return fS3Request.GetObjectKey(); }
const TUrl& GetUrl() const
{ return fUrl; }