00001 #ifndef __XPROTOCOL_H
00002 #define __XPROTOCOL_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062 #ifdef __CINT__
00063 #define __attribute__(x)
00064 #endif
00065
00066
00067
00068
00069
00070
00071 #define kXR_PROTOCOLVERSION 0x00000400
00072 #define kXR_PROTSIGNVERSION 0x00000310
00073 #define kXR_PROTOCOLVSTRING "4.0.0"
00074
00075 #include "XProtocol/XPtypes.hh"
00076
00077
00078
00079
00080 #define kXR_DataServer 1
00081 #define kXR_LBalServer 0
00082
00083
00084
00085
00086 #define kXR_isManager 0x00000002
00087 #define kXR_isServer 0x00000001
00088 #define kXR_attrMeta 0x00000100
00089 #define kXR_attrProxy 0x00000200
00090 #define kXR_attrSuper 0x00000400
00091
00092 #define kXR_maxReqRetry 10
00093
00094
00095
00096 enum XReqErrorType {
00097 kGENERICERR = 0,
00098 kREAD,
00099 kWRITE,
00100 kREDIRCONNECT,
00101 kOK,
00102 kNOMORESTREAMS
00103
00104 };
00105
00106
00107
00108
00109
00110 enum XRequestTypes {
00111 kXR_auth = 3000,
00112 kXR_query,
00113 kXR_chmod,
00114 kXR_close,
00115 kXR_dirlist,
00116 kXR_getfile,
00117 kXR_protocol,
00118 kXR_login,
00119 kXR_mkdir,
00120 kXR_mv,
00121 kXR_open,
00122 kXR_ping,
00123 kXR_putfile,
00124 kXR_read,
00125 kXR_rm,
00126 kXR_rmdir,
00127 kXR_sync,
00128 kXR_stat,
00129 kXR_set,
00130 kXR_write,
00131 kXR_admin,
00132 kXR_prepare,
00133 kXR_statx,
00134 kXR_endsess,
00135 kXR_bind,
00136 kXR_readv,
00137 kXR_verifyw,
00138 kXR_locate,
00139 kXR_truncate,
00140 kXR_sigver,
00141 kXR_decrypt,
00142 kXR_writev,
00143 kXR_REQFENCE
00144 };
00145
00146
00147 enum XOpenRequestMode {
00148 kXR_ur = 0x100,
00149 kXR_uw = 0x080,
00150 kXR_ux = 0x040,
00151 kXR_gr = 0x020,
00152 kXR_gw = 0x010,
00153 kXR_gx = 0x008,
00154 kXR_or = 0x004,
00155 kXR_ow = 0x002,
00156 kXR_ox = 0x001
00157 };
00158
00159 enum XMkdirOptions {
00160 kXR_mknone = 0,
00161 kXR_mkdirpath = 1
00162 };
00163
00164
00165 enum XLoginAbility {
00166 kXR_nothing = 0,
00167 kXR_fullurl = 1,
00168 kXR_multipr = 3,
00169 kXR_readrdok= 4,
00170 kXR_hasipv64= 8,
00171 kXR_onlyprv4= 16,
00172 kXR_onlyprv6= 32,
00173 kXR_lclfile = 64
00174 };
00175
00176
00177 enum XLoginCapVer {
00178 kXR_lcvnone = 0,
00179 kXR_vermask = 63,
00180 kXR_asyncap = 128
00181 };
00182
00183
00184
00185 enum XLoginVersion {
00186 kXR_ver000 = 0,
00187 kXR_ver001 = 1,
00188 kXR_ver002 = 2,
00189 kXR_ver003 = 3,
00190 kXR_ver004 = 4
00191 };
00192
00193 enum XStatRequestOption {
00194 kXR_vfs = 1
00195 };
00196
00197 enum XStatRespFlags {
00198 kXR_file = 0,
00199 kXR_xset = 1,
00200 kXR_isDir = 2,
00201 kXR_other = 4,
00202 kXR_offline = 8,
00203 kXR_readable=16,
00204 kXR_writable=32,
00205 kXR_poscpend=64,
00206 kXR_bkpexist=128
00207 };
00208
00209 enum XDirlistRequestOption {
00210 kXR_online = 1,
00211 kXR_dstat = 2
00212 };
00213
00214 enum XOpenRequestOption {
00215 kXR_compress = 1,
00216 kXR_delete = 2,
00217 kXR_force = 4,
00218 kXR_new = 8,
00219 kXR_open_read= 16,
00220 kXR_open_updt= 32,
00221 kXR_async = 64,
00222 kXR_refresh = 128,
00223 kXR_mkpath = 256,
00224 kXR_prefname = 256,
00225 kXR_open_apnd= 512,
00226 kXR_retstat = 1024,
00227 kXR_replica = 2048,
00228 kXR_posc = 4096,
00229 kXR_nowait = 8192,
00230 kXR_seqio =16384,
00231 kXR_open_wrto=32768
00232 };
00233
00234 enum XProtocolRequestFlags {
00235 kXR_secreqs = 1
00236 };
00237
00238 enum XQueryType {
00239 kXR_QStats = 1,
00240 kXR_QPrep = 2,
00241 kXR_Qcksum = 3,
00242 kXR_Qxattr = 4,
00243 kXR_Qspace = 5,
00244 kXR_Qckscan= 6,
00245 kXR_Qconfig= 7,
00246 kXR_Qvisa = 8,
00247 kXR_Qopaque=16,
00248 kXR_Qopaquf=32,
00249 kXR_Qopaqug=64
00250 };
00251
00252 enum XVerifyType {
00253 kXR_nocrc = 0,
00254 kXR_crc32 = 1
00255 };
00256
00257 enum XLogonType {
00258 kXR_useruser = 0,
00259 kXR_useradmin = 1
00260 };
00261
00262 enum XPrepRequestOption {
00263 kXR_cancel = 1,
00264 kXR_notify = 2,
00265 kXR_noerrs = 4,
00266 kXR_stage = 8,
00267 kXR_wmode = 16,
00268 kXR_coloc = 32,
00269 kXR_fresh = 64,
00270 kXR_usetcp = 128,
00271
00272 kXR_evict = 0x0001
00273 };
00274
00275
00276
00277
00278 #define kXR_secver_0 0
00279
00280
00281 enum XSecFlags {
00282 kXR_nodata = 1
00283 };
00284
00285
00286 enum XSecCrypto {
00287 kXR_SHA256 = 0x01,
00288 kXR_HashMask = 0x0f,
00289 kXR_rsaKey = 0x80
00290 };
00291
00292
00293
00294
00295
00296 enum XResponseType {
00297 kXR_ok = 0,
00298 kXR_oksofar = 4000,
00299 kXR_attn,
00300 kXR_authmore,
00301 kXR_error,
00302 kXR_redirect,
00303 kXR_wait,
00304 kXR_waitresp,
00305 kXR_noResponsesYet = 10000
00306 };
00307
00308
00309
00310
00311
00312 enum XActionCode {
00313 kXR_asyncab = 5000,
00314 kXR_asyncdi,
00315 kXR_asyncms,
00316 kXR_asyncrd,
00317 kXR_asyncwt,
00318 kXR_asyncav,
00319 kXR_asynunav,
00320 kXR_asyncgo,
00321 kXR_asynresp
00322 };
00323
00324
00325
00326
00327
00328 enum XErrorCode {
00329 kXR_ArgInvalid = 3000,
00330 kXR_ArgMissing,
00331 kXR_ArgTooLong,
00332 kXR_FileLocked,
00333 kXR_FileNotOpen,
00334 kXR_FSError,
00335 kXR_InvalidRequest,
00336 kXR_IOError,
00337 kXR_NoMemory,
00338 kXR_NoSpace,
00339 kXR_NotAuthorized,
00340 kXR_NotFound,
00341 kXR_ServerError,
00342 kXR_Unsupported,
00343 kXR_noserver,
00344 kXR_NotFile,
00345 kXR_isDirectory,
00346 kXR_Cancelled,
00347 kXR_ChkLenErr,
00348 kXR_ChkSumErr,
00349 kXR_inProgress,
00350 kXR_overQuota,
00351 kXR_SigVerErr,
00352 kXR_DecryptErr,
00353 kXR_Overloaded,
00354 kXR_fsReadOnly,
00355 kXR_BadPayload,
00356 kXR_AttrNotFound,
00357 kXR_TLSRequired,
00358 kXR_noReplicas,
00359 kXR_ERRFENCE,
00360 kXR_noErrorYet = 10000
00361 };
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377 struct ClientAdminRequest {
00378 kXR_char streamid[2];
00379 kXR_unt16 requestid;
00380 kXR_char reserved[16];
00381 kXR_int32 dlen;
00382 };
00383 struct ClientAuthRequest {
00384 kXR_char streamid[2];
00385 kXR_unt16 requestid;
00386 kXR_char reserved[12];
00387 kXR_char credtype[4];
00388 kXR_int32 dlen;
00389 };
00390 struct ClientBindRequest {
00391 kXR_char streamid[2];
00392 kXR_unt16 requestid;
00393 kXR_char sessid[16];
00394 kXR_int32 dlen;
00395 };
00396 struct ClientChmodRequest {
00397 kXR_char streamid[2];
00398 kXR_unt16 requestid;
00399 kXR_char reserved[14];
00400 kXR_unt16 mode;
00401 kXR_int32 dlen;
00402 };
00403 struct ClientCloseRequest {
00404 kXR_char streamid[2];
00405 kXR_unt16 requestid;
00406 kXR_char fhandle[4];
00407 kXR_int64 fsize;
00408 kXR_char reserved[4];
00409 kXR_int32 dlen;
00410 };
00411 struct ClientDecryptRequest {
00412 kXR_char streamid[2];
00413 kXR_unt16 requestid;
00414 kXR_unt16 expectrid;
00415 kXR_char version;
00416 kXR_char flags;
00417 kXR_char reserved[12];
00418 kXR_int32 dlen;
00419 };
00420 struct ClientDirlistRequest {
00421 kXR_char streamid[2];
00422 kXR_unt16 requestid;
00423 kXR_char reserved[15];
00424 kXR_char options[1];
00425 kXR_int32 dlen;
00426 };
00427 struct ClientEndsessRequest {
00428 kXR_char streamid[2];
00429 kXR_unt16 requestid;
00430 kXR_char sessid[16];
00431 kXR_int32 dlen;
00432 };
00433 struct ClientGetfileRequest {
00434 kXR_char streamid[2];
00435 kXR_unt16 requestid;
00436 kXR_int32 options;
00437 kXR_char reserved[8];
00438 kXR_int32 buffsz;
00439 kXR_int32 dlen;
00440 };
00441 struct ClientLocateRequest {
00442 kXR_char streamid[2];
00443 kXR_unt16 requestid;
00444 kXR_unt16 options;
00445 kXR_char reserved[14];
00446 kXR_int32 dlen;
00447 };
00448 struct ClientLoginRequest {
00449 kXR_char streamid[2];
00450 kXR_unt16 requestid;
00451 kXR_int32 pid;
00452 kXR_char username[8];
00453 kXR_char reserved;
00454 kXR_char ability;
00455 kXR_char capver[1];
00456 kXR_char role[1];
00457 kXR_int32 dlen;
00458 };
00459 struct ClientMkdirRequest {
00460 kXR_char streamid[2];
00461 kXR_unt16 requestid;
00462 kXR_char options[1];
00463 kXR_char reserved[13];
00464 kXR_unt16 mode;
00465 kXR_int32 dlen;
00466 };
00467 struct ClientMvRequest {
00468 kXR_char streamid[2];
00469 kXR_unt16 requestid;
00470 kXR_char reserved[14];
00471 kXR_int16 arg1len;
00472 kXR_int32 dlen;
00473 };
00474 struct ClientOpenRequest {
00475 kXR_char streamid[2];
00476 kXR_unt16 requestid;
00477 kXR_unt16 mode;
00478 kXR_unt16 options;
00479 kXR_char reserved[12];
00480 kXR_int32 dlen;
00481 };
00482
00483 struct ClientPingRequest {
00484 kXR_char streamid[2];
00485 kXR_unt16 requestid;
00486 kXR_char reserved[16];
00487 kXR_int32 dlen;
00488 };
00489 struct ClientProtocolRequest {
00490 kXR_char streamid[2];
00491 kXR_unt16 requestid;
00492 kXR_int32 clientpv;
00493 kXR_char flags;
00494 kXR_char reserved[11];
00495 kXR_int32 dlen;
00496 };
00497 struct ClientPrepareRequest {
00498 kXR_char streamid[2];
00499 kXR_unt16 requestid;
00500 kXR_char options;
00501 kXR_char prty;
00502 kXR_unt16 port;
00503 kXR_unt16 optionX;
00504 kXR_char reserved[10];
00505 kXR_int32 dlen;
00506 };
00507 struct ClientPutfileRequest {
00508 kXR_char streamid[2];
00509 kXR_unt16 requestid;
00510 kXR_int32 options;
00511 kXR_char reserved[8];
00512 kXR_int32 buffsz;
00513 kXR_int32 dlen;
00514 };
00515 struct ClientQueryRequest {
00516 kXR_char streamid[2];
00517 kXR_unt16 requestid;
00518 kXR_unt16 infotype;
00519 kXR_char reserved1[2];
00520 kXR_char fhandle[4];
00521 kXR_char reserved2[8];
00522 kXR_int32 dlen;
00523 };
00524 struct ClientReadRequest {
00525 kXR_char streamid[2];
00526 kXR_unt16 requestid;
00527 kXR_char fhandle[4];
00528 kXR_int64 offset;
00529 kXR_int32 rlen;
00530 kXR_int32 dlen;
00531 };
00532 struct ClientReadVRequest {
00533 kXR_char streamid[2];
00534 kXR_unt16 requestid;
00535 kXR_char reserved[15];
00536 kXR_char pathid;
00537 kXR_int32 dlen;
00538 };
00539 struct ClientRmRequest {
00540 kXR_char streamid[2];
00541 kXR_unt16 requestid;
00542 kXR_char reserved[16];
00543 kXR_int32 dlen;
00544 };
00545 struct ClientRmdirRequest {
00546 kXR_char streamid[2];
00547 kXR_unt16 requestid;
00548 kXR_char reserved[16];
00549 kXR_int32 dlen;
00550 };
00551 struct ClientSetRequest {
00552 kXR_char streamid[2];
00553 kXR_unt16 requestid;
00554 kXR_char reserved[15];
00555 kXR_char modifier;
00556 kXR_int32 dlen;
00557 };
00558 struct ClientSigverRequest {
00559 kXR_char streamid[2];
00560 kXR_unt16 requestid;
00561 kXR_unt16 expectrid;
00562 kXR_char version;
00563 kXR_char flags;
00564 kXR_unt64 seqno;
00565 kXR_char crypto;
00566 kXR_char rsvd2[3];
00567 kXR_int32 dlen;
00568 };
00569 struct ClientStatRequest {
00570 kXR_char streamid[2];
00571 kXR_unt16 requestid;
00572 kXR_char options;
00573 kXR_char reserved[11];
00574 kXR_char fhandle[4];
00575 kXR_int32 dlen;
00576 };
00577 struct ClientSyncRequest {
00578 kXR_char streamid[2];
00579 kXR_unt16 requestid;
00580 kXR_char fhandle[4];
00581 kXR_char reserved[12];
00582 kXR_int32 dlen;
00583 };
00584 struct ClientTruncateRequest {
00585 kXR_char streamid[2];
00586 kXR_unt16 requestid;
00587 kXR_char fhandle[4];
00588 kXR_int64 offset;
00589 kXR_char reserved[4];
00590 kXR_int32 dlen;
00591 };
00592 struct ClientWriteRequest {
00593 kXR_char streamid[2];
00594 kXR_unt16 requestid;
00595 kXR_char fhandle[4];
00596 kXR_int64 offset;
00597 kXR_char pathid;
00598 kXR_char reserved[3];
00599 kXR_int32 dlen;
00600 };
00601 struct ClientWriteVRequest {
00602 kXR_char streamid[2];
00603 kXR_unt16 requestid;
00604 kXR_char options;
00605 kXR_char reserved[15];
00606 kXR_int32 dlen;
00607
00608 static const kXR_int32 doSync = 0x01;
00609 };
00610 struct ClientVerifywRequest {
00611 kXR_char streamid[2];
00612 kXR_unt16 requestid;
00613 kXR_char fhandle[4];
00614 kXR_int64 offset;
00615 kXR_char pathid;
00616 kXR_char vertype;
00617 kXR_char reserved[2];
00618 kXR_int32 dlen;
00619 };
00620
00621 struct ClientRequestHdr {
00622 kXR_char streamid[2];
00623 kXR_unt16 requestid;
00624 kXR_char body[16];
00625 kXR_int32 dlen;
00626 };
00627
00628 typedef union {
00629 struct ClientRequestHdr header;
00630 struct ClientAdminRequest admin;
00631 struct ClientAuthRequest auth;
00632 struct ClientBindRequest bind;
00633 struct ClientChmodRequest chmod;
00634 struct ClientCloseRequest close;
00635 struct ClientDecryptRequest decrypt;
00636 struct ClientDirlistRequest dirlist;
00637 struct ClientEndsessRequest endsess;
00638 struct ClientGetfileRequest getfile;
00639 struct ClientLocateRequest locate;
00640 struct ClientLoginRequest login;
00641 struct ClientMkdirRequest mkdir;
00642 struct ClientMvRequest mv;
00643 struct ClientOpenRequest open;
00644 struct ClientPingRequest ping;
00645 struct ClientPrepareRequest prepare;
00646 struct ClientProtocolRequest protocol;
00647 struct ClientPutfileRequest putfile;
00648 struct ClientQueryRequest query;
00649 struct ClientReadRequest read;
00650 struct ClientReadVRequest readv;
00651 struct ClientRmRequest rm;
00652 struct ClientRmdirRequest rmdir;
00653 struct ClientSetRequest set;
00654 struct ClientSigverRequest sigver;
00655 struct ClientStatRequest stat;
00656 struct ClientSyncRequest sync;
00657 struct ClientTruncateRequest truncate;
00658 struct ClientWriteRequest write;
00659 struct ClientWriteVRequest writev;
00660 } ClientRequest;
00661
00662 typedef union {
00663 struct ClientRequestHdr header;
00664 struct ClientDecryptRequest decrypt;
00665 struct ClientSigverRequest sigver;
00666 } SecurityRequest;
00667
00668 struct readahead_list {
00669 kXR_char fhandle[4];
00670 kXR_int32 rlen;
00671 kXR_int64 offset;
00672 };
00673
00674 struct read_args {
00675 kXR_char pathid;
00676 kXR_char reserved[7];
00677
00678 };
00679
00680
00681
00682 namespace XrdProto
00683 {
00684 struct read_list {
00685 kXR_char fhandle[4];
00686 kXR_int32 rlen;
00687 kXR_int64 offset;
00688 };
00689
00690 struct write_list {
00691 kXR_char fhandle[4];
00692 kXR_int32 wlen;
00693 kXR_int64 offset;
00694 };
00695 }
00696
00697
00698
00699
00700
00701
00702
00703
00704
00705
00706
00707
00708
00709 struct ServerResponseHeader {
00710 kXR_char streamid[2];
00711 kXR_unt16 status;
00712 kXR_int32 dlen;
00713 };
00714
00715
00716 struct ServerResponseBody_Bind {
00717 kXR_char substreamid;
00718 };
00719
00720
00721 struct ServerResponseBody_Open {
00722 kXR_char fhandle[4];
00723 kXR_int32 cpsize;
00724 kXR_char cptype[4];
00725 };
00726
00727
00728
00729
00730 struct ServerResponseSVec_Protocol {
00731 kXR_char reqindx;
00732 kXR_char reqsreq;
00733 };
00734
00735 struct ServerResponseReqs_Protocol {
00736 kXR_char theTag;
00737 kXR_char rsvd;
00738 kXR_char secver;
00739 kXR_char secopt;
00740 kXR_char seclvl;
00741 kXR_char secvsz;
00742 ServerResponseSVec_Protocol secvec;
00743 };
00744
00745
00746
00747 #define kXR_secOData 0x01
00748 #define kXR_secOFrce 0x02
00749
00750
00751
00752 #define kXR_secNone 0
00753 #define kXR_secCompatible 1
00754 #define kXR_secStandard 2
00755 #define kXR_secIntense 3
00756 #define kXR_secPedantic 4
00757
00758
00759
00760 #define kXR_signIgnore 0
00761 #define kXR_signLikely 1
00762 #define kXR_signNeeded 2
00763
00764
00765 struct ServerResponseBody_Protocol {
00766 kXR_int32 pval;
00767 kXR_int32 flags;
00768 ServerResponseReqs_Protocol secreq;
00769 };
00770
00771
00772
00773
00774 #define kXR_ShortProtRespLen sizeof(ServerResponseBody_Protocol)-\
00775 sizeof(ServerResponseReqs_Protocol)
00776
00777 struct ServerResponseBody_Login {
00778 kXR_char sessid[16];
00779 kXR_char sec[4096];
00780 };
00781
00782 struct ServerResponseBody_Redirect {
00783 kXR_int32 port;
00784 char host[4096];
00785 };
00786
00787 struct ServerResponseBody_Error {
00788 kXR_int32 errnum;
00789 char errmsg[4096];
00790 };
00791
00792 struct ServerResponseBody_Wait {
00793 kXR_int32 seconds;
00794 char infomsg[4096];
00795 };
00796
00797 struct ServerResponseBody_Waitresp {
00798 kXR_int32 seconds;
00799 };
00800
00801 struct ServerResponseBody_Attn {
00802 kXR_int32 actnum;
00803 char parms[4096];
00804 };
00805
00806 struct ServerResponseBody_Attn_asyncrd {
00807 kXR_int32 actnum;
00808 kXR_int32 port;
00809 char host[4092];
00810 };
00811
00812 struct ServerResponseBody_Attn_asynresp {
00813 kXR_int32 actnum;
00814 char reserved[4];
00815 ServerResponseHeader resphdr;
00816 char respdata[4096];
00817 };
00818
00819 struct ServerResponseBody_Attn_asyncwt {
00820 kXR_int32 actnum;
00821 kXR_int32 wsec;
00822 };
00823
00824 struct ServerResponseBody_Attn_asyncdi {
00825 kXR_int32 actnum;
00826 kXR_int32 wsec;
00827 kXR_int32 msec;
00828 };
00829
00830 struct ServerResponseBody_Authmore {
00831 char data[4096];
00832 };
00833
00834 struct ServerResponseBody_Buffer {
00835 char data[4096];
00836 };
00837
00838 struct ServerResponse
00839 {
00840 ServerResponseHeader hdr;
00841 union
00842 {
00843 ServerResponseBody_Error error;
00844 ServerResponseBody_Authmore authmore;
00845 ServerResponseBody_Wait wait;
00846 ServerResponseBody_Waitresp waitresp;
00847 ServerResponseBody_Redirect redirect;
00848 ServerResponseBody_Attn attn;
00849 ServerResponseBody_Protocol protocol;
00850 ServerResponseBody_Login login;
00851 ServerResponseBody_Buffer buffer;
00852 ServerResponseBody_Bind bind;
00853 } body;
00854 };
00855
00856 void ServerResponseHeader2NetFmt(struct ServerResponseHeader *srh);
00857
00858
00859 struct ClientInitHandShake {
00860 kXR_int32 first;
00861 kXR_int32 second;
00862 kXR_int32 third;
00863 kXR_int32 fourth;
00864 kXR_int32 fifth;
00865 };
00866
00867
00868 struct ServerInitHandShake {
00869 kXR_int32 msglen;
00870 kXR_int32 protover;
00871 kXR_int32 msgval;
00872 };
00873
00874
00875
00876 typedef kXR_int32 ServerResponseType;
00877
00878 struct ALIGN_CHECK {char chkszreq[25-sizeof(ClientRequest)];
00879 char chkszrsp[ 9-sizeof(ServerResponseHeader)];
00880 };
00881
00882
00883
00884
00885
00886 #include <errno.h>
00887 #if defined(WIN32)
00888 #if !defined(ENOTBLK)
00889 # define ENOTBLK 15
00890 #endif
00891 #if !defined(ETXTBSY)
00892 #define ETXTBSY 26
00893 #endif
00894 #if !defined(ENOBUFS)
00895 #define ENOBUFS 105
00896 #endif
00897 #if !defined(ENETUNREACH)
00898 #define ENETUNREACH 114
00899 #endif
00900 #endif
00901
00902 #ifndef ENOATTR
00903 #define ENOATTR ENODATA
00904 #endif
00905
00906 class XProtocol
00907 {
00908 public:
00909
00910
00911
00912 static int mapError(int rc)
00913 {if (rc < 0) rc = -rc;
00914 switch(rc)
00915 {case ENOENT: return kXR_NotFound;
00916 case EINVAL: return kXR_ArgInvalid;
00917 case EPERM: return kXR_NotAuthorized;
00918 case EACCES: return kXR_NotAuthorized;
00919 case EIO: return kXR_IOError;
00920 case ENOMEM: return kXR_NoMemory;
00921 case ENOBUFS: return kXR_NoMemory;
00922 case ENOSPC: return kXR_NoSpace;
00923 case ENAMETOOLONG: return kXR_ArgTooLong;
00924 case ENETUNREACH: return kXR_noserver;
00925 case ENOTBLK: return kXR_NotFile;
00926 case EISDIR: return kXR_isDirectory;
00927 case EEXIST: return kXR_InvalidRequest;
00928 case ETXTBSY: return kXR_inProgress;
00929 case ENODEV: return kXR_FSError;
00930 case EFAULT: return kXR_ServerError;
00931 case EDOM: return kXR_ChkSumErr;
00932 case EDQUOT: return kXR_overQuota;
00933 case EILSEQ: return kXR_SigVerErr;
00934 case ERANGE: return kXR_DecryptErr;
00935 case EUSERS: return kXR_Overloaded;
00936 case EROFS: return kXR_fsReadOnly;
00937 case ENOATTR: return kXR_AttrNotFound;
00938 case EPROTOTYPE: return kXR_TLSRequired;
00939 case EADDRNOTAVAIL: return kXR_noReplicas;
00940 default: return kXR_FSError;
00941 }
00942 }
00943
00944 static int toErrno( int xerr )
00945 {
00946 switch(xerr)
00947 {case kXR_ArgInvalid: return EINVAL;
00948 case kXR_ArgMissing: return EINVAL;
00949 case kXR_ArgTooLong: return ENAMETOOLONG;
00950 case kXR_FileLocked: return EDEADLK;
00951 case kXR_FileNotOpen: return EBADF;
00952 case kXR_FSError: return EIO;
00953 case kXR_InvalidRequest:return EEXIST;
00954 case kXR_IOError: return EIO;
00955 case kXR_NoMemory: return ENOMEM;
00956 case kXR_NoSpace: return ENOSPC;
00957 case kXR_NotAuthorized: return EACCES;
00958 case kXR_NotFound: return ENOENT;
00959 case kXR_ServerError: return ENOMSG;
00960 case kXR_Unsupported: return ENOSYS;
00961 case kXR_noserver: return EHOSTUNREACH;
00962 case kXR_NotFile: return ENOTBLK;
00963 case kXR_isDirectory: return EISDIR;
00964 case kXR_Cancelled: return ECANCELED;
00965 case kXR_ChkLenErr: return EDOM;
00966 case kXR_ChkSumErr: return EDOM;
00967 case kXR_inProgress: return EINPROGRESS;
00968 case kXR_overQuota: return EDQUOT;
00969 case kXR_SigVerErr: return EILSEQ;
00970 case kXR_DecryptErr: return ERANGE;
00971 case kXR_Overloaded: return EUSERS;
00972 case kXR_fsReadOnly: return EROFS;
00973 case kXR_BadPayload: return EINVAL;
00974 case kXR_AttrNotFound: return ENOATTR;
00975 case kXR_TLSRequired: return EPROTOTYPE;
00976 case kXR_noReplicas: return EADDRNOTAVAIL;
00977 default: return ENOMSG;
00978 }
00979 }
00980
00981 static const char *errName(kXR_int32 errCode);
00982
00983 static const char *reqName(kXR_unt16 reqCode);
00984 };
00985 #endif