xrootd
Loading...
Searching...
No Matches
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 0x00000511
71#define kXR_PROTXATTVERSION 0x00000500
72#define kXR_PROTTLSVERSION 0x00000500
73#define kXR_PROTPGRWVERSION 0x00000511
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//
90
91// The body received after the first handshake's header
92//
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
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
141 kXR_sigver, // 3029
142 kXR_pgread, // 3030 was kXR_decrypt
143 kXR_writev, // 3031
144 kXR_REQFENCE // Always last valid request code +1
146
147// Virtual client request codes
148//
152
153// All client requests use a header with the following format
154//
161
162/******************************************************************************/
163/* k X R _ a u t h R e q u e s t */
164/******************************************************************************/
165
173
174/******************************************************************************/
175/* k X R _ b i n d R e q u e s t */
176/******************************************************************************/
177
184
185/******************************************************************************/
186/* k X R _ c h m o d R e q u e s t */
187/******************************************************************************/
188
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//
212static const int kXR_ckpBegin = 0; // Begin checkpoint
213static const int kXR_ckpCommit = 1; // Commit changes
214static const int kXR_ckpQuery = 2; // Query checkpoint limits
215static const int kXR_ckpRollback= 3; // Rollback changes
216static const int kXR_ckpXeq = 4; // Execute trunc, write, or writev
217
218// The minimum size of a checkpoint data limit
219//
220static 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
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
243
251
252/******************************************************************************/
253/* k X R _ e n d s e s s R e q u e s t */
254/******************************************************************************/
255
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
276
277// kXR_fattr limits
278//
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
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
330struct 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
367
368// this iss a bitmask
373
374// this is a bitmask (note that XLoginVersion resides in lower bits)
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
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
412
421
422/******************************************************************************/
423/* k X R _ m v R e q u e s t */
424/******************************************************************************/
425
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
450
452 kXR_compress = 0x0001, // 1 // also locate (return unique hosts)
453 kXR_delete = 0x0002, // 2
454 kXR_force = 0x0004, // 4
455 kXR_new = 0x0008, // 8
456 kXR_open_read= 0x0010, // 16
457 kXR_open_updt= 0x0020, // 32
458 kXR_async = 0x0040, // 64
459 kXR_refresh = 0x0080, // 128 // also locate
460 kXR_mkpath = 0x0100, // 256
461 kXR_prefname = 0x0100, // 256 // only locate
462 kXR_open_apnd= 0x0200, // 512
463 kXR_retstat = 0x0400, // 1024
464 kXR_4dirlist = 0x0400, // 1024 // for locate intending a dirlist
465 kXR_replica = 0x0800, // 2048
466 kXR_posc = 0x1000, // 4096
467 kXR_nowait = 0x2000, // 8192 // also locate
468 kXR_seqio = 0x4000, // 16384
469 kXR_open_wrto= 0x8000 // 32768
471
473 kXR_dup = 0x0001, // 1
474 kXR_samefs = 0x0002 // 2
476
485
486/******************************************************************************/
487/* k X R _ p g r e a d R e q u e s t */
488/******************************************************************************/
489
490// The page size for pgread and pgwrite and the maximum transmission size
491//
492namespace XrdProto // Always use this namespace for new additions
493{
494static const int kXR_pgPageSZ = 4096; // Length of a page
495static const int kXR_pgPageBL = 12; // log2(page length)
496static const int kXR_pgUnitSZ = kXR_pgPageSZ + sizeof(kXR_unt32);
497static const int kXR_pgMaxEpr = 128; // Max checksum errs per request
498static const int kXR_pgMaxEos = 256; // Max checksum errs outstanding
499
500// kXR_pgread/write options
501//
502static const kXR_char kXR_AnyPath = 0xff; // In pathid
503static const int kXR_pgRetry = 0x01; // In reqflags
504}
505
512 kXR_int32 dlen; // Request data length must be 0 unless args present
513};
514
516 kXR_char pathid; // Request data length must be 1
517 kXR_char reqflags; // Request data length must be 2
518};
519
520namespace
521{
522}
523
524/******************************************************************************/
525/* k X R _ p r w r i t e R e q u e s t */
526/******************************************************************************/
527
539
540/******************************************************************************/
541/* k X R _ p i n g R e q u e s t */
542/******************************************************************************/
543
550
551/******************************************************************************/
552/* k X R _ p r o t o c o l R e q u e s t */
553/******************************************************************************/
554
558 kXR_int32 clientpv; // 2.9.7 or higher
559 kXR_char flags; // 3.1.0 or higher
560 kXR_char expect; // 4.0.0 or higher
563
565 kXR_secreqs = 0x01, // Options: Return security requirements
566 kXR_ableTLS = 0x02, // Options: Client is TLS capable
567 kXR_wantTLS = 0x04, // Options: Change connection to use TLS
568 kXR_bifreqs = 0x08 // Options: Return bind interface requirements
570
572 kXR_ExpMask = 0x0f, // Isolate the relevant expect enumeration value
578 kXR_ExpGPFA = 0x08
580};
581
582/******************************************************************************/
583/* k X R _ p r e p a r e R e q u e s t */
584/******************************************************************************/
585
595
596 kXR_evict = 0x0001 // optionsX: file no longer useful
598
609
610/******************************************************************************/
611/* k X R _ q u e r y R e q u e s t */
612/******************************************************************************/
613
627
637
638/******************************************************************************/
639/* k X R _ r e a d R e q u e s t */
640/******************************************************************************/
641
651
652struct read_args {
655// This struct may be followed by an array of readahead_list
656};
657
663
664/******************************************************************************/
665/* k X R _ r e a d v R e q u e s t */
666/******************************************************************************/
667
674// This struct followed by the read_list
675};
676
677namespace XrdProto // Always use this namespace for new additions
678{
684static const int rlItemLen = sizeof(read_list);
685static const int maxRvecln = 16384;
686static const int maxRvecsz = maxRvecln/rlItemLen;
687}
688
689/******************************************************************************/
690/* k X R _ r m R e q u e s t */
691/******************************************************************************/
692
699
700/******************************************************************************/
701/* k X R _ r m d i r R e q u e s t */
702/******************************************************************************/
703
710
711/******************************************************************************/
712/* k X R _ s e t R e q u e s t */
713/******************************************************************************/
714
722
723/******************************************************************************/
724/* k X R _ s i g v e r R e q u e s t */
725/******************************************************************************/
726
727// Cryptography used for kXR_sigver SigverRequest::crypto
729 kXR_SHA256 = 0x01, // Hash used
730 kXR_HashMask = 0x0f, // Mak to extract the hash type
731 kXR_rsaKey = 0x80 // The rsa key was used
733
734// Flags for kXR_sigver
736 kXR_nodata = 1 // Request payload was not hashed
738
739// Version number
743
747 kXR_unt16 expectrid; // Request code of subsequent request
748 kXR_char version; // Security version being used (see XSecVersion)
749 kXR_char flags; // One or more flags defined in enum (see XSecFlags)
750 kXR_unt64 seqno; // Monotonically increasing number (part of hash)
751 kXR_char crypto; // Cryptography used (see XSecCrypto)
754};
755
756/******************************************************************************/
757/* k X R _ s t a t R e q u e s t */
758/******************************************************************************/
759
763
772
773/******************************************************************************/
774/* k X R _ s y n c R e q u e s t */
775/******************************************************************************/
776
784
785/******************************************************************************/
786/* k X R _ t r u n c a t e R e q u e s t */
787/******************************************************************************/
788
797
798/******************************************************************************/
799/* k X R _ w r i t e R e q u e s t */
800/******************************************************************************/
801
811
812/******************************************************************************/
813/* k X R _ w r i t e v R e q u e s t */
814/******************************************************************************/
815
819 kXR_char options; // See static const ints below
822// This struct followed by the write_list
823
824 static const kXR_int32 doSync = 0x01;
825};
826
827namespace XrdProto // Always use this namespace for new additions
828{
834static const int wlItemLen = sizeof(write_list);
835static const int maxWvecln = 16384;
836static const int maxWvecsz = maxWvecln/wlItemLen;
837}
838
839/******************************************************************************/
840/* U n i o n o f a l l C l i e n t R e q u e s t s */
841/******************************************************************************/
842
877
878typedef union {
879 struct ClientRequestHdr header;
880 struct ClientSigverRequest sigver;
882
883/******************************************************************************/
884/* S e r v e r R e s p o n s e s */
885/******************************************************************************/
886
887// Nice header for the server response.
888// Note that the protocol specifies these values to be in network
889// byte order when sent
890//
891// G.Ganis: The following structures never need padding bytes:
892// no need of packing options
893
894// Server response codes
895//
908
909// All serer responses start with the same header
910//
916
917// This is a bit of wierdness held over from the very old days, sigh.
918//
920 char data[4096];
921};
922
923/******************************************************************************/
924/* k X R _ a t t n R e s p o n s e */
925/******************************************************************************/
926
928 kXR_asyncab = 5000, // No longer supported
929 kXR_asyncdi, // 5001 No longer supported
931 kXR_asyncrd, // 5003 No longer supported
932 kXR_asyncwt, // 5004 No longer supported
933 kXR_asyncav, // 5005 No longer supported
934 kXR_asynunav, // 5006 No longer supported
935 kXR_asyncgo, // 5007 No longer supported
936 kXR_asynresp= 5008
938
940 kXR_int32 actnum; // See XActionCode enum
941 char parms[4096]; // Should be sufficient for every use
942};
943
945 kXR_int32 actnum; // XActionCode::kXR_asyncms
946 char reserved[4];
948 char respdata[4096];
949};
950
952 kXR_int32 actnum; // XActionCode::kXR_asynresp
953 char reserved[4];
955 char respdata[4096];
956};
957
958/******************************************************************************/
959/* k X R _ a u t h m o r e R e s p o n s e */
960/******************************************************************************/
961
963 char data[4096];
964};
965
966/******************************************************************************/
967/* k X R _ b i n d R e s p o n s e */
968/******************************************************************************/
969
973
974/******************************************************************************/
975/* k X R _ c h k p o i n t R e s p o n s e */
976/******************************************************************************/
977
978struct ServerResponseBody_ChkPoint { // Only for kXR_ckpQMax
979 kXR_unt32 maxCkpSize; // Maximum number of bytes including overhead
980 kXR_unt32 useCkpSize; // The number of bytes already being used
981};
982
983/******************************************************************************/
984/* k X R _ e r r o r R e s p o n s e */
985/******************************************************************************/
986
1026
1028 kXR_int32 errnum; // See XErrorCode enu
1029 char errmsg[4096]; // Should be sufficient for every use
1030};
1031
1032/******************************************************************************/
1033/* k X R _ l o g i n R e s p o n s e */
1034/******************************************************************************/
1035
1038 kXR_char sec[4096]; // Should be sufficient for every use
1039};
1040
1041/******************************************************************************/
1042/* k X R _ o p e n R e s p o n s e */
1043/******************************************************************************/
1044
1047 kXR_int32 cpsize; // cpsize & cptype returned if kXR_compress *or*
1048 kXR_char cptype[4]; // kXR_retstat is specified
1049}; // info will follow if kXR_retstat is specified
1050
1051/******************************************************************************/
1052/* k X R _ p g r e a d R e s p o n s e */
1053/******************************************************************************/
1054
1056 kXR_int64 offset; // info[]: File offset of data that follows
1057// kXR_char data[dlen];
1058};
1059
1060/******************************************************************************/
1061/* k X R _ p g w r i t e R e s p o n s e */
1062/******************************************************************************/
1063
1065 kXR_int64 offset; // info[]: File offset of data written
1066};
1067
1068
1069// The following structure is appended to ServerResponseBody_pgWrite if one or
1070// more checksum errors occurred and need to be retransmitted.
1071//
1073 kXR_unt32 cseCRC; // crc32c of all following bits
1074 kXR_int16 dlFirst; // Data length at first offset in list
1075 kXR_int16 dlLast; // Data length at last offset in list
1076// kXR_int64 bof[(dlen-8)/8]; // List of offsets of pages in error
1077};
1078
1079/******************************************************************************/
1080/* k X R _ p r o t o c o l R e s p o n s e */
1081/******************************************************************************/
1082
1083// The following information is returned in the response body when kXR_bifreqs
1084// is set in ClientProtocolRequest::flags. Note that the size of bifInfo is
1085// is variable. This response will not be returned if there are no bif's.
1086// Note: This structure is null byte padded to be a multiple of 8 bytes!
1087//
1089 kXR_char theTag; // Always the character 'B' to identify struct
1090 kXR_char rsvd; // Reserved for the future (always 0 for now)
1091 kXR_unt16 bifILen; // Length of bifInfo including null bytes.
1092// kXR_char bifInfo[bifILen];
1093};
1094
1095// The following information is returned in the response body when kXR_secreqs
1096// is set in ClientProtocolRequest::flags. Note that the size of secvec is
1097// defined by secvsz and will not be present when secvsz == 0.
1098//
1100 kXR_char reqindx; // Request index
1101 kXR_char reqsreq; // Request signing requirement
1102};
1103
1105 kXR_char theTag; // Always the character 'S' to identify struct
1106 kXR_char rsvd; // Reserved for the future (always 0 for now)
1107 kXR_char secver; // Security version
1108 kXR_char secopt; // Security options
1109 kXR_char seclvl; // Security level when secvsz == 0
1110 kXR_char secvsz; // Number of items in secvec (i.e. its length/2)
1112};
1113
1114
1115namespace XrdProto
1116{
1119}
1120
1121// Options reflected in protocol response ServerResponseReqs_Protocol::secopt
1122//
1123#define kXR_secOData 0x01
1124#define kXR_secOFrce 0x02
1125
1126// Security level definitions (these are predefined but can be over-ridden)
1127//
1128#define kXR_secNone 0
1129#define kXR_secCompatible 1
1130#define kXR_secStandard 2
1131#define kXR_secIntense 3
1132#define kXR_secPedantic 4
1133
1134// Requirements one of which set in each ServerResponseReqs_Protocol::secvec
1135//
1136#define kXR_signIgnore 0
1137#define kXR_signLikely 1
1138#define kXR_signNeeded 2
1139
1140// Version used for kXR_sigver and is set in SigverRequest::version,
1141// ServerResponseReqs_Protocol::secver
1142//
1143#define kXR_secver_0 0
1144
1145// KINDS of SERVERS (no longer used by new clients)
1146//
1147#define kXR_DataServer 1
1148#define kXR_LBalServer 0
1149
1150// The below are defined for protocol version 2.9.7 or higher
1151// These are the flag values in the kXR_protool response
1152//
1153#define kXR_isManager 0x00000002
1154#define kXR_isServer 0x00000001
1155#define kXR_attrMeta 0x00000100
1156#define kXR_attrProxy 0x00000200
1157#define kXR_attrSuper 0x00000400
1158#define kXR_attrVirtRdr 0x00000800
1159
1160// Virtual options set on redirect
1161//
1162#define kXR_recoverWrts 0x00001000
1163#define kXR_collapseRedir 0x00002000
1164#define kXR_ecRedir 0x00004000
1165
1166// Things the server supports
1167//
1168#define kXR_anongpf 0x00800000
1169#define kXR_supgpf 0x00400000
1170#define kXR_suppgrw 0x00200000
1171#define kXR_supposc 0x00100000
1172
1173// TLS requirements
1174//
1175#define kXR_haveTLS 0x80000000
1176#define kXR_gotoTLS 0x40000000
1177#define kXR_tlsAny 0x1f000000
1178#define kXR_tlsData 0x01000000
1179#define kXR_tlsGPF 0x02000000
1180#define kXR_tlsLogin 0x04000000
1181#define kXR_tlsSess 0x08000000
1182#define kXR_tlsTPC 0x10000000
1183#define kXR_tlsGPFA 0x20000000
1184
1185// Body for the kXR_protocol response... useful
1186//
1192
1193// Handy definition of the size of the protocol response when the security
1194// information is not present.
1195//
1196#define kXR_ShortProtRespLen sizeof(ServerResponseBody_Protocol)-\
1197 sizeof(ServerResponseReqs_Protocol)
1198
1199/******************************************************************************/
1200/* k X R _ r e d i r e c t R e s p o n s e */
1201/******************************************************************************/
1202
1205 char host[4096]; // Should be sufficient for every use
1206};
1207
1208/******************************************************************************/
1209/* k X R _ s t a t R e s p o n s e */
1210/******************************************************************************/
1211
1212// The following bits are encoded in the "flags" token in the response
1213//
1225
1226/******************************************************************************/
1227/* k X R _ s t a t u s R e s p o n s e */
1228/******************************************************************************/
1229
1230struct ServerResponseBody_Status { // Always preceeded by ServerResponseHeader
1231 kXR_unt32 crc32c; // IETF RFC 7143 standard
1232 kXR_char streamID[2]; // Identical to streamid[2] in ServerResponseHeader
1233 kXR_char requestid; // requestcode - kXR_1stRequest
1234 kXR_char resptype; // See RespType enum below
1237// kXR_char info[ServerResponseHeader::dlen-sizeof(ServerResponseBody_Status)];
1238// kXR_char data[dlen];
1239};
1240
1241namespace XrdProto
1242{
1249
1250 // This is the minimum size of ServerResponseHeader::dlen for kXR_status
1251 //
1253}
1254
1259
1260/******************************************************************************/
1261/* k X R _ w a i t R e s p o n s e */
1262/******************************************************************************/
1263
1266 char infomsg[4096]; // Should be sufficient for every use
1267};
1268
1269/******************************************************************************/
1270/* k X R _ w a i t r e s p R e s p o n s e */
1271/******************************************************************************/
1272
1276
1277/******************************************************************************/
1278/* 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 */
1279/******************************************************************************/
1280
1299
1300// The pgread and pgwrite do not fit the union above because they are composed
1301// of three structs not two as all the above. So, we define the exceptions here.
1302//
1312
1313struct ALIGN_CHECK {char chkszreq[25-sizeof(ClientRequest)];
1315};
1316
1317/******************************************************************************/
1318/* X P r o t o c o l U t i l i t i e s */
1319/******************************************************************************/
1320
1321#include <cerrno>
1322#if defined(WIN32)
1323#if !defined(ENOTBLK)
1324# define ENOTBLK 15
1325#endif
1326#if !defined(ETXTBSY)
1327#define ETXTBSY 26
1328#endif
1329#if !defined(ENOBUFS)
1330#define ENOBUFS 105
1331#endif
1332#if !defined(ENETUNREACH)
1333#define ENETUNREACH 114
1334#endif
1335#endif
1336
1337#ifndef ENOATTR
1338#define ENOATTR ENODATA
1339#endif
1340
1341#ifndef EBADRQC
1342#define EBADRQC EBADRPC
1343#endif
1344
1345#ifndef EAUTH
1346#define EAUTH EBADE
1347#endif
1348
1349struct stat;
1350
1352{
1353public:
1354
1355// mapError() is the official mapping from errno to xroot protocol error.
1356//
1357static int mapError(int rc)
1358 {if (rc < 0) rc = -rc;
1359 switch(rc)
1360 {case ENOENT: return kXR_NotFound;
1361 case EINVAL: return kXR_ArgInvalid;
1362 case EPERM: return kXR_NotAuthorized;
1363 case EACCES: return kXR_NotAuthorized;
1364 case EIO: return kXR_IOError;
1365 case ENOMEM: return kXR_NoMemory;
1366 case ENOBUFS: return kXR_NoMemory;
1367 case ENOSPC: return kXR_NoSpace;
1368 case ENAMETOOLONG: return kXR_ArgTooLong;
1369 case ENETUNREACH: return kXR_noserver;
1370 case ENOTBLK: return kXR_NotFile;
1371 case ENOTSUP: return kXR_Unsupported;
1372 case EISDIR: return kXR_isDirectory;
1373 case ENOTEMPTY: [[fallthrough]];
1374 // In the case one tries to delete a non-empty directory
1375 // we have decided that until the next major release
1376 // the kXR_ItExists flag will be returned
1377 case EEXIST:
1378 return kXR_ItExists;
1379 case EBADRQC: return kXR_InvalidRequest;
1380 case ETXTBSY: return kXR_inProgress;
1381 case ENODEV: return kXR_FSError;
1382 case EFAULT: return kXR_ServerError;
1383 case EDOM: return kXR_ChkSumErr;
1384 case EDQUOT: return kXR_overQuota;
1385 case EILSEQ: return kXR_SigVerErr;
1386 case ERANGE: return kXR_DecryptErr;
1387 case EUSERS: return kXR_Overloaded;
1388 case EROFS: return kXR_fsReadOnly;
1389 case ENOATTR: return kXR_AttrNotFound;
1390 case EPROTOTYPE: return kXR_TLSRequired;
1391 case EADDRNOTAVAIL: return kXR_noReplicas;
1392 case EAUTH: return kXR_AuthFailed;
1393 case EIDRM: return kXR_Impossible;
1394 case ENOTTY: return kXR_Conflict;
1395 case ETOOMANYREFS: return kXR_TooManyErrs;
1396 case ETIMEDOUT: return kXR_ReqTimedOut;
1397 case EBADF: return kXR_FileNotOpen;
1398 case ECANCELED: return kXR_Cancelled;
1399 default: return kXR_FSError;
1400 }
1401 }
1402
1403static int toErrno( int xerr )
1404{
1405 switch(xerr)
1406 {case kXR_ArgInvalid: return EINVAL;
1407 case kXR_ArgMissing: return EINVAL;
1408 case kXR_ArgTooLong: return ENAMETOOLONG;
1409 case kXR_FileLocked: return EDEADLK;
1410 case kXR_FileNotOpen: return EBADF;
1411 case kXR_FSError: return ENODEV;
1412 case kXR_InvalidRequest:return EBADRQC;
1413 case kXR_IOError: return EIO;
1414 case kXR_NoMemory: return ENOMEM;
1415 case kXR_NoSpace: return ENOSPC;
1416 case kXR_NotAuthorized: return EACCES;
1417 case kXR_NotFound: return ENOENT;
1418 case kXR_ServerError: return EFAULT;
1419 case kXR_Unsupported: return ENOTSUP;
1420 case kXR_noserver: return EHOSTUNREACH;
1421 case kXR_NotFile: return ENOTBLK;
1422 case kXR_isDirectory: return EISDIR;
1423 case kXR_Cancelled: return ECANCELED;
1424 case kXR_ItExists: return EEXIST;
1425 case kXR_ChkSumErr: return EDOM;
1426 case kXR_inProgress: return EINPROGRESS;
1427 case kXR_overQuota: return EDQUOT;
1428 case kXR_SigVerErr: return EILSEQ;
1429 case kXR_DecryptErr: return ERANGE;
1430 case kXR_Overloaded: return EUSERS;
1431 case kXR_fsReadOnly: return EROFS;
1432 case kXR_BadPayload: return EINVAL;
1433 case kXR_AttrNotFound: return ENOATTR;
1434 case kXR_TLSRequired: return EPROTOTYPE;
1435 case kXR_noReplicas: return EADDRNOTAVAIL;
1436 case kXR_AuthFailed: return EAUTH;
1437 case kXR_Impossible: return EIDRM;
1438 case kXR_Conflict: return ENOTTY;
1439 case kXR_TooManyErrs: return ETOOMANYREFS;
1440 case kXR_ReqTimedOut: return ETIMEDOUT;
1441 default: return ENOMSG;
1442 }
1443}
1444
1445static const char *errName(kXR_int32 errCode);
1446
1447static const char *reqName(kXR_unt16 reqCode);
1448
1449/******************************************************************************/
1450/* O b s o l e t e D e f i n i t i o n s */
1451/******************************************************************************/
1452
1458
1459struct ServerResponseBody_Attn_asyncrd { // No longer supported
1462 char host[4092];
1463};
1464
1469
1470// Kind of error inside a XTNetFile's routine (temporary)
1471//
1473 kGENERICERR = 0, // Generic error
1474 kREAD, // Error while reading from stream
1475 kWRITE, // Error while writing to stream
1476 kREDIRCONNECT, // Error redirecting to a given host
1477 kOK, // Everything seems ok
1478 kNOMORESTREAMS // No more available stream IDs for
1479 // async processing
1481
1483
1484#define kXR_maxReqRetry 10
1485
1486}; // XProtocol
1487#endif
static const int kXR_ckpRollback
Definition XProtocol.hh:215
XActionCode
Definition XProtocol.hh:927
@ kXR_asyncgo
Definition XProtocol.hh:935
@ kXR_asyncwt
Definition XProtocol.hh:932
@ kXR_asynunav
Definition XProtocol.hh:934
@ kXR_asynresp
Definition XProtocol.hh:936
@ kXR_asyncav
Definition XProtocol.hh:933
@ kXR_asyncms
Definition XProtocol.hh:930
@ kXR_asyncab
Definition XProtocol.hh:928
@ kXR_asyncrd
Definition XProtocol.hh:931
@ kXR_asyncdi
Definition XProtocol.hh:929
XErrorCode
Definition XProtocol.hh:987
@ kXR_ArgInvalid
Definition XProtocol.hh:988
@ kXR_InvalidRequest
Definition XProtocol.hh:994
@ kXR_ArgMissing
Definition XProtocol.hh:989
@ kXR_fsReadOnly
Definition XProtocol.hh:1013
@ kXR_Impossible
Definition XProtocol.hh:1019
@ kXR_TLSRequired
Definition XProtocol.hh:1016
@ kXR_SigVerErr
Definition XProtocol.hh:1010
@ kXR_TooManyErrs
Definition XProtocol.hh:1021
@ kXR_AttrNotFound
Definition XProtocol.hh:1015
@ kXR_ItExists
Definition XProtocol.hh:1006
@ kXR_AuthFailed
Definition XProtocol.hh:1018
@ kXR_NotAuthorized
Definition XProtocol.hh:998
@ kXR_NotFound
Definition XProtocol.hh:999
@ kXR_FileLocked
Definition XProtocol.hh:991
@ kXR_ERRFENCE
Definition XProtocol.hh:1023
@ kXR_noErrorYet
Definition XProtocol.hh:1024
@ kXR_ChkSumErr
Definition XProtocol.hh:1007
@ kXR_DecryptErr
Definition XProtocol.hh:1011
@ kXR_overQuota
Definition XProtocol.hh:1009
@ kXR_BadPayload
Definition XProtocol.hh:1014
@ kXR_NoSpace
Definition XProtocol.hh:997
@ kXR_FileNotOpen
Definition XProtocol.hh:992
@ kXR_isDirectory
Definition XProtocol.hh:1004
@ kXR_noReplicas
Definition XProtocol.hh:1017
@ kXR_inProgress
Definition XProtocol.hh:1008
@ kXR_NotFile
Definition XProtocol.hh:1003
@ kXR_Unsupported
Definition XProtocol.hh:1001
@ kXR_Cancelled
Definition XProtocol.hh:1005
@ kXR_Conflict
Definition XProtocol.hh:1020
@ kXR_ServerError
Definition XProtocol.hh:1000
@ kXR_Overloaded
Definition XProtocol.hh:1012
@ kXR_ArgTooLong
Definition XProtocol.hh:990
@ kXR_noserver
Definition XProtocol.hh:1002
@ kXR_ReqTimedOut
Definition XProtocol.hh:1022
@ kXR_IOError
Definition XProtocol.hh:995
@ kXR_FSError
Definition XProtocol.hh:993
@ kXR_NoMemory
Definition XProtocol.hh:996
XLoginAbility2
Definition XProtocol.hh:369
@ kXR_empty
Definition XProtocol.hh:370
@ kXR_ecredir
Definition XProtocol.hh:371
xfaSubCode
Definition XProtocol.hh:269
@ kXR_fattrDel
Definition XProtocol.hh:270
@ kXR_fattrSet
Definition XProtocol.hh:273
@ kXR_fattrList
Definition XProtocol.hh:272
@ kXR_fattrGet
Definition XProtocol.hh:271
@ kXR_fatrrMaxSC
Definition XProtocol.hh:274
static const int kXR_ckpMinMax
Definition XProtocol.hh:220
#define EAUTH
Definition XProtocol.hh:1346
XVirtRequestTypes
Definition XProtocol.hh:149
@ kXR_virtReadv
Definition XProtocol.hh:150
static const int kXR_ckpXeq
Definition XProtocol.hh:216
#define ENOATTR
Definition XProtocol.hh:1338
XOpenRequestOption
Definition XProtocol.hh:451
@ kXR_open_wrto
Definition XProtocol.hh:469
@ kXR_compress
Definition XProtocol.hh:452
@ kXR_async
Definition XProtocol.hh:458
@ kXR_delete
Definition XProtocol.hh:453
@ kXR_prefname
Definition XProtocol.hh:461
@ kXR_nowait
Definition XProtocol.hh:467
@ kXR_open_read
Definition XProtocol.hh:456
@ kXR_open_updt
Definition XProtocol.hh:457
@ kXR_mkpath
Definition XProtocol.hh:460
@ kXR_seqio
Definition XProtocol.hh:468
@ kXR_replica
Definition XProtocol.hh:465
@ kXR_posc
Definition XProtocol.hh:466
@ kXR_refresh
Definition XProtocol.hh:459
@ kXR_new
Definition XProtocol.hh:455
@ kXR_force
Definition XProtocol.hh:454
@ kXR_4dirlist
Definition XProtocol.hh:464
@ kXR_open_apnd
Definition XProtocol.hh:462
@ kXR_retstat
Definition XProtocol.hh:463
XResponseType
Definition XProtocol.hh:896
@ kXR_noResponsesYet
Definition XProtocol.hh:906
@ kXR_waitresp
Definition XProtocol.hh:904
@ kXR_redirect
Definition XProtocol.hh:902
@ kXR_oksofar
Definition XProtocol.hh:898
@ kXR_status
Definition XProtocol.hh:905
@ kXR_ok
Definition XProtocol.hh:897
@ kXR_authmore
Definition XProtocol.hh:900
@ kXR_attn
Definition XProtocol.hh:899
@ kXR_wait
Definition XProtocol.hh:903
@ kXR_error
Definition XProtocol.hh:901
XDirlistRequestOption
Definition XProtocol.hh:238
@ kXR_dstat
Definition XProtocol.hh:240
@ kXR_dcksm
Definition XProtocol.hh:241
@ kXR_online
Definition XProtocol.hh:239
XRequestTypes
Definition XProtocol.hh:110
@ kXR_read
Definition XProtocol.hh:125
@ kXR_open
Definition XProtocol.hh:122
@ kXR_writev
Definition XProtocol.hh:143
@ kXR_readv
Definition XProtocol.hh:137
@ kXR_mkdir
Definition XProtocol.hh:120
@ kXR_sync
Definition XProtocol.hh:128
@ kXR_REQFENCE
Definition XProtocol.hh:144
@ kXR_chmod
Definition XProtocol.hh:114
@ kXR_bind
Definition XProtocol.hh:136
@ kXR_dirlist
Definition XProtocol.hh:116
@ kXR_sigver
Definition XProtocol.hh:141
@ kXR_fattr
Definition XProtocol.hh:132
@ kXR_rm
Definition XProtocol.hh:126
@ kXR_query
Definition XProtocol.hh:113
@ kXR_write
Definition XProtocol.hh:131
@ kXR_gpfile
Definition XProtocol.hh:117
@ kXR_login
Definition XProtocol.hh:119
@ kXR_auth
Definition XProtocol.hh:112
@ kXR_endsess
Definition XProtocol.hh:135
@ kXR_set
Definition XProtocol.hh:130
@ kXR_rmdir
Definition XProtocol.hh:127
@ kXR_1stRequest
Definition XProtocol.hh:111
@ kXR_statx
Definition XProtocol.hh:134
@ kXR_truncate
Definition XProtocol.hh:140
@ kXR_protocol
Definition XProtocol.hh:118
@ kXR_mv
Definition XProtocol.hh:121
@ kXR_ping
Definition XProtocol.hh:123
@ kXR_stat
Definition XProtocol.hh:129
@ kXR_pgread
Definition XProtocol.hh:142
@ kXR_chkpoint
Definition XProtocol.hh:124
@ kXR_locate
Definition XProtocol.hh:139
@ kXR_close
Definition XProtocol.hh:115
@ kXR_pgwrite
Definition XProtocol.hh:138
@ kXR_prepare
Definition XProtocol.hh:133
XSecVersion
Definition XProtocol.hh:740
@ kXR_Ver_00
Definition XProtocol.hh:741
xfaLimits
Definition XProtocol.hh:279
@ kXR_faMaxVars
Definition XProtocol.hh:280
@ kXR_faMaxVlen
Definition XProtocol.hh:282
@ kXR_faMaxNlen
Definition XProtocol.hh:281
XLoginCapVer
Definition XProtocol.hh:375
@ kXR_vermask
Definition XProtocol.hh:377
@ kXR_asyncap
Definition XProtocol.hh:378
@ kXR_lcvnone
Definition XProtocol.hh:376
static const int kXR_ckpCommit
Definition XProtocol.hh:213
XStatRequestOption
Definition XProtocol.hh:760
@ kXR_vfs
Definition XProtocol.hh:761
XMkdirOptions
Definition XProtocol.hh:408
@ kXR_mkdirpath
Definition XProtocol.hh:410
@ kXR_mknone
Definition XProtocol.hh:409
XPrepRequestOption
Definition XProtocol.hh:586
@ kXR_wmode
Definition XProtocol.hh:591
@ kXR_evict
Definition XProtocol.hh:596
@ kXR_usetcp
Definition XProtocol.hh:594
@ kXR_cancel
Definition XProtocol.hh:587
@ kXR_fresh
Definition XProtocol.hh:593
@ kXR_notify
Definition XProtocol.hh:588
@ kXR_coloc
Definition XProtocol.hh:592
@ kXR_stage
Definition XProtocol.hh:590
@ kXR_noerrs
Definition XProtocol.hh:589
static const int kXR_ckpQuery
Definition XProtocol.hh:214
#define EBADRQC
Definition XProtocol.hh:1342
XSecFlags
Definition XProtocol.hh:735
@ kXR_nodata
Definition XProtocol.hh:736
XOpenRequestOption2
Definition XProtocol.hh:472
@ kXR_dup
Definition XProtocol.hh:473
@ kXR_samefs
Definition XProtocol.hh:474
XOpenRequestMode
Definition XProtocol.hh:439
@ kXR_gw
Definition XProtocol.hh:444
@ kXR_ur
Definition XProtocol.hh:440
@ kXR_uw
Definition XProtocol.hh:441
@ kXR_gr
Definition XProtocol.hh:443
@ kXR_ow
Definition XProtocol.hh:447
@ kXR_gx
Definition XProtocol.hh:445
@ kXR_or
Definition XProtocol.hh:446
@ kXR_ox
Definition XProtocol.hh:448
@ kXR_ux
Definition XProtocol.hh:442
XStatRespFlags
Definition XProtocol.hh:1214
@ kXR_readable
Definition XProtocol.hh:1220
@ kXR_file
Definition XProtocol.hh:1215
@ kXR_isDir
Definition XProtocol.hh:1217
@ kXR_offline
Definition XProtocol.hh:1219
@ kXR_bkpexist
Definition XProtocol.hh:1223
@ kXR_other
Definition XProtocol.hh:1218
@ kXR_poscpend
Definition XProtocol.hh:1222
@ kXR_writable
Definition XProtocol.hh:1221
@ kXR_xset
Definition XProtocol.hh:1216
XQueryType
Definition XProtocol.hh:614
@ kXR_QPrep
Definition XProtocol.hh:616
@ kXR_Qopaqug
Definition XProtocol.hh:625
@ kXR_Qconfig
Definition XProtocol.hh:621
@ kXR_Qopaquf
Definition XProtocol.hh:624
@ kXR_Qckscan
Definition XProtocol.hh:620
@ kXR_Qxattr
Definition XProtocol.hh:618
@ kXR_Qspace
Definition XProtocol.hh:619
@ kXR_Qvisa
Definition XProtocol.hh:622
@ kXR_QStats
Definition XProtocol.hh:615
@ kXR_Qcksum
Definition XProtocol.hh:617
@ kXR_Qopaque
Definition XProtocol.hh:623
XLoginVersion
Definition XProtocol.hh:383
@ kXR_ver005
Definition XProtocol.hh:389
@ kXR_ver001
Definition XProtocol.hh:385
@ kXR_ver003
Definition XProtocol.hh:387
@ kXR_ver000
Definition XProtocol.hh:384
@ kXR_ver004
Definition XProtocol.hh:388
@ kXR_ver002
Definition XProtocol.hh:386
XLoginAbility
Definition XProtocol.hh:356
@ kXR_readrdok
Definition XProtocol.hh:360
@ kXR_fullurl
Definition XProtocol.hh:358
@ kXR_onlyprv4
Definition XProtocol.hh:362
@ kXR_lclfile
Definition XProtocol.hh:364
@ kXR_multipr
Definition XProtocol.hh:359
@ kXR_nothing
Definition XProtocol.hh:357
@ kXR_redirflags
Definition XProtocol.hh:365
@ kXR_hasipv64
Definition XProtocol.hh:361
@ kXR_onlyprv6
Definition XProtocol.hh:363
XSecCrypto
Definition XProtocol.hh:728
@ kXR_SHA256
Definition XProtocol.hh:729
@ kXR_HashMask
Definition XProtocol.hh:730
@ kXR_rsaKey
Definition XProtocol.hh:731
static const int kXR_ckpBegin
Definition XProtocol.hh:212
unsigned long long kXR_unt64
Definition XPtypes.hh:99
long long kXR_int64
Definition XPtypes.hh:98
int kXR_int32
Definition XPtypes.hh:89
unsigned int kXR_unt32
Definition XPtypes.hh:90
short kXR_int16
Definition XPtypes.hh:66
unsigned short kXR_unt16
Definition XPtypes.hh:67
unsigned char kXR_char
Definition XPtypes.hh:65
#define close(a)
Definition XrdPosix.hh:43
#define rmdir(a)
Definition XrdPosix.hh:92
#define write(a, b, c)
Definition XrdPosix.hh:110
#define mkdir(a, b)
Definition XrdPosix.hh:69
#define open
Definition XrdPosix.hh:71
#define writev(a, b, c)
Definition XrdPosix.hh:112
#define readv(a, b, c)
Definition XrdPosix.hh:79
#define stat(a, b)
Definition XrdPosix.hh:96
#define truncate(a, b)
Definition XrdPosix.hh:106
#define read(a, b, c)
Definition XrdPosix.hh:77
Definition XProtocol.hh:1352
static int toErrno(int xerr)
Definition XProtocol.hh:1403
XReqErrorType
Definition XProtocol.hh:1472
@ kGENERICERR
Definition XProtocol.hh:1473
@ kWRITE
Definition XProtocol.hh:1475
@ kREAD
Definition XProtocol.hh:1474
@ kREDIRCONNECT
Definition XProtocol.hh:1476
@ kOK
Definition XProtocol.hh:1477
@ kNOMORESTREAMS
Definition XProtocol.hh:1478
kXR_int32 ServerResponseType
Definition XProtocol.hh:1482
static const char * errName(kXR_int32 errCode)
static int mapError(int rc)
Definition XProtocol.hh:1357
static const char * reqName(kXR_unt16 reqCode)
Definition XProtocol.hh:493
static const int kXR_pgUnitSZ
Definition XProtocol.hh:496
static const int kXR_statusBodyLen
Definition XProtocol.hh:1252
static const int kXR_pgPageSZ
Definition XProtocol.hh:494
static const int wlItemLen
Definition XProtocol.hh:834
RespType
Definition XProtocol.hh:1243
@ kXR_ProgressInfo
Definition XProtocol.hh:1247
@ kXR_PartialResult
Definition XProtocol.hh:1246
@ kXR_FinalResult
Definition XProtocol.hh:1245
static const int maxRvecln
Definition XProtocol.hh:685
static const int maxRvecsz
Definition XProtocol.hh:686
static const kXR_char kXR_AnyPath
Definition XProtocol.hh:502
static const int kXR_pgMaxEpr
Definition XProtocol.hh:497
static const int maxWvecsz
Definition XProtocol.hh:836
static const int maxWvecln
Definition XProtocol.hh:835
static const int kXR_pgPageBL
Definition XProtocol.hh:495
static const int kXR_pgMaxEos
Definition XProtocol.hh:498
static const int rlItemLen
Definition XProtocol.hh:684
static const int kXR_pgRetry
Definition XProtocol.hh:503
Definition XProtocol.hh:1313
char chkszreq[25-sizeof(ClientRequest)]
Definition XProtocol.hh:1313
char chkszrsp[9-sizeof(ServerResponseHeader)]
Definition XProtocol.hh:1314
Definition XProtocol.hh:166
kXR_int32 dlen
Definition XProtocol.hh:171
kXR_char streamid[2]
Definition XProtocol.hh:167
kXR_char credtype[4]
Definition XProtocol.hh:170
kXR_char reserved[12]
Definition XProtocol.hh:169
kXR_unt16 requestid
Definition XProtocol.hh:168
Definition XProtocol.hh:178
kXR_int32 dlen
Definition XProtocol.hh:182
kXR_char streamid[2]
Definition XProtocol.hh:179
kXR_char sessid[16]
Definition XProtocol.hh:181
kXR_unt16 requestid
Definition XProtocol.hh:180
Definition XProtocol.hh:201
kXR_unt16 requestid
Definition XProtocol.hh:203
kXR_char streamid[2]
Definition XProtocol.hh:202
kXR_char opcode
Definition XProtocol.hh:206
kXR_int32 dlen
Definition XProtocol.hh:207
kXR_char fhandle[4]
Definition XProtocol.hh:204
kXR_char reserved[11]
Definition XProtocol.hh:205
Definition XProtocol.hh:189
kXR_unt16 mode
Definition XProtocol.hh:193
kXR_char reserved[14]
Definition XProtocol.hh:192
kXR_int32 dlen
Definition XProtocol.hh:194
kXR_unt16 requestid
Definition XProtocol.hh:191
kXR_char streamid[2]
Definition XProtocol.hh:190
Definition XProtocol.hh:226
kXR_char reserved[12]
Definition XProtocol.hh:230
kXR_unt16 requestid
Definition XProtocol.hh:228
kXR_char streamid[2]
Definition XProtocol.hh:227
kXR_int32 dlen
Definition XProtocol.hh:231
kXR_char fhandle[4]
Definition XProtocol.hh:229
Definition XProtocol.hh:244
kXR_char options[1]
Definition XProtocol.hh:248
kXR_unt16 requestid
Definition XProtocol.hh:246
kXR_char streamid[2]
Definition XProtocol.hh:245
kXR_char reserved[15]
Definition XProtocol.hh:247
kXR_int32 dlen
Definition XProtocol.hh:249
Definition XProtocol.hh:256
kXR_unt16 requestid
Definition XProtocol.hh:258
kXR_char sessid[16]
Definition XProtocol.hh:259
kXR_int32 dlen
Definition XProtocol.hh:260
kXR_char streamid[2]
Definition XProtocol.hh:257
Definition XProtocol.hh:285
kXR_char numattr
Definition XProtocol.hh:290
static char * VVecRead(char *buffer, kXR_int32 &len)
static char * VVecInsert(const char *value, char *buffer)
static char * NVecRead(char *buffer, char *&name)
static const int aData
Definition XProtocol.hh:298
static const int isNew
Definition XProtocol.hh:297
kXR_char fhandle[4]
Definition XProtocol.hh:288
kXR_char reserved[9]
Definition XProtocol.hh:292
static char * NVecInsert(const char *name, char *buffer)
kXR_char subcode
Definition XProtocol.hh:289
kXR_char streamid[2]
Definition XProtocol.hh:286
kXR_unt16 requestid
Definition XProtocol.hh:287
static char * VVecRead(char *buffer, kXR_int32 len, char *&value)
kXR_int32 dlen
Definition XProtocol.hh:293
kXR_char options
Definition XProtocol.hh:291
static char * NVecRead(char *buffer, kXR_unt16 &rc)
Definition XProtocol.hh:330
kXR_char reserved[8]
Definition XProtocol.hh:334
kXR_unt16 requestid
Definition XProtocol.hh:332
kXR_char streamid[2]
Definition XProtocol.hh:331
kXR_int32 options
Definition XProtocol.hh:333
kXR_int32 buffsz
Definition XProtocol.hh:335
kXR_int32 dlen
Definition XProtocol.hh:336
Definition XProtocol.hh:83
kXR_int32 fourth
Definition XProtocol.hh:87
kXR_int32 first
Definition XProtocol.hh:84
kXR_int32 fifth
Definition XProtocol.hh:88
kXR_int32 third
Definition XProtocol.hh:86
kXR_int32 second
Definition XProtocol.hh:85
Definition XProtocol.hh:343
kXR_char streamid[2]
Definition XProtocol.hh:344
kXR_unt16 requestid
Definition XProtocol.hh:345
kXR_char reserved[14]
Definition XProtocol.hh:347
kXR_int32 dlen
Definition XProtocol.hh:348
kXR_unt16 options
Definition XProtocol.hh:346
Definition XProtocol.hh:392
kXR_int32 pid
Definition XProtocol.hh:395
kXR_unt16 requestid
Definition XProtocol.hh:394
kXR_char streamid[2]
Definition XProtocol.hh:393
kXR_char reserved2
Definition XProtocol.hh:400
kXR_char ability2
Definition XProtocol.hh:397
kXR_char username[8]
Definition XProtocol.hh:396
kXR_char ability
Definition XProtocol.hh:398
kXR_int32 dlen
Definition XProtocol.hh:401
kXR_char capver[1]
Definition XProtocol.hh:399
Definition XProtocol.hh:413
kXR_unt16 mode
Definition XProtocol.hh:418
kXR_char streamid[2]
Definition XProtocol.hh:414
kXR_unt16 requestid
Definition XProtocol.hh:415
kXR_char options[1]
Definition XProtocol.hh:416
kXR_char reserved[13]
Definition XProtocol.hh:417
kXR_int32 dlen
Definition XProtocol.hh:419
Definition XProtocol.hh:426
kXR_int16 arg1len
Definition XProtocol.hh:430
kXR_char streamid[2]
Definition XProtocol.hh:427
kXR_int32 dlen
Definition XProtocol.hh:431
kXR_unt16 requestid
Definition XProtocol.hh:428
kXR_char reserved[14]
Definition XProtocol.hh:429
Definition XProtocol.hh:477
kXR_unt16 requestid
Definition XProtocol.hh:479
kXR_unt16 options
Definition XProtocol.hh:481
kXR_int32 dlen
Definition XProtocol.hh:483
kXR_unt16 mode
Definition XProtocol.hh:480
kXR_char reserved[12]
Definition XProtocol.hh:482
kXR_char streamid[2]
Definition XProtocol.hh:478
Definition XProtocol.hh:515
kXR_char pathid
Definition XProtocol.hh:516
kXR_char reqflags
Definition XProtocol.hh:517
Definition XProtocol.hh:506
kXR_int32 dlen
Definition XProtocol.hh:512
kXR_char streamid[2]
Definition XProtocol.hh:507
kXR_int32 rlen
Definition XProtocol.hh:511
kXR_char fhandle[4]
Definition XProtocol.hh:509
kXR_int64 offset
Definition XProtocol.hh:510
kXR_unt16 requestid
Definition XProtocol.hh:508
Definition XProtocol.hh:528
kXR_char fhandle[4]
Definition XProtocol.hh:531
kXR_char streamid[2]
Definition XProtocol.hh:529
kXR_char reserved[2]
Definition XProtocol.hh:535
kXR_int64 offset
Definition XProtocol.hh:532
kXR_char pathid
Definition XProtocol.hh:533
kXR_unt16 requestid
Definition XProtocol.hh:530
kXR_char reqflags
Definition XProtocol.hh:534
kXR_int32 dlen
Definition XProtocol.hh:536
Definition XProtocol.hh:544
kXR_unt16 requestid
Definition XProtocol.hh:546
kXR_char streamid[2]
Definition XProtocol.hh:545
kXR_int32 dlen
Definition XProtocol.hh:548
kXR_char reserved[16]
Definition XProtocol.hh:547
Definition XProtocol.hh:599
kXR_unt16 requestid
Definition XProtocol.hh:601
kXR_int32 dlen
Definition XProtocol.hh:607
kXR_char reserved[10]
Definition XProtocol.hh:606
kXR_unt16 optionX
Definition XProtocol.hh:605
kXR_char options
Definition XProtocol.hh:602
kXR_unt16 port
Definition XProtocol.hh:604
kXR_char streamid[2]
Definition XProtocol.hh:600
kXR_char prty
Definition XProtocol.hh:603
Definition XProtocol.hh:555
RequestFlags
Definition XProtocol.hh:564
@ kXR_secreqs
Definition XProtocol.hh:565
@ kXR_bifreqs
Definition XProtocol.hh:568
@ kXR_wantTLS
Definition XProtocol.hh:567
@ kXR_ableTLS
Definition XProtocol.hh:566
kXR_char expect
Definition XProtocol.hh:560
kXR_char reserved[10]
Definition XProtocol.hh:561
kXR_int32 clientpv
Definition XProtocol.hh:558
kXR_unt16 requestid
Definition XProtocol.hh:557
ExpectFlags
Definition XProtocol.hh:571
@ kXR_ExpGPF
Definition XProtocol.hh:575
@ kXR_ExpTPC
Definition XProtocol.hh:577
@ kXR_ExpNone
Definition XProtocol.hh:573
@ kXR_ExpMask
Definition XProtocol.hh:572
@ kXR_ExpLogin
Definition XProtocol.hh:576
@ kXR_ExpBind
Definition XProtocol.hh:574
@ kXR_ExpGPFA
Definition XProtocol.hh:578
kXR_char flags
Definition XProtocol.hh:559
kXR_int32 dlen
Definition XProtocol.hh:562
kXR_char streamid[2]
Definition XProtocol.hh:556
Definition XProtocol.hh:628
kXR_unt16 requestid
Definition XProtocol.hh:630
kXR_int32 dlen
Definition XProtocol.hh:635
kXR_char reserved1[2]
Definition XProtocol.hh:632
kXR_unt16 infotype
Definition XProtocol.hh:631
kXR_char reserved2[8]
Definition XProtocol.hh:634
kXR_char fhandle[4]
Definition XProtocol.hh:633
kXR_char streamid[2]
Definition XProtocol.hh:629
Definition XProtocol.hh:642
kXR_int64 offset
Definition XProtocol.hh:646
kXR_unt16 requestid
Definition XProtocol.hh:644
kXR_char streamid[2]
Definition XProtocol.hh:643
kXR_char fhandle[4]
Definition XProtocol.hh:645
kXR_int32 dlen
Definition XProtocol.hh:648
kXR_int32 rlen
Definition XProtocol.hh:647
Definition XProtocol.hh:668
kXR_char reserved[15]
Definition XProtocol.hh:671
kXR_unt16 requestid
Definition XProtocol.hh:670
kXR_char streamid[2]
Definition XProtocol.hh:669
kXR_int32 dlen
Definition XProtocol.hh:673
kXR_char pathid
Definition XProtocol.hh:672
Definition XProtocol.hh:155
kXR_char body[16]
Definition XProtocol.hh:158
kXR_char streamid[2]
Definition XProtocol.hh:156
kXR_unt16 requestid
Definition XProtocol.hh:157
kXR_int32 dlen
Definition XProtocol.hh:159
Definition XProtocol.hh:693
kXR_char reserved[16]
Definition XProtocol.hh:696
kXR_int32 dlen
Definition XProtocol.hh:697
kXR_char streamid[2]
Definition XProtocol.hh:694
kXR_unt16 requestid
Definition XProtocol.hh:695
Definition XProtocol.hh:704
kXR_int32 dlen
Definition XProtocol.hh:708
kXR_char streamid[2]
Definition XProtocol.hh:705
kXR_unt16 requestid
Definition XProtocol.hh:706
kXR_char reserved[16]
Definition XProtocol.hh:707
Definition XProtocol.hh:715
kXR_char streamid[2]
Definition XProtocol.hh:716
kXR_unt16 requestid
Definition XProtocol.hh:717
kXR_int32 dlen
Definition XProtocol.hh:720
kXR_char modifier
Definition XProtocol.hh:719
kXR_char reserved[15]
Definition XProtocol.hh:718
Definition XProtocol.hh:744
kXR_char streamid[2]
Definition XProtocol.hh:745
kXR_unt16 requestid
Definition XProtocol.hh:746
kXR_char crypto
Definition XProtocol.hh:751
kXR_char rsvd2[3]
Definition XProtocol.hh:752
kXR_unt16 expectrid
Definition XProtocol.hh:747
kXR_unt64 seqno
Definition XProtocol.hh:750
kXR_char flags
Definition XProtocol.hh:749
kXR_int32 dlen
Definition XProtocol.hh:753
kXR_char version
Definition XProtocol.hh:748
Definition XProtocol.hh:764
kXR_char streamid[2]
Definition XProtocol.hh:765
kXR_char fhandle[4]
Definition XProtocol.hh:769
kXR_char reserved[11]
Definition XProtocol.hh:768
kXR_unt16 requestid
Definition XProtocol.hh:766
kXR_int32 dlen
Definition XProtocol.hh:770
kXR_char options
Definition XProtocol.hh:767
Definition XProtocol.hh:777
kXR_char reserved[12]
Definition XProtocol.hh:781
kXR_char fhandle[4]
Definition XProtocol.hh:780
kXR_char streamid[2]
Definition XProtocol.hh:778
kXR_int32 dlen
Definition XProtocol.hh:782
kXR_unt16 requestid
Definition XProtocol.hh:779
Definition XProtocol.hh:789
kXR_unt16 requestid
Definition XProtocol.hh:791
kXR_int64 offset
Definition XProtocol.hh:793
kXR_char fhandle[4]
Definition XProtocol.hh:792
kXR_int32 dlen
Definition XProtocol.hh:795
kXR_char reserved[4]
Definition XProtocol.hh:794
kXR_char streamid[2]
Definition XProtocol.hh:790
Definition XProtocol.hh:802
kXR_unt16 requestid
Definition XProtocol.hh:804
kXR_char reserved[3]
Definition XProtocol.hh:808
kXR_char fhandle[4]
Definition XProtocol.hh:805
kXR_char streamid[2]
Definition XProtocol.hh:803
kXR_char pathid
Definition XProtocol.hh:807
kXR_int32 dlen
Definition XProtocol.hh:809
kXR_int64 offset
Definition XProtocol.hh:806
Definition XProtocol.hh:816
kXR_char streamid[2]
Definition XProtocol.hh:817
kXR_int32 dlen
Definition XProtocol.hh:821
kXR_char reserved[15]
Definition XProtocol.hh:820
kXR_unt16 requestid
Definition XProtocol.hh:818
static const kXR_int32 doSync
Definition XProtocol.hh:824
kXR_char options
Definition XProtocol.hh:819
Definition XProtocol.hh:93
kXR_int32 msglen
Definition XProtocol.hh:94
kXR_int32 protover
Definition XProtocol.hh:95
kXR_int32 msgval
Definition XProtocol.hh:96
Definition XProtocol.hh:1088
kXR_unt16 bifILen
Definition XProtocol.hh:1091
kXR_char theTag
Definition XProtocol.hh:1089
kXR_char rsvd
Definition XProtocol.hh:1090
Definition XProtocol.hh:944
char respdata[4096]
Definition XProtocol.hh:948
ServerResponseHeader resphdr
Definition XProtocol.hh:947
char reserved[4]
Definition XProtocol.hh:946
kXR_int32 actnum
Definition XProtocol.hh:945
Definition XProtocol.hh:951
char reserved[4]
Definition XProtocol.hh:953
char respdata[4096]
Definition XProtocol.hh:955
kXR_int32 actnum
Definition XProtocol.hh:952
ServerResponseHeader resphdr
Definition XProtocol.hh:954
Definition XProtocol.hh:939
char parms[4096]
Definition XProtocol.hh:941
kXR_int32 actnum
Definition XProtocol.hh:940
Definition XProtocol.hh:962
char data[4096]
Definition XProtocol.hh:963
Definition XProtocol.hh:970
kXR_char substreamid
Definition XProtocol.hh:971
Definition XProtocol.hh:919
char data[4096]
Definition XProtocol.hh:920
Definition XProtocol.hh:978
kXR_unt32 useCkpSize
Definition XProtocol.hh:980
kXR_unt32 maxCkpSize
Definition XProtocol.hh:979
Definition XProtocol.hh:1027
char errmsg[4096]
Definition XProtocol.hh:1029
kXR_int32 errnum
Definition XProtocol.hh:1028
Definition XProtocol.hh:1036
kXR_char sec[4096]
Definition XProtocol.hh:1038
kXR_char sessid[16]
Definition XProtocol.hh:1037
Definition XProtocol.hh:1045
kXR_int32 cpsize
Definition XProtocol.hh:1047
kXR_char cptype[4]
Definition XProtocol.hh:1048
kXR_char fhandle[4]
Definition XProtocol.hh:1046
Definition XProtocol.hh:1187
kXR_int32 pval
Definition XProtocol.hh:1188
kXR_int32 flags
Definition XProtocol.hh:1189
ServerResponseReqs_Protocol secreq
Definition XProtocol.hh:1190
Definition XProtocol.hh:1203
char host[4096]
Definition XProtocol.hh:1205
kXR_int32 port
Definition XProtocol.hh:1204
Definition XProtocol.hh:1230
kXR_unt32 crc32c
Definition XProtocol.hh:1231
kXR_int32 dlen
Definition XProtocol.hh:1236
kXR_char requestid
Definition XProtocol.hh:1233
kXR_char streamID[2]
Definition XProtocol.hh:1232
kXR_char resptype
Definition XProtocol.hh:1234
kXR_char reserved[4]
Definition XProtocol.hh:1235
Definition XProtocol.hh:1264
kXR_int32 seconds
Definition XProtocol.hh:1265
char infomsg[4096]
Definition XProtocol.hh:1266
Definition XProtocol.hh:1273
kXR_int32 seconds
Definition XProtocol.hh:1274
Definition XProtocol.hh:1055
kXR_int64 offset
Definition XProtocol.hh:1056
Definition XProtocol.hh:1072
kXR_int16 dlFirst
Definition XProtocol.hh:1074
kXR_unt32 cseCRC
Definition XProtocol.hh:1073
kXR_int16 dlLast
Definition XProtocol.hh:1075
Definition XProtocol.hh:1064
kXR_int64 offset
Definition XProtocol.hh:1065
Definition XProtocol.hh:911
kXR_unt16 status
Definition XProtocol.hh:913
kXR_char streamid[2]
Definition XProtocol.hh:912
kXR_int32 dlen
Definition XProtocol.hh:914
Definition XProtocol.hh:1104
kXR_char secopt
Definition XProtocol.hh:1108
ServerResponseSVec_Protocol secvec
Definition XProtocol.hh:1111
kXR_char secvsz
Definition XProtocol.hh:1110
kXR_char theTag
Definition XProtocol.hh:1105
kXR_char rsvd
Definition XProtocol.hh:1106
kXR_char seclvl
Definition XProtocol.hh:1109
kXR_char secver
Definition XProtocol.hh:1107
Definition XProtocol.hh:1099
kXR_char reqsreq
Definition XProtocol.hh:1101
kXR_char reqindx
Definition XProtocol.hh:1100
Definition XProtocol.hh:1255
struct ServerResponseBody_Status bdy
Definition XProtocol.hh:1257
struct ServerResponseHeader hdr
Definition XProtocol.hh:1256
Definition XProtocol.hh:1304
ServerResponseStatus status
Definition XProtocol.hh:1305
ServerResponseBody_pgWrite pgwrite
Definition XProtocol.hh:1309
union ServerResponseV2::@1 info
ServerResponseBody_pgRead pgread
Definition XProtocol.hh:1308
Definition XProtocol.hh:1282
union ServerResponse::@0 body
ServerResponseBody_Error error
Definition XProtocol.hh:1290
ServerResponseBody_Redirect redirect
Definition XProtocol.hh:1293
ServerResponseBody_Wait wait
Definition XProtocol.hh:1295
ServerResponseBody_Attn attn
Definition XProtocol.hh:1286
ServerResponseBody_Waitresp waitresp
Definition XProtocol.hh:1296
ServerResponseBody_Login login
Definition XProtocol.hh:1291
ServerResponseBody_Status status
Definition XProtocol.hh:1294
ServerResponseBody_Buffer buffer
Definition XProtocol.hh:1289
ServerResponseBody_Authmore authmore
Definition XProtocol.hh:1287
ServerResponseBody_Bind bind
Definition XProtocol.hh:1288
ServerResponseBody_Protocol protocol
Definition XProtocol.hh:1292
ServerResponseHeader hdr
Definition XProtocol.hh:1283
Definition XProtocol.hh:1453
kXR_int32 msec
Definition XProtocol.hh:1456
kXR_int32 wsec
Definition XProtocol.hh:1455
kXR_int32 actnum
Definition XProtocol.hh:1454
Definition XProtocol.hh:1459
kXR_int32 port
Definition XProtocol.hh:1461
char host[4092]
Definition XProtocol.hh:1462
kXR_int32 actnum
Definition XProtocol.hh:1460
Definition XProtocol.hh:1465
kXR_int32 wsec
Definition XProtocol.hh:1467
kXR_int32 actnum
Definition XProtocol.hh:1466
Definition XProtocol.hh:679
kXR_int32 rlen
Definition XProtocol.hh:681
kXR_char fhandle[4]
Definition XProtocol.hh:680
kXR_int64 offset
Definition XProtocol.hh:682
Definition XProtocol.hh:829
kXR_char fhandle[4]
Definition XProtocol.hh:830
kXR_int64 offset
Definition XProtocol.hh:832
kXR_int32 wlen
Definition XProtocol.hh:831
Definition XProtocol.hh:652
kXR_char pathid
Definition XProtocol.hh:653
kXR_char reserved[7]
Definition XProtocol.hh:654
Definition XProtocol.hh:658
kXR_char fhandle[4]
Definition XProtocol.hh:659
kXR_int32 rlen
Definition XProtocol.hh:660
kXR_int64 offset
Definition XProtocol.hh:661
Definition XProtocol.hh:843
Definition XProtocol.hh:878