ewmscp  ..
davixCommon.h
Go to the documentation of this file.
1 #ifndef __davixCommon_h__
2 #define __davixCommon_h__
3 #include "copyRequestTypes.h"
4 #include "ioHandle.h"
5 #include "pathHandler.h"
6 #include <OptionsChrono.h>
7 #include <davix.hpp>
8 
12 class errorReport {
14  Davix::DavixError* report;
15  copyRequest::clock_type::time_point start;
16  const std::string func;
17  const std::string what;
18  const std::string& path;
19  public:
20  errorReport(const std::string& aFunc,
21  const std::string& aWhat,
22  const std::string& aPath): report(nullptr),
23  start(std::chrono::system_clock::now()),
24  func(aFunc),
25  what(aWhat),
26  path(aPath) {
27  };
28  operator Davix::DavixError** () {
29  return &report;
30  }
31  Davix::DavixError* operator->() {
32  if (report == nullptr) {
33  throw std::runtime_error("no davix error set");
34  }
35  return report;
36  }
37  const std::string& getMessage() const {
38  if (report == nullptr) {
39  static const std::string noMessageYet("no davix eror set");
40  return noMessageYet;
41  } else {
42  return report->getErrMsg();
43  }
44  }
45  void throwUp() {
46  if (report == nullptr) {
47  throw std::runtime_error(func + " "
48  + what + " on "
49  + path + " : no davix error set");
50  }
51  throw std::runtime_error(func + " "
52  + what + " on "
53  + path + " : "
54  + report->getErrMsg());
55  }
57  Davix::DavixError::clearError(&report);
58  if (withTiming) {
59  auto now = copyRequest::clock_type::now();
60  auto dt = std::chrono::duration_cast<std::chrono::duration<double>>(now - start).count();
61  std::cerr << func << ":" << what << ": " << std::fixed << dt << "\n";
62  }
63  }
64 };
65 
67 template <class T> class davixCfgPar {
69  void (Davix::RequestParams::* set)(T);
70  public:
71  davixCfgPar(const std::string& parPrefix,
72  const std::string& optName,
73  const std::string& description,
74  void (Davix::RequestParams::* setter)(T)):
75  option('\0', parPrefix + optName, description),
76  set(setter) {
77  }
78  davixCfgPar(const std::string& parPrefix,
79  const std::string& optName,
80  const std::string& description,
81  void (Davix::RequestParams::* setter)(T),
82  T aDefault):
83  option('\0', parPrefix + optName, description, aDefault),
84  set(setter) {
85  }
86  void applySingle(Davix::RequestParams& params) {
87  if (option.fIsSet()) {
88  (params.*set)(option);
89  }
90  }
91 };
92 
93 template <> class davixCfgPar<struct timespec*> {
95  void (Davix::RequestParams::* set)(struct timespec*);
96  struct timespec spec;
97 public:
98  davixCfgPar(const std::string& parPrefix,
99  const std::string& optName,
100  const std::string& description,
101  void (Davix::RequestParams::* setter)(struct timespec*)):
102  option('\0', parPrefix + optName, description),
103  set(setter) {
104  }
105  void applySingle(Davix::RequestParams& params) {
106  if (option.fIsSet()) {
107  spec.tv_sec = std::chrono::duration_cast<std::chrono::seconds>(option).count();
108  spec.tv_nsec = option.count() % 1000000000;
109  (params.*set)(&spec);
110  }
111  }
112  };
113 
114 template <class T> class davixCfgEnum {
116  void (Davix::RequestParams::* set)(T);
117  std::map<std::string, T> nameMap;
118  public:
119  davixCfgEnum(const std::string& parPrefix,
120  const std::string& optName,
121  const std::string& description,
122  void (Davix::RequestParams::* setter)(T),
123  const std::map<std::string, T> map):
124  option('\0', parPrefix + optName, description),
125  set(setter),
126  nameMap(map) {
127  for (const auto& item : nameMap) {
128  option.fAddToRange(item.first);
129  }
130  }
131  void applySingle(Davix::RequestParams& params) {
132  if (option.fIsSet()) {
133  (params.*set)(nameMap.at(option));
134  }
135  }
136 };
137 
138 template <class T> class davixCfgStrings {
140  void (Davix::RequestParams::* set)(T);
141  public:
142  davixCfgStrings(const std::string& parPrefix,
143  const std::string& optName,
144  const std::string& description,
145  void (Davix::RequestParams::* setter)(T)):
146  option('\0', parPrefix + optName, description),
147  set(setter) {
148  }
149  void applySingle(Davix::RequestParams& params) {
150  for (const auto& item : option) {
151  (params.*set)(item);
152  }
153  }
154 };
155 
161  Davix::X509Credential credential;
162  public:
163  davixCfgX509(const std::string& parPrefix);
164  void applySingle(Davix::RequestParams& params, bool &accessConfigDone);
165 };
166 
170 
171  // cfg members:
179 public:
181 private:
183 
184 
185  public:
186  davixConfigObject(const std::string& parPrefix);
187  void apply(Davix::RequestParams& params);
188  bool accessConfigured() const;
189 };
190 
191 
192 
193 class davixCommon: virtual public pathHandler {
194  protected:
195  Davix::Context context;
196  public:
197  Davix::RequestParams params;
198  Davix::DavPosix posix;
199  protected:
200  std::string loginName;
201  std::string passWord;
202  static int loginCallback(void* userdata,
203  const Davix::SessionInfo & info,
204  std::string & login,
205  std::string & password,
206  int count,
207  Davix::DavixError** err);
208  int loginCallbackInner(std::string & login,
209  std::string & password,
210  int count);
211 
212 
213  public:
214  davixCommon(davixConfigObject& configObj);
215  static void getPassword(const std::string& prompt,
216  std::string& password);
217 
218  public:
219  bool pathExists(const std::string& path) override;
220  std::unique_ptr<const genericStat> getStat(const std::string& path,
221  bool followLink) override;
222 };
223 
224 class davixIoCommon: virtual public ioHandle {
225  protected:
226  const std::string& path;
228  DAVIX_FD* fd;
229  public:
230  davixIoCommon(const std::string& aPath, davixCommon& aHandler);
231  std::unique_ptr<const genericStat> getStat() override;
232 };
233 
234 
235 #endif
options::single
generic option class with any type that can be used with std::istream and std::ostream
Definition: Options.h:533
davixCommon::loginName
std::string loginName
Definition: davixCommon.h:200
davixCfgStrings::set
void(Davix::RequestParams::* set)(T)
Definition: davixCommon.h:140
davixCfgStrings::option
options::container< std::string > option
Definition: davixCommon.h:139
davixCfgPar< struct timespec * >::applySingle
void applySingle(Davix::RequestParams &params)
Definition: davixCommon.h:105
davixCfgX509::credentialPath
options::single< std::string > credentialPath
Definition: davixCommon.h:159
davixCfgPar
template class for davix config parameters
Definition: davixCommon.h:67
options::single< bool >
class specialisation for options of type bool
Definition: Options.h:595
davixCfgEnum::applySingle
void applySingle(Davix::RequestParams &params)
Definition: davixCommon.h:131
davixIoCommon::fd
DAVIX_FD * fd
Definition: davixCommon.h:228
davixCommon::context
Davix::Context context
Definition: davixCommon.h:195
options::internal::typed_base::fAddToRange
virtual void fAddToRange(rangeValueType aValue)
add a value to the range of allowed values
Definition: Options.h:458
davixConfigObject::accessConfigured
bool accessConfigured() const
Definition: davixCommon.cpp:103
copyRequestTypes.h
davixIoCommon::getStat
std::unique_ptr< const genericStat > getStat() override
Definition: davixCommon.cpp:220
davixCommon
Definition: davixCommon.h:193
davixCommon::loginCallback
static int loginCallback(void *userdata, const Davix::SessionInfo &info, std::string &login, std::string &password, int count, Davix::DavixError **err)
Definition: davixCommon.cpp:116
options::base::fIsSet
virtual bool fIsSet() const
check if this option was set, regardless of from command line or config file
Definition: Options.h:263
davixConfigObject::X509Cert
davixCfgX509 X509Cert
Definition: davixCommon.h:173
errorReport::operator->
Davix::DavixError * operator->()
Definition: davixCommon.h:31
davixConfigObject::accessConfigDone
bool accessConfigDone
Definition: davixCommon.h:182
davixConfigObject::noAuth
options::single< bool > noAuth
Definition: davixCommon.h:180
errorReport::start
copyRequest::clock_type::time_point start
Definition: davixCommon.h:15
davixCfgX509::applySingle
void applySingle(Davix::RequestParams &params, bool &accessConfigDone)
Definition: davixCommon.cpp:24
davixCommon::getPassword
static void getPassword(const std::string &prompt, std::string &password)
Definition: davixCommon.cpp:125
davixConfigObject::OperationTimeout
davixCfgPar< struct timespec * > OperationTimeout
Definition: davixCommon.h:177
davixCfgStrings::applySingle
void applySingle(Davix::RequestParams &params)
Definition: davixCommon.h:149
davixConfigObject::Protocol
davixCfgEnum< const Davix::RequestProtocol::Protocol > Protocol
Definition: davixCommon.h:172
davixCfgPar::davixCfgPar
davixCfgPar(const std::string &parPrefix, const std::string &optName, const std::string &description, void(Davix::RequestParams::*setter)(T))
Definition: davixCommon.h:71
davixCfgX509::proxy
options::single< std::string > proxy
Definition: davixCommon.h:160
davixCfgEnum::davixCfgEnum
davixCfgEnum(const std::string &parPrefix, const std::string &optName, const std::string &description, void(Davix::RequestParams::*setter)(T), const std::map< std::string, T > map)
Definition: davixCommon.h:119
davixConfigObject::OperationRetry
davixCfgPar< int > OperationRetry
Definition: davixCommon.h:176
options::container< std::string >
OptionsChrono.h
errorReport
class for easy error handling with davix ensures proper cleanup of the error report when going out of...
Definition: davixCommon.h:12
davixIoCommon
Definition: davixCommon.h:224
davixIoCommon::handler
davixCommon & handler
Definition: davixCommon.h:227
davixCommon::passWord
std::string passWord
Definition: davixCommon.h:201
errorReport::withTiming
static options::single< bool > withTiming
Definition: davixCommon.h:13
ioHandle.h
davixCfgPar< struct timespec * >
Definition: davixCommon.h:93
errorReport::errorReport
errorReport(const std::string &aFunc, const std::string &aWhat, const std::string &aPath)
Definition: davixCommon.h:20
errorReport::what
const std::string what
Definition: davixCommon.h:17
davixCfgX509::privKeyPath
options::single< std::string > privKeyPath
Definition: davixCommon.h:158
parPrefix
static const std::string parPrefix("dCap")
davixCfgPar< struct timespec * >::option
options::single< std::chrono::nanoseconds > option
Definition: davixCommon.h:94
davixCommon::pathExists
bool pathExists(const std::string &path) override
Definition: davixCommon.cpp:174
davixCommon::posix
Davix::DavPosix posix
Definition: davixCommon.h:198
davixIoCommon::davixIoCommon
davixIoCommon(const std::string &aPath, davixCommon &aHandler)
Definition: davixCommon.cpp:214
errorReport::path
const std::string & path
Definition: davixCommon.h:18
davixConfigObject::CertificateAuthorityPath
davixCfgStrings< const std::string & > CertificateAuthorityPath
Definition: davixCommon.h:174
davixCfgPar::option
options::single< T > option
option that holds the config value
Definition: davixCommon.h:68
pathHandler
Definition: pathHandler.h:6
errorReport::~errorReport
~errorReport()
Definition: davixCommon.h:56
davixCfgEnum
Definition: davixCommon.h:114
davixCfgEnum::set
void(Davix::RequestParams::* set)(T)
Definition: davixCommon.h:116
davixCfgX509::credential
Davix::X509Credential credential
Definition: davixCommon.h:161
davixCfgStrings
Definition: davixCommon.h:138
davixCfgPar::davixCfgPar
davixCfgPar(const std::string &parPrefix, const std::string &optName, const std::string &description, void(Davix::RequestParams::*setter)(T), T aDefault)
Definition: davixCommon.h:78
davixCommon::davixCommon
davixCommon(davixConfigObject &configObj)
Definition: davixCommon.cpp:107
davixCfgPar::applySingle
void applySingle(Davix::RequestParams &params)
Definition: davixCommon.h:86
pathHandler.h
davixCfgX509
Definition: davixCommon.h:156
davixCfgEnum::nameMap
std::map< std::string, T > nameMap
Definition: davixCommon.h:117
errorReport::report
Davix::DavixError * report
Definition: davixCommon.h:14
ioHandle
class as base for inputHandler::base::reader and outputHandler::base::writer containing the common pa...
Definition: ioHandle.h:15
davixConfigObject::davixConfigObject
davixConfigObject(const std::string &parPrefix)
Definition: davixCommon.cpp:57
davixConfigObject::ConnectionTimeout
davixCfgPar< struct timespec * > ConnectionTimeout
Definition: davixCommon.h:178
davixCfgX509::p12Path
options::single< std::string > p12Path
Definition: davixCommon.h:157
davixConfigObject::SSLCAcheck
davixCfgPar< bool > SSLCAcheck
Definition: davixCommon.h:175
davixCommon::params
Davix::RequestParams params
Definition: davixCommon.h:197
errorReport::getMessage
const std::string & getMessage() const
Definition: davixCommon.h:37
davixCommon::getStat
std::unique_ptr< const genericStat > getStat(const std::string &path, bool followLink) override
Definition: davixCommon.cpp:185
davixCfgX509::davixCfgX509
davixCfgX509(const std::string &parPrefix)
Definition: davixCommon.cpp:12
davixConfigObject
class for configuring one davix instance holds all options necessary for that
Definition: davixCommon.h:169
davixIoCommon::path
const std::string & path
Definition: davixCommon.h:226
davixCfgStrings::davixCfgStrings
davixCfgStrings(const std::string &parPrefix, const std::string &optName, const std::string &description, void(Davix::RequestParams::*setter)(T))
Definition: davixCommon.h:142
davixCommon::loginCallbackInner
int loginCallbackInner(std::string &login, std::string &password, int count)
Definition: davixCommon.cpp:138
davixConfigObject::apply
void apply(Davix::RequestParams &params)
Definition: davixCommon.cpp:94
errorReport::throwUp
void throwUp()
Definition: davixCommon.h:45
davixCfgPar< struct timespec * >::davixCfgPar
davixCfgPar(const std::string &parPrefix, const std::string &optName, const std::string &description, void(Davix::RequestParams::*setter)(struct timespec *))
Definition: davixCommon.h:98
errorReport::func
const std::string func
Definition: davixCommon.h:16
davixCfgPar::set
void(Davix::RequestParams::* set)(T)
setter that will configure the davix instance
Definition: davixCommon.h:69
davixCfgEnum::option
options::single< std::string > option
Definition: davixCommon.h:115