Logo ROOT   6.07/09
Reference Guide
TDavixFileInternal.h
Go to the documentation of this file.
1 // @(#)root/net:$Id$
2 // Author: Adrien Devresse and Tigran Mkrtchyan
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2013, 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_TDavixFileInternal
13 #define ROOT_TDavixFileInternal
14 
15 #include "TUrl.h"
16 #include "TMutex.h"
17 
18 #include <vector>
19 #include <iterator>
20 #include <algorithm>
21 #include <errno.h>
22 #include <stdlib.h>
23 #include <unistd.h>
24 #include <fcntl.h>
25 #include <sys/stat.h>
26 #include <sstream>
27 #include <string>
28 #include <cstring>
29 
30 //////////////////////////////////////////////////////////////////////////
31 // //
32 // TDavixFileInternal //
33 // //
34 // //
35 // Support class, common to TDavixFile and TDavixSystem //
36 // //
37 // Authors: Adrien Devresse (CERN IT/SDC) //
38 // Fabrizio Furano (CERN IT/SDC) //
39 // //
40 // September 2013 //
41 // //
42 //////////////////////////////////////////////////////////////////////////
43 
44 namespace Davix {
45  class Context;
46  class RequestParams;
47  class DavPosix;
48 }
49 struct Davix_fd;
50 
51 
53  friend class TDavixFile;
54  friend class TDavixSystem;
55 
56 private:
57  TDavixFileInternal(const TUrl & mUrl, Option_t* mopt) :
58  positionLock(),
59  openLock(),
60  davixContext(getDavixInstance()),
61  davixParam(NULL),
62  davixPosix(NULL),
63  davixFd(NULL),
64  fUrl(mUrl),
65  opt(mopt),
66  oflags(0),
67  dirdVec() { }
68 
69  TDavixFileInternal(const char* url, Option_t* mopt) :
70  positionLock(),
71  openLock(),
72  davixContext(getDavixInstance()),
73  davixParam(NULL),
74  davixPosix(NULL),
75  davixFd(NULL),
76  fUrl(url),
77  opt(mopt),
78  oflags(0),
79  dirdVec() { }
80 
82 
84  {
85  // singleton init
86  if (davixFd == NULL) {
87  TLockGuard l(&(openLock));
88  if (davixFd == NULL) {
89  davixFd = this->Open();
90  }
91  }
92  return davixFd;
93  }
94 
95  Davix_fd * Open();
96 
97  void Close();
98 
99  void enableGridMode();
100 
101  void setS3Auth(const std::string & secret, const std::string & access,
102  const std::string & region, const std::string & token);
103 
104  void parseConfig();
105 
106  void parseParams(Option_t* option);
107 
108  void init();
109 
110  bool isMyDird(void* fd);
111 
112  void addDird(void* fd);
113 
114  void removeDird(void* fd);
115 
118 
119  // DAVIX
120  Davix::Context *davixContext;
121  Davix::RequestParams *davixParam;
122  Davix::DavPosix *davixPosix;
123  Davix_fd *davixFd;
126  int oflags;
127  std::vector<void*> dirdVec;
128 
129 public:
130  Int_t DavixStat(const char *url, struct stat *st);
131 
132  static Davix::Context* getDavixInstance();
133 };
134 
135 #endif
Definition: TMutex.h:34
TDavixFileInternal(const char *url, Option_t *mopt)
const char Option_t
Definition: RtypesCore.h:62
This class represents a WWW compatible URL.
Definition: TUrl.h:41
Davix::RequestParams * davixParam
Small helper to keep current directory context.
int Int_t
Definition: RtypesCore.h:41
Davix_fd * getDavixFileInstance()
Davix::DavPosix * davixPosix
TDavixFileInternal(const TUrl &mUrl, Option_t *mopt)
TLine * l
Definition: textangle.C:4
std::vector< void * > dirdVec
static Int_t init()
#define NULL
Definition: Rtypes.h:82
Davix::Context * davixContext