xrootd
XrdCpConfig.hh
Go to the documentation of this file.
1 #ifndef __XRDCPCONFIG_HH__
2 #define __XRDCPCONFIG_HH__
3 /******************************************************************************/
4 /* */
5 /* X r d C p C o n f i g . h h */
6 /* */
7 /* (c) 2012 by the Board of Trustees of the Leland Stanford, Jr., University */
8 /* All Rights Reserved */
9 /* Produced by Andrew Hanushevsky for Stanford University under contract */
10 /* DE-AC02-76-SFO0515 with the Department of Energy */
11 /* */
12 /* This file is part of the XRootD software suite. */
13 /* */
14 /* XRootD is free software: you can redistribute it and/or modify it under */
15 /* the terms of the GNU Lesser General Public License as published by the */
16 /* Free Software Foundation, either version 3 of the License, or (at your */
17 /* option) any later version. */
18 /* */
19 /* XRootD is distributed in the hope that it will be useful, but WITHOUT */
20 /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
21 /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
22 /* License for more details. */
23 /* */
24 /* You should have received a copy of the GNU Lesser General Public License */
25 /* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
26 /* COPYING (GPL license). If not, see <http://www.gnu.org/licenses/>. */
27 /* */
28 /* The copyright holder's institutional names and contributor's names may not */
29 /* be used to endorse or promote products derived from this software without */
30 /* specific prior written permission of the institution or contributor. */
31 /******************************************************************************/
32 
33 #include "XrdCks/XrdCksData.hh"
34 
35 #include <ctype.h>
36 #include <stdint.h>
37 
38 #include <string>
39 
40 struct option;
41 class XrdCks;
42 class XrdCksCalc;
43 class XrdCpFile;
44 class XrdSysError;
45 
47 {
48 public:
49 
50 struct defVar
51  { defVar *Next; // -> Next such definition, 0 if no more
52  const char *vName; // -> Variable name
53  union {const char *strVal; // -> String value if in strDefs
54  int intVal; // Integer value if in intDefs
55  };
56  defVar(const char *vn, const char *vl)
57  : Next(0), vName(vn), strVal(vl) {}
58  defVar(const char *vn, int vl)
59  : Next(0), vName(vn), intVal(vl) {}
60  };
61 
62  defVar *intDefs; // -> -DI settings
63  defVar *strDefs; // -> -DS settings
64  const char *dstOpq; // -> -OD setting (dest opaque)
65  const char *srcOpq; // -> -OS setting (src opaque)
66  const char *Pgm; // -> Program name
67  long long xRate; // -> xrate value in bytes/sec (0 if not set)
68  long long xRateThreashold; // -> xrate threshold value in bytes/sec (0 if not set)
69  int Parallel; // Number of simultaneous copy ops (1 to 4)
70  char *pHost; // -> SOCKS4 proxy hname (0 if none)
71  int pPort; // SOCKS4 proxy port
72  long long OpSpec; // Bit mask of set options (see Doxxxx)
73  int Dlvl; // Debug level (0 to 3)
74  int nSrcs; // Number of sources wanted (dflt 1)
75  int nStrm; // Number of streams wanted (dflt 1)
76  int Retry; // Max times to retry failed copy job
77  std::string RetryPolicy; // retry policy (to force or to continue)
78  int Verbose; // True if --verbose specified
79  int CksLen; // Binary length of checksum, if any
80 
81  int numFiles; // Number of source files
82  long long totBytes; // Total number of bytes for local files
83 
84 XrdCksData CksData; // Checksum information
85 XrdCks *CksMan; // -> Checksum manager
86 XrdCksCalc *CksObj; // -> Cks computation object (0 if no cks)
87 const char *CksVal; // -> Cks argument (0 if none)
88 
89 XrdCpFile *srcFile; // List of source files
90 XrdCpFile *dstFile; // The destination for the copy
91 
92 char *zipFile; // The file name if the URL points to a ZIP archive
93 
94 static XrdSysError *Log; // -> Error message object
95 
96 static const uint64_t OpCksum = 'C'; // -adler -MD5 legacy -> DoCksrc
97 static const uint64_t DoCksrc = 0x0000000000000001LL; // --cksum <type>:source
98 static const uint64_t DoCksum = 0x0000000000000002LL; // --cksum <type>
99 static const uint64_t DoCkprt = 0x0000000000000004LL; // --cksum <type>:print
100 
101 static const uint64_t OpCoerce = 'F';
102 static const uint64_t DoCoerce = 0x0000000000000008LL; // -F | --coerce
103 
104 static const uint64_t OpDebug = 'd';
105 static const uint64_t DoDebug = 0x0000000000000010LL; // -d | --debug <val>
106 
107 static const uint64_t OpForce = 'f';
108 static const uint64_t DoForce = 0x0000000000000020LL; // -f | --force
109 
110 static const uint64_t OpHelp = 'h';
111 static const uint64_t DoHelp = 0x0000000000000040LL; // -h | --help
112 
113 static const uint64_t OpIfile = 'I';
114 static const uint64_t DoIfile = 0x0000000000000080LL; // -I | --infiles
115 
116 static const uint64_t OpLicense = 'H'; // -H | --license
117 
118 static const uint64_t OpNoPbar = 'N'; // -N | --nopbar | -np {legacy}
119 static const uint64_t DoNoPbar = 0x0000000000000100LL;
120 
121 static const uint64_t OpPosc = 'P';
122 static const uint64_t DoPosc = 0x0000000000000200LL; // -P | --posc
123 
124 static const uint64_t OpProxy = 'D';
125 static const uint64_t DoProxy = 0x0000000000000400LL; // -D | --proxy
126 
127 static const uint64_t OpRecurse = 'r';
128 static const uint64_t OpRecursv = 'R'; // -r | --recursive | -R {legacy}
129 static const uint64_t DoRecurse = 0x0000000000000800LL;
130 
131 static const uint64_t OpRetry = 't';
132 static const uint64_t DoRetry = 0x0000000000001000LL; // -t | --retry
133 
134 static const uint64_t OpServer = 0x03;
135 static const uint64_t DoServer = 0x0000000000002000LL; // --server
136 
137 static const uint64_t OpSilent = 's';
138 static const uint64_t DoSilent = 0x0000000000004000LL; // -s | --silent
139 
140 static const uint64_t OpSources = 'y';
141 static const uint64_t DoSources = 0x0000000000008000LL; // -y | --sources
142 
143 static const uint64_t OpStreams = 'S';
144 static const uint64_t DoStreams = 0x0000000000010000LL; // -S | --streams
145 
146 static const uint64_t OpTpc = 'T'; // -T | --tpc [delegate] {first | only}
147 static const uint64_t DoTpc = 0x0000000000020000LL; // --tpc {first | only}
148 static const uint64_t DoTpcOnly = 0x0000000000100000LL; // --tpc only
149 static const uint64_t DoTpcDlgt = 0x0000000000800000LL; // --tpc delegate ...
150 
151 static const uint64_t OpVerbose = 'v';
152 static const uint64_t DoVerbose = 0x0000000000040000LL; // -v | --verbose
153 
154 static const uint64_t OpVersion = 'V'; // -V | --version
155 
156 static const uint64_t OpXrate = 'X';
157 static const uint64_t DoXrate = 0x0000000000080000LL; // -X | --xrate
158 
159 static const uint64_t OpParallel = 0x04;
160 static const uint64_t DoParallel = 0x0000000000200000LL; // --parallel
161 
162 static const uint64_t OpDynaSrc = 'Z';
163 static const uint64_t DoDynaSrc = 0x0000000000400000LL; // --dynamic-src
164 
165 // const uint64_t DoTpcDlgt = 0x0000000000800000LL; // Marker for bit used
166 
167 static const uint64_t OpZip = 'z';
168 static const uint64_t DoZip = 0x0000000001000000LL; // -z | --zip
169 
170 static const uint64_t OpTlsNoData = 'E';
171 static const uint64_t DoTlsNoData = 0x0000000002000000LL; // -E | --tlsnodata
172 
173 static const uint64_t OpNoTlsOK = 0x05;
174 static const uint64_t DoNoTlsOK = 0x0000000004000000LL; // --notlsok
175 
176 static const uint64_t OpTlsMLF = 0x06;
177 static const uint64_t DoTlsMLF = 0x0000000008000000LL; // --tlsmetalink
178 
179 static const uint64_t OpPath = 'p';
180 static const uint64_t DoPath = 0x0000000010000000LL; // -p | --path
181 
182 static const uint64_t OpXAttr = 0x07;
183 static const uint64_t DoXAttr = 0x0000000020000000LL; // --xattr
184 
185 static const uint64_t OpZipMtlnCksum = 0x08;
186 static const uint64_t DoZipMtlnCksum = 0x0000000040000000LL; // --zip-mtln-cksum
187 
188 static const uint64_t OpRmOnBadCksum = 0x09;
189 static const uint64_t DoRmOnBadCksum = 0x0000000080000000LL; // --rm-bad-cksum
190 
191 static const uint64_t OpContinue = 0x10;
192 static const uint64_t DoContinue = 0x0000000100000000LL; // --continue
193 
194 static const uint64_t OpXrateThreashold = 0x11;
195 static const uint64_t DoXrateThreashold = 0x0000000200000000LL; // --xrate-threashold
196 
197 static const uint64_t OpRetryPolicy = 0x12;
198 static const uint64_t DoRetryPolicy = 0x0000000400000000LL; // --retry-policy
199 
200 static const uint64_t OpZipAppend = 0x13;
201 static const uint64_t DoZipAppend = 0x0000000800000000LL; // --zip-append
202 
203 // Flag to allow the use of HTTP (and HTTPS) as source and destination
204 // protocols. If specified, the XrdClHttp client plugin must be available
205 // for the transfer operations to succeed.
206 static const int OpAllowHttp = 'A';
207 static const int DoAllowHttp = 0x2000000; // --allow-http
208 
209 // Call Config with the parameters passed to main() to fill out this object. If
210 // the method returns then no errors have been found. Otherwise, it exits.
211 // The following options may be passed (largely to support legacy stuff):
212 //
213 static const int opt1Src = 0x00000001; // Only one source is allowed
214 static const int optNoXtnd = 0x00000002; // Do not index source directories
215 static const int optRmtRec = 0x00000004; // Allow remote recursive copy
216 static const int optNoStdIn = 0x00000008; // Disallow '-' as src for stdin
217 static const int optNoLclCp = 0x00000010; // Disallow local/local copy
218 
219  void Config(int argc, char **argv, int Opts=0);
220 
221 // Method to check for setting
222 //
223 inline int Want(uint64_t What) {return (OpSpec & What) != 0;}
224 
225  XrdCpConfig(const char *pgname);
227 
228 private:
229  int a2i(const char *item, int *val, int minv, int maxv=-1);
230  int a2l(const char *item, long long *val,
231  long long minv, long long maxv=-1);
232  int a2t(const char *item, int *val, int minv, int maxv=-1);
233  int a2x(const char *Val, char *Buff, int Vlen);
234  int a2z(const char *item, long long *val,
235  long long minv, long long maxv=-1);
236  int defCks(const char *opval);
237  int defOpq(const char *theOp);
238  int defOpt(const char *theOp, const char *theArg);
239  void defPxy(const char *opval);
240  const char *Human(long long Val, char *Buff, int Blen);
241  int Legacy(int oIndex);
242  int Legacy(const char *theOp, const char *theArg);
243  void License();
244  const char *OpName();
245  void ProcFile(const char *fname);
246  void Usage(int rc=0);
247 
248  static void toLower( char cstr[] )
249  {
250  for( int i = 0; cstr[i]; ++i )
251  cstr[i] = tolower( cstr[i] );
252  }
253 
254 
255  const char *PName;
256  int Opts;
257  int Argc;
258  char **Argv;
261 
262 static const char *opLetters;
263 static struct option opVec[];
264 
265 static const int dfltSrcs = 12;
266 
270  char *inFile;
271  char **parmVal;
272  int parmCnt;
273  int isLcl;
274 };
275 #endif
Definition: XrdCksCalc.hh:40
Definition: XrdCksData.hh:38
Definition: XrdCks.hh:92
Definition: XrdCpConfig.hh:47
static const uint64_t OpVerbose
Definition: XrdCpConfig.hh:151
int nSrcs
Definition: XrdCpConfig.hh:74
const char * OpName()
static const uint64_t DoHelp
Definition: XrdCpConfig.hh:111
static const uint64_t OpXAttr
Definition: XrdCpConfig.hh:182
static const char * opLetters
Definition: XrdCpConfig.hh:262
static const uint64_t DoProxy
Definition: XrdCpConfig.hh:125
defVar * intDefs
Definition: XrdCpConfig.hh:62
void Config(int argc, char **argv, int Opts=0)
static const uint64_t OpRecurse
Definition: XrdCpConfig.hh:127
XrdCksCalc * CksObj
Definition: XrdCpConfig.hh:86
int Parallel
Definition: XrdCpConfig.hh:69
static const uint64_t OpContinue
Definition: XrdCpConfig.hh:191
static const uint64_t DoRetry
Definition: XrdCpConfig.hh:132
static const uint64_t DoStreams
Definition: XrdCpConfig.hh:144
int Opts
Definition: XrdCpConfig.hh:256
static const uint64_t OpParallel
Definition: XrdCpConfig.hh:159
static const uint64_t OpZipAppend
Definition: XrdCpConfig.hh:200
int a2l(const char *item, long long *val, long long minv, long long maxv=-1)
const char * dstOpq
Definition: XrdCpConfig.hh:64
static const uint64_t DoZipMtlnCksum
Definition: XrdCpConfig.hh:186
XrdCksData CksData
Definition: XrdCpConfig.hh:84
long long xRateThreashold
Definition: XrdCpConfig.hh:68
int nStrm
Definition: XrdCpConfig.hh:75
static const uint64_t OpSilent
Definition: XrdCpConfig.hh:137
static const uint64_t OpTlsMLF
Definition: XrdCpConfig.hh:176
int defOpt(const char *theOp, const char *theArg)
void ProcFile(const char *fname)
static const uint64_t OpNoTlsOK
Definition: XrdCpConfig.hh:173
char * inFile
Definition: XrdCpConfig.hh:270
XrdCks * CksMan
Definition: XrdCpConfig.hh:85
int defCks(const char *opval)
defVar * intDend
Definition: XrdCpConfig.hh:259
int a2t(const char *item, int *val, int minv, int maxv=-1)
const char * Human(long long Val, char *Buff, int Blen)
XrdCpFile * srcFile
Definition: XrdCpConfig.hh:89
const char * Pgm
Definition: XrdCpConfig.hh:66
XrdCpFile * dstFile
Definition: XrdCpConfig.hh:90
static const uint64_t OpRetryPolicy
Definition: XrdCpConfig.hh:197
static const uint64_t OpDebug
Definition: XrdCpConfig.hh:104
char * zipFile
Definition: XrdCpConfig.hh:92
XrdCpConfig(const char *pgname)
static const uint64_t OpRetry
Definition: XrdCpConfig.hh:131
static const uint64_t DoNoPbar
Definition: XrdCpConfig.hh:119
int Dlvl
Definition: XrdCpConfig.hh:73
static const uint64_t DoCoerce
Definition: XrdCpConfig.hh:102
static const uint64_t OpServer
Definition: XrdCpConfig.hh:134
static const uint64_t DoForce
Definition: XrdCpConfig.hh:108
static const uint64_t OpVersion
Definition: XrdCpConfig.hh:154
int numFiles
Definition: XrdCpConfig.hh:81
int a2x(const char *Val, char *Buff, int Vlen)
static const uint64_t OpTpc
Definition: XrdCpConfig.hh:146
static const uint64_t DoParallel
Definition: XrdCpConfig.hh:160
static const uint64_t DoRmOnBadCksum
Definition: XrdCpConfig.hh:189
static const uint64_t DoNoTlsOK
Definition: XrdCpConfig.hh:174
static const uint64_t OpPath
Definition: XrdCpConfig.hh:179
long long OpSpec
Definition: XrdCpConfig.hh:72
static void toLower(char cstr[])
Definition: XrdCpConfig.hh:248
static const uint64_t OpRecursv
Definition: XrdCpConfig.hh:128
static const uint64_t OpProxy
Definition: XrdCpConfig.hh:124
static const uint64_t DoTpc
Definition: XrdCpConfig.hh:147
static const uint64_t DoDebug
Definition: XrdCpConfig.hh:105
char ** Argv
Definition: XrdCpConfig.hh:258
char * pHost
Definition: XrdCpConfig.hh:70
static const uint64_t OpSources
Definition: XrdCpConfig.hh:140
int pPort
Definition: XrdCpConfig.hh:71
int Retry
Definition: XrdCpConfig.hh:76
static const uint64_t DoCksum
Definition: XrdCpConfig.hh:98
defVar * strDefs
Definition: XrdCpConfig.hh:63
static const uint64_t OpPosc
Definition: XrdCpConfig.hh:121
static const uint64_t DoXrate
Definition: XrdCpConfig.hh:157
static const uint64_t DoCksrc
Definition: XrdCpConfig.hh:97
char ** parmVal
Definition: XrdCpConfig.hh:271
static const uint64_t OpZipMtlnCksum
Definition: XrdCpConfig.hh:185
static const uint64_t OpXrateThreashold
Definition: XrdCpConfig.hh:194
void defPxy(const char *opval)
int Argc
Definition: XrdCpConfig.hh:257
static const int opt1Src
Definition: XrdCpConfig.hh:213
int Legacy(int oIndex)
int Legacy(const char *theOp, const char *theArg)
static const uint64_t OpXrate
Definition: XrdCpConfig.hh:156
static const uint64_t DoTpcDlgt
Definition: XrdCpConfig.hh:149
static const uint64_t DoZip
Definition: XrdCpConfig.hh:168
const char * PName
Definition: XrdCpConfig.hh:255
static const uint64_t DoVerbose
Definition: XrdCpConfig.hh:152
int a2i(const char *item, int *val, int minv, int maxv=-1)
static const uint64_t DoContinue
Definition: XrdCpConfig.hh:192
static const uint64_t OpCksum
Definition: XrdCpConfig.hh:96
const char * CksVal
Definition: XrdCpConfig.hh:87
int parmCnt
Definition: XrdCpConfig.hh:272
static const int OpAllowHttp
Definition: XrdCpConfig.hh:206
static const uint64_t DoRecurse
Definition: XrdCpConfig.hh:129
static const uint64_t OpTlsNoData
Definition: XrdCpConfig.hh:170
static const int optNoLclCp
Definition: XrdCpConfig.hh:217
const char * srcOpq
Definition: XrdCpConfig.hh:65
static const uint64_t DoZipAppend
Definition: XrdCpConfig.hh:201
static const uint64_t OpIfile
Definition: XrdCpConfig.hh:113
int defOpq(const char *theOp)
static const uint64_t DoDynaSrc
Definition: XrdCpConfig.hh:163
int Want(uint64_t What)
Definition: XrdCpConfig.hh:223
static const int DoAllowHttp
Definition: XrdCpConfig.hh:207
void License()
long long xRate
Definition: XrdCpConfig.hh:67
int CksLen
Definition: XrdCpConfig.hh:79
XrdCpFile * pFile
Definition: XrdCpConfig.hh:267
void Usage(int rc=0)
static const int optNoStdIn
Definition: XrdCpConfig.hh:216
static const uint64_t OpNoPbar
Definition: XrdCpConfig.hh:118
static const uint64_t DoSources
Definition: XrdCpConfig.hh:141
static const uint64_t DoSilent
Definition: XrdCpConfig.hh:138
int isLcl
Definition: XrdCpConfig.hh:273
XrdCpFile * pPrev
Definition: XrdCpConfig.hh:269
static const uint64_t OpForce
Definition: XrdCpConfig.hh:107
static XrdSysError * Log
Definition: XrdCpConfig.hh:94
static const uint64_t OpRmOnBadCksum
Definition: XrdCpConfig.hh:188
static const uint64_t OpDynaSrc
Definition: XrdCpConfig.hh:162
static const uint64_t DoXAttr
Definition: XrdCpConfig.hh:183
static const int optNoXtnd
Definition: XrdCpConfig.hh:214
static const uint64_t DoTlsMLF
Definition: XrdCpConfig.hh:177
static const uint64_t DoXrateThreashold
Definition: XrdCpConfig.hh:195
static const uint64_t OpZip
Definition: XrdCpConfig.hh:167
static struct option opVec[]
Definition: XrdCpConfig.hh:263
static const uint64_t OpLicense
Definition: XrdCpConfig.hh:116
int a2z(const char *item, long long *val, long long minv, long long maxv=-1)
static const uint64_t DoIfile
Definition: XrdCpConfig.hh:114
static const uint64_t OpHelp
Definition: XrdCpConfig.hh:110
static const int optRmtRec
Definition: XrdCpConfig.hh:215
static const uint64_t DoRetryPolicy
Definition: XrdCpConfig.hh:198
int Verbose
Definition: XrdCpConfig.hh:78
std::string RetryPolicy
Definition: XrdCpConfig.hh:77
static const uint64_t DoPath
Definition: XrdCpConfig.hh:180
static const uint64_t DoPosc
Definition: XrdCpConfig.hh:122
static const int dfltSrcs
Definition: XrdCpConfig.hh:265
static const uint64_t OpStreams
Definition: XrdCpConfig.hh:143
XrdCpFile * pLast
Definition: XrdCpConfig.hh:268
static const uint64_t OpCoerce
Definition: XrdCpConfig.hh:101
long long totBytes
Definition: XrdCpConfig.hh:82
static const uint64_t DoTpcOnly
Definition: XrdCpConfig.hh:148
defVar * strDend
Definition: XrdCpConfig.hh:260
static const uint64_t DoTlsNoData
Definition: XrdCpConfig.hh:171
static const uint64_t DoServer
Definition: XrdCpConfig.hh:135
static const uint64_t DoCkprt
Definition: XrdCpConfig.hh:99
Definition: XrdCpFile.hh:37
Definition: XrdSysError.hh:90
Definition: XrdCpConfig.hh:51
defVar * Next
Definition: XrdCpConfig.hh:51
int intVal
Definition: XrdCpConfig.hh:54
const char * vName
Definition: XrdCpConfig.hh:52
defVar(const char *vn, const char *vl)
Definition: XrdCpConfig.hh:56
const char * strVal
Definition: XrdCpConfig.hh:53
defVar(const char *vn, int vl)
Definition: XrdCpConfig.hh:58