xrootd
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
XProtocol.hh
Go to the documentation of this file.
1 #ifndef __XPROTOCOL_H
2 #define __XPROTOCOL_H
3 /******************************************************************************/
4 /* */
5 /* X P r o t o c o l . 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 /* The XRoot protocol definition, documented in this file, is distributed */
20 /* under a modified BSD license and may be freely used to reimplement it. */
21 /* Any references to "source" in this license refers to this file or any */
22 /* other file that specifically contains the following license. */
23 /* */
24 /* Redistribution and use in source and binary forms, with or without */
25 /* modification, are permitted provided that the following conditions */
26 /* are met: */
27 /* */
28 /* 1. Redistributions of source code must retain the above copyright notice, */
29 /* this list of conditions and the following disclaimer. */
30 /* */
31 /* 2. Redistributions in binary form must reproduce the above copyright */
32 /* notice, this list of conditions and the following disclaimer in the */
33 /* documentation and/or other materials provided with the distribution. */
34 /* */
35 /* 3. Neither the name of the copyright holder nor the names of its */
36 /* contributors may be used to endorse or promote products derived from */
37 /* this software without specific prior written permission. */
38 /* */
39 /* 4. Derived software may not use the name XRootD or cmsd (regardless of */
40 /* capitilization) in association with the derived work if the protocol */
41 /* documented in this file is changed in any way. */
42 /* */
43 /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */
44 /* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */
45 /* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR */
46 /* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */
47 /* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */
48 /* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT */
49 /* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, */
50 /* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY */
51 /* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT */
52 /* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE */
53 /******************************************************************************/
54 
55 #ifdef __CINT__
56 #define __attribute__(x)
57 #endif
58 
59 #include "XProtocol/XPtypes.hh"
60 
61 /******************************************************************************/
62 /* P r o t o c o l V e r s i o n D e f i n i t i o n s */
63 /******************************************************************************/
64 
65 // The following is the binary representation of the protocol version here.
66 // Protocol version is repesented as three base10 digits x.y.z with x having no
67 // upper limit (i.e. n.9.9 + 1 -> n+1.0.0). The kXR_PROTSIGNVERSION defines the
68 // protocol version where request signing became available.
69 //
70 #define kXR_PROTOCOLVERSION 0x00000510
71 #define kXR_PROTXATTVERSION 0x00000500
72 #define kXR_PROTTLSVERSION 0x00000500
73 #define kXR_PROTPGRWVERSION 0x00000510
74 #define kXR_PROTSIGNVERSION 0x00000310
75 #define kXR_PROTOCOLVSTRING "5.1.0"
76 
77 /******************************************************************************/
78 /* C l i e n t - S e r v e r H a n d s h a k e */
79 /******************************************************************************/
80 
81 // The fields to be sent as initial handshake
82 //
89 };
90 
91 // The body received after the first handshake's header
92 //
97 };
98 
99 /******************************************************************************/
100 /* C l i e n t R e q u e s t s */
101 /******************************************************************************/
102 
103 // G.Ganis: All the following structures never need padding bytes:
104 // no need of packing options like __attribute__((packed))
105 //
106 // All binary data is sent in network byte order.
107 
108 // Client request codes
109 //
112  kXR_auth = 3000,
113  kXR_query, // 3001
114  kXR_chmod, // 3002
115  kXR_close, // 3003
116  kXR_dirlist, // 3004
117  kXR_gpfile, // 3005 was kXR_getfile
118  kXR_protocol,// 3006
119  kXR_login, // 3007
120  kXR_mkdir, // 3008
121  kXR_mv, // 3009
122  kXR_open, // 3010
123  kXR_ping, // 3011
124  kXR_chkpoint,// 3012 was kXR_putfile
125  kXR_read, // 3013
126  kXR_rm, // 3014
127  kXR_rmdir, // 3015
128  kXR_sync, // 3016
129  kXR_stat, // 3017
130  kXR_set, // 3018
131  kXR_write, // 3019
132  kXR_fattr, // 3020 was kXR_admin
133  kXR_prepare, // 3021
134  kXR_statx, // 3022
135  kXR_endsess, // 3023
136  kXR_bind, // 3024
137  kXR_readv, // 3025
138  kXR_pgwrite, // 3026 was kXR_verifyw
139  kXR_locate, // 3027
140  kXR_truncate,// 3028
141  kXR_sigver, // 3029
142  kXR_pgread, // 3030 was kXR_decrypt
143  kXR_writev, // 3031
144  kXR_REQFENCE // Always last valid request code +1
145 };
146 
147 // Virtual client request codes
148 //
151 };
152 
153 // All client requests use a header with the following format
154 //
160 };
161 
162 /******************************************************************************/
163 /* k X R _ a u t h R e q u e s t */
164 /******************************************************************************/
165 
172 };
173 
174 /******************************************************************************/
175 /* k X R _ b i n d R e q u e s t */
176 /******************************************************************************/
177 
183 };
184 
185 /******************************************************************************/
186 /* k X R _ c h m o d R e q u e s t */
187 /******************************************************************************/
188 
193  kXR_unt16 mode; // See XOpenRequestMode
195 };
196 
197 /******************************************************************************/
198 /* k X R _ c h k p o i n t R e q u e s t */
199 /******************************************************************************/
200 
204  kXR_char fhandle[4]; // For Create, Delete, Query, or Restore
206  kXR_char opcode; // One of kXR_ckpxxxx actions
208 };
209 
210 // Actions
211 //
212 static const int kXR_ckpBegin = 0; // Begin checkpoint
213 static const int kXR_ckpCommit = 1; // Commit changes
214 static const int kXR_ckpQuery = 2; // Query checkpoint limits
215 static const int kXR_ckpRollback= 3; // Rollback changes
216 static const int kXR_ckpXeq = 4; // Execute trunc, write, or writev
217 
218 // The minimum size of a checkpoint data limit
219 //
220 static const int kXR_ckpMinMax = 104857604; // 10 MB
221 
222 /******************************************************************************/
223 /* k X R _ c l o s e R e q u e s t */
224 /******************************************************************************/
225 
232 };
233 
234 /******************************************************************************/
235 /* k X R _ d i r l i s t R e q u e s t */
236 /******************************************************************************/
237 
241  kXR_dcksm = 4 // dcksm implies dstat irrespective of dstat setting
242 };
243 
248  kXR_char options[1]; // See XDirlistRequestOption enum
250 };
251 
252 /******************************************************************************/
253 /* k X R _ e n d s e s s R e q u e s t */
254 /******************************************************************************/
255 
261 };
262 
263 /******************************************************************************/
264 /* k X R _ f a t t r R e q u e s t */
265 /******************************************************************************/
266 
267 // kXR_fattr subcodes
268 //
274  kXR_fatrrMaxSC = 3 // Highest valid subcode
275 };
276 
277 // kXR_fattr limits
278 //
279 enum xfaLimits {
280  kXR_faMaxVars = 16, // Maximum variables per request
281  kXR_faMaxNlen = 248, // Maximum length of variable name
282  kXR_faMaxVlen = 65536 // Maximum length of variable value
283 };
284 
289  kXR_char subcode; // See xfaSubCode enum
291  kXR_char options; // See valid options below
294 
295 // Valid options:
296 //
297  static const int isNew = 0x01; // For set, the variable must not exist
298  static const int aData = 0x10; // For list, return attribute value
299 
300 // Add an attribute name to nvec (the buffer has to be sufficiently big)
301 //
302  static char* NVecInsert( const char *name, char *buffer );
303 
304 // Add an attribute name to vvec (the buffer has to be sufficiently big)
305 //
306  static char* VVecInsert( const char *value, char *buffer );
307 
308 // Read error code from nvec
309 //
310  static char* NVecRead( char* buffer, kXR_unt16 &rc );
311 
312 // Read attribute name from nvec, should be deallocated with free()
313 //
314  static char* NVecRead( char* buffer, char *&name );
315 
316 // Read value length from vvec
317 //
318  static char* VVecRead( char* buffer, kXR_int32 &len );
319 
320 // Read attribute value from vvec, should be deallocated with free()
321 //
322  static char* VVecRead( char* buffer, kXR_int32 len, char *&value );
323 
324 };
325 
326 /******************************************************************************/
327 /* k X R _ g p f i l e R e q u e s t */
328 /******************************************************************************/
329 
330 struct ClientGPfileRequest { // ??? This is all wrong; correct when implemented
332  kXR_unt16 requestid; // kXR_gpfile
337 };
338 
339 /******************************************************************************/
340 /* k X R _ l o c a t e R e q u e s t */
341 /******************************************************************************/
342 
346  kXR_unt16 options; // See XOpenRequestOption enum tagged for locate
349 };
350 
351 /******************************************************************************/
352 /* k X R _ l o g i n R e q u e s t */
353 /******************************************************************************/
354 
355 // this is a bitmask
366 };
367 
368 // this iss a bitmask
372 };
373 
374 // this is a bitmask (note that XLoginVersion resides in lower bits)
379 };
380 
381 // this is a single number that is or'd into capver as the version
382 //
384  kXR_ver000 = 0, // Old clients predating history
385  kXR_ver001 = 1, // Generally implemented 2005 protocol
386  kXR_ver002 = 2, // Same as 1 but adds asyncresp recognition
387  kXR_ver003 = 3, // The 2011-2012 rewritten client
388  kXR_ver004 = 4, // The 2016 sign-capable client
389  kXR_ver005 = 5 // The 2019 TLS-capable client
390 };
391 
397  kXR_char ability2; // See XLoginAbility2 enum flags
398  kXR_char ability; // See XLoginAbility enum flags
399  kXR_char capver[1]; // See XLoginCapVer enum flags
402 };
403 
404 /******************************************************************************/
405 /* k X R _ m k d i r R e q u e s t */
406 /******************************************************************************/
407 
411 };
412 
418  kXR_unt16 mode; // See XOpenRequestMode
420 };
421 
422 /******************************************************************************/
423 /* k X R _ m v R e q u e s t */
424 /******************************************************************************/
425 
432 };
433 
434 /******************************************************************************/
435 /* k X R _ o p e n R e q u e s t */
436 /******************************************************************************/
437 
438 // OPEN MODE FOR A REMOTE FILE
440  kXR_ur = 0x100,
441  kXR_uw = 0x080,
442  kXR_ux = 0x040,
443  kXR_gr = 0x020,
444  kXR_gw = 0x010,
445  kXR_gx = 0x008,
446  kXR_or = 0x004,
447  kXR_ow = 0x002,
448  kXR_ox = 0x001
449 };
450 
452  kXR_compress = 1, // also locate (return unique hosts)
455  kXR_new = 8,
458  kXR_async = 64,
459  kXR_refresh = 128, // also locate
460  kXR_mkpath = 256,
461  kXR_prefname = 256, // only locate
463  kXR_retstat = 1024,
464  kXR_4dirlist = 1024, // for locate intending a dirlist
465  kXR_replica = 2048,
466  kXR_posc = 4096,
467  kXR_nowait = 8192, // also locate
468  kXR_seqio =16384,
470 };
471 
479 };
480 
481 /******************************************************************************/
482 /* k X R _ p g r e a d R e q u e s t */
483 /******************************************************************************/
484 
485 // The page size for pgread and pgwrite and the maximum transmission size
486 //
487 namespace XrdProto // Always use this namespace for new additions
488 {
489 static const int kXR_pgPageSZ = 4096; // Length of a page
490 static const int kXR_pgPageBL = 12; // log2(page length)
491 static const int kXR_pgUnitSZ = kXR_pgPageSZ + sizeof(kXR_unt32);
492 static const int kXR_pgMaxEpr = 128; // Max checksum errs per request
493 static const int kXR_pgMaxEos = 256; // Max checksum errs outstanding
494 
495 // kXR_pgread/write options
496 //
497 static const kXR_char kXR_AnyPath = 0xff; // In pathid
498 static const int kXR_pgRetry = 0x01; // In reqflags
499 }
500 
507  kXR_int32 dlen; // Request data length must be 0 unless args present
508 };
509 
511  kXR_char pathid; // Request data length must be 1
512  kXR_char reqflags; // Request data length must be 2
513 };
514 
515 namespace
516 {
517 }
518 
519 /******************************************************************************/
520 /* k X R _ p r w r i t e R e q u e s t */
521 /******************************************************************************/
522 
532 // kXR_char data[dlen];
533 };
534 
535 /******************************************************************************/
536 /* k X R _ p i n g R e q u e s t */
537 /******************************************************************************/
538 
544 };
545 
546 /******************************************************************************/
547 /* k X R _ p r o t o c o l R e q u e s t */
548 /******************************************************************************/
549 
553  kXR_int32 clientpv; // 2.9.7 or higher
554  kXR_char flags; // 3.1.0 or higher
555  kXR_char expect; // 4.0.0 or higher
558 
560  kXR_secreqs = 0x01, // Options: Return security requirements
561  kXR_ableTLS = 0x02, // Options: Client is TLS capable
562  kXR_wantTLS = 0x04, // Options: Change connection to use TLS
563  kXR_bifreqs = 0x08 // Options: Return bind interface requirements
564 };
565 
567  kXR_ExpMask = 0x0f, // Isolate the relevant expect enumeration value
568  kXR_ExpNone = 0x00,
569  kXR_ExpBind = 0x01,
570  kXR_ExpGPF = 0x02,
571  kXR_ExpLogin = 0x03,
572  kXR_ExpTPC = 0x04,
573  kXR_ExpGPFA = 0x08
574 };
575 };
576 
577 /******************************************************************************/
578 /* k X R _ p r e p a r e R e q u e s t */
579 /******************************************************************************/
580 
586  kXR_wmode = 16,
587  kXR_coloc = 32,
588  kXR_fresh = 64,
589  kXR_usetcp = 128,
590 
591  kXR_evict = 0x0001 // optionsX: file no longer useful
592 };
593 
599  kXR_unt16 port; // 2.9.9 or higher
600  kXR_unt16 optionX; // Extended options
603 };
604 
605 /******************************************************************************/
606 /* k X R _ q u e r y R e q u e s t */
607 /******************************************************************************/
608 
621 };
622 
626  kXR_unt16 infotype; // See XQueryType enum
631 };
632 
633 /******************************************************************************/
634 /* k X R _ r e a d R e q u e s t */
635 /******************************************************************************/
636 
644 // Optionally followed by read_args
645 };
646 
647 struct read_args {
650 // This struct may be followed by an array of readahead_list
651 };
652 
657 };
658 
659 /******************************************************************************/
660 /* k X R _ r e a d v R e q u e s t */
661 /******************************************************************************/
662 
669 // This struct followed by the read_list
670 };
671 
672 namespace XrdProto // Always use this namespace for new additions
673 {
674 struct read_list {
678 };
679 static const int rlItemLen = sizeof(read_list);
680 static const int maxRvecln = 16384;
681 static const int maxRvecsz = maxRvecln/rlItemLen;
682 }
683 
684 /******************************************************************************/
685 /* k X R _ r m R e q u e s t */
686 /******************************************************************************/
687 
693 };
694 
695 /******************************************************************************/
696 /* k X R _ r m d i r R e q u e s t */
697 /******************************************************************************/
698 
704 };
705 
706 /******************************************************************************/
707 /* k X R _ s e t R e q u e s t */
708 /******************************************************************************/
709 
714  kXR_char modifier; // For security purposes, should be zero
716 };
717 
718 /******************************************************************************/
719 /* k X R _ s i g v e r R e q u e s t */
720 /******************************************************************************/
721 
722 // Cryptography used for kXR_sigver SigverRequest::crypto
724  kXR_SHA256 = 0x01, // Hash used
725  kXR_HashMask = 0x0f, // Mak to extract the hash type
726  kXR_rsaKey = 0x80 // The rsa key was used
727 };
728 
729 // Flags for kXR_sigver
730 enum XSecFlags {
731  kXR_nodata = 1 // Request payload was not hashed
732 };
733 
734 // Version number
737 };
738 
742  kXR_unt16 expectrid; // Request code of subsequent request
743  kXR_char version; // Security version being used (see XSecVersion)
744  kXR_char flags; // One or more flags defined in enum (see XSecFlags)
745  kXR_unt64 seqno; // Monotonically increasing number (part of hash)
746  kXR_char crypto; // Cryptography used (see XSecCrypto)
749 };
750 
751 /******************************************************************************/
752 /* k X R _ s t a t R e q u e s t */
753 /******************************************************************************/
754 
757 };
758 
762  kXR_char options; // See XStatRequestOption
766 };
767 
768 /******************************************************************************/
769 /* k X R _ s y n c R e q u e s t */
770 /******************************************************************************/
771 
778 };
779 
780 /******************************************************************************/
781 /* k X R _ t r u n c a t e R e q u e s t */
782 /******************************************************************************/
783 
791 };
792 
793 /******************************************************************************/
794 /* k X R _ w r i t e R e q u e s t */
795 /******************************************************************************/
796 
805 };
806 
807 /******************************************************************************/
808 /* k X R _ w r i t e v R e q u e s t */
809 /******************************************************************************/
810 
814  kXR_char options; // See static const ints below
817 // This struct followed by the write_list
818 
819  static const kXR_int32 doSync = 0x01;
820 };
821 
822 namespace XrdProto // Always use this namespace for new additions
823 {
824 struct write_list {
828 };
829 static const int wlItemLen = sizeof(write_list);
830 static const int maxWvecln = 16384;
831 static const int maxWvecsz = maxWvecln/wlItemLen;
832 }
833 
834 /******************************************************************************/
835 /* U n i o n o f a l l C l i e n t R e q u e s t s */
836 /******************************************************************************/
837 
838 typedef union {
839  struct ClientRequestHdr header;
840  struct ClientAuthRequest auth;
841  struct ClientBindRequest bind;
842  struct ClientChkPointRequest chkpoint;
843  struct ClientChmodRequest chmod;
845  struct ClientDirlistRequest dirlist;
846  struct ClientEndsessRequest endsess;
847  struct ClientFattrRequest fattr;
848  struct ClientGPfileRequest gpfile;
849  struct ClientLocateRequest locate;
850  struct ClientLoginRequest login;
852  struct ClientMvRequest mv;
854  struct ClientPgReadRequest pgread;
855  struct ClientPgWriteRequest pgwrite;
856  struct ClientPingRequest ping;
857  struct ClientPrepareRequest prepare;
858  struct ClientProtocolRequest protocol;
859  struct ClientQueryRequest query;
862  struct ClientRmRequest rm;
864  struct ClientSetRequest set;
865  struct ClientSigverRequest sigver;
867  struct ClientSyncRequest sync;
871 } ClientRequest;
872 
873 typedef union {
874  struct ClientRequestHdr header;
875  struct ClientSigverRequest sigver;
877 
878 /******************************************************************************/
879 /* S e r v e r R e s p o n s e s */
880 /******************************************************************************/
881 
882 // Nice header for the server response.
883 // Note that the protocol specifies these values to be in network
884 // byte order when sent
885 //
886 // G.Ganis: The following structures never need padding bytes:
887 // no need of packing options
888 
889 // Server response codes
890 //
892  kXR_ok = 0,
893  kXR_oksofar = 4000,
894  kXR_attn, // 4001
895  kXR_authmore,// 4002
896  kXR_error, // 4003
897  kXR_redirect,// 4004
898  kXR_wait, // 4005
899  kXR_waitresp,// 4006
900  kXR_status, // 4007
902 };
903 
904 // All serer responses start with the same header
905 //
910 };
911 
912 // This is a bit of wierdness held over from the very old days, sigh.
913 //
915  char data[4096];
916 };
917 
918 /******************************************************************************/
919 /* k X R _ a t t n R e s p o n s e */
920 /******************************************************************************/
921 
923  kXR_asyncab = 5000, // No longer supported
924  kXR_asyncdi, // 5001 No longer supported
925  kXR_asyncms = 5002,
926  kXR_asyncrd, // 5003 No longer supported
927  kXR_asyncwt, // 5004 No longer supported
928  kXR_asyncav, // 5005 No longer supported
929  kXR_asynunav, // 5006 No longer supported
930  kXR_asyncgo, // 5007 No longer supported
932 };
933 
935  kXR_int32 actnum; // See XActionCode enum
936  char parms[4096]; // Should be sufficient for every use
937 };
938 
940  kXR_int32 actnum; // XActionCode::kXR_asyncms
941  char reserved[4];
943  char respdata[4096];
944 };
945 
947  kXR_int32 actnum; // XActionCode::kXR_asynresp
948  char reserved[4];
950  char respdata[4096];
951 };
952 
953 /******************************************************************************/
954 /* k X R _ a u t h m o r e R e s p o n s e */
955 /******************************************************************************/
956 
958  char data[4096];
959 };
960 
961 /******************************************************************************/
962 /* k X R _ b i n d R e s p o n s e */
963 /******************************************************************************/
964 
967 };
968 
969 /******************************************************************************/
970 /* k X R _ c h k p o i n t R e s p o n s e */
971 /******************************************************************************/
972 
973 struct ServerResponseBody_ChkPoint { // Only for kXR_ckpQMax
974  kXR_unt32 maxCkpSize; // Maximum number of bytes including overhead
975  kXR_unt32 useCkpSize; // The number of bytes already being used
976 };
977 
978 /******************************************************************************/
979 /* k X R _ e r r o r R e s p o n s e */
980 /******************************************************************************/
981 
984  kXR_ArgMissing, // 3001
985  kXR_ArgTooLong, // 3002
986  kXR_FileLocked, // 3003
988  kXR_FSError, // 3005
990  kXR_IOError, // 3007
991  kXR_NoMemory, // 3008
992  kXR_NoSpace, // 3009
994  kXR_NotFound, // 3011
997  kXR_noserver, // 3014
998  kXR_NotFile, // 3015
1000  kXR_Cancelled, // 3017
1001  kXR_ItExists, // 3018
1002  kXR_ChkSumErr, // 3019
1004  kXR_overQuota, // 3021
1005  kXR_SigVerErr, // 3022
1015  kXR_Conflict, // 3032
1018  kXR_ERRFENCE, // Always last valid errcode + 1
1020 };
1021 
1023  kXR_int32 errnum; // See XErrorCode enu
1024  char errmsg[4096]; // Should be sufficient for every use
1025 };
1026 
1027 /******************************************************************************/
1028 /* k X R _ l o g i n R e s p o n s e */
1029 /******************************************************************************/
1030 
1033  kXR_char sec[4096]; // Should be sufficient for every use
1034 };
1035 
1036 /******************************************************************************/
1037 /* k X R _ o p e n R e s p o n s e */
1038 /******************************************************************************/
1039 
1042  kXR_int32 cpsize; // cpsize & cptype returned if kXR_compress *or*
1043  kXR_char cptype[4]; // kXR_retstat is specified
1044 }; // info will follow if kXR_retstat is specified
1045 
1046 /******************************************************************************/
1047 /* k X R _ p g r e a d R e s p o n s e */
1048 /******************************************************************************/
1049 
1051  kXR_int64 offset; // info[]: File offset of data that follows
1052 // kXR_char data[dlen];
1053 };
1054 
1055 /******************************************************************************/
1056 /* k X R _ p g w r i t e R e s p o n s e */
1057 /******************************************************************************/
1058 
1060  kXR_int64 offset; // info[]: File offset of data written
1061 };
1062 
1063 
1064 // The following structure is appended to ServerResponseBody_pgWrite if one or
1065 // more checksum errors occurred and need to be retransmitted.
1066 //
1068  kXR_unt32 cseCRC; // crc32c of all following bits
1069  kXR_int16 dlFirst; // Data length at first offset in list
1070  kXR_int16 dlLast; // Data length at last offset in list
1071 // kXR_int64 bof[(dlen-8)/8]; // List of offsets of pages in error
1072 };
1073 
1074 /******************************************************************************/
1075 /* k X R _ p r o t o c o l R e s p o n s e */
1076 /******************************************************************************/
1077 
1078 // The following information is returned in the response body when kXR_bifreqs
1079 // is set in ClientProtocolRequest::flags. Note that the size of bifInfo is
1080 // is variable. This response will not be returned if there are no bif's.
1081 // Note: This structure is null byte padded to be a multiple of 8 bytes!
1082 //
1084  kXR_char theTag; // Always the character 'B' to identify struct
1085  kXR_char rsvd; // Reserved for the future (always 0 for now)
1086  kXR_unt16 bifILen; // Length of bifInfo including null bytes.
1087 // kXR_char bifInfo[bifILen];
1088 };
1089 
1090 // The following information is returned in the response body when kXR_secreqs
1091 // is set in ClientProtocolRequest::flags. Note that the size of secvec is
1092 // defined by secvsz and will not be present when secvsz == 0.
1093 //
1095  kXR_char reqindx; // Request index
1096  kXR_char reqsreq; // Request signing requirement
1097 };
1098 
1100  kXR_char theTag; // Always the character 'S' to identify struct
1101  kXR_char rsvd; // Reserved for the future (always 0 for now)
1102  kXR_char secver; // Security version
1103  kXR_char secopt; // Security options
1104  kXR_char seclvl; // Security level when secvsz == 0
1105  kXR_char secvsz; // Number of items in secvec (i.e. its length/2)
1107 };
1108 
1109 
1110 namespace XrdProto
1111 {
1114 }
1115 
1116 // Options reflected in protocol response ServerResponseReqs_Protocol::secopt
1117 //
1118 #define kXR_secOData 0x01
1119 #define kXR_secOFrce 0x02
1120 
1121 // Security level definitions (these are predefined but can be over-ridden)
1122 //
1123 #define kXR_secNone 0
1124 #define kXR_secCompatible 1
1125 #define kXR_secStandard 2
1126 #define kXR_secIntense 3
1127 #define kXR_secPedantic 4
1128 
1129 // Requirements one of which set in each ServerResponseReqs_Protocol::secvec
1130 //
1131 #define kXR_signIgnore 0
1132 #define kXR_signLikely 1
1133 #define kXR_signNeeded 2
1134 
1135 // Version used for kXR_sigver and is set in SigverRequest::version,
1136 // ServerResponseReqs_Protocol::secver
1137 //
1138 #define kXR_secver_0 0
1139 
1140 // KINDS of SERVERS (no longer used by new clients)
1141 //
1142 #define kXR_DataServer 1
1143 #define kXR_LBalServer 0
1144 
1145 // The below are defined for protocol version 2.9.7 or higher
1146 // These are the flag values in the kXR_protool response
1147 //
1148 #define kXR_isManager 0x00000002
1149 #define kXR_isServer 0x00000001
1150 #define kXR_attrMeta 0x00000100
1151 #define kXR_attrProxy 0x00000200
1152 #define kXR_attrSuper 0x00000400
1153 #define kXR_attrVirtRdr 0x00000800
1154 
1155 // Virtual options set on redirect
1156 //
1157 #define kXR_recoverWrts 0x00001000
1158 #define kXR_collapseRedir 0x00002000
1159 #define kXR_ecRedir 0x00004000
1160 
1161 // Things the server supports
1162 //
1163 #define kXR_anongpf 0x00800000
1164 #define kXR_supgpf 0x00400000
1165 #define kXR_suppgrw 0x00200000
1166 #define kXR_supposc 0x00100000
1167 
1168 // TLS requirements
1169 //
1170 #define kXR_haveTLS 0x80000000
1171 #define kXR_gotoTLS 0x40000000
1172 #define kXR_tlsAny 0x1f000000
1173 #define kXR_tlsData 0x01000000
1174 #define kXR_tlsGPF 0x02000000
1175 #define kXR_tlsLogin 0x04000000
1176 #define kXR_tlsSess 0x08000000
1177 #define kXR_tlsTPC 0x10000000
1178 #define kXR_tlsGPFA 0x20000000
1179 
1180 // Body for the kXR_protocol response... useful
1181 //
1185  ServerResponseReqs_Protocol secreq; // Only for V3.1.0+ && if requested
1186 };
1187 
1188 // Handy definition of the size of the protocol response when the security
1189 // information is not present.
1190 //
1191 #define kXR_ShortProtRespLen sizeof(ServerResponseBody_Protocol)-\
1192  sizeof(ServerResponseReqs_Protocol)
1193 
1194 /******************************************************************************/
1195 /* k X R _ r e d i r e c t R e s p o n s e */
1196 /******************************************************************************/
1197 
1200  char host[4096]; // Should be sufficient for every use
1201 };
1202 
1203 /******************************************************************************/
1204 /* k X R _ s t a t R e s p o n s e */
1205 /******************************************************************************/
1206 
1207 // The following bits are encoded in the "flags" token in the response
1208 //
1219 };
1220 
1221 /******************************************************************************/
1222 /* k X R _ s t a t u s R e s p o n s e */
1223 /******************************************************************************/
1224 
1225 struct ServerResponseBody_Status { // Always preceeded by ServerResponseHeader
1226  kXR_unt32 crc32c; // IETF RFC 7143 standard
1227  kXR_char streamID[2]; // Identical to streamid[2] in ServerResponseHeader
1228  kXR_char requestid; // requestcode - kXR_1stRequest
1229  kXR_char resptype; // See RespType enum below
1232 // kXR_char info[ServerResponseHeader::dlen-sizeof(ServerResponseBody_Status)];
1233 // kXR_char data[dlen];
1234 };
1235 
1236 namespace XrdProto
1237 {
1238 enum RespType {
1239 
1243 };
1244 
1245  // This is the minimum size of ServerResponseHeader::dlen for kXR_status
1246  //
1247  static const int kXR_statusBodyLen = sizeof(ServerResponseBody_Status);
1248 }
1249 
1253 };
1254 
1255 /******************************************************************************/
1256 /* k X R _ w a i t R e s p o n s e */
1257 /******************************************************************************/
1258 
1261  char infomsg[4096]; // Should be sufficient for every use
1262 };
1263 
1264 /******************************************************************************/
1265 /* k X R _ w a i t r e s p R e s p o n s e */
1266 /******************************************************************************/
1267 
1270 };
1271 
1272 /******************************************************************************/
1273 /* U n i o n o f a l l S e r v e r R e s p o n s e s */
1274 /******************************************************************************/
1275 
1277 {
1279  union
1280  {
1292  } body;
1293 };
1294 
1295 // The pgread and pgwrite do not fit the union above because they are composed
1296 // of three structs not two as all the above. So, we define the exceptions here.
1297 //
1299 {
1300  ServerResponseStatus status; // status.bdy and status.hdr
1301  union
1302  {
1305  } info;
1306 };
1307 
1308 struct ALIGN_CHECK {char chkszreq[25-sizeof(ClientRequest)];
1309  char chkszrsp[ 9-sizeof(ServerResponseHeader)];
1310 };
1311 
1312 /******************************************************************************/
1313 /* X P r o t o c o l U t i l i t i e s */
1314 /******************************************************************************/
1315 
1316 #include <cerrno>
1317 #if defined(WIN32)
1318 #if !defined(ENOTBLK)
1319 # define ENOTBLK 15
1320 #endif
1321 #if !defined(ETXTBSY)
1322 #define ETXTBSY 26
1323 #endif
1324 #if !defined(ENOBUFS)
1325 #define ENOBUFS 105
1326 #endif
1327 #if !defined(ENETUNREACH)
1328 #define ENETUNREACH 114
1329 #endif
1330 #endif
1331 
1332 #ifndef ENOATTR
1333 #define ENOATTR ENODATA
1334 #endif
1335 
1336 #ifndef EBADRQC
1337 #define EBADRQC EBADRPC
1338 #endif
1339 
1340 #ifndef EAUTH
1341 #define EAUTH EBADE
1342 #endif
1343 
1344 struct stat;
1345 
1347 {
1348 public:
1349 
1350 // mapError() is the official mapping from errno to xroot protocol error.
1351 //
1352 static int mapError(int rc)
1353  {if (rc < 0) rc = -rc;
1354  switch(rc)
1355  {case ENOENT: return kXR_NotFound;
1356  case EINVAL: return kXR_ArgInvalid;
1357  case EPERM: return kXR_NotAuthorized;
1358  case EACCES: return kXR_NotAuthorized;
1359  case EIO: return kXR_IOError;
1360  case ENOMEM: return kXR_NoMemory;
1361  case ENOBUFS: return kXR_NoMemory;
1362  case ENOSPC: return kXR_NoSpace;
1363  case ENAMETOOLONG: return kXR_ArgTooLong;
1364  case ENETUNREACH: return kXR_noserver;
1365  case ENOTBLK: return kXR_NotFile;
1366  case ENOTSUP: return kXR_Unsupported;
1367  case EISDIR: return kXR_isDirectory;
1368  case EEXIST: return kXR_ItExists;
1369  case EBADRQC: return kXR_InvalidRequest;
1370  case ETXTBSY: return kXR_inProgress;
1371  case ENODEV: return kXR_FSError;
1372  case EFAULT: return kXR_ServerError;
1373  case EDOM: return kXR_ChkSumErr;
1374  case EDQUOT: return kXR_overQuota;
1375  case EILSEQ: return kXR_SigVerErr;
1376  case ERANGE: return kXR_DecryptErr;
1377  case EUSERS: return kXR_Overloaded;
1378  case EROFS: return kXR_fsReadOnly;
1379  case ENOATTR: return kXR_AttrNotFound;
1380  case EPROTOTYPE: return kXR_TLSRequired;
1381  case EADDRNOTAVAIL: return kXR_noReplicas;
1382  case EAUTH: return kXR_AuthFailed;
1383  case EIDRM: return kXR_Impossible;
1384  case ENOTTY: return kXR_Conflict;
1385  case ETOOMANYREFS: return kXR_TooManyErrs;
1386  case ETIMEDOUT: return kXR_ReqTimedOut;
1387  case EBADF: return kXR_FileNotOpen;
1388  default: return kXR_FSError;
1389  }
1390  }
1391 
1392 static int toErrno( int xerr )
1393 {
1394  switch(xerr)
1395  {case kXR_ArgInvalid: return EINVAL;
1396  case kXR_ArgMissing: return EINVAL;
1397  case kXR_ArgTooLong: return ENAMETOOLONG;
1398  case kXR_FileLocked: return EDEADLK;
1399  case kXR_FileNotOpen: return EBADF;
1400  case kXR_FSError: return ENODEV;
1401  case kXR_InvalidRequest:return EBADRQC;
1402  case kXR_IOError: return EIO;
1403  case kXR_NoMemory: return ENOMEM;
1404  case kXR_NoSpace: return ENOSPC;
1405  case kXR_NotAuthorized: return EACCES;
1406  case kXR_NotFound: return ENOENT;
1407  case kXR_ServerError: return EFAULT;
1408  case kXR_Unsupported: return ENOTSUP;
1409  case kXR_noserver: return EHOSTUNREACH;
1410  case kXR_NotFile: return ENOTBLK;
1411  case kXR_isDirectory: return EISDIR;
1412  case kXR_Cancelled: return ECANCELED;
1413  case kXR_ItExists: return EEXIST;
1414  case kXR_ChkSumErr: return EDOM;
1415  case kXR_inProgress: return EINPROGRESS;
1416  case kXR_overQuota: return EDQUOT;
1417  case kXR_SigVerErr: return EILSEQ;
1418  case kXR_DecryptErr: return ERANGE;
1419  case kXR_Overloaded: return EUSERS;
1420  case kXR_fsReadOnly: return EROFS;
1421  case kXR_BadPayload: return EINVAL;
1422  case kXR_AttrNotFound: return ENOATTR;
1423  case kXR_TLSRequired: return EPROTOTYPE;
1424  case kXR_noReplicas: return EADDRNOTAVAIL;
1425  case kXR_AuthFailed: return EAUTH;
1426  case kXR_Impossible: return EIDRM;
1427  case kXR_Conflict: return ENOTTY;
1428  case kXR_TooManyErrs: return ETOOMANYREFS;
1429  case kXR_ReqTimedOut: return ETIMEDOUT;
1430  default: return ENOMSG;
1431  }
1432 }
1433 
1434 static const char *errName(kXR_int32 errCode);
1435 
1436 static const char *reqName(kXR_unt16 reqCode);
1437 
1438 /******************************************************************************/
1439 /* O b s o l e t e D e f i n i t i o n s */
1440 /******************************************************************************/
1441 
1442 struct ServerResponseBody_Attn_asyncdi { // No longer supported
1446 };
1447 
1448 struct ServerResponseBody_Attn_asyncrd { // No longer supported
1451  char host[4092];
1452 };
1453 
1454 struct ServerResponseBody_Attn_asyncwt { // No longer supported
1457 };
1458 
1459 // Kind of error inside a XTNetFile's routine (temporary)
1460 //
1462  kGENERICERR = 0, // Generic error
1463  kREAD, // Error while reading from stream
1464  kWRITE, // Error while writing to stream
1465  kREDIRCONNECT, // Error redirecting to a given host
1466  kOK, // Everything seems ok
1467  kNOMORESTREAMS // No more available stream IDs for
1468  // async processing
1469 };
1470 
1472 
1473 #define kXR_maxReqRetry 10
1474 
1475 }; // XProtocol
1476 #endif
Definition: XProtocol.hh:946
unsigned char kXR_char
Definition: XPtypes.hh:65
kXR_int64 offset
Definition: XProtocol.hh:801
static const char * errName(kXR_int32 errCode)
Definition: XProtocol.hh:360
Definition: XProtocol.hh:1182
Definition: XProtocol.hh:1240
kXR_int32 dlen
Definition: XProtocol.hh:804
Definition: XProtocol.hh:460
Definition: XProtocol.hh:1215
Definition: XProtocol.hh:1014
Definition: XProtocol.hh:378
kXR_unt16 options
Definition: XProtocol.hh:476
Definition: XProtocol.hh:897
Definition: XProtocol.hh:615
kXR_unt16 requestid
Definition: XProtocol.hh:258
kXR_unt64 seqno
Definition: XProtocol.hh:745
kXR_char streamid[2]
Definition: XProtocol.hh:907
kXR_char reqflags
Definition: XProtocol.hh:529
kXR_int64 offset
Definition: XProtocol.hh:656
kXR_char rsvd
Definition: XProtocol.hh:1085
Definition: XProtocol.hh:1067
Definition: XProtocol.hh:587
Definition: XProtocol.hh:957
kXR_char streamid[2]
Definition: XProtocol.hh:245
Definition: XProtocol.hh:1466
Definition: XProtocol.hh:571
Definition: XProtocol.hh:736
static const int maxRvecln
Definition: XProtocol.hh:680
ServerResponseStatus status
Definition: XProtocol.hh:1300
static const kXR_int32 doSync
Definition: XProtocol.hh:819
#define truncate(a, b)
Definition: XrdPosix.hh:106
kXR_int32 dlen
Definition: XProtocol.hh:668
kXR_int32 port
Definition: XProtocol.hh:1199
kXR_char sessid[16]
Definition: XProtocol.hh:259
#define EAUTH
Definition: XProtocol.hh:1341
Definition: XProtocol.hh:585
Definition: XProtocol.hh:457
kXR_char fhandle[4]
Definition: XProtocol.hh:1041
kXR_char reserved[7]
Definition: XProtocol.hh:649
kXR_char theTag
Definition: XProtocol.hh:1084
XMkdirOptions
Definition: XProtocol.hh:408
kXR_char streamid[2]
Definition: XProtocol.hh:551
char reserved[4]
Definition: XProtocol.hh:941
kXR_char flags
Definition: XProtocol.hh:744
kXR_char ability
Definition: XProtocol.hh:398
Definition: XProtocol.hh:1017
kXR_unt16 requestid
Definition: XProtocol.hh:639
kXR_unt16 requestid
Definition: XProtocol.hh:552
Definition: XProtocol.hh:447
kXR_int32 pid
Definition: XProtocol.hh:395
kXR_char streamid[2]
Definition: XProtocol.hh:202
kXR_char username[8]
Definition: XProtocol.hh:396
Definition: XProtocol.hh:984
Definition: XProtocol.hh:539
Definition: XProtocol.hh:931
Definition: XProtocol.hh:1008
kXR_int32 actnum
Definition: XProtocol.hh:940
kXR_int32 dlen
Definition: XProtocol.hh:557
Definition: XProtocol.hh:1241
kXR_char options[1]
Definition: XProtocol.hh:416
static const int kXR_pgMaxEpr
Definition: XProtocol.hh:492
Definition: XProtocol.hh:376
Definition: XProtocol.hh:133
Definition: XProtocol.hh:445
ServerResponseBody_Waitresp waitresp
Definition: XProtocol.hh:1291
kXR_char streamid[2]
Definition: XProtocol.hh:689
xfaSubCode
Definition: XProtocol.hh:269
Definition: XProtocol.hh:1217
ServerResponseBody_Wait wait
Definition: XProtocol.hh:1290
#define writev(a, b, c)
Definition: XrdPosix.hh:112
Definition: XProtocol.hh:892
kXR_int32 dlen
Definition: XProtocol.hh:194
char reserved[4]
Definition: XProtocol.hh:948
Definition: XProtocol.hh:1099
char infomsg[4096]
Definition: XProtocol.hh:1261
Definition: XProtocol.hh:226
Definition: XProtocol.hh:653
Definition: XProtocol.hh:456
Definition: XProtocol.hh:357
kXR_char rsvd
Definition: XProtocol.hh:1101
Definition: XProtocol.hh:1218
ServerResponseBody_Bind bind
Definition: XProtocol.hh:1283
kXR_char streamid[2]
Definition: XProtocol.hh:798
Definition: XProtocol.hh:472
Definition: XProtocol.hh:997
kXR_unt16 requestid
Definition: XProtocol.hh:332
kXR_char reserved[16]
Definition: XProtocol.hh:542
kXR_char streamid[2]
Definition: XProtocol.hh:167
Definition: XProtocol.hh:583
kXR_unt16 requestid
Definition: XProtocol.hh:741
Definition: XProtocol.hh:343
kXR_char fhandle[4]
Definition: XProtocol.hh:800
Definition: XProtocol.hh:1013
XReqErrorType
Definition: XProtocol.hh:1461
Definition: XProtocol.hh:983
kXR_unt16 optionX
Definition: XProtocol.hh:600
kXR_unt16 requestid
Definition: XProtocol.hh:503
Definition: XProtocol.hh:986
kXR_int32 dlen
Definition: XProtocol.hh:692
ExpectFlags
Definition: XProtocol.hh:566
Definition: XProtocol.hh:987
kXR_unt16 requestid
Definition: XProtocol.hh:228
kXR_char reserved[16]
Definition: XProtocol.hh:691
XOpenRequestMode
Definition: XProtocol.hh:439
Definition: XProtocol.hh:1018
char host[4092]
Definition: XProtocol.hh:1451
kXR_char fhandle[4]
Definition: XProtocol.hh:775
unsigned short kXR_unt16
Definition: XPtypes.hh:67
kXR_int32 third
Definition: XProtocol.hh:86
kXR_char credtype[4]
Definition: XProtocol.hh:170
Definition: XProtocol.hh:124
kXR_char streamid[2]
Definition: XProtocol.hh:524
kXR_int32 msgval
Definition: XProtocol.hh:96
Definition: XProtocol.hh:144
Definition: XProtocol.hh:1463
char data[4096]
Definition: XProtocol.hh:958
Definition: XProtocol.hh:616
Definition: XProtocol.hh:1083
Definition: XProtocol.hh:1448
Definition: XProtocol.hh:991
kXR_char prty
Definition: XProtocol.hh:598
kXR_int16 arg1len
Definition: XProtocol.hh:430
Definition: XProtocol.hh:1004
kXR_char pathid
Definition: XProtocol.hh:667
Definition: XProtocol.hh:929
kXR_int32 actnum
Definition: XProtocol.hh:1455
Definition: XProtocol.hh:446
kXR_char expect
Definition: XProtocol.hh:555
Definition: XProtocol.hh:121
kXR_char sessid[16]
Definition: XProtocol.hh:181
Definition: XProtocol.hh:130
kXR_char fhandle[4]
Definition: XProtocol.hh:504
kXR_unt16 requestid
Definition: XProtocol.hh:246
Definition: XProtocol.hh:122
Definition: XProtocol.hh:725
kXR_int32 dlen
Definition: XProtocol.hh:249
Definition: XProtocol.hh:131
kXR_char pathid
Definition: XProtocol.hh:511
kXR_unt16 requestid
Definition: XProtocol.hh:761
Definition: XProtocol.hh:550
kXR_unt16 requestid
Definition: XProtocol.hh:394
Definition: XProtocol.hh:1214
kXR_char streamid[2]
Definition: XProtocol.hh:711
#define ENOATTR
Definition: XProtocol.hh:1333
kXR_int32 options
Definition: XProtocol.hh:333
kXR_int32 rlen
Definition: XProtocol.hh:655
Definition: XProtocol.hh:409
Definition: XProtocol.hh:617
ServerResponseBody_pgWrite pgwrite
Definition: XProtocol.hh:1304
ServerResponseBody_pgRead pgread
Definition: XProtocol.hh:1303
Definition: XProtocol.hh:699
Definition: XProtocol.hh:384
static const kXR_char kXR_AnyPath
Definition: XProtocol.hh:497
Definition: XProtocol.hh:377
Definition: XProtocol.hh:178
kXR_unt16 requestid
Definition: XProtocol.hh:157
Definition: XProtocol.hh:1242
Definition: XProtocol.hh:371
kXR_unt16 requestid
Definition: XProtocol.hh:428
Definition: XProtocol.hh:594
Definition: XProtocol.hh:914
kXR_char streamid[2]
Definition: XProtocol.hh:331
kXR_unt16 status
Definition: XProtocol.hh:908
XLoginAbility2
Definition: XProtocol.hh:369
Definition: XProtocol.hh:1012
XSecCrypto
Definition: XProtocol.hh:723
kXR_char secopt
Definition: XProtocol.hh:1103
kXR_int32 rlen
Definition: XProtocol.hh:506
kXR_char reserved[8]
Definition: XProtocol.hh:334
kXR_int32 actnum
Definition: XProtocol.hh:1443
Definition: XProtocol.hh:241
Definition: XProtocol.hh:586
char respdata[4096]
Definition: XProtocol.hh:943
static int mapError(int rc)
Definition: XProtocol.hh:1352
kXR_char reserved[3]
Definition: XProtocol.hh:803
Definition: XProtocol.hh:523
kXR_unt16 requestid
Definition: XProtocol.hh:345
Definition: XProtocol.hh:756
kXR_unt16 infotype
Definition: XProtocol.hh:626
kXR_char capver[1]
Definition: XProtocol.hh:399
XResponseType
Definition: XProtocol.hh:891
Definition: XProtocol.hh:1454
kXR_char substreamid
Definition: XProtocol.hh:966
Definition: XProtocol.hh:610
static const int kXR_ckpXeq
Definition: XProtocol.hh:216
Definition: XProtocol.hh:1016
kXR_char reserved[14]
Definition: XProtocol.hh:192
Definition: XProtocol.hh:117
kXR_char streamid[2]
Definition: XProtocol.hh:812
kXR_int32 dlen
Definition: XProtocol.hh:816
kXR_int32 wsec
Definition: XProtocol.hh:1444
kXR_char streamid[2]
Definition: XProtocol.hh:227
kXR_char reserved[10]
Definition: XProtocol.hh:601
Definition: XProtocol.hh:570
kXR_char reserved[16]
Definition: XProtocol.hh:702
kXR_char fhandle[4]
Definition: XProtocol.hh:204
XQueryType
Definition: XProtocol.hh:609
Definition: XProtocol.hh:1442
Definition: XProtocol.hh:134
Definition: XProtocol.hh:1250
Definition: XProtocol.hh:388
kXR_int32 rlen
Definition: XProtocol.hh:642
kXR_int64 offset
Definition: XProtocol.hh:677
static const int kXR_ckpCommit
Definition: XProtocol.hh:213
Definition: XProtocol.hh:572
Definition: XProtocol.hh:443
struct ServerResponseBody_Status bdy
Definition: XProtocol.hh:1252
Definition: XProtocol.hh:569
Definition: XProtocol.hh:270
kXR_char seclvl
Definition: XProtocol.hh:1104
kXR_unt16 requestid
Definition: XProtocol.hh:774
Definition: XProtocol.hh:1010
kXR_int32 dlen
Definition: XProtocol.hh:643
static char * VVecRead(char *buffer, kXR_int32 &len)
Definition: XProtocol.hh:112
Definition: XProtocol.hh:113
static const int kXR_ckpMinMax
Definition: XProtocol.hh:220
kXR_int32 dlen
Definition: XProtocol.hh:531
ServerResponseBody_Login login
Definition: XProtocol.hh:1286
Definition: XProtocol.hh:1040
kXR_unt16 requestid
Definition: XProtocol.hh:474
static char * NVecInsert(const char *name, char *buffer)
static const int kXR_pgRetry
Definition: XProtocol.hh:498
kXR_char streamid[2]
Definition: XProtocol.hh:179
Definition: XProtocol.hh:1298
kXR_unt16 requestid
Definition: XProtocol.hh:786
Definition: XProtocol.hh:510
kXR_char reserved[9]
Definition: XProtocol.hh:292
kXR_char reserved1[2]
Definition: XProtocol.hh:627
kXR_char version
Definition: XProtocol.hh:743
Definition: XProtocol.hh:901
kXR_int32 dlen
Definition: XProtocol.hh:715
kXR_int32 dlen
Definition: XProtocol.hh:703
kXR_char reserved2[8]
Definition: XProtocol.hh:629
static const int wlItemLen
Definition: XProtocol.hh:829
Definition: XProtocol.hh:280
kXR_unt16 requestid
Definition: XProtocol.hh:701
Definition: XProtocol.hh:386
Definition: XProtocol.hh:1216
ServerResponseBody_Error error
Definition: XProtocol.hh:1285
Definition: XProtocol.hh:166
Definition: XProtocol.hh:365
kXR_int32 fourth
Definition: XProtocol.hh:87
kXR_int32 wlen
Definition: XProtocol.hh:826
kXR_int32 dlen
Definition: XProtocol.hh:602
kXR_int64 offset
Definition: XProtocol.hh:1051
Definition: XProtocol.hh:467
Definition: XProtocol.hh:1212
Definition: XProtocol.hh:127
XLoginVersion
Definition: XProtocol.hh:383
Definition: XProtocol.hh:1000
Definition: XProtocol.hh:123
kXR_char cptype[4]
Definition: XProtocol.hh:1043
Definition: XProtocol.hh:797
char host[4096]
Definition: XProtocol.hh:1200
Definition: XProtocol.hh:647
kXR_char reserved[15]
Definition: XProtocol.hh:815
unsigned long long kXR_unt64
Definition: XPtypes.hh:99
kXR_int32 rlen
Definition: XProtocol.hh:676
Definition: XProtocol.hh:623
Definition: XProtocol.hh:1007
Definition: XProtocol.hh:201
kXR_int32 errnum
Definition: XProtocol.hh:1023
Definition: XProtocol.hh:115
kXR_int16 dlLast
Definition: XProtocol.hh:1070
kXR_int32 dlen
Definition: XProtocol.hh:630
kXR_char reserved[4]
Definition: XProtocol.hh:789
Definition: XProtocol.hh:387
kXR_char streamID[2]
Definition: XProtocol.hh:1227
kXR_char options
Definition: XProtocol.hh:597
kXR_char opcode
Definition: XProtocol.hh:206
Definition: XProtocol.hh:562
Definition: XProtocol.hh:1465
kXR_char reqindx
Definition: XProtocol.hh:1095
ServerResponseSVec_Protocol secvec
Definition: XProtocol.hh:1106
static const int kXR_pgPageBL
Definition: XProtocol.hh:490
kXR_int32 ServerResponseType
Definition: XProtocol.hh:1471
Definition: XProtocol.hh:724
kXR_char reserved[13]
Definition: XProtocol.hh:417
Definition: XProtocol.hh:1031
Definition: XProtocol.hh:1211
Definition: XProtocol.hh:442
char chkszreq[25-sizeof(ClientRequest)]
Definition: XProtocol.hh:1308
kXR_char streamid[2]
Definition: XProtocol.hh:785
Definition: XProtocol.hh:119
Definition: XProtocol.hh:988
kXR_char streamid[2]
Definition: XProtocol.hh:427
kXR_char streamid[2]
Definition: XProtocol.hh:257
kXR_unt32 maxCkpSize
Definition: XProtocol.hh:974
kXR_char options
Definition: XProtocol.hh:814
Definition: XProtocol.hh:444
Definition: XProtocol.hh:501
kXR_int32 second
Definition: XProtocol.hh:85
Definition: XProtocol.hh:896
kXR_char streamid[2]
Definition: XProtocol.hh:414
Definition: XProtocol.hh:726
static const int maxWvecln
Definition: XProtocol.hh:830
Definition: XProtocol.hh:240
Definition: XProtocol.hh:370
Definition: XProtocol.hh:894
kXR_char streamid[2]
Definition: XProtocol.hh:190
char data[4096]
Definition: XProtocol.hh:915
static const int maxWvecsz
Definition: XProtocol.hh:831
#define write(a, b, c)
Definition: XrdPosix.hh:110
kXR_int32 dlen
Definition: XProtocol.hh:1231
kXR_char pathid
Definition: XProtocol.hh:648
kXR_int32 dlen
Definition: XProtocol.hh:336
Definition: XProtocol.hh:239
kXR_unt16 requestid
Definition: XProtocol.hh:712
kXR_int32 msglen
Definition: XProtocol.hh:94
Definition: XProtocol.hh:618
kXR_unt16 requestid
Definition: XProtocol.hh:665
Definition: XProtocol.hh:358
kXR_unt32 crc32c
Definition: XProtocol.hh:1226
ServerResponseBody_Status status
Definition: XProtocol.hh:1289
Definition: XProtocol.hh:1015
char respdata[4096]
Definition: XProtocol.hh:950
kXR_char fhandle[4]
Definition: XProtocol.hh:640
Definition: XProtocol.hh:873
kXR_char reserved[12]
Definition: XProtocol.hh:169
kXR_int64 offset
Definition: XProtocol.hh:641
Definition: XProtocol.hh:468
Definition: XProtocol.hh:772
Definition: XProtocol.hh:620
kXR_int32 port
Definition: XProtocol.hh:1450
kXR_unt16 requestid
Definition: XProtocol.hh:799
kXR_char ability2
Definition: XProtocol.hh:397
Definition: XProtocol.hh:464
Definition: XProtocol.hh:1346
Definition: XProtocol.hh:939
Definition: XProtocol.hh:111
Definition: XProtocol.hh:1009
Definition: XProtocol.hh:440
kXR_int32 cpsize
Definition: XProtocol.hh:1042
XErrorCode
Definition: XProtocol.hh:982
Definition: XProtocol.hh:1308
kXR_int32 dlen
Definition: XProtocol.hh:293
Definition: XProtocol.hh:244
kXR_char streamid[2]
Definition: XProtocol.hh:700
Definition: XProtocol.hh:568
kXR_int32 dlen
Definition: XProtocol.hh:159
Definition: XProtocol.hh:1464
Definition: XProtocol.hh:1210
Definition: XProtocol.hh:965
kXR_unt16 requestid
Definition: XProtocol.hh:191
Definition: XProtocol.hh:898
XLoginCapVer
Definition: XProtocol.hh:375
Definition: XProtocol.hh:990
kXR_int64 offset
Definition: XProtocol.hh:1060
Definition: XProtocol.hh:1001
ServerResponseBody_Protocol protocol
Definition: XProtocol.hh:1287
kXR_int64 offset
Definition: XProtocol.hh:527
Definition: XProtocol.hh:385
kXR_char streamid[2]
Definition: XProtocol.hh:760
static const int kXR_ckpBegin
Definition: XProtocol.hh:212
static const int kXR_pgMaxEos
Definition: XProtocol.hh:493
static const int kXR_pgPageSZ
Definition: XProtocol.hh:489
Definition: XProtocol.hh:1225
Definition: XProtocol.hh:114
Definition: XProtocol.hh:710
Definition: XProtocol.hh:359
kXR_unt16 requestid
Definition: XProtocol.hh:541
XSecVersion
Definition: XProtocol.hh:735
Definition: XProtocol.hh:731
static const int aData
Definition: XProtocol.hh:298
kXR_char reserved[15]
Definition: XProtocol.hh:713
kXR_unt16 mode
Definition: XProtocol.hh:418
kXR_int32 pval
Definition: XProtocol.hh:1183
Definition: XProtocol.hh:619
Definition: XProtocol.hh:274
kXR_int32 dlen
Definition: XProtocol.hh:543
XSecFlags
Definition: XProtocol.hh:730
static const int rlItemLen
Definition: XProtocol.hh:679
kXR_unt16 expectrid
Definition: XProtocol.hh:742
Definition: XProtocol.hh:895
kXR_char fhandle[4]
Definition: XProtocol.hh:675
Definition: XProtocol.hh:392
Definition: XProtocol.hh:426
Definition: XProtocol.hh:132
ServerResponseBody_Redirect redirect
Definition: XProtocol.hh:1288
Definition: XProtocol.hh:614
Definition: XProtocol.hh:139
Definition: XProtocol.hh:126
kXR_char requestid
Definition: XProtocol.hh:1228
kXR_int32 dlen
Definition: XProtocol.hh:401
Definition: XProtocol.hh:930
kXR_char streamid[2]
Definition: XProtocol.hh:740
kXR_unt16 requestid
Definition: XProtocol.hh:203
kXR_int32 dlen
Definition: XProtocol.hh:348
Definition: XProtocol.hh:1005
kXR_char body[16]
Definition: XProtocol.hh:158
kXR_char reserved[4]
Definition: XProtocol.hh:1230
Definition: XProtocol.hh:142
Definition: XProtocol.hh:120
Definition: XProtocol.hh:189
kXR_char secver
Definition: XProtocol.hh:1102
Definition: XProtocol.hh:128
unsigned int kXR_unt32
Definition: XPtypes.hh:90
kXR_char streamid[2]
Definition: XProtocol.hh:773
Definition: XProtocol.hh:389
Definition: XProtocol.hh:1276
kXR_int32 dlen
Definition: XProtocol.hh:748
kXR_char reserved[12]
Definition: XProtocol.hh:230
kXR_int64 offset
Definition: XProtocol.hh:788
kXR_char reserved[12]
Definition: XProtocol.hh:477
kXR_int32 flags
Definition: XProtocol.hh:1184
static const int kXR_ckpQuery
Definition: XProtocol.hh:214
Definition: XProtocol.hh:1268
kXR_unt16 requestid
Definition: XProtocol.hh:625
kXR_char streamid[2]
Definition: XProtocol.hh:664
Definition: XProtocol.hh:155
Definition: XProtocol.hh:674
kXR_int32 actnum
Definition: XProtocol.hh:1449
Definition: XProtocol.hh:906
static char * VVecInsert(const char *value, char *buffer)
RespType
Definition: XProtocol.hh:1238
Definition: XProtocol.hh:893
kXR_char reserved[10]
Definition: XProtocol.hh:556
Definition: XProtocol.hh:455
Definition: XProtocol.hh:441
kXR_char secvsz
Definition: XProtocol.hh:1105
kXR_unt16 requestid
Definition: XProtocol.hh:415
Definition: XProtocol.hh:361
Definition: XProtocol.hh:448
Definition: XProtocol.hh:1094
kXR_char options
Definition: XProtocol.hh:762
RequestFlags
Definition: XProtocol.hh:559
kXR_char fhandle[4]
Definition: XProtocol.hh:654
Definition: XProtocol.hh:458
Definition: XProtocol.hh:998
Definition: XProtocol.hh:924
Definition: XProtocol.hh:985
kXR_int32 fifth
Definition: XProtocol.hh:88
kXR_unt16 requestid
Definition: XProtocol.hh:525
xfaLimits
Definition: XProtocol.hh:279
XLoginAbility
Definition: XProtocol.hh:356
char parms[4096]
Definition: XProtocol.hh:936
Definition: XProtocol.hh:330
kXR_int32 dlen
Definition: XProtocol.hh:478
Definition: XProtocol.hh:589
kXR_unt16 requestid
Definition: XProtocol.hh:168
kXR_char reserved[2]
Definition: XProtocol.hh:530
Definition: XProtocol.hh:363
kXR_int32 dlen
Definition: XProtocol.hh:790
Definition: XProtocol.hh:453
ServerResponseReqs_Protocol secreq
Definition: XProtocol.hh:1185
kXR_char reserved[14]
Definition: XProtocol.hh:429
kXR_unt32 cseCRC
Definition: XProtocol.hh:1068
Definition: XProtocol.hh:410
Definition: XProtocol.hh:463
Definition: XProtocol.hh:1019
ServerResponseHeader resphdr
Definition: XProtocol.hh:949
Definition: XProtocol.hh:688
Definition: XProtocol.hh:1011
Definition: XProtocol.hh:925
struct ServerResponseHeader hdr
Definition: XProtocol.hh:1251
XRequestTypes
Definition: XProtocol.hh:110
Definition: XProtocol.hh:611
#define stat(a, b)
Definition: XrdPosix.hh:96
kXR_char streamid[2]
Definition: XProtocol.hh:540
kXR_int32 first
Definition: XProtocol.hh:84
kXR_char reqsreq
Definition: XProtocol.hh:1096
#define EBADRQC
Definition: XProtocol.hh:1337
Definition: XProtocol.hh:561
Definition: XProtocol.hh:138
kXR_char reserved[15]
Definition: XProtocol.hh:247
kXR_char fhandle[4]
Definition: XProtocol.hh:825
Definition: XProtocol.hh:994
kXR_int32 dlen
Definition: XProtocol.hh:431
kXR_char streamid[2]
Definition: XProtocol.hh:638
kXR_int32 dlen
Definition: XProtocol.hh:909
Definition: XProtocol.hh:928
static const char * reqName(kXR_unt16 reqCode)
Definition: XProtocol.hh:995
Definition: XProtocol.hh:637
kXR_char streamid[2]
Definition: XProtocol.hh:624
Definition: XProtocol.hh:1467
Definition: XProtocol.hh:256
kXR_char sec[4096]
Definition: XProtocol.hh:1033
kXR_char streamid[2]
Definition: XProtocol.hh:502
kXR_char theTag
Definition: XProtocol.hh:1100
kXR_int32 seconds
Definition: XProtocol.hh:1269
Definition: XProtocol.hh:584
Definition: XProtocol.hh:129
kXR_char reserved2
Definition: XProtocol.hh:400
kXR_char streamid[2]
Definition: XProtocol.hh:286
static const int isNew
Definition: XProtocol.hh:297
Definition: XProtocol.hh:364
#define close(a)
Definition: XrdPosix.hh:43
XPrepRequestOption
Definition: XProtocol.hh:581
kXR_int64 offset
Definition: XProtocol.hh:827
kXR_char flags
Definition: XProtocol.hh:554
kXR_char streamid[2]
Definition: XProtocol.hh:595
Definition: XProtocol.hh:582
Definition: XProtocol.hh:989
kXR_char modifier
Definition: XProtocol.hh:714
kXR_char streamid[2]
Definition: XProtocol.hh:393
Definition: XProtocol.hh:452
Definition: XProtocol.hh:923
kXR_char streamid[2]
Definition: XProtocol.hh:156
Definition: XProtocol.hh:588
Definition: XProtocol.hh:1259
Definition: XProtocol.hh:563
union ServerResponseV2::@1 info
Definition: XProtocol.hh:465
XActionCode
Definition: XProtocol.hh:922
kXR_char streamid[2]
Definition: XProtocol.hh:473
kXR_int32 dlen
Definition: XProtocol.hh:777
static const int kXR_statusBodyLen
Definition: XProtocol.hh:1247
Definition: XProtocol.hh:663
kXR_int64 offset
Definition: XProtocol.hh:505
kXR_char pathid
Definition: XProtocol.hh:528
Definition: XProtocol.hh:591
kXR_char streamid[2]
Definition: XProtocol.hh:344
kXR_unt16 bifILen
Definition: XProtocol.hh:1086
Definition: XProtocol.hh:362
Definition: XProtocol.hh:973
kXR_char reserved[14]
Definition: XProtocol.hh:347
Definition: XProtocol.hh:1462
Definition: XProtocol.hh:118
Definition: XProtocol.hh:116
Definition: XProtocol.hh:899
XOpenRequestOption
Definition: XProtocol.hh:451
#define open
Definition: XrdPosix.hh:71
kXR_char resptype
Definition: XProtocol.hh:1229
Definition: XProtocol.hh:143
Definition: XProtocol.hh:282
Definition: XProtocol.hh:926
ServerResponseBody_Attn attn
Definition: XProtocol.hh:1281
kXR_char fhandle[4]
Definition: XProtocol.hh:288
Definition: XProtocol.hh:466
kXR_char fhandle[4]
Definition: XProtocol.hh:229
XDirlistRequestOption
Definition: XProtocol.hh:238
int kXR_int32
Definition: XPtypes.hh:89
Definition: XProtocol.hh:459
kXR_unt32 useCkpSize
Definition: XProtocol.hh:975
Definition: XProtocol.hh:83
ServerResponseHeader hdr
Definition: XProtocol.hh:1278
Definition: XProtocol.hh:613
kXR_int32 actnum
Definition: XProtocol.hh:947
kXR_char fhandle[4]
Definition: XProtocol.hh:526
Definition: XProtocol.hh:1059
kXR_char reserved[11]
Definition: XProtocol.hh:763
kXR_unt16 requestid
Definition: XProtocol.hh:180
kXR_int32 dlen
Definition: XProtocol.hh:182
kXR_unt16 mode
Definition: XProtocol.hh:475
Definition: XProtocol.hh:273
kXR_int32 dlen
Definition: XProtocol.hh:765
kXR_char numattr
Definition: XProtocol.hh:290
Definition: XProtocol.hh:469
Definition: XProtocol.hh:996
static char * NVecRead(char *buffer, kXR_unt16 &rc)
Definition: XProtocol.hh:141
kXR_int32 protover
Definition: XProtocol.hh:95
Definition: XProtocol.hh:150
kXR_int32 dlen
Definition: XProtocol.hh:260
Definition: XProtocol.hh:838
kXR_char reserved[12]
Definition: XProtocol.hh:776
kXR_unt16 requestid
Definition: XProtocol.hh:813
#define read(a, b, c)
Definition: XrdPosix.hh:77
kXR_int32 buffsz
Definition: XProtocol.hh:335
Definition: XProtocol.hh:759
Definition: XProtocol.hh:93
Definition: XProtocol.hh:281
Definition: XProtocol.hh:992
Definition: XProtocol.hh:993
Definition: XProtocol.hh:461
Definition: XProtocol.hh:272
Definition: XProtocol.hh:1022
ServerResponseBody_Buffer buffer
Definition: XProtocol.hh:1284
Definition: XProtocol.hh:560
char errmsg[4096]
Definition: XProtocol.hh:1024
kXR_char rsvd2[3]
Definition: XProtocol.hh:747
kXR_char subcode
Definition: XProtocol.hh:289
kXR_char options[1]
Definition: XProtocol.hh:248
kXR_char reserved[11]
Definition: XProtocol.hh:205
Definition: XProtocol.hh:1006
static const int kXR_ckpRollback
Definition: XProtocol.hh:215
kXR_char options
Definition: XProtocol.hh:291
kXR_unt16 port
Definition: XProtocol.hh:599
Definition: XProtocol.hh:271
kXR_char pathid
Definition: XProtocol.hh:802
Definition: XProtocol.hh:573
Definition: XProtocol.hh:1002
kXR_int32 msec
Definition: XProtocol.hh:1445
ServerResponseHeader resphdr
Definition: XProtocol.hh:942
kXR_int32 dlen
Definition: XProtocol.hh:507
XStatRespFlags
Definition: XProtocol.hh:1209
static const int maxRvecsz
Definition: XProtocol.hh:681
kXR_unt16 requestid
Definition: XProtocol.hh:596
kXR_int32 dlen
Definition: XProtocol.hh:419
kXR_int32 dlen
Definition: XProtocol.hh:207
static const int kXR_pgUnitSZ
Definition: XProtocol.hh:491
XVirtRequestTypes
Definition: XProtocol.hh:149
Definition: XProtocol.hh:135
kXR_int32 wsec
Definition: XProtocol.hh:1456
kXR_char reserved[15]
Definition: XProtocol.hh:666
#define mkdir(a, b)
Definition: XrdPosix.hh:69
Definition: XProtocol.hh:1003
Definition: XProtocol.hh:462
Definition: XProtocol.hh:125
kXR_char reqflags
Definition: XProtocol.hh:512
kXR_int32 seconds
Definition: XProtocol.hh:1260
Definition: XProtocol.hh:900
Definition: XProtocol.hh:999
Definition: XProtocol.hh:285
long long kXR_int64
Definition: XPtypes.hh:98
Definition: XProtocol.hh:612
kXR_char crypto
Definition: XProtocol.hh:746
kXR_int32 actnum
Definition: XProtocol.hh:935
Definition: XProtocol.hh:454
kXR_int32 dlen
Definition: XProtocol.hh:171
XStatRequestOption
Definition: XProtocol.hh:755
#define rmdir(a)
Definition: XrdPosix.hh:92
Definition: XProtocol.hh:137
Definition: XProtocol.hh:739
kXR_unt16 requestid
Definition: XProtocol.hh:287
kXR_unt16 mode
Definition: XProtocol.hh:193
kXR_int16 dlFirst
Definition: XProtocol.hh:1069
kXR_int32 dlen
Definition: XProtocol.hh:231
Definition: XProtocol.hh:784
kXR_char sessid[16]
Definition: XProtocol.hh:1032
Definition: XProtocol.hh:934
static int toErrno(int xerr)
Definition: XProtocol.hh:1392
char chkszrsp[9-sizeof(ServerResponseHeader)]
Definition: XProtocol.hh:1309
kXR_char fhandle[4]
Definition: XProtocol.hh:764
Definition: XProtocol.hh:927
kXR_unt16 options
Definition: XProtocol.hh:346
Definition: XProtocol.hh:413
Definition: XProtocol.hh:136
ServerResponseBody_Authmore authmore
Definition: XProtocol.hh:1282
#define readv(a, b, c)
Definition: XrdPosix.hh:79
Definition: XProtocol.hh:567
Definition: XProtocol.hh:1213
kXR_char fhandle[4]
Definition: XProtocol.hh:787
short kXR_int16
Definition: XPtypes.hh:66
Definition: XProtocol.hh:1198
union ServerResponse::@0 body
kXR_unt16 requestid
Definition: XProtocol.hh:690
Definition: XProtocol.hh:1050
Definition: XProtocol.hh:811
kXR_char fhandle[4]
Definition: XProtocol.hh:628
Definition: XProtocol.hh:824
Definition: XProtocol.hh:140
kXR_int32 clientpv
Definition: XProtocol.hh:553