ROOT  6.06/09
Reference Guide
TWebFile.h
Go to the documentation of this file.
1 // @(#)root/net:$Id$
2 // Author: Fons Rademakers 17/01/97
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #ifndef ROOT_TWebFile
13 #define ROOT_TWebFile
14 
15 
16 //////////////////////////////////////////////////////////////////////////
17 // //
18 // TWebFile //
19 // //
20 // A TWebFile is like a normal TFile except that it reads its data //
21 // via a standard apache web server. A TWebFile is a read-only file. //
22 // //
23 //////////////////////////////////////////////////////////////////////////
24 
25 #ifndef ROOT_TFile
26 #include "TFile.h"
27 #endif
28 #ifndef ROOT_TUrl
29 #include "TUrl.h"
30 #endif
31 #ifndef ROOT_TSystem
32 #include "TSystem.h"
33 #endif
34 
35 class TSocket;
36 class TWebSocket;
37 
38 
39 class TWebFile : public TFile {
40 
41 friend class TWebSocket;
42 friend class TWebSystem;
43 
44 private:
45  TWebFile() : fSocket(0) { }
46 
47 protected:
48  mutable Long64_t fSize; // file size
49  TSocket *fSocket; // socket for HTTP/1.1 (stays alive between calls)
50  TUrl fProxy; // proxy URL
51  Bool_t fHasModRoot; // true if server has mod_root installed
52  Bool_t fHTTP11; // true if server support HTTP/1.1
53  Bool_t fNoProxy; // don't use proxy
54  TString fMsgReadBuffer; // cache ReadBuffer() msg
55  TString fMsgReadBuffer10; // cache ReadBuffer10() msg
56  TString fMsgGetHead; // cache GetHead() msg
57  TString fBasicUrl; // basic url without authentication and options
58  TUrl fUrlOrg; // save original url in case of temp redirection
59  TString fBasicUrlOrg; // save original url in case of temp redirection
60 
61  static TUrl fgProxy; // globally set proxy URL
62 
63  virtual void Init(Bool_t readHeadOnly);
64  virtual void CheckProxy();
65  virtual TString BasicAuthentication();
66  virtual Int_t GetHead();
67  virtual Int_t GetLine(TSocket *s, char *line, Int_t maxsize);
68  virtual Int_t GetHunk(TSocket *s, char *hunk, Int_t maxsize);
69  virtual const char *HttpTerminator(const char *start, const char *peeked, Int_t peeklen);
70  virtual Int_t GetFromWeb(char *buf, Int_t len, const TString &msg);
71  virtual Int_t GetFromWeb10(char *buf, Int_t len, const TString &msg);
72  virtual Bool_t ReadBuffer10(char *buf, Int_t len);
73  virtual Bool_t ReadBuffers10(char *buf, Long64_t *pos, Int_t *len, Int_t nbuf);
74  virtual void SetMsgReadBuffer10(const char *redirectLocation = 0, Bool_t tempRedirect = kFALSE);
75  virtual void ProcessHttpHeader(const TString& headerLine);
76 
77 public:
78  TWebFile(const char *url, Option_t *opt="");
79  TWebFile(TUrl url, Option_t *opt="");
80  virtual ~TWebFile();
81 
82  virtual Long64_t GetSize() const;
83  virtual Bool_t IsOpen() const;
84  virtual Int_t ReOpen(Option_t *mode);
85  virtual Bool_t ReadBuffer(char *buf, Int_t len);
86  virtual Bool_t ReadBuffer(char *buf, Long64_t pos, Int_t len);
87  virtual Bool_t ReadBuffers(char *buf, Long64_t *pos, Int_t *len, Int_t nbuf);
88  virtual void Seek(Long64_t offset, ERelativeTo pos = kBeg);
89 
90  static void SetProxy(const char *url);
91  static const char *GetProxy();
92 
93  ClassDef(TWebFile,2) //A ROOT file that reads via a http server
94 };
95 
96 
97 class TWebSystem : public TSystem {
98 
99 private:
100  void *fDirp; // directory handler
101 
102  void *GetDirPtr() const { return fDirp; }
103 
104 public:
105  TWebSystem();
106  virtual ~TWebSystem() { }
107 
108  Int_t MakeDirectory(const char *name);
109  void *OpenDirectory(const char *name);
110  void FreeDirectory(void *dirp);
111  const char *GetDirEntry(void *dirp);
112  Int_t GetPathInfo(const char *path, FileStat_t &buf);
113  Bool_t AccessPathName(const char *path, EAccessMode mode);
114  Int_t Unlink(const char *path);
115 
116  ClassDef(TWebSystem,0) // Directory handler for HTTP (TWebFiles)
117 };
118 
119 #endif
virtual Bool_t ReadBuffer10(char *buf, Int_t len)
Read specified byte range from remote file via HTTP 1.0 daemon (without mod-root installed).
Definition: TWebFile.cxx:451
virtual Bool_t IsOpen() const
A TWebFile that has been correctly constructed is always considered open.
Definition: TWebFile.cxx:369
virtual Long64_t GetSize() const
Return maximum file size.
Definition: TWebFile.cxx:858
long long Long64_t
Definition: RtypesCore.h:69
TLine * line
virtual TString BasicAuthentication()
Return basic authentication scheme, to be added to the request.
Definition: TWebFile.cxx:1236
const char Option_t
Definition: RtypesCore.h:62
This class represents a WWW compatible URL.
Definition: TUrl.h:41
Int_t MakeDirectory(const char *name)
Make a directory via httpd. Not supported.
Definition: TWebFile.cxx:1301
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format...
Definition: TFile.h:45
virtual Int_t GetHunk(TSocket *s, char *hunk, Int_t maxsize)
Read a hunk of data from the socket, up until a terminator.
Definition: TWebFile.cxx:1123
virtual void SetMsgReadBuffer10(const char *redirectLocation=0, Bool_t tempRedirect=kFALSE)
Set GET command for use by ReadBuffer(s)10(), handle redirection if needed.
Definition: TWebFile.cxx:257
static TUrl fgProxy
Definition: TWebFile.h:61
Basic string class.
Definition: TString.h:137
TUrl fUrlOrg
Definition: TWebFile.h:58
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
const Bool_t kFALSE
Definition: Rtypes.h:92
TString fMsgReadBuffer
Definition: TWebFile.h:54
ERelativeTo
Definition: TFile.h:160
static void SetProxy(const char *url)
Static method setting global proxy URL.
Definition: TWebFile.cxx:1255
virtual void ProcessHttpHeader(const TString &headerLine)
Process the HTTP header in the argument.
Definition: TWebFile.cxx:1283
virtual Int_t GetLine(TSocket *s, char *line, Int_t maxsize)
Read a line from the socket.
Definition: TWebFile.cxx:1060
virtual Int_t GetFromWeb10(char *buf, Int_t len, const TString &msg)
Read multiple byte range request from web server.
Definition: TWebFile.cxx:638
TUrl fProxy
Definition: TWebFile.h:50
static const char * GetProxy()
Static method returning the global proxy URL.
Definition: TWebFile.cxx:1271
virtual const char * HttpTerminator(const char *start, const char *peeked, Int_t peeklen)
Determine whether [START, PEEKED + PEEKLEN) contains an HTTP new line [] .
Definition: TWebFile.cxx:1203
#define ClassDef(name, id)
Definition: Rtypes.h:254
Bool_t fHasModRoot
Definition: TWebFile.h:51
Bool_t fNoProxy
Definition: TWebFile.h:53
const int maxsize
const char * GetDirEntry(void *dirp)
Get directory entry via httpd. Returns 0 in case no more entries.
Definition: TWebFile.cxx:1338
virtual Bool_t ReadBuffers(char *buf, Long64_t *pos, Int_t *len, Int_t nbuf)
Read specified byte ranges from remote file via HTTP daemon.
Definition: TWebFile.cxx:487
TString fBasicUrlOrg
Definition: TWebFile.h:59
virtual Bool_t ReadBuffer(char *buf, Int_t len)
Read specified byte range from remote file via HTTP daemon.
Definition: TWebFile.cxx:402
TString fBasicUrl
Definition: TWebFile.h:57
Int_t Unlink(const char *path)
Unlink, i.e.
Definition: TWebFile.cxx:1397
TWebFile()
Definition: TWebFile.h:45
virtual void Seek(Long64_t offset, ERelativeTo pos=kBeg)
Set position from where to start reading.
Definition: TWebFile.cxx:837
void FreeDirectory(void *dirp)
Free directory via httpd.
Definition: TWebFile.cxx:1325
virtual void CheckProxy()
Check if shell var "http_proxy" has been set and should be used.
Definition: TWebFile.cxx:342
virtual ~TWebFile()
Cleanup.
Definition: TWebFile.cxx:194
EAccessMode
Definition: TSystem.h:54
TString fMsgReadBuffer10
Definition: TWebFile.h:55
#define name(a, b)
Definition: linkTestLib0.cpp:5
TString fMsgGetHead
Definition: TWebFile.h:56
void * OpenDirectory(const char *name)
Open a directory via httpd.
Definition: TWebFile.cxx:1310
Int_t GetPathInfo(const char *path, FileStat_t &buf)
Get info about a file.
Definition: TWebFile.cxx:1354
Long64_t fSize
Definition: TWebFile.h:48
friend class TWebSocket
Definition: TWebFile.h:41
virtual Int_t GetHead()
Get the HTTP header.
Definition: TWebFile.cxx:893
virtual void Init(Bool_t readHeadOnly)
Initialize a TWebFile object.
Definition: TWebFile.cxx:202
Bool_t fHTTP11
Definition: TWebFile.h:52
TWebSystem()
Create helper class that allows directory access via httpd.
Definition: TWebFile.cxx:1291
Abstract base class defining a generic interface to the underlying Operating System.
Definition: TSystem.h:258
virtual ~TWebSystem()
Definition: TWebFile.h:106
void * GetDirPtr() const
Definition: TWebFile.h:102
void * fDirp
Definition: TWebFile.h:100
virtual Bool_t ReadBuffers10(char *buf, Long64_t *pos, Int_t *len, Int_t nbuf)
Read specified byte ranges from remote file via HTTP 1.0 daemon (without mod-root installed)...
Definition: TWebFile.cxx:534
TSocket * fSocket
Definition: TWebFile.h:49
virtual Int_t GetFromWeb(char *buf, Int_t len, const TString &msg)
Read request from web server.
Definition: TWebFile.cxx:571
Bool_t AccessPathName(const char *path, EAccessMode mode)
Returns FALSE if one can access a file using the specified access mode.
Definition: TWebFile.cxx:1382
virtual Int_t ReOpen(Option_t *mode)
Reopen a file with a different access mode, like from READ to UPDATE or from NEW, CREATE...
Definition: TWebFile.cxx:383