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
38struct option;
39class XrdCks;
40class XrdCksCalc;
41class XrdCpFile;
42class XrdSysError;
43
45{
46public:
47
48struct defVar
49 { defVar *Next; // -> Next such definition, 0 if no more
50 const char *vName; // -> Variable name
51 union {const char *strVal; // -> String value if in strDefs
52 int intVal; // Integer value if in intDefs
53 };
54 defVar(const char *vn, const char *vl)
55 : Next(0), vName(vn), strVal(vl) {}
56 defVar(const char *vn, int vl)
57 : Next(0), vName(vn), intVal(vl) {}
58 };
59
60 defVar *intDefs; // -> -DI settings
61 defVar *strDefs; // -> -DS settings
62 const char *dstOpq; // -> -OD setting (dest opaque)
63 const char *srcOpq; // -> -OS setting (src opaque)
64 const char *Pgm; // -> Program name
65 long long xRate; // -xrate value in bytes/sec (0 if not set)
66 int Parallel; // Number of simultaneous copy ops (1 to 4)
67 char *pHost; // -> SOCKS4 proxy hname (0 if none)
68 int pPort; // SOCKS4 proxy port
69 int OpSpec; // Bit mask of set options (see Doxxxx)
70 int Dlvl; // Debug level (0 to 3)
71 int nSrcs; // Number of sources wanted (dflt 1)
72 int nStrm; // Number of streams wanted (dflt 1)
73 int Retry; // Max times to retry connects (<0->use dflt)
74 int Verbose; // True if --verbose specified
75 int CksLen; // Binary length of checksum, if any
76
77 int numFiles; // Number of source files
78 long long totBytes; // Total number of bytes for local files
79
80XrdCksData CksData; // Checksum information
81XrdCks *CksMan; // -> Checksum manager
82XrdCksCalc *CksObj; // -> Cks computation object (0 if no cks)
83const char *CksVal; // -> Cks argument (0 if none)
84
85XrdCpFile *srcFile; // List of source files
86XrdCpFile *dstFile; // The destination for the copy
87
88char *zipFile; // The file name if the URL points to a ZIP archive
89
90static XrdSysError *Log; // -> Error message object
91
92static const uint64_t OpCksum = 'C'; // -adler -MD5 legacy -> DoCksrc
93static const uint64_t DoCksrc = 0x0000000000000001LL; // --cksum <type>:source
94static const uint64_t DoCksum = 0x0000000000000002LL; // --cksum <type>
95static const uint64_t DoCkprt = 0x0000000000000004LL; // --cksum <type>:print
96
97static const uint64_t OpCoerce = 'F';
98static const uint64_t DoCoerce = 0x0000000000000008LL; // -F | --coerce
99
100static const uint64_t OpDebug = 'd';
101static const uint64_t DoDebug = 0x0000000000000010LL; // -d | --debug <val>
102
103static const uint64_t OpForce = 'f';
104static const uint64_t DoForce = 0x0000000000000020LL; // -f | --force
105
106static const uint64_t OpHelp = 'h';
107static const uint64_t DoHelp = 0x0000000000000040LL; // -h | --help
108
109static const uint64_t OpIfile = 'I';
110static const uint64_t DoIfile = 0x0000000000000080LL; // -I | --infiles
111
112static const uint64_t OpLicense = 'H'; // -H | --license
113
114static const uint64_t OpNoPbar = 'N'; // -N | --nopbar | -np {legacy}
115static const uint64_t DoNoPbar = 0x0000000000000100LL;
116
117static const uint64_t OpPosc = 'P';
118static const uint64_t DoPosc = 0x0000000000000200LL; // -P | --posc
119
120static const uint64_t OpProxy = 'D';
121static const uint64_t DoProxy = 0x0000000000000400LL; // -D | --proxy
122
123static const uint64_t OpRecurse = 'r';
124static const uint64_t OpRecursv = 'R'; // -r | --recursive | -R {legacy}
125static const uint64_t DoRecurse = 0x0000000000000800LL;
126
127static const uint64_t OpRetry = 't';
128static const uint64_t DoRetry = 0x0000000000001000LL; // -t | --retry
129
130static const uint64_t OpServer = 0x03;
131static const uint64_t DoServer = 0x0000000000002000LL; // --server
132
133static const uint64_t OpSilent = 's';
134static const uint64_t DoSilent = 0x0000000000004000LL; // -s | --silent
135
136static const uint64_t OpSources = 'y';
137static const uint64_t DoSources = 0x0000000000008000LL; // -y | --sources
138
139static const uint64_t OpStreams = 'S';
140static const uint64_t DoStreams = 0x0000000000010000LL; // -S | --streams
141
142static const uint64_t OpTpc = 'T'; // -T | --tpc [delegate] {first | only}
143static const uint64_t DoTpc = 0x0000000000020000LL; // --tpc {first | only}
144static const uint64_t DoTpcOnly = 0x0000000000100000LL; // --tpc only
145static const uint64_t DoTpcDlgt = 0x0000000000800000LL; // --tpc delegate ...
146
147static const uint64_t OpVerbose = 'v';
148static const uint64_t DoVerbose = 0x0000000000040000LL; // -v | --verbose
149
150static const uint64_t OpVersion = 'V'; // -V | --version
151
152static const uint64_t OpXrate = 'X';
153static const uint64_t DoXrate = 0x0000000000080000LL; // -X | --xrate
154
155static const uint64_t OpParallel = 0x04;
156static const uint64_t DoParallel = 0x0000000000200000LL; // --parallel
157
158static const uint64_t OpDynaSrc = 'Z';
159static const uint64_t DoDynaSrc = 0x0000000000400000LL; // --dynamic-src
160
161// const uint64_t DoTpcDlgt = 0x0000000000800000LL; // Marker for bit used
162
163static const uint64_t OpZip = 'z';
164static const uint64_t DoZip = 0x0000000001000000LL; // -z | --zip
165
166static const uint64_t OpPath = 'p';
167static const uint64_t DoPath = 0x0000000010000000LL; // -p | --path
168
169static const uint64_t OpZipMtlnCksum = 0x08;
170static const uint64_t DoZipMtlnCksum = 0x0000000040000000LL; // --zip-mtln-cksum
171
172static const uint64_t OpRmOnBadCksum = 0x09;
173static const uint64_t DoRmOnBadCksum = 0x0000000080000000LL; // --rm-bad-cksum
174
175static const uint64_t OpContinue = 0x10;
176static const uint64_t DoContinue = 0x0000000100000000LL; // --continue
177
178// Flag to allow the use of HTTP (and HTTPS) as source and destination
179// protocols. If specified, the XrdClHttp client plugin must be available
180// for the transfer operations to succeed.
181static const int OpAllowHttp = 'A';
182static const int DoAllowHttp = 0x2000000; // --allow-http
183
184// Call Config with the parameters passed to main() to fill out this object. If
185// the method returns then no errors have been found. Otherwise, it exits.
186// The following options may be passed (largely to support legacy stuff):
187//
188static const int opt1Src = 0x00000001; // Only one source is allowed
189static const int optNoXtnd = 0x00000002; // Do not index source directories
190static const int optRmtRec = 0x00000004; // Allow remote recursive copy
191static const int optNoStdIn = 0x00000008; // Disallow '-' as src for stdin
192static const int optNoLclCp = 0x00000010; // Disallow local/local copy
193
194 void Config(int argc, char **argv, int Opts=0);
195
196// Method to check for setting
197//
198inline int Want(uint64_t What) {return (OpSpec & What) != 0;}
199
200 XrdCpConfig(const char *pgname);
202
203private:
204 int a2i(const char *item, int *val, int minv, int maxv=-1);
205 int a2l(const char *item, long long *val,
206 long long minv, long long maxv=-1);
207 int a2t(const char *item, int *val, int minv, int maxv=-1);
208 int a2x(const char *Val, char *Buff, int Vlen);
209 int a2z(const char *item, long long *val,
210 long long minv, long long maxv=-1);
211 int defCks(const char *opval);
212 int defOpq(const char *theOp);
213 int defOpt(const char *theOp, const char *theArg);
214 void defPxy(const char *opval);
215 const char *Human(long long Val, char *Buff, int Blen);
216 int Legacy(int oIndex);
217 int Legacy(const char *theOp, const char *theArg);
218 void License();
219 const char *OpName();
220 void ProcFile(const char *fname);
221 void Usage(int rc=0);
222
223 static void toLower( char cstr[] )
224 {
225 for( int i = 0; cstr[i]; ++i )
226 cstr[i] = tolower( cstr[i] );
227 }
228
229
230 const char *PName;
231 int Opts;
232 int Argc;
233 char **Argv;
236
237static const char *opLetters;
238static struct option opVec[];
239
240static const int dfltSrcs = 12;
241
245 char *inFile;
246 char **parmVal;
248 int isLcl;
249};
250#endif
Definition: XrdCksCalc.hh:40
Definition: XrdCksData.hh:38
Definition: XrdCks.hh:49
Definition: XrdCpConfig.hh:45
static const uint64_t OpVerbose
Definition: XrdCpConfig.hh:147
int nSrcs
Definition: XrdCpConfig.hh:71
static const uint64_t DoHelp
Definition: XrdCpConfig.hh:107
static const char * opLetters
Definition: XrdCpConfig.hh:237
static const uint64_t DoProxy
Definition: XrdCpConfig.hh:121
defVar * intDefs
Definition: XrdCpConfig.hh:60
void Config(int argc, char **argv, int Opts=0)
static const uint64_t OpRecurse
Definition: XrdCpConfig.hh:123
XrdCksCalc * CksObj
Definition: XrdCpConfig.hh:82
int Parallel
Definition: XrdCpConfig.hh:66
static const uint64_t OpContinue
Definition: XrdCpConfig.hh:175
static const uint64_t DoRetry
Definition: XrdCpConfig.hh:128
static const uint64_t DoStreams
Definition: XrdCpConfig.hh:140
int Opts
Definition: XrdCpConfig.hh:231
static const uint64_t OpParallel
Definition: XrdCpConfig.hh:155
int a2l(const char *item, long long *val, long long minv, long long maxv=-1)
const char * dstOpq
Definition: XrdCpConfig.hh:62
static const uint64_t DoZipMtlnCksum
Definition: XrdCpConfig.hh:170
XrdCksData CksData
Definition: XrdCpConfig.hh:80
int nStrm
Definition: XrdCpConfig.hh:72
static const uint64_t OpSilent
Definition: XrdCpConfig.hh:133
int defOpt(const char *theOp, const char *theArg)
void ProcFile(const char *fname)
char * inFile
Definition: XrdCpConfig.hh:245
XrdCks * CksMan
Definition: XrdCpConfig.hh:81
int defCks(const char *opval)
defVar * intDend
Definition: XrdCpConfig.hh:234
int a2t(const char *item, int *val, int minv, int maxv=-1)
XrdCpFile * srcFile
Definition: XrdCpConfig.hh:85
const char * Pgm
Definition: XrdCpConfig.hh:64
XrdCpFile * dstFile
Definition: XrdCpConfig.hh:86
static const uint64_t OpDebug
Definition: XrdCpConfig.hh:100
char * zipFile
Definition: XrdCpConfig.hh:88
XrdCpConfig(const char *pgname)
static const uint64_t OpRetry
Definition: XrdCpConfig.hh:127
static const uint64_t DoNoPbar
Definition: XrdCpConfig.hh:115
int Dlvl
Definition: XrdCpConfig.hh:70
static const uint64_t DoCoerce
Definition: XrdCpConfig.hh:98
static const uint64_t OpServer
Definition: XrdCpConfig.hh:130
static const uint64_t DoForce
Definition: XrdCpConfig.hh:104
static const uint64_t OpVersion
Definition: XrdCpConfig.hh:150
int numFiles
Definition: XrdCpConfig.hh:77
int a2x(const char *Val, char *Buff, int Vlen)
static const uint64_t OpTpc
Definition: XrdCpConfig.hh:142
static const uint64_t DoParallel
Definition: XrdCpConfig.hh:156
static const uint64_t DoRmOnBadCksum
Definition: XrdCpConfig.hh:173
static const uint64_t OpPath
Definition: XrdCpConfig.hh:166
static void toLower(char cstr[])
Definition: XrdCpConfig.hh:223
static const uint64_t OpRecursv
Definition: XrdCpConfig.hh:124
static const uint64_t OpProxy
Definition: XrdCpConfig.hh:120
static const uint64_t DoTpc
Definition: XrdCpConfig.hh:143
static const uint64_t DoDebug
Definition: XrdCpConfig.hh:101
char ** Argv
Definition: XrdCpConfig.hh:233
char * pHost
Definition: XrdCpConfig.hh:67
static const uint64_t OpSources
Definition: XrdCpConfig.hh:136
int pPort
Definition: XrdCpConfig.hh:68
int Retry
Definition: XrdCpConfig.hh:73
static const uint64_t DoCksum
Definition: XrdCpConfig.hh:94
defVar * strDefs
Definition: XrdCpConfig.hh:61
static const uint64_t OpPosc
Definition: XrdCpConfig.hh:117
static const uint64_t DoXrate
Definition: XrdCpConfig.hh:153
static const uint64_t DoCksrc
Definition: XrdCpConfig.hh:93
char ** parmVal
Definition: XrdCpConfig.hh:246
static const uint64_t OpZipMtlnCksum
Definition: XrdCpConfig.hh:169
void defPxy(const char *opval)
int Argc
Definition: XrdCpConfig.hh:232
static const int opt1Src
Definition: XrdCpConfig.hh:188
int Legacy(int oIndex)
int Legacy(const char *theOp, const char *theArg)
static const uint64_t OpXrate
Definition: XrdCpConfig.hh:152
static const uint64_t DoTpcDlgt
Definition: XrdCpConfig.hh:145
static const uint64_t DoZip
Definition: XrdCpConfig.hh:164
const char * PName
Definition: XrdCpConfig.hh:230
static const uint64_t DoVerbose
Definition: XrdCpConfig.hh:148
int a2i(const char *item, int *val, int minv, int maxv=-1)
static const uint64_t DoContinue
Definition: XrdCpConfig.hh:176
static const uint64_t OpCksum
Definition: XrdCpConfig.hh:92
const char * CksVal
Definition: XrdCpConfig.hh:83
int parmCnt
Definition: XrdCpConfig.hh:247
static const int OpAllowHttp
Definition: XrdCpConfig.hh:181
static const uint64_t DoRecurse
Definition: XrdCpConfig.hh:125
static const int optNoLclCp
Definition: XrdCpConfig.hh:192
const char * srcOpq
Definition: XrdCpConfig.hh:63
static const uint64_t OpIfile
Definition: XrdCpConfig.hh:109
int defOpq(const char *theOp)
static const uint64_t DoDynaSrc
Definition: XrdCpConfig.hh:159
int Want(uint64_t What)
Definition: XrdCpConfig.hh:198
int OpSpec
Definition: XrdCpConfig.hh:69
static const int DoAllowHttp
Definition: XrdCpConfig.hh:182
void License()
long long xRate
Definition: XrdCpConfig.hh:65
int CksLen
Definition: XrdCpConfig.hh:75
XrdCpFile * pFile
Definition: XrdCpConfig.hh:242
void Usage(int rc=0)
static const int optNoStdIn
Definition: XrdCpConfig.hh:191
static const uint64_t OpNoPbar
Definition: XrdCpConfig.hh:114
static const uint64_t DoSources
Definition: XrdCpConfig.hh:137
static const uint64_t DoSilent
Definition: XrdCpConfig.hh:134
int isLcl
Definition: XrdCpConfig.hh:248
XrdCpFile * pPrev
Definition: XrdCpConfig.hh:244
static const uint64_t OpForce
Definition: XrdCpConfig.hh:103
static XrdSysError * Log
Definition: XrdCpConfig.hh:90
static const uint64_t OpRmOnBadCksum
Definition: XrdCpConfig.hh:172
static const uint64_t OpDynaSrc
Definition: XrdCpConfig.hh:158
const char * Human(long long Val, char *Buff, int Blen)
static const int optNoXtnd
Definition: XrdCpConfig.hh:189
static const uint64_t OpZip
Definition: XrdCpConfig.hh:163
static struct option opVec[]
Definition: XrdCpConfig.hh:238
static const uint64_t OpLicense
Definition: XrdCpConfig.hh:112
int a2z(const char *item, long long *val, long long minv, long long maxv=-1)
static const uint64_t DoIfile
Definition: XrdCpConfig.hh:110
static const uint64_t OpHelp
Definition: XrdCpConfig.hh:106
static const int optRmtRec
Definition: XrdCpConfig.hh:190
int Verbose
Definition: XrdCpConfig.hh:74
static const uint64_t DoPath
Definition: XrdCpConfig.hh:167
static const uint64_t DoPosc
Definition: XrdCpConfig.hh:118
static const int dfltSrcs
Definition: XrdCpConfig.hh:240
static const uint64_t OpStreams
Definition: XrdCpConfig.hh:139
const char * OpName()
XrdCpFile * pLast
Definition: XrdCpConfig.hh:243
static const uint64_t OpCoerce
Definition: XrdCpConfig.hh:97
long long totBytes
Definition: XrdCpConfig.hh:78
static const uint64_t DoTpcOnly
Definition: XrdCpConfig.hh:144
defVar * strDend
Definition: XrdCpConfig.hh:235
static const uint64_t DoServer
Definition: XrdCpConfig.hh:131
static const uint64_t DoCkprt
Definition: XrdCpConfig.hh:95
Definition: XrdCpFile.hh:37
Definition: XrdSysError.hh:90
Definition: XrdCpConfig.hh:49
defVar * Next
Definition: XrdCpConfig.hh:49
int intVal
Definition: XrdCpConfig.hh:52
const char * vName
Definition: XrdCpConfig.hh:50
defVar(const char *vn, const char *vl)
Definition: XrdCpConfig.hh:54
const char * strVal
Definition: XrdCpConfig.hh:51
defVar(const char *vn, int vl)
Definition: XrdCpConfig.hh:56