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