ARC SDK
DataDeliveryComm.h
1 #ifndef DATA_DELIVERY_COMM_H_
2 #define DATA_DELIVERY_COMM_H_
3 
4 #include "DTR.h"
5 
6 namespace DataStaging {
7 
8  class DataDeliveryCommHandler;
9 
11 
28 
29  friend class DataDeliveryCommHandler;
30 
31  public:
40 
41  };
42  #pragma pack(4)
43 
44 
45  struct Status {
47  time_t timestamp;
51  char error_desc[1024];
52  unsigned int streams;
53  unsigned long long int transferred;
54  unsigned long long int offset;
55  unsigned long long int size;
56  unsigned int speed;
57  char checksum[128];
58  };
59  #pragma pack()
60 
61  protected:
62 
68  unsigned int status_pos_;
70  Glib::Mutex lock_;
74  std::string dtr_id;
81 
83 
88  virtual void PullStatus() = 0;
89 
91 
95  DataDeliveryComm(DTR_ptr dtr, const TransferParameters& params);
96 
97  public:
99  static DataDeliveryComm* CreateInstance(DTR_ptr dtr, const TransferParameters& params);
100 
102  virtual ~DataDeliveryComm() {};
103 
105  Status GetStatus() const;
106 
108 
114  static bool CheckComm(DTR_ptr dtr, std::vector<std::string>& allowed_dirs);
115 
117  std::string GetError() const { return status_.error_desc; };
118 
120  virtual operator bool() const = 0;
122  virtual bool operator!() const = 0;
123  };
124 
126 
131 
132  private:
133  Glib::Mutex lock_;
134  static void func(void* arg);
135  std::list<DataDeliveryComm*> items_;
136  static DataDeliveryCommHandler* comm_handler;
137 
142 
143  public:
146  void Add(DataDeliveryComm* item);
148  void Remove(DataDeliveryComm* item);
151  };
152 
153 } // namespace DataStaging
154 
155 #endif // DATA_DELIVERY_COMM_H_