XRootD
ProxyPrefixFile.hh
Go to the documentation of this file.
1 //------------------------------------------------------------------------------
2 // Copyright (c) 2011-2017 by European Organization for Nuclear Research (CERN)
3 // Author: Elvin Sindrilaru <esindril@cern.ch>
4 //------------------------------------------------------------------------------
5 // This file is part of the XRootD software suite.
6 //
7 // XRootD is free software: you can redistribute it and/or modify
8 // it under the terms of the GNU Lesser General Public License as published by
9 // the Free Software Foundation, either version 3 of the License, or
10 // (at your option) any later version.
11 //
12 // XRootD is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
16 //
17 // You should have received a copy of the GNU Lesser General Public License
18 // along with XRootD. If not, see <http://www.gnu.org/licenses/>.
19 //
20 // In applying this licence, CERN does not waive the privileges and immunities
21 // granted to it by virtue of its status as an Intergovernmental Organization
22 // or submit itself to any jurisdiction.
23 //------------------------------------------------------------------------------
24 
25 #pragma once
26 #include "XrdCl/XrdClDefaultEnv.hh"
28 
29 #include <utility>
30 
31 using namespace XrdCl;
32 
33 namespace xrdcl_proxy
34 {
35 //------------------------------------------------------------------------------
38 //------------------------------------------------------------------------------
40 {
41 public:
42  //----------------------------------------------------------------------------
44  //----------------------------------------------------------------------------
46 
47  //----------------------------------------------------------------------------
49  //----------------------------------------------------------------------------
50  virtual ~ProxyPrefixFile() override;
51 
52  //----------------------------------------------------------------------------
54  //----------------------------------------------------------------------------
55  virtual XRootDStatus Open(const std::string& url,
56  OpenFlags::Flags flags,
57  Access::Mode mode,
58  ResponseHandler* handler,
59  uint16_t timeout) override;
60 
61  //----------------------------------------------------------------------------
63  //----------------------------------------------------------------------------
65  uint16_t timeout) override
66  {
67  return pFile->Close(handler, timeout);
68  }
69 
70  //----------------------------------------------------------------------------
72  //----------------------------------------------------------------------------
73  virtual XRootDStatus Stat(bool force,
74  ResponseHandler* handler,
75  uint16_t timeout) override
76  {
77  return pFile->Stat(force, handler, timeout);
78  }
79 
80 
81  //----------------------------------------------------------------------------
83  //----------------------------------------------------------------------------
84  virtual XRootDStatus Read(uint64_t offset,
85  uint32_t size,
86  void* buffer,
87  ResponseHandler* handler,
88  uint16_t timeout) override
89  {
90  return pFile->Read(offset, size, buffer, handler, timeout);
91  }
92 
93  //------------------------------------------------------------------------
95  //------------------------------------------------------------------------
96  virtual XRootDStatus PgRead( uint64_t offset,
97  uint32_t size,
98  void *buffer,
99  ResponseHandler *handler,
100  uint16_t timeout ) override
101  {
102  return pFile->PgRead(offset, size, buffer, handler, timeout);
103  }
104 
105  //----------------------------------------------------------------------------
107  //----------------------------------------------------------------------------
108  virtual XRootDStatus Write(uint64_t offset,
109  uint32_t size,
110  const void* buffer,
111  ResponseHandler* handler,
112  uint16_t timeout) override
113  {
114  return pFile->Write(offset, size, buffer, handler, timeout);
115  }
116 
117  //------------------------------------------------------------------------
119  //------------------------------------------------------------------------
120  virtual XRootDStatus Write( uint64_t offset,
121  Buffer &&buffer,
122  ResponseHandler *handler,
123  uint16_t timeout = 0 ) override
124  {
125  return pFile->Write(offset, std::move(buffer), handler, timeout);
126  }
127 
128  //------------------------------------------------------------------------
130  //------------------------------------------------------------------------
131  virtual XRootDStatus Write( uint64_t offset,
132  uint32_t size,
133  Optional<uint64_t> fdoff,
134  int fd,
135  ResponseHandler *handler,
136  uint16_t timeout = 0 ) override
137  {
138  return pFile->Write(offset, size, fdoff, fd, handler, timeout);
139  }
140 
141  //------------------------------------------------------------------------
143  //------------------------------------------------------------------------
144  virtual XRootDStatus PgWrite( uint64_t offset,
145  uint32_t nbpgs,
146  const void *buffer,
147  std::vector<uint32_t> &cksums,
148  ResponseHandler *handler,
149  uint16_t timeout ) override
150  {
151  return pFile->PgWrite(offset, nbpgs, buffer, cksums, handler, timeout);
152  }
153 
154  //----------------------------------------------------------------------------
156  //----------------------------------------------------------------------------
158  uint16_t timeout) override
159  {
160  return pFile->Sync(handler, timeout);
161  }
162 
163  //----------------------------------------------------------------------------
165  //----------------------------------------------------------------------------
166  virtual XRootDStatus Truncate(uint64_t size,
167  ResponseHandler* handler,
168  uint16_t timeout) override
169  {
170  return pFile->Truncate(size, handler, timeout);
171  }
172 
173  //----------------------------------------------------------------------------
175  //----------------------------------------------------------------------------
176  virtual XRootDStatus VectorRead(const ChunkList& chunks,
177  void* buffer,
178  ResponseHandler* handler,
179  uint16_t timeout) override
180  {
181  return pFile->VectorRead(chunks, buffer, handler, timeout);
182  }
183 
184  //------------------------------------------------------------------------
186  //------------------------------------------------------------------------
187  virtual XRootDStatus VectorWrite( const ChunkList &chunks,
188  ResponseHandler *handler,
189  uint16_t timeout = 0 ) override
190  {
191  return pFile->VectorWrite(chunks, handler, timeout);
192  }
193 
194  //------------------------------------------------------------------------
196  //------------------------------------------------------------------------
197  virtual XRootDStatus WriteV( uint64_t offset,
198  const struct iovec *iov,
199  int iovcnt,
200  ResponseHandler *handler,
201  uint16_t timeout = 0 ) override
202  {
203  return pFile->WriteV(offset, iov, iovcnt, handler, timeout);
204  }
205 
206  //----------------------------------------------------------------------------
208  //----------------------------------------------------------------------------
209  virtual XRootDStatus Fcntl(const Buffer& arg,
210  ResponseHandler* handler,
211  uint16_t timeout) override
212  {
213  return pFile->Fcntl(arg, handler, timeout);
214  }
215 
216  //----------------------------------------------------------------------------
218  //----------------------------------------------------------------------------
220  uint16_t timeout) override
221  {
222  return pFile->Visa(handler, timeout);
223  }
224 
225  //----------------------------------------------------------------------------
227  //----------------------------------------------------------------------------
228  virtual bool IsOpen() const override
229  {
230  return pFile->IsOpen();
231  }
232 
233  //----------------------------------------------------------------------------
235  //----------------------------------------------------------------------------
236  virtual bool SetProperty(const std::string& name,
237  const std::string& value) override
238  {
239  return pFile->SetProperty(name, value);
240  }
241 
242  //----------------------------------------------------------------------------
244  //----------------------------------------------------------------------------
245  virtual bool GetProperty(const std::string& name,
246  std::string& value) const override
247  {
248  return pFile->GetProperty(name, value);
249  }
250 
251 private:
252 
253  //----------------------------------------------------------------------------
257  //----------------------------------------------------------------------------
258  inline std::string trim(const std::string& in) const;
259 
260  //----------------------------------------------------------------------------
264  //----------------------------------------------------------------------------
265  inline std::string GetPrefixUrl() const;
266 
267  //----------------------------------------------------------------------------
271  //----------------------------------------------------------------------------
272  std::list<std::string> GetExclDomains() const;
273 
274  //----------------------------------------------------------------------------
281  //----------------------------------------------------------------------------
282  std::string ConstructFinalUrl(const std::string& orig_url) const;
283 
284  //----------------------------------------------------------------------------
290  //----------------------------------------------------------------------------
291  std::string GetFqdn(const std::string& hostname) const;
292 
293  bool mIsOpen;
294  XrdCl::File* pFile;
295 };
296 
297 } // namespace xrdcl_proxy
void trim(std::string &str)
Definition: XrdHttpReq.cc:75
Binary blob representation.
Definition: XrdClBuffer.hh:34
An interface for file plug-ins.
A file.
Definition: XrdClFile.hh:46
Handle an async response.
virtual XRootDStatus Write(uint64_t offset, Buffer &&buffer, ResponseHandler *handler, uint16_t timeout=0) override
Write.
virtual XRootDStatus Fcntl(const Buffer &arg, ResponseHandler *handler, uint16_t timeout) override
Fcntl.
virtual XRootDStatus Close(ResponseHandler *handler, uint16_t timeout) override
Close.
virtual XRootDStatus Truncate(uint64_t size, ResponseHandler *handler, uint16_t timeout) override
Truncate.
virtual XRootDStatus VectorRead(const ChunkList &chunks, void *buffer, ResponseHandler *handler, uint16_t timeout) override
VectorRead.
virtual XRootDStatus PgRead(uint64_t offset, uint32_t size, void *buffer, ResponseHandler *handler, uint16_t timeout) override
PgRead.
virtual bool SetProperty(const std::string &name, const std::string &value) override
SetProperty.
virtual XRootDStatus VectorWrite(const ChunkList &chunks, ResponseHandler *handler, uint16_t timeout=0) override
VectorWrite.
virtual XRootDStatus PgWrite(uint64_t offset, uint32_t nbpgs, const void *buffer, std::vector< uint32_t > &cksums, ResponseHandler *handler, uint16_t timeout) override
PgWrite.
virtual XRootDStatus Write(uint64_t offset, uint32_t size, Optional< uint64_t > fdoff, int fd, ResponseHandler *handler, uint16_t timeout=0) override
Write.
virtual XRootDStatus Stat(bool force, ResponseHandler *handler, uint16_t timeout) override
Stat.
virtual XRootDStatus Visa(ResponseHandler *handler, uint16_t timeout) override
Visa.
virtual XRootDStatus Read(uint64_t offset, uint32_t size, void *buffer, ResponseHandler *handler, uint16_t timeout) override
Read.
virtual bool IsOpen() const override
IsOpen.
virtual bool GetProperty(const std::string &name, std::string &value) const override
GetProperty.
virtual XRootDStatus Write(uint64_t offset, uint32_t size, const void *buffer, ResponseHandler *handler, uint16_t timeout) override
Write.
virtual XRootDStatus Sync(ResponseHandler *handler, uint16_t timeout) override
Sync.
virtual XRootDStatus WriteV(uint64_t offset, const struct iovec *iov, int iovcnt, ResponseHandler *handler, uint16_t timeout=0) override
OpenImpl< false > Open(Ctx< File > file, Arg< std::string > url, Arg< OpenFlags::Flags > flags, Arg< Access::Mode > mode=Access::None, uint16_t timeout=0)
Factory for creating ReadImpl objects.
std::vector< ChunkInfo > ChunkList
List of chunks.
Mode
Access mode.
Flags
Open flags, may be or'd when appropriate.