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_;
79 
81 
86  virtual void PullStatus() = 0;
87 
89 
93  DataDeliveryComm(DTR_ptr dtr, const TransferParameters& params);
94 
95  public:
97  static DataDeliveryComm* CreateInstance(DTR_ptr dtr, const TransferParameters& params);
98 
100  virtual ~DataDeliveryComm() {};
101 
103  Status GetStatus() const;
104 
106 
112  static bool CheckComm(DTR_ptr dtr, std::vector<std::string>& allowed_dirs);
113 
115  std::string GetError() const { return status_.error_desc; };
116 
118  virtual operator bool() const = 0;
120  virtual bool operator!() const = 0;
121  };
122 
124 
129 
130  private:
131  Glib::Mutex lock_;
132  static void func(void* arg);
133  std::list<DataDeliveryComm*> items_;
134  static DataDeliveryCommHandler* comm_handler;
135 
140 
141  public:
144  void Add(DataDeliveryComm* item);
146  void Remove(DataDeliveryComm* item);
149  };
150 
151 } // namespace DataStaging
152 
153 #endif // DATA_DELIVERY_COMM_H_