ROOT logo
// @(#)root/net:$Id: TWebFile.h 28645 2009-05-15 17:51:47Z rdm $
// Author: Fons Rademakers   17/01/97

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TWebFile
#define ROOT_TWebFile


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TWebFile                                                             //
//                                                                      //
// A TWebFile is like a normal TFile except that it reads its data      //
// via a standard apache web server. A TWebFile is a read-only file.    //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TFile
#include "TFile.h"
#endif
#ifndef ROOT_TUrl
#include "TUrl.h"
#endif

class TSocket;
class TWebSocket;


class TWebFile : public TFile {

friend class TWebSocket;

private:
   mutable Long64_t  fSize;         // file size
   TSocket          *fSocket;       // socket for HTTP/1.1 (stays alive between calls)
   TUrl              fProxy;        // proxy URL
   Bool_t            fHasModRoot;   // true if server has mod_root installed
   Bool_t            fHTTP11;       // true if server support HTTP/1.1
   Bool_t            fNoProxy;      // don't use proxy

   static TUrl       fgProxy;       // globally set proxy URL

   TWebFile() : fSocket(0) { }
   void    Init(Bool_t);
   void    CheckProxy();
   TString BasicAuthentication();
   Int_t   GetHead();
   Int_t   GetLine(TSocket *s, char *line, Int_t size);
   Int_t   GetFromWeb(char *buf, Int_t len, const TString &msg);
   Int_t   GetFromWeb10(char *buf, Int_t len, const TString &msg);
   Bool_t  ReadBuffer10(char *buf, Int_t len);
   Bool_t  ReadBuffers10(char *buf, Long64_t *pos, Int_t *len, Int_t nbuf);

public:
   TWebFile(const char *url, Option_t *opt="");
   TWebFile(TUrl url, Option_t *opt="");
   virtual ~TWebFile();

   Long64_t GetSize() const;
   Bool_t   IsOpen() const;
   Int_t    ReOpen(Option_t *mode);
   Bool_t   ReadBuffer(char *buf, Int_t len);
   Bool_t   ReadBuffers(char *buf, Long64_t *pos, Int_t *len, Int_t nbuf);
   void     Seek(Long64_t offset, ERelativeTo pos = kBeg);

   static void        SetProxy(const char *url);
   static const char *GetProxy();

   ClassDef(TWebFile,1)  //A ROOT file that reads via a http server
};

#endif
 TWebFile.h:1
 TWebFile.h:2
 TWebFile.h:3
 TWebFile.h:4
 TWebFile.h:5
 TWebFile.h:6
 TWebFile.h:7
 TWebFile.h:8
 TWebFile.h:9
 TWebFile.h:10
 TWebFile.h:11
 TWebFile.h:12
 TWebFile.h:13
 TWebFile.h:14
 TWebFile.h:15
 TWebFile.h:16
 TWebFile.h:17
 TWebFile.h:18
 TWebFile.h:19
 TWebFile.h:20
 TWebFile.h:21
 TWebFile.h:22
 TWebFile.h:23
 TWebFile.h:24
 TWebFile.h:25
 TWebFile.h:26
 TWebFile.h:27
 TWebFile.h:28
 TWebFile.h:29
 TWebFile.h:30
 TWebFile.h:31
 TWebFile.h:32
 TWebFile.h:33
 TWebFile.h:34
 TWebFile.h:35
 TWebFile.h:36
 TWebFile.h:37
 TWebFile.h:38
 TWebFile.h:39
 TWebFile.h:40
 TWebFile.h:41
 TWebFile.h:42
 TWebFile.h:43
 TWebFile.h:44
 TWebFile.h:45
 TWebFile.h:46
 TWebFile.h:47
 TWebFile.h:48
 TWebFile.h:49
 TWebFile.h:50
 TWebFile.h:51
 TWebFile.h:52
 TWebFile.h:53
 TWebFile.h:54
 TWebFile.h:55
 TWebFile.h:56
 TWebFile.h:57
 TWebFile.h:58
 TWebFile.h:59
 TWebFile.h:60
 TWebFile.h:61
 TWebFile.h:62
 TWebFile.h:63
 TWebFile.h:64
 TWebFile.h:65
 TWebFile.h:66
 TWebFile.h:67
 TWebFile.h:68
 TWebFile.h:69
 TWebFile.h:70
 TWebFile.h:71
 TWebFile.h:72
 TWebFile.h:73
 TWebFile.h:74
 TWebFile.h:75
 TWebFile.h:76
 TWebFile.h:77
 TWebFile.h:78
 TWebFile.h:79