00001
00005 #ifndef __HTTP_FILE_PLUG_IN_
00006 #define __HTTP_FILE_PLUG_IN_
00007
00008 #include "davix.hpp"
00009
00010 #include "XrdCl/XrdClFile.hh"
00011 #include "XrdCl/XrdClFileSystem.hh"
00012 #include "XrdCl/XrdClPlugInInterface.hh"
00013
00014 #include <cstdint>
00015 #include <limits>
00016 #include <unordered_map>
00017
00018 namespace XrdCl {
00019
00020 class Log;
00021
00022 class HttpFilePlugIn : public FilePlugIn {
00023 public:
00024 HttpFilePlugIn();
00025 virtual ~HttpFilePlugIn() noexcept = default;
00026
00027
00029
00030 virtual XRootDStatus Open( const std::string &url,
00031 OpenFlags::Flags flags,
00032 Access::Mode mode,
00033 ResponseHandler *handler,
00034 uint16_t timeout ) override;
00035
00036
00038
00039 virtual XRootDStatus Close( ResponseHandler *handler,
00040 uint16_t timeout ) override;
00041
00042
00044
00045 virtual XRootDStatus Stat( bool force,
00046 ResponseHandler *handler,
00047 uint16_t timeout ) override;
00048
00049
00051
00052 virtual XRootDStatus Read( uint64_t offset,
00053 uint32_t size,
00054 void *buffer,
00055 ResponseHandler *handler,
00056 uint16_t timeout ) override;
00057
00058
00060
00061 virtual XRootDStatus Write( uint64_t offset,
00062 uint32_t size,
00063 const void *buffer,
00064 ResponseHandler *handler,
00065 uint16_t timeout ) override;
00066
00067
00069
00070 virtual XRootDStatus Sync( ResponseHandler *handler,
00071 uint16_t timeout ) override;
00072
00073
00075
00076 virtual XRootDStatus VectorRead( const ChunkList &chunks,
00077 void *buffer,
00078 XrdCl::ResponseHandler *handler,
00079 uint16_t timeout ) override;
00080
00081
00083
00084 virtual bool IsOpen() const override;
00085
00086
00088
00089 virtual bool SetProperty( const std::string &name,
00090 const std::string &value ) override;
00091
00092
00094
00095 virtual bool GetProperty( const std::string &name,
00096 std::string &value ) const override;
00097
00098 private:
00099
00100 Davix::Context davix_context_;
00101 Davix::DavPosix davix_client_;
00102
00103 DAVIX_FD* davix_fd_;
00104
00105 bool is_open_;
00106
00107 std::string url_;
00108
00109 std::unordered_map<std::string, std::string> properties_;
00110
00111 Log* logger_;
00112 };
00113
00114 }
00115
00116 #endif // __HTTP_FILE_PLUG_IN_