00001 // -*- indent-tabs-mode: nil -*- 00002 00003 #ifndef __ARC_DATAPOINTDIRECT_H__ 00004 #define __ARC_DATAPOINTDIRECT_H__ 00005 00006 #include <list> 00007 #include <string> 00008 00009 #include <arc/data/DataPoint.h> 00010 00011 #define MAX_PARALLEL_STREAMS 20 00012 #define MAX_BLOCK_SIZE (1024 * 1024) 00013 00014 namespace Arc { 00015 00016 class DataBuffer; 00017 class DataCallback; 00018 00020 00027 class DataPointDirect 00028 : public DataPoint { 00029 public: 00030 virtual ~DataPointDirect(); 00031 00032 virtual bool IsIndex() const; 00033 virtual bool IsStageable() const; 00034 00035 virtual long long int BufSize() const; 00036 virtual int BufNum() const; 00037 00038 virtual bool Local() const; 00039 virtual bool ReadOnly() const; 00040 00041 virtual void ReadOutOfOrder(bool v); 00042 virtual bool WriteOutOfOrder(); 00043 00044 virtual void SetAdditionalChecks(bool v); 00045 virtual bool GetAdditionalChecks() const; 00046 00047 virtual void SetSecure(bool v); 00048 virtual bool GetSecure() const; 00049 00050 virtual void Passive(bool v); 00051 00052 virtual void Range(unsigned long long int start = 0, 00053 unsigned long long int end = 0); 00054 00055 virtual int AddCheckSumObject(CheckSum *cksum); 00056 00057 virtual const CheckSum* GetCheckSumObject(int index) const; 00058 00059 virtual DataStatus Stat(std::list<FileInfo>& files, 00060 const std::list<DataPoint*>& urls, 00061 DataPointInfoType verb = INFO_TYPE_ALL); 00062 00063 // Not supported for direct data points: 00064 virtual DataStatus Resolve(bool source); 00065 virtual DataStatus Resolve(bool source, const std::list<DataPoint*>& urls); 00066 virtual bool Registered() const; 00067 virtual DataStatus PreRegister(bool replication, bool force = false); 00068 virtual DataStatus PostRegister(bool replication); 00069 virtual DataStatus PreUnregister(bool replication); 00070 virtual DataStatus Unregister(bool all); 00071 virtual bool AcceptsMeta() const; 00072 virtual bool ProvidesMeta() const; 00073 virtual const URL& CurrentLocation() const; 00074 virtual DataPoint* CurrentLocationHandle() const; 00075 virtual const std::string& CurrentLocationMetadata() const; 00076 virtual DataStatus CompareLocationMetadata() const; 00077 virtual bool NextLocation(); 00078 virtual bool LocationValid() const; 00079 virtual bool HaveLocations() const; 00080 virtual bool LastLocation(); 00081 virtual DataStatus AddLocation(const URL& url, const std::string& meta); 00082 virtual DataStatus RemoveLocation(); 00083 virtual DataStatus RemoveLocations(const DataPoint& p); 00084 virtual DataStatus ClearLocations(); 00085 virtual void SortLocations(const std::string& /* pattern */, 00086 const URLMap& /* url_map */) {}; 00087 00088 protected: 00089 DataBuffer *buffer; 00090 long long int bufsize; 00091 int bufnum; 00092 bool local; 00093 bool readonly; 00094 bool linkable; 00095 bool is_secure; 00096 bool force_secure; 00097 bool force_passive; 00098 bool additional_checks; 00099 bool allow_out_of_order; 00100 unsigned long long int range_start; 00101 unsigned long long int range_end; 00102 std::list<CheckSum*> checksums; 00103 DataPointDirect(const URL& url, const UserConfig& usercfg, PluginArgument* parg); 00104 }; 00105 00106 } // namespace Arc 00107 00108 #endif // __ARC_DATAPOINTDIRECT_H__