xrootd
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
XrdXrootdProtocol.hh
Go to the documentation of this file.
1 #ifndef __XROOTD_PROTOCOL_H__
2 #define __XROOTD_PROTOCOL_H__
3 /******************************************************************************/
4 /* */
5 /* X r d X r o o t d P r o t o c o l . h h */
6 /* */
7 /* (c) 2004 by the Board of Trustees of the Leland Stanford, Jr., University */
8 /* Produced by Andrew Hanushevsky for Stanford University under contract */
9 /* DE-AC02-76-SFO0515 with the Department of Energy */
10 /* */
11 /* This file is part of the XRootD software suite. */
12 /* */
13 /* XRootD is free software: you can redistribute it and/or modify it under */
14 /* the terms of the GNU Lesser General Public License as published by the */
15 /* Free Software Foundation, either version 3 of the License, or (at your */
16 /* option) any later version. */
17 /* */
18 /* XRootD is distributed in the hope that it will be useful, but WITHOUT */
19 /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
20 /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
21 /* License for more details. */
22 /* */
23 /* You should have received a copy of the GNU Lesser General Public License */
24 /* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
25 /* COPYING (GPL license). If not, see <http://www.gnu.org/licenses/>. */
26 /* */
27 /* The copyright holder's institutional names and contributor's names may not */
28 /* be used to endorse or promote products derived from this software without */
29 /* specific prior written permission of the institution or contributor. */
30 /******************************************************************************/
31 
32 #include <atomic>
33 #include <stdlib.h>
34 #include <unistd.h>
35 #include <sys/types.h>
36 
37 #include "XrdSys/XrdSysError.hh"
38 #include "XrdSys/XrdSysPthread.hh"
40 #include "XrdSfs/XrdSfsDio.hh"
41 #include "XrdSfs/XrdSfsXioImpl.hh"
42 
43 #include "Xrd/XrdObject.hh"
44 #include "Xrd/XrdProtocol.hh"
48 #include "XProtocol/XProtocol.hh"
49 
50 /******************************************************************************/
51 /* D e f i n e s */
52 /******************************************************************************/
53 
54 #define ROOTD_PQ 2012
55 
56 #define XRD_LOGGEDIN 1
57 #define XRD_NEED_AUTH 2
58 #define XRD_BOUNDPATH 8
59 
60 #ifndef __GNUC__
61 #define __attribute__(x)
62 #endif
63 
64 /******************************************************************************/
65 /* x r d _ P r o t o c o l _ X R o o t d */
66 /******************************************************************************/
67 
68 class XrdNetSocket;
69 class XrdOucEnv;
70 class XrdOucErrInfo;
71 class XrdOucReqID;
72 class XrdOucStream;
73 class XrdOucTList;
74 class XrdOucTokenizer;
75 class XrdOucTrace;
76 class XrdSecProtect;
77 class XrdSecProtector;
78 class XrdSfsDirectory;
79 class XrdSfsFACtl;
80 class XrdSfsFileSystem;
81 class XrdSecProtocol;
82 class XrdBuffer;
83 class XrdLink;
84 class XrdTlsContext;
85 class XrdXrootdFile;
86 class XrdXrootdFileLock;
87 class XrdXrootdFileTable;
88 class XrdXrootdJob;
89 class XrdXrootdMonitor;
90 class XrdXrootdPgwCtl;
91 class XrdXrootdPio;
92 class XrdXrootdStats;
93 class XrdXrootdWVInfo;
94 class XrdXrootdXPath;
95 
96 /******************************************************************************/
97 /* N a m e s p a c e X r d X r o o t d */
98 /******************************************************************************/
99 
100 namespace XrdXrootd
101 {
102 /******************************************************************************/
103 /* g d C a l l B a c k */
104 /******************************************************************************/
105 
106 class gdCallBack // Used for new style getData() with callback
107 {
108 public:
109 
110 // Called when getData with a buffer successfully completed with a suspension.
111 // A direct return is made if there was no suspension. Return values and action:
112 // >1 If getData with a buffer was called while in the callback, the operation
113 // is performed with a subsequent callback. Otherwise, a fatal error results.
114 // =0 Variable discard holds the number of bytes to be discarded from the
115 // from the socket (default 0). Return is made to link-level.
116 // <0 Considered a fatal link error.
117 //
118 virtual int gdDone() = 0;
119 
120 // Called when a fatal link error occurs during reading.
121 //
122 virtual void gdFail() {} // Called when a link failure occurs
123 
125 virtual ~gdCallBack() {}
126 };
127 
128 /******************************************************************************/
129 /* I O P a r m s */
130 /******************************************************************************/
131 
132 struct IOParms
133 {
135 union {
136 long long Offset;
137 long long WVBytes;
138 int EInfo[2];
139  };
140 int IOLen;
141 unsigned short Flags;
142 char reserved;
143 char Mode;
144 static const int useBasic = 0;
145 static const int useMMap = 1;
146 static const int useSF = 2;
147 };
148 }
149 
150 /******************************************************************************/
151 /* C l a s s X r d X r o o t d P r o t o c o l */
152 /******************************************************************************/
153 
155  public XrdSfsDio, public XrdSfsXio
156 {
157 friend class XrdXrootdAdmin;
158 public:
159 
160  void aioUpdate(int val) {srvrAioOps += val;}
161 
162  void aioUpdReq(int val) {linkAioReq += val;}
163 
164 static char *Buffer(XrdSfsXioHandle h, int *bsz); // XrdSfsXio
165 
166 XrdSfsXioHandle Claim(const char *buff, int datasz, int minasz=0);// XrdSfsXio
167 
168 static int Configure(char *parms, XrdProtocol_Config *pi);
169 
170  void DoIt() {(*this.*Resume)();}
171 
172  int do_WriteSpan();
173 
174  int getData(gdCallBack *gdcbP, const char *dtype,
175  char *buff, int blen);
176 
177  int getData(gdCallBack *gdcbP, const char *dtype,
178  struct iovec *iov, int iovn);
179 
180  int getDump(const char *dtype, int dlen);
181 
182  int getPathID() {return PathID;}
183 
184  XrdProtocol *Match(XrdLink *lp);
185 
186  int Process(XrdLink *lp); // Sync: Job->Link.DoIt->Process
187 
188  int Process2();
189 
190  int ProcSig();
191 
192  void Recycle(XrdLink *lp, int consec, const char *reason);
193 
194 static void Reclaim(XrdSfsXioHandle h); // XrdSfsXio
195 
196  int SendFile(int fildes); // XrdSfsDio
197 
198  int SendFile(XrdOucSFVec *sfvec, int sfvnum); // XrdSfsDio
199 
200  void SetFD(int fildes); // XrdSfsDio
201 
202  int Stats(char *buff, int blen, int do_sync=0);
203 
204  void StreamNOP();
205 
206 XrdSfsXioHandle Swap(const char *buff, XrdSfsXioHandle h=0); // XrdSfsXio
207 
208 XrdXrootdProtocol *VerifyStream(int &rc, int pID, bool lok=true);
209 
210  XrdXrootdProtocol operator =(const XrdXrootdProtocol &rhs) = delete;
213 
214 static const int maxStreams = 16;
215 
216 // async configuration values (referenced outside this class)
217 //
218 static int as_maxperlnk; // Max async requests per link
219 static int as_maxperreq; // Max async ops per request
220 static int as_maxpersrv; // Max async ops per server
221 static int as_miniosz; // Min async request size
222 static int as_minsfsz; // Min sendf request size
223 static int as_seghalf;
224 static int as_segsize; // Aio quantum (optimal)
225 static int as_maxstalls; // Maximum stalls we will tolerate
226 static short as_okstutter; // Allowable stutters per transfer unit
227 static short as_timeout; // request timeout (usually < stream timeout)
228 static bool as_force; // aio to be forced
229 static bool as_aioOK; // aio is enabled
230 static bool as_nosf; // sendfile is disabled
231 static bool as_syncw; // writes to be synchronous
232 
233 private:
234 
235 // Note that Route[] structure (below) must have RD_Num elements!
236 //
241 
242  int do_Auth();
243  int do_Bind();
244  int do_ChkPnt();
245  int do_ChkPntXeq();
246  int do_Chmod();
247  int do_CKsum(int canit);
248  int do_CKsum(char *algT, const char *Path, char *Opaque);
249  int do_Close();
250  int do_Dirlist();
251  int do_DirStat(XrdSfsDirectory *dp, char *pbuff, char *opaque);
252  int do_Endsess();
253  int do_FAttr();
254  int do_gpFile();
255  int do_Login();
256  int do_Locate();
257  int do_Mkdir();
258  int do_Mv();
259  int do_Offload(int (XrdXrootdProtocol::*Invoke)(), int pathID);
260  int do_OffloadIO();
261  int do_Open();
262  bool do_PgClose(XrdXrootdFile *fP, int &rc);
263  int do_PgRead();
264  int do_PgRIO();
265  int do_PgWrite();
266  bool do_PgWAIO(int &rc);
267  int do_PgWIO();
268  int do_PgWIO(bool isFresh);
269  bool do_PgWIORetry(int &rc);
271  int do_Ping();
272  int do_Prepare(bool isQuery=false);
273  int do_Protocol();
274  int do_Qconf();
275  int do_QconfCX(XrdOucTokenizer &qcargs, char *val);
276  int do_Qfh();
277  int do_Qopaque(short);
278  int do_Qspace();
279  int do_Query();
280  int do_Qxattr();
281  int do_Read();
282  int do_ReadV();
283  int do_ReadAll();
284  int do_ReadNone(int &retc, int &pathID);
285  int do_Rm();
286  int do_Rmdir();
287  int do_Set();
288  int do_Set_Mon(XrdOucTokenizer &setargs);
289  int do_Stat();
290  int do_Statx();
291  int do_Sync();
292  int do_Truncate();
293  int do_Write();
294  int do_WriteAio();
295  int do_WriteAll();
296  int do_WriteCont();
297  int do_WriteNone();
298  int do_WriteNone(int pathid, XErrorCode ec=kXR_noErrorYet,
299  const char *emsg=0);
300  int do_WriteNoneMsg();
301  int do_WriteV();
302  int do_WriteVec();
303 
304  int gdDone() override {return do_PgWIO(false);}
305 
306  void Assign(const XrdXrootdProtocol &rhs);
307 static int CheckSum(XrdOucStream *, char **, int);
308  void Cleanup();
309 static int Config(const char *fn);
310 static bool ConfigMon(XrdProtocol_Config *pi, XrdOucEnv &xrootdEnv);
311 static int ConfigSecurity(XrdOucEnv &xEnv, const char *cfn);
312  int fsError(int rc, char opc, XrdOucErrInfo &myError,
313  const char *Path, char *Cgi);
314  int fsOvrld(char opc, const char *Path, char *Cgi);
315  int fsRedirNoEnt(const char *eMsg, char *Cgi, int popt);
316  int getBuff(const int isRead, int Quantum);
317  char *getCksType(char *opaque, char *cspec=0, int cslen=0);
318  int getData(const char *dtype, char *buff, int blen);
319  int getDataCont();
320  int getDataIovCont();
321  int getDumpCont();
322  bool logLogin(bool xauth=false);
323 static int mapMode(int mode);
324  void Reset();
325 static int rpCheck(char *fn, char **opaque);
326  int rpEmsg(const char *op, char *fn);
327  int vpEmsg(const char *op, char *fn);
328 static int CheckTLS(const char *tlsProt);
329 static bool ConfigFS(XrdOucEnv &xEnv, const char *cfn);
330 static bool ConfigFS(const char *path, XrdOucEnv &xEnv, const char *cfn);
331 static bool ConfigGStream(XrdOucEnv &myEnv, XrdOucEnv *urEnv);
332 static int Squash(char *);
333  int StatGen(struct stat &buf, char *xxBuff, int xxLen, bool xa=false);
334 static int xapath(XrdOucStream &Config);
335 static int xasync(XrdOucStream &Config);
336 static int xcksum(XrdOucStream &Config);
337 static int xdig(XrdOucStream &Config);
338 static int xexp(XrdOucStream &Config);
339 static int xexpdo(char *path, int popt=0);
340 static int xfsl(XrdOucStream &Config);
341 static int xfsL(XrdOucStream &Config, char *val, int lix);
342 static int xfso(XrdOucStream &Config);
343 static int xgpf(XrdOucStream &Config);
344 static int xprep(XrdOucStream &Config);
345 static int xlog(XrdOucStream &Config);
346 static int xmon(XrdOucStream &Config);
347 static char *xmondest(const char *what, char *val);
348 static int xmongs(XrdOucStream &Config);
349 static bool xmongsend(XrdOucStream &Config, char *val, char *&dest,
350  int &opt, int &fmt, int &hdr);
351 static int xred(XrdOucStream &Config);
352 static bool xred_php(char *val, char *hP[2], int rPort[2]);
353 static void xred_set(RD_func func, char *rHost[2], int rPort[2]);
354 static bool xred_xok(int func, char *rHost[2], int rPort[2]);
355 static int xsecl(XrdOucStream &Config);
356 static int xtls(XrdOucStream &Config);
357 static int xtlsr(XrdOucStream &Config);
358 static int xtrace(XrdOucStream &Config);
359 static int xlimit(XrdOucStream &Config);
360 
361  int ProcFAttr(char *faPath, char *faCgi, char *faArgs,
362  int faALen, int faCode, bool doAChk);
363  int XeqFADel(XrdSfsFACtl &ctl, char *faVars, int faVLen);
364  int XeqFAGet(XrdSfsFACtl &ctl, char *faVars, int faVLen);
365  int XeqFALsd(XrdSfsFACtl &ctl);
366  int XeqFALst(XrdSfsFACtl &ctl);
367  int XeqFASet(XrdSfsFACtl &ctl, char *faVars, int faVLen);
368 
371 
372 protected:
373 
374 static unsigned int getSID();
375 
376  void MonAuth();
377  int SetSF(kXR_char *fhandle, bool seton=false);
378 
379 static XrdXrootdXPath RPList; // Redirected paths
380 static XrdXrootdXPath RQList; // Redirected paths for ENOENT
381 static XrdXrootdXPath XPList; // Exported paths
382 static XrdSfsFileSystem *osFS; // The filesystem
383 static XrdSfsFileSystem *digFS; // The filesystem (digFS)
384 static XrdSecService *CIA; // Authentication Server
385 static XrdSecProtector *DHS; // Protection Server
386 static XrdTlsContext *tlsCtx; // Protection Server TLS available
387 static XrdXrootdFileLock *Locker; // File lock handler
388 static XrdScheduler *Sched; // System scheduler
389 static XrdBuffManager *BPool; // Buffer manager
390 static XrdSysError &eDest; // Error message handler
391 static const char *myInst;
392 static const char *TraceID;
393 static int RQLxist; // Something is present in RQList
394 static int myPID;
395 static int myRole; // Role for kXR_protocol (>= 2.9.7)
396 static int myRolf; // Role for kXR_protocol (< 2.9.7)
397 
398 static gid_t myGID;
399 static uid_t myUID;
400 static int myGNLen;
401 static int myUNLen;
402 static const char *myGName;
403 static const char *myUName;
404 static time_t keepT;
405 
406 // Admin control area
407 //
409 
410 // Processing configuration values
411 //
412 static int hailWait;
413 static int readWait;
414 static int Port;
415 static int Window;
416 static int tlsPort;
417 static char *Notify;
418 static const char *myCName;
419 static int myCNlen;
420 static char isRedir;
421 static char JobLCL;
422 static char JobCKCGI;
424 static char *JobCKT;
427 static uint64_t fsFeatures;
428 
429 // Static redirection
430 //
431 static struct RD_Table {char *Host[2];
432  unsigned short Port[2];
433  short RDSz[2];} Route[RD_Num];
434 static int OD_Stall;
435 static bool OD_Bypass;
436 static bool OD_Redir;
437 
438 static bool isProxy;
439 
440 // Extended attributes
441 //
442 static int usxMaxNsz;
443 static int usxMaxVsz;
444 static char *usxParms;
445 
446 // TLS configuration
447 //
448 static const char Req_TLSData = 0x01;
449 static const char Req_TLSGPFile= 0x02;
450 static const char Req_TLSLogin = 0x04;
451 static const char Req_TLSSess = 0x08;
452 static const char Req_TLSTPC = 0x10;
453 
454 static char tlsCap; // TLS requirements for capable clients
455 static char tlsNot; // TLS requirements for incapable clients
456 
457 // Buffer configuration
458 //
459 static int maxBuffsz; // Maximum buffer size we can have
460 static int maxTransz; // Maximum transfer size we can have
461 
462 // Statistical area
463 //
465 int numReads; // Count for kXR_read
466 int numReadP; // Count for kXR_read pre-preads
467 int numReadV; // Count for kkR_readv
468 int numSegsV; // Count for kkR_readv segmens
469 int numWritV; // Count for kkR_write
470 int numSegsW; // Count for kkR_writev segmens
471 int numWrites; // Count
472 int numFiles; // Count
473 
474 int cumReads; // Count less numReads
475 int cumReadP; // Count less numReadP
476 int cumReadV; // Count less numReadV
477 int cumSegsV; // Count less numSegsV
478 int cumWritV; // Count less numWritV
479 int cumSegsW; // Count less numSegsW
480 int cumWrites; // Count less numWrites
481 int myStalls; // Number of stalls
482 long long totReadP; // Bytes
483 
484 // Data local to each protocol/link combination
485 //
490 int clientPV; // Protocol version + capabilities
491 int clientRN; // Release as maj.min.patch (1 byte each).
493 short rdType;
494 char Status;
495 unsigned char CapVer;
496 
497 // Authentication area
498 //
503 char *AppName;
504 
505 // Request signing area
506 //
507 ClientRequest sigReq2Ver; // Request to verify
508 SecurityRequest sigReq; // Signature request
509 char sigBuff[64]; // Signature payload SHA256 + blowfish
510 bool sigNeed; // Signature target present
511 bool sigHere; // Signature request present
512 bool sigRead; // Signature being read
513 bool sigWarn; // Once for unneeded signature
514 
515 // Async I/O area, these need to be atomic
516 //
517 std::atomic_int linkAioReq; // Aio requests inflight for link
518 static std::atomic_int srvrAioOps; // Aio operations inflight for server
519 
520 // Buffer information, used to drive getData(), and (*Resume)()
521 //
523 char *myBuff;
524 int myBlen;
526 
528 {
530 int iovNow;
531 union {int iovNum;
532  int BuffLen;
533  };
534 bool useCB;
535 char Status;
536 unsigned char stalls;
537 atomic_char linkWait;
538 union {struct iovec *iovVec;
539  char *Buffer;
540  };
541 const char *ioDType;
543 
544 static const int inNone = 0;
545 static const int inCallBk = 1;
546 static const int inData = 2;
547 static const int inDataIov = 3;
548 static const int inDump = 4;
549 
550 static const int Active = 1; // linkWait: thread is waiting for link
551 static const int Terminate = 3; // linkWait: thread should immediately exit
552 
553 } gdCtl;
554 
556 int (XrdXrootdProtocol::*ResumePio)(); //Used by Offload
559 
560 // Buffer resize control area
561 //
562 static int hcMax;
563  int hcPrev;
564  int hcNext;
565  int hcNow;
567 
568 // This area is used for parallel streams
569 //
570 XrdSysMutex unbindMutex; // If locked always before streamMutex
575 unsigned int mySID;
576 bool isActive;
577 bool isLinkWT;
578 bool isNOP;
579 bool isDead;
580 
581 static const int maxPio = 4;
585 
586 short PathID; // Path for this protocol object
587 bool newPio; // True when initially scheduled
588 unsigned char rvSeq;
589 unsigned char wvSeq;
590 
591 char doTLS; // TLS requirements for client
592 bool ableTLS; // T->Client is able to use TLS
593 bool isTLS; // T->Client using TLS on control stream
594 
595 // Track usage limts.
596 //
597 static bool PrepareAlt; // Use alternate prepare handling
598 static bool LimitError; // Indicates that hitting a limit should result in an error response.
599  // If false, when possible, silently ignore errors.
601 static int PrepareLimit;
602 
603 // Buffers to handle client requests
604 //
608 };
609 #endif
int do_QconfCX(XrdOucTokenizer &qcargs, char *val)
static char JobLCL
Definition: XrdXrootdProtocol.hh:421
XrdSysCondVar2 * endNote
Definition: XrdXrootdProtocol.hh:573
static int mapMode(int mode)
int cumSegsW
Definition: XrdXrootdProtocol.hh:479
static const int inData
Definition: XrdXrootdProtocol.hh:546
static const char Req_TLSLogin
Definition: XrdXrootdProtocol.hh:450
unsigned char kXR_char
Definition: XPtypes.hh:65
static char tlsCap
Definition: XrdXrootdProtocol.hh:454
static short as_timeout
Definition: XrdXrootdProtocol.hh:227
XrdXrootdResponse Response
Definition: XrdXrootdProtocol.hh:607
static bool xmongsend(XrdOucStream &Config, char *val, char *&dest, int &opt, int &fmt, int &hdr)
static const int inDump
Definition: XrdXrootdProtocol.hh:548
int cumSegsV
Definition: XrdXrootdProtocol.hh:477
static int xfsl(XrdOucStream &Config)
XrdSysMutex streamMutex
Definition: XrdXrootdProtocol.hh:571
int iovNow
Definition: XrdXrootdProtocol.hh:530
char * AppName
Definition: XrdXrootdProtocol.hh:503
static int as_miniosz
Definition: XrdXrootdProtocol.hh:221
long long totReadP
Definition: XrdXrootdProtocol.hh:482
int do_Qopaque(short)
static XrdOucTList * JobCKTLST
Definition: XrdXrootdProtocol.hh:425
XrdXrootdMonitor::User Monitor
Definition: XrdXrootdProtocol.hh:489
static int as_maxperlnk
Definition: XrdXrootdProtocol.hh:218
XrdSecProtect * Protect
Definition: XrdXrootdProtocol.hh:502
int hcNext
Definition: XrdXrootdProtocol.hh:564
static int as_maxperreq
Definition: XrdXrootdProtocol.hh:219
bool isActive
Definition: XrdXrootdProtocol.hh:576
Definition: XrdXrootdProtocol.hh:238
short rdType
Definition: XrdXrootdProtocol.hh:493
static int xfsL(XrdOucStream &Config, char *val, int lix)
bool sigNeed
Definition: XrdXrootdProtocol.hh:510
XrdBuffer * argp
Definition: XrdXrootdProtocol.hh:487
bool isDead
Definition: XrdXrootdProtocol.hh:579
int fsOvrld(char opc, const char *Path, char *Cgi)
struct iovec * iovVec
Definition: XrdXrootdProtocol.hh:538
XrdSfsXioHandle Swap(const char *buff, XrdSfsXioHandle h=0)
static XrdXrootdFileLock * Locker
Definition: XrdXrootdProtocol.hh:387
bool do_PgWIOSetup(XrdXrootdPgwCtl *pgwCtl)
static std::atomic_int srvrAioOps
Definition: XrdXrootdProtocol.hh:518
bool sigWarn
Definition: XrdXrootdProtocol.hh:513
static XrdXrootdXPath RQList
Definition: XrdXrootdProtocol.hh:380
static XrdBuffManager * BPool
Definition: XrdXrootdProtocol.hh:389
static const char Req_TLSSess
Definition: XrdXrootdProtocol.hh:451
char * getCksType(char *opaque, char *cspec=0, int cslen=0)
char * myBuff
Definition: XrdXrootdProtocol.hh:523
int hcNow
Definition: XrdXrootdProtocol.hh:565
Definition: XrdXrootdProtocol.hh:240
int do_DirStat(XrdSfsDirectory *dp, char *pbuff, char *opaque)
bool do_PgClose(XrdXrootdFile *fP, int &rc)
int cumWrites
Definition: XrdXrootdProtocol.hh:480
static int hcMax
Definition: XrdXrootdProtocol.hh:562
Definition: XrdXrootdProtocol.hh:238
Definition: XrdXrootdProtocol.hh:237
static XrdSecProtector * DHS
Definition: XrdXrootdProtocol.hh:385
void Recycle(XrdLink *lp, int consec, const char *reason)
static bool OD_Redir
Definition: XrdXrootdProtocol.hh:436
Definition: XrdXrootdProtocol.hh:238
Definition: XrdXrootdProtocol.hh:431
XrdLink * Link
Definition: XrdXrootdProtocol.hh:486
ClientRequest Request
Definition: XrdXrootdProtocol.hh:606
int gdDone() override
Definition: XrdXrootdProtocol.hh:304
static bool ConfigGStream(XrdOucEnv &myEnv, XrdOucEnv *urEnv)
Definition: XrdSecInterface.hh:551
std::atomic_int linkAioReq
Definition: XrdXrootdProtocol.hh:517
XrdXrootdWVInfo * wvInfo
Definition: XrdXrootdProtocol.hh:555
RD_func
Definition: XrdXrootdProtocol.hh:237
static char * Notify
Definition: XrdXrootdProtocol.hh:417
static int OD_Stall
Definition: XrdXrootdProtocol.hh:434
int IOLen
Definition: XrdXrootdProtocol.hh:140
static int xtlsr(XrdOucStream &Config)
int clientPV
Definition: XrdXrootdProtocol.hh:490
int getBuff(const int isRead, int Quantum)
char reserved
Definition: XrdXrootdProtocol.hh:142
bool do_PgWIORetry(int &rc)
XrdSfsXioHandle Claim(const char *buff, int datasz, int minasz=0)
static int xsecl(XrdOucStream &Config)
static XrdXrootdJob * JobCKS
Definition: XrdXrootdProtocol.hh:423
Definition: XrdOucSFVec.hh:43
Definition: XrdXrootdProtocol.hh:239
int Stats(char *buff, int blen, int do_sync=0)
bool isNOP
Definition: XrdXrootdProtocol.hh:578
Definition: XrdOucStream.hh:46
static int hailWait
Definition: XrdXrootdProtocol.hh:412
XrdXrootdPio * pioLast
Definition: XrdXrootdProtocol.hh:583
Definition: XrdXrootdPgwCtl.hh:41
bool useCB
Definition: XrdXrootdProtocol.hh:534
Definition: XrdSecInterface.hh:130
static char * JobCKT
Definition: XrdXrootdProtocol.hh:424
Definition: XrdXrootdProtocol.hh:106
static int as_maxpersrv
Definition: XrdXrootdProtocol.hh:220
int(XrdXrootdProtocol::* ResumePio)()
Definition: XrdXrootdProtocol.hh:556
int SetSF(kXR_char *fhandle, bool seton=false)
static bool PrepareAlt
Definition: XrdXrootdProtocol.hh:597
static int xapath(XrdOucStream &Config)
Definition: XrdXrootdWVInfo.hh:34
short PathID
Definition: XrdXrootdProtocol.hh:586
int Process(XrdLink *lp)
static void Reclaim(XrdSfsXioHandle h)
unsigned char CapVer
Definition: XrdXrootdProtocol.hh:495
static int Squash(char *)
static bool ConfigMon(XrdProtocol_Config *pi, XrdOucEnv &xrootdEnv)
virtual ~gdCallBack()
Definition: XrdXrootdProtocol.hh:125
static uid_t myUID
Definition: XrdXrootdProtocol.hh:399
Definition: XrdProtocol.hh:124
int fsError(int rc, char opc, XrdOucErrInfo &myError, const char *Path, char *Cgi)
Definition: XrdNetSocket.hh:47
bool sigRead
Definition: XrdXrootdProtocol.hh:512
static int RQLxist
Definition: XrdXrootdProtocol.hh:393
int XeqFASet(XrdSfsFACtl &ctl, char *faVars, int faVLen)
static XrdSysError & eDest
Definition: XrdXrootdProtocol.hh:390
int numReadV
Definition: XrdXrootdProtocol.hh:467
void Assign(const XrdXrootdProtocol &rhs)
static gid_t myGID
Definition: XrdXrootdProtocol.hh:398
XrdSysMutex unbindMutex
Definition: XrdXrootdProtocol.hh:570
char Status
Definition: XrdXrootdProtocol.hh:535
int getPathID()
Definition: XrdXrootdProtocol.hh:182
static const int useMMap
Definition: XrdXrootdProtocol.hh:145
Definition: XrdXrootdProtocol.hh:154
static int maxBuffsz
Definition: XrdXrootdProtocol.hh:459
static int Port
Definition: XrdXrootdProtocol.hh:414
static int myPID
Definition: XrdXrootdProtocol.hh:394
int numFiles
Definition: XrdXrootdProtocol.hh:472
Definition: XrdSecProtect.hh:55
Definition: XrdOucReqID.hh:41
int clientRN
Definition: XrdXrootdProtocol.hh:491
~XrdXrootdProtocol()
Definition: XrdXrootdProtocol.hh:212
static XrdObjectQ< XrdXrootdProtocol > ProtStack
Definition: XrdXrootdProtocol.hh:369
Definition: XrdXrootdMonitor.hh:75
static int xtls(XrdOucStream &Config)
bool sigHere
Definition: XrdXrootdProtocol.hh:511
Definition: XrdXrootdPio.hh:39
static XrdNetSocket * AdminSock
Definition: XrdXrootdProtocol.hh:408
virtual int gdDone()=0
Definition: XrdBuffer.hh:71
static bool as_syncw
Definition: XrdXrootdProtocol.hh:231
Definition: XrdSfsFAttr.hh:72
static char * xmondest(const char *what, char *val)
static int xasync(XrdOucStream &Config)
static XrdSecService * CIA
Definition: XrdXrootdProtocol.hh:384
static bool xred_xok(int func, char *rHost[2], int rPort[2])
Definition: XrdOucTrace.hh:35
Definition: XrdSysError.hh:89
Definition: XrdXrootdProtocol.hh:237
unsigned char rvSeq
Definition: XrdXrootdProtocol.hh:588
int(XrdXrootdProtocol::* Resume)()
Definition: XrdXrootdProtocol.hh:557
int numWrites
Definition: XrdXrootdProtocol.hh:471
int do_Offload(int(XrdXrootdProtocol::*Invoke)(), int pathID)
static int xlimit(XrdOucStream &Config)
int cumReadP
Definition: XrdXrootdProtocol.hh:475
int myBlast
Definition: XrdXrootdProtocol.hh:525
Definition: XrdXrootdProtocol.hh:132
XrdXrootdProtocol * VerifyStream(int &rc, int pID, bool lok=true)
XrdSecProtocol * AuthProt
Definition: XrdXrootdProtocol.hh:500
Definition: XrdScheduler.hh:44
Definition: XrdSfsInterface.hh:238
static int myRole
Definition: XrdXrootdProtocol.hh:395
static const int inDataIov
Definition: XrdXrootdProtocol.hh:547
static int tlsPort
Definition: XrdXrootdProtocol.hh:416
Definition: XrdXrootdMonitor.hh:169
Definition: XrdXrootdFile.hh:100
Definition: XrdSysPthread.hh:164
static const int Terminate
Definition: XrdXrootdProtocol.hh:551
SecurityRequest sigReq
Definition: XrdXrootdProtocol.hh:508
Definition: XrdXrootdProtocol.hh:239
bool ableTLS
Definition: XrdXrootdProtocol.hh:592
Definition: XrdOucIOVec.hh:65
static int usxMaxVsz
Definition: XrdXrootdProtocol.hh:443
Definition: XrdXrootdFile.hh:161
static bool isProxy
Definition: XrdXrootdProtocol.hh:438
Definition: XrdXrootdAdmin.hh:43
XrdXrootdReqID ReqID
Definition: XrdXrootdProtocol.hh:605
static int ConfigSecurity(XrdOucEnv &xEnv, const char *cfn)
int StatGen(struct stat &buf, char *xxBuff, int xxLen, bool xa=false)
static bool as_aioOK
Definition: XrdXrootdProtocol.hh:229
static const char * TraceID
Definition: XrdXrootdProtocol.hh:392
static int xprep(XrdOucStream &Config)
char sigBuff[64]
Definition: XrdXrootdProtocol.hh:509
int vpEmsg(const char *op, char *fn)
char * Buffer
Definition: XrdXrootdProtocol.hh:539
bool isTLS
Definition: XrdXrootdProtocol.hh:593
unsigned char stalls
Definition: XrdXrootdProtocol.hh:536
void aioUpdate(int val)
Definition: XrdXrootdProtocol.hh:160
static bool LimitError
Definition: XrdXrootdProtocol.hh:598
Definition: XrdXrootdProtocol.hh:239
unsigned short Flags
Definition: XrdXrootdProtocol.hh:141
static int readWait
Definition: XrdXrootdProtocol.hh:413
int EInfo[2]
Definition: XrdXrootdProtocol.hh:138
static XrdXrootdXPath RPList
Definition: XrdXrootdProtocol.hh:379
static int as_segsize
Definition: XrdXrootdProtocol.hh:224
int numSegsV
Definition: XrdXrootdProtocol.hh:468
static bool OD_Bypass
Definition: XrdXrootdProtocol.hh:435
Definition: XrdOucErrInfo.hh:100
static char * Buffer(XrdSfsXioHandle h, int *bsz)
void aioUpdReq(int val)
Definition: XrdXrootdProtocol.hh:162
int lenPart
Definition: XrdXrootdProtocol.hh:529
atomic_char linkWait
Definition: XrdXrootdProtocol.hh:537
bool isLinkWT
Definition: XrdXrootdProtocol.hh:577
static int xdig(XrdOucStream &Config)
Definition: XrdSecProtector.hh:72
Definition: XProtocol.hh:871
Definition: XrdSysPthread.hh:437
int cumWritV
Definition: XrdXrootdProtocol.hh:478
int myBlen
Definition: XrdXrootdProtocol.hh:524
char Mode
Definition: XrdXrootdProtocol.hh:143
XErrorCode
Definition: XProtocol.hh:980
static const int inCallBk
Definition: XrdXrootdProtocol.hh:545
int numReadP
Definition: XrdXrootdProtocol.hh:466
Definition: XrdProtocol.hh:55
int numSegsW
Definition: XrdXrootdProtocol.hh:470
Definition: XrdOucEnv.hh:41
unsigned int mySID
Definition: XrdXrootdProtocol.hh:575
static int maxTransz
Definition: XrdXrootdProtocol.hh:460
int getData(gdCallBack *gdcbP, const char *dtype, char *buff, int blen)
static int xlog(XrdOucStream &Config)
static const char * myInst
Definition: XrdXrootdProtocol.hh:391
static int Config(const char *fn)
static int xexp(XrdOucStream &Config)
static int xmongs(XrdOucStream &Config)
char doTLS
Definition: XrdXrootdProtocol.hh:591
const char * ioDType
Definition: XrdXrootdProtocol.hh:541
static int as_minsfsz
Definition: XrdXrootdProtocol.hh:222
void SetFD(int fildes)
static unsigned int getSID()
static int xexpdo(char *path, int popt=0)
static int as_seghalf
Definition: XrdXrootdProtocol.hh:223
int cumReads
Definition: XrdXrootdProtocol.hh:474
int numReads
Definition: XrdXrootdProtocol.hh:465
XrdXrootdFileTable * FTab
Definition: XrdXrootdProtocol.hh:488
unsigned short Port[2]
Definition: XrdXrootdProtocol.hh:432
short RDSz[2]
Definition: XrdXrootdProtocol.hh:433
int ProcFAttr(char *faPath, char *faCgi, char *faArgs, int faALen, int faCode, bool doAChk)
Definition: XrdSysPthread.hh:299
static const int maxPio
Definition: XrdXrootdProtocol.hh:581
int XeqFALst(XrdSfsFACtl &ctl)
int BuffLen
Definition: XrdXrootdProtocol.hh:532
static int xred(XrdOucStream &Config)
static short as_okstutter
Definition: XrdXrootdProtocol.hh:226
Definition: XrdOucTList.hh:41
XrdXrootd::IOParms IO
Definition: XrdXrootdProtocol.hh:558
static XrdXrootdStats * SI
Definition: XrdXrootdProtocol.hh:464
static int CheckSum(XrdOucStream *, char **, int)
static int xfso(XrdOucStream &Config)
Definition: XrdXrootdProtocol.hh:240
static XrdSfsFileSystem * osFS
Definition: XrdXrootdProtocol.hh:382
int do_ReadNone(int &retc, int &pathID)
XrdXrootdPgwCtl * pgwCtl
Definition: XrdXrootdProtocol.hh:522
static XrdSfsFileSystem * digFS
Definition: XrdXrootdProtocol.hh:383
Definition: XrdXrootdProtocol.hh:237
Definition: XrdXrootdReqID.hh:35
XrdSecEntity Entity
Definition: XrdXrootdProtocol.hh:501
static int myCNlen
Definition: XrdXrootdProtocol.hh:419
static int CheckTLS(const char *tlsProt)
bool newPio
Definition: XrdXrootdProtocol.hh:587
Definition: XProtocol.hh:1017
static int as_maxstalls
Definition: XrdXrootdProtocol.hh:225
virtual void gdFail()
Definition: XrdXrootdProtocol.hh:122
static int xgpf(XrdOucStream &Config)
static int myGNLen
Definition: XrdXrootdProtocol.hh:400
#define stat(a, b)
Definition: XrdPosix.hh:96
Definition: XrdXrootdProtocol.hh:238
XrdSecEntity * Client
Definition: XrdXrootdProtocol.hh:499
Definition: XrdTlsContext.hh:36
long long Offset
Definition: XrdXrootdProtocol.hh:136
static XrdXrootdXPath XPList
Definition: XrdXrootdProtocol.hh:381
static int PrepareLimit
Definition: XrdXrootdProtocol.hh:601
Definition: XrdXrootdResponse.hh:48
Definition: XrdXrootdProtocol.hh:238
static int Window
Definition: XrdXrootdProtocol.hh:415
int rpEmsg(const char *op, char *fn)
static int xmon(XrdOucStream &Config)
int PrepareCount
Definition: XrdXrootdProtocol.hh:600
int hcPrev
Definition: XrdXrootdProtocol.hh:563
Definition: XrdXrootdProtocol.hh:527
static int myRolf
Definition: XrdXrootdProtocol.hh:396
Definition: XrdXrootdStats.hh:39
XrdSysSemaphore * reTry
Definition: XrdXrootdProtocol.hh:572
XrdXrootd::gdCallBack * CallBack
Definition: XrdXrootdProtocol.hh:542
int cumReadV
Definition: XrdXrootdProtocol.hh:476
Definition: XrdXrootdProtocol.hh:240
Definition: XrdXrootdXPath.hh:42
int getDump(const char *dtype, int dlen)
static const char * myCName
Definition: XrdXrootdProtocol.hh:418
static struct XrdXrootdProtocol::RD_Table Route[RD_Num]
static int Configure(char *parms, XrdProtocol_Config *pi)
static int xtrace(XrdOucStream &Config)
static const char Req_TLSGPFile
Definition: XrdXrootdProtocol.hh:449
static const int useSF
Definition: XrdXrootdProtocol.hh:146
XrdXrootdProtocol * Stream[maxStreams]
Definition: XrdXrootdProtocol.hh:574
static XrdTlsContext * tlsCtx
Definition: XrdXrootdProtocol.hh:386
char Status
Definition: XrdXrootdProtocol.hh:494
static int xcksum(XrdOucStream &Config)
XrdXrootdPio * pioFirst
Definition: XrdXrootdProtocol.hh:582
static char JobCKCGI
Definition: XrdXrootdProtocol.hh:422
int iovNum
Definition: XrdXrootdProtocol.hh:531
int halfBSize
Definition: XrdXrootdProtocol.hh:566
int do_Prepare(bool isQuery=false)
long long WVBytes
Definition: XrdXrootdProtocol.hh:137
int numWritV
Definition: XrdXrootdProtocol.hh:469
static const char * myGName
Definition: XrdXrootdProtocol.hh:402
Definition: XrdOucTokenizer.hh:32
static bool xred_php(char *val, char *hP[2], int rPort[2])
static char * usxParms
Definition: XrdXrootdProtocol.hh:444
static bool as_force
Definition: XrdXrootdProtocol.hh:228
XrdObject< XrdXrootdProtocol > ProtLink
Definition: XrdXrootdProtocol.hh:370
Definition: XrdSfsDio.hh:46
XrdXrootdPio * pioFree
Definition: XrdXrootdProtocol.hh:584
char * Host[2]
Definition: XrdXrootdProtocol.hh:431
bool logLogin(bool xauth=false)
static const int Active
Definition: XrdXrootdProtocol.hh:550
Definition: XrdSecEntity.hh:63
Definition: XProtocol.hh:836
Definition: XrdXrootdProtocol.hh:240
static char isRedir
Definition: XrdXrootdProtocol.hh:420
static uint64_t fsFeatures
Definition: XrdXrootdProtocol.hh:427
Definition: XrdXrootdProtocol.hh:240
static XrdScheduler * Sched
Definition: XrdXrootdProtocol.hh:388
int myStalls
Definition: XrdXrootdProtocol.hh:481
static bool ConfigFS(XrdOucEnv &xEnv, const char *cfn)
int XeqFAGet(XrdSfsFACtl &ctl, char *faVars, int faVLen)
static int rpCheck(char *fn, char **opaque)
void DoIt()
Definition: XrdXrootdProtocol.hh:170
static void xred_set(RD_func func, char *rHost[2], int rPort[2])
Definition: XrdXrootdJob.hh:51
static const int maxStreams
Definition: XrdXrootdProtocol.hh:214
int do_CKsum(int canit)
int fsRedirNoEnt(const char *eMsg, char *Cgi, int popt)
ClientRequest sigReq2Ver
Definition: XrdXrootdProtocol.hh:507
gdCallBack()
Definition: XrdXrootdProtocol.hh:124
Definition: XrdXrootdFileLock.hh:32
static time_t keepT
Definition: XrdXrootdProtocol.hh:404
static const int useBasic
Definition: XrdXrootdProtocol.hh:144
int XeqFALsd(XrdSfsFACtl &ctl)
static XrdOucReqID * PrepID
Definition: XrdXrootdProtocol.hh:426
XrdXrootdFile * File
Definition: XrdXrootdProtocol.hh:134
static const char * myUName
Definition: XrdXrootdProtocol.hh:403
unsigned char wvSeq
Definition: XrdXrootdProtocol.hh:589
static const char Req_TLSTPC
Definition: XrdXrootdProtocol.hh:452
int SendFile(int fildes)
static const char Req_TLSData
Definition: XrdXrootdProtocol.hh:448
static char tlsNot
Definition: XrdXrootdProtocol.hh:455
int XeqFADel(XrdSfsFACtl &ctl, char *faVars, int faVLen)
int do_Set_Mon(XrdOucTokenizer &setargs)
XrdXrootdProtocol operator=(const XrdXrootdProtocol &rhs)=delete
struct XrdXrootdProtocol::GetDataCtl gdCtl
bool do_PgWAIO(int &rc)
int reserved
Definition: XrdXrootdProtocol.hh:492
class XrdBuffer * XrdSfsXioHandle
Definition: XrdSfsXio.hh:46
Definition: XrdXrootdProtocol.hh:237
Definition: XrdXrootdProtocol.hh:237
Definition: XrdBuffer.hh:41
Definition: XrdSfsXio.hh:54
XrdProtocol * Match(XrdLink *lp)
static int usxMaxNsz
Definition: XrdXrootdProtocol.hh:442
static int myUNLen
Definition: XrdXrootdProtocol.hh:401
static bool as_nosf
Definition: XrdXrootdProtocol.hh:230
static const int inNone
Definition: XrdXrootdProtocol.hh:544