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 };
00174
00175
00176 enum XLoginCapVer {
00177 kXR_lcvnone = 0,
00178 kXR_vermask = 63,
00179 kXR_asyncap = 128
00180 };
00181
00182
00183
00184 enum XLoginVersion {
00185 kXR_ver000 = 0,
00186 kXR_ver001 = 1,
00187 kXR_ver002 = 2,
00188 kXR_ver003 = 3,
00189 kXR_ver004 = 4
00190 };
00191
00192 enum XStatRequestOption {
00193 kXR_vfs = 1
00194 };
00195
00196 enum XStatRespFlags {
00197 kXR_file = 0,
00198 kXR_xset = 1,
00199 kXR_isDir = 2,
00200 kXR_other = 4,
00201 kXR_offline = 8,
00202 kXR_readable=16,
00203 kXR_writable=32,
00204 kXR_poscpend=64,
00205 kXR_bkpexist=128
00206 };
00207
00208 enum XDirlistRequestOption {
00209 kXR_online = 1,
00210 kXR_dstat = 2
00211 };
00212
00213 enum XOpenRequestOption {
00214 kXR_compress = 1,
00215 kXR_delete = 2,
00216 kXR_force = 4,
00217 kXR_new = 8,
00218 kXR_open_read= 16,
00219 kXR_open_updt= 32,
00220 kXR_async = 64,
00221 kXR_refresh = 128,
00222 kXR_mkpath = 256,
00223 kXR_prefname = 256,
00224 kXR_open_apnd= 512,
00225 kXR_retstat = 1024,
00226 kXR_replica = 2048,
00227 kXR_posc = 4096,
00228 kXR_nowait = 8192,
00229 kXR_seqio =16384,
00230 kXR_open_wrto=32768
00231 };
00232
00233 enum XProtocolRequestFlags {
00234 kXR_secreqs = 1
00235 };
00236
00237 enum XQueryType {
00238 kXR_QStats = 1,
00239 kXR_QPrep = 2,
00240 kXR_Qcksum = 3,
00241 kXR_Qxattr = 4,
00242 kXR_Qspace = 5,
00243 kXR_Qckscan= 6,
00244 kXR_Qconfig= 7,
00245 kXR_Qvisa = 8,
00246 kXR_Qopaque=16,
00247 kXR_Qopaquf=32,
00248 kXR_Qopaqug=64
00249 };
00250
00251 enum XVerifyType {
00252 kXR_nocrc = 0,
00253 kXR_crc32 = 1
00254 };
00255
00256 enum XLogonType {
00257 kXR_useruser = 0,
00258 kXR_useradmin = 1
00259 };
00260
00261 enum XPrepRequestOption {
00262 kXR_cancel = 1,
00263 kXR_notify = 2,
00264 kXR_noerrs = 4,
00265 kXR_stage = 8,
00266 kXR_wmode = 16,
00267 kXR_coloc = 32,
00268 kXR_fresh = 64
00269 };
00270
00271
00272
00273
00274 #define kXR_secver_0 0
00275
00276
00277 enum XSecFlags {
00278 kXR_nodata = 1
00279 };
00280
00281
00282 enum XSecCrypto {
00283 kXR_SHA256 = 0x01,
00284 kXR_HashMask = 0x0f,
00285 kXR_rsaKey = 0x80
00286 };
00287
00288
00289
00290
00291
00292 enum XResponseType {
00293 kXR_ok = 0,
00294 kXR_oksofar = 4000,
00295 kXR_attn,
00296 kXR_authmore,
00297 kXR_error,
00298 kXR_redirect,
00299 kXR_wait,
00300 kXR_waitresp,
00301 kXR_noResponsesYet = 10000
00302 };
00303
00304
00305
00306
00307
00308 enum XActionCode {
00309 kXR_asyncab = 5000,
00310 kXR_asyncdi,
00311 kXR_asyncms,
00312 kXR_asyncrd,
00313 kXR_asyncwt,
00314 kXR_asyncav,
00315 kXR_asynunav,
00316 kXR_asyncgo,
00317 kXR_asynresp
00318 };
00319
00320
00321
00322
00323
00324 enum XErrorCode {
00325 kXR_ArgInvalid = 3000,
00326 kXR_ArgMissing,
00327 kXR_ArgTooLong,
00328 kXR_FileLocked,
00329 kXR_FileNotOpen,
00330 kXR_FSError,
00331 kXR_InvalidRequest,
00332 kXR_IOError,
00333 kXR_NoMemory,
00334 kXR_NoSpace,
00335 kXR_NotAuthorized,
00336 kXR_NotFound,
00337 kXR_ServerError,
00338 kXR_Unsupported,
00339 kXR_noserver,
00340 kXR_NotFile,
00341 kXR_isDirectory,
00342 kXR_Cancelled,
00343 kXR_ChkLenErr,
00344 kXR_ChkSumErr,
00345 kXR_inProgress,
00346 kXR_overQuota,
00347 kXR_SigVerErr,
00348 kXR_DecryptErr,
00349 kXR_Overloaded,
00350 kXR_ERRFENCE,
00351 kXR_noErrorYet = 10000
00352 };
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368 struct ClientAdminRequest {
00369 kXR_char streamid[2];
00370 kXR_unt16 requestid;
00371 kXR_char reserved[16];
00372 kXR_int32 dlen;
00373 };
00374 struct ClientAuthRequest {
00375 kXR_char streamid[2];
00376 kXR_unt16 requestid;
00377 kXR_char reserved[12];
00378 kXR_char credtype[4];
00379 kXR_int32 dlen;
00380 };
00381 struct ClientBindRequest {
00382 kXR_char streamid[2];
00383 kXR_unt16 requestid;
00384 kXR_char sessid[16];
00385 kXR_int32 dlen;
00386 };
00387 struct ClientChmodRequest {
00388 kXR_char streamid[2];
00389 kXR_unt16 requestid;
00390 kXR_char reserved[14];
00391 kXR_unt16 mode;
00392 kXR_int32 dlen;
00393 };
00394 struct ClientCloseRequest {
00395 kXR_char streamid[2];
00396 kXR_unt16 requestid;
00397 kXR_char fhandle[4];
00398 kXR_int64 fsize;
00399 kXR_char reserved[4];
00400 kXR_int32 dlen;
00401 };
00402 struct ClientDecryptRequest {
00403 kXR_char streamid[2];
00404 kXR_unt16 requestid;
00405 kXR_unt16 expectrid;
00406 kXR_char version;
00407 kXR_char flags;
00408 kXR_char reserved[12];
00409 kXR_int32 dlen;
00410 };
00411 struct ClientDirlistRequest {
00412 kXR_char streamid[2];
00413 kXR_unt16 requestid;
00414 kXR_char reserved[15];
00415 kXR_char options[1];
00416 kXR_int32 dlen;
00417 };
00418 struct ClientEndsessRequest {
00419 kXR_char streamid[2];
00420 kXR_unt16 requestid;
00421 kXR_char sessid[16];
00422 kXR_int32 dlen;
00423 };
00424 struct ClientGetfileRequest {
00425 kXR_char streamid[2];
00426 kXR_unt16 requestid;
00427 kXR_int32 options;
00428 kXR_char reserved[8];
00429 kXR_int32 buffsz;
00430 kXR_int32 dlen;
00431 };
00432 struct ClientLocateRequest {
00433 kXR_char streamid[2];
00434 kXR_unt16 requestid;
00435 kXR_unt16 options;
00436 kXR_char reserved[14];
00437 kXR_int32 dlen;
00438 };
00439 struct ClientLoginRequest {
00440 kXR_char streamid[2];
00441 kXR_unt16 requestid;
00442 kXR_int32 pid;
00443 kXR_char username[8];
00444 kXR_char reserved;
00445 kXR_char ability;
00446 kXR_char capver[1];
00447 kXR_char role[1];
00448 kXR_int32 dlen;
00449 };
00450 struct ClientMkdirRequest {
00451 kXR_char streamid[2];
00452 kXR_unt16 requestid;
00453 kXR_char options[1];
00454 kXR_char reserved[13];
00455 kXR_unt16 mode;
00456 kXR_int32 dlen;
00457 };
00458 struct ClientMvRequest {
00459 kXR_char streamid[2];
00460 kXR_unt16 requestid;
00461 kXR_char reserved[14];
00462 kXR_int16 arg1len;
00463 kXR_int32 dlen;
00464 };
00465 struct ClientOpenRequest {
00466 kXR_char streamid[2];
00467 kXR_unt16 requestid;
00468 kXR_unt16 mode;
00469 kXR_unt16 options;
00470 kXR_char reserved[12];
00471 kXR_int32 dlen;
00472 };
00473
00474 struct ClientPingRequest {
00475 kXR_char streamid[2];
00476 kXR_unt16 requestid;
00477 kXR_char reserved[16];
00478 kXR_int32 dlen;
00479 };
00480 struct ClientProtocolRequest {
00481 kXR_char streamid[2];
00482 kXR_unt16 requestid;
00483 kXR_int32 clientpv;
00484 kXR_char flags;
00485 kXR_char reserved[11];
00486 kXR_int32 dlen;
00487 };
00488 struct ClientPrepareRequest {
00489 kXR_char streamid[2];
00490 kXR_unt16 requestid;
00491 kXR_char options;
00492 kXR_char prty;
00493 kXR_unt16 port;
00494 kXR_char reserved[12];
00495 kXR_int32 dlen;
00496 };
00497 struct ClientPutfileRequest {
00498 kXR_char streamid[2];
00499 kXR_unt16 requestid;
00500 kXR_int32 options;
00501 kXR_char reserved[8];
00502 kXR_int32 buffsz;
00503 kXR_int32 dlen;
00504 };
00505 struct ClientQueryRequest {
00506 kXR_char streamid[2];
00507 kXR_unt16 requestid;
00508 kXR_unt16 infotype;
00509 kXR_char reserved1[2];
00510 kXR_char fhandle[4];
00511 kXR_char reserved2[8];
00512 kXR_int32 dlen;
00513 };
00514 struct ClientReadRequest {
00515 kXR_char streamid[2];
00516 kXR_unt16 requestid;
00517 kXR_char fhandle[4];
00518 kXR_int64 offset;
00519 kXR_int32 rlen;
00520 kXR_int32 dlen;
00521 };
00522 struct ClientReadVRequest {
00523 kXR_char streamid[2];
00524 kXR_unt16 requestid;
00525 kXR_char reserved[15];
00526 kXR_char pathid;
00527 kXR_int32 dlen;
00528 };
00529 struct ClientRmRequest {
00530 kXR_char streamid[2];
00531 kXR_unt16 requestid;
00532 kXR_char reserved[16];
00533 kXR_int32 dlen;
00534 };
00535 struct ClientRmdirRequest {
00536 kXR_char streamid[2];
00537 kXR_unt16 requestid;
00538 kXR_char reserved[16];
00539 kXR_int32 dlen;
00540 };
00541 struct ClientSetRequest {
00542 kXR_char streamid[2];
00543 kXR_unt16 requestid;
00544 kXR_char reserved[15];
00545 kXR_char modifier;
00546 kXR_int32 dlen;
00547 };
00548 struct ClientSigverRequest {
00549 kXR_char streamid[2];
00550 kXR_unt16 requestid;
00551 kXR_unt16 expectrid;
00552 kXR_char version;
00553 kXR_char flags;
00554 kXR_unt64 seqno;
00555 kXR_char crypto;
00556 kXR_char rsvd2[3];
00557 kXR_int32 dlen;
00558 };
00559 struct ClientStatRequest {
00560 kXR_char streamid[2];
00561 kXR_unt16 requestid;
00562 kXR_char options;
00563 kXR_char reserved[11];
00564 kXR_char fhandle[4];
00565 kXR_int32 dlen;
00566 };
00567 struct ClientSyncRequest {
00568 kXR_char streamid[2];
00569 kXR_unt16 requestid;
00570 kXR_char fhandle[4];
00571 kXR_char reserved[12];
00572 kXR_int32 dlen;
00573 };
00574 struct ClientTruncateRequest {
00575 kXR_char streamid[2];
00576 kXR_unt16 requestid;
00577 kXR_char fhandle[4];
00578 kXR_int64 offset;
00579 kXR_char reserved[4];
00580 kXR_int32 dlen;
00581 };
00582 struct ClientWriteRequest {
00583 kXR_char streamid[2];
00584 kXR_unt16 requestid;
00585 kXR_char fhandle[4];
00586 kXR_int64 offset;
00587 kXR_char pathid;
00588 kXR_char reserved[3];
00589 kXR_int32 dlen;
00590 };
00591 struct ClientWriteVRequest {
00592 kXR_char streamid[2];
00593 kXR_unt16 requestid;
00594 kXR_char options;
00595 kXR_char reserved[15];
00596 kXR_int32 dlen;
00597
00598 static const kXR_int32 doSync = 0x01;
00599 };
00600 struct ClientVerifywRequest {
00601 kXR_char streamid[2];
00602 kXR_unt16 requestid;
00603 kXR_char fhandle[4];
00604 kXR_int64 offset;
00605 kXR_char pathid;
00606 kXR_char vertype;
00607 kXR_char reserved[2];
00608 kXR_int32 dlen;
00609 };
00610
00611 struct ClientRequestHdr {
00612 kXR_char streamid[2];
00613 kXR_unt16 requestid;
00614 kXR_char body[16];
00615 kXR_int32 dlen;
00616 };
00617
00618 typedef union {
00619 struct ClientRequestHdr header;
00620 struct ClientAdminRequest admin;
00621 struct ClientAuthRequest auth;
00622 struct ClientBindRequest bind;
00623 struct ClientChmodRequest chmod;
00624 struct ClientCloseRequest close;
00625 struct ClientDecryptRequest decrypt;
00626 struct ClientDirlistRequest dirlist;
00627 struct ClientEndsessRequest endsess;
00628 struct ClientGetfileRequest getfile;
00629 struct ClientLocateRequest locate;
00630 struct ClientLoginRequest login;
00631 struct ClientMkdirRequest mkdir;
00632 struct ClientMvRequest mv;
00633 struct ClientOpenRequest open;
00634 struct ClientPingRequest ping;
00635 struct ClientPrepareRequest prepare;
00636 struct ClientProtocolRequest protocol;
00637 struct ClientPutfileRequest putfile;
00638 struct ClientQueryRequest query;
00639 struct ClientReadRequest read;
00640 struct ClientReadVRequest readv;
00641 struct ClientRmRequest rm;
00642 struct ClientRmdirRequest rmdir;
00643 struct ClientSetRequest set;
00644 struct ClientSigverRequest sigver;
00645 struct ClientStatRequest stat;
00646 struct ClientSyncRequest sync;
00647 struct ClientTruncateRequest truncate;
00648 struct ClientWriteRequest write;
00649 struct ClientWriteVRequest writev;
00650 } ClientRequest;
00651
00652 typedef union {
00653 struct ClientRequestHdr header;
00654 struct ClientDecryptRequest decrypt;
00655 struct ClientSigverRequest sigver;
00656 } SecurityRequest;
00657
00658 struct readahead_list {
00659 kXR_char fhandle[4];
00660 kXR_int32 rlen;
00661 kXR_int64 offset;
00662 };
00663
00664 struct read_args {
00665 kXR_char pathid;
00666 kXR_char reserved[7];
00667
00668 };
00669
00670
00671
00672 namespace XrdProto
00673 {
00674 struct read_list {
00675 kXR_char fhandle[4];
00676 kXR_int32 rlen;
00677 kXR_int64 offset;
00678 };
00679
00680 struct write_list {
00681 kXR_char fhandle[4];
00682 kXR_int32 wlen;
00683 kXR_int64 offset;
00684 };
00685 }
00686
00687
00688
00689
00690
00691
00692
00693
00694
00695
00696
00697
00698
00699 struct ServerResponseHeader {
00700 kXR_char streamid[2];
00701 kXR_unt16 status;
00702 kXR_int32 dlen;
00703 };
00704
00705
00706 struct ServerResponseBody_Bind {
00707 kXR_char substreamid;
00708 };
00709
00710
00711 struct ServerResponseBody_Open {
00712 kXR_char fhandle[4];
00713 kXR_int32 cpsize;
00714 kXR_char cptype[4];
00715 };
00716
00717
00718
00719
00720 struct ServerResponseSVec_Protocol {
00721 kXR_char reqindx;
00722 kXR_char reqsreq;
00723 };
00724
00725 struct ServerResponseReqs_Protocol {
00726 kXR_char theTag;
00727 kXR_char rsvd;
00728 kXR_char secver;
00729 kXR_char secopt;
00730 kXR_char seclvl;
00731 kXR_char secvsz;
00732 ServerResponseSVec_Protocol secvec;
00733 };
00734
00735
00736
00737 #define kXR_secOData 0x01
00738 #define kXR_secOFrce 0x02
00739
00740
00741
00742 #define kXR_secNone 0
00743 #define kXR_secCompatible 1
00744 #define kXR_secStandard 2
00745 #define kXR_secIntense 3
00746 #define kXR_secPedantic 4
00747
00748
00749
00750 #define kXR_signIgnore 0
00751 #define kXR_signLikely 1
00752 #define kXR_signNeeded 2
00753
00754
00755 struct ServerResponseBody_Protocol {
00756 kXR_int32 pval;
00757 kXR_int32 flags;
00758 ServerResponseReqs_Protocol secreq;
00759 };
00760
00761
00762
00763
00764 #define kXR_ShortProtRespLen sizeof(ServerResponseBody_Protocol)-\
00765 sizeof(ServerResponseReqs_Protocol)
00766
00767 struct ServerResponseBody_Login {
00768 kXR_char sessid[16];
00769 kXR_char sec[4096];
00770 };
00771
00772 struct ServerResponseBody_Redirect {
00773 kXR_int32 port;
00774 char host[4096];
00775 };
00776
00777 struct ServerResponseBody_Error {
00778 kXR_int32 errnum;
00779 char errmsg[4096];
00780 };
00781
00782 struct ServerResponseBody_Wait {
00783 kXR_int32 seconds;
00784 char infomsg[4096];
00785 };
00786
00787 struct ServerResponseBody_Waitresp {
00788 kXR_int32 seconds;
00789 };
00790
00791 struct ServerResponseBody_Attn {
00792 kXR_int32 actnum;
00793 char parms[4096];
00794 };
00795
00796 struct ServerResponseBody_Attn_asyncrd {
00797 kXR_int32 actnum;
00798 kXR_int32 port;
00799 char host[4092];
00800 };
00801
00802 struct ServerResponseBody_Attn_asynresp {
00803 kXR_int32 actnum;
00804 char reserved[4];
00805 ServerResponseHeader resphdr;
00806 char respdata[4096];
00807 };
00808
00809 struct ServerResponseBody_Attn_asyncwt {
00810 kXR_int32 actnum;
00811 kXR_int32 wsec;
00812 };
00813
00814 struct ServerResponseBody_Attn_asyncdi {
00815 kXR_int32 actnum;
00816 kXR_int32 wsec;
00817 kXR_int32 msec;
00818 };
00819
00820 struct ServerResponseBody_Authmore {
00821 char data[4096];
00822 };
00823
00824 struct ServerResponseBody_Buffer {
00825 char data[4096];
00826 };
00827
00828 struct ServerResponse
00829 {
00830 ServerResponseHeader hdr;
00831 union
00832 {
00833 ServerResponseBody_Error error;
00834 ServerResponseBody_Authmore authmore;
00835 ServerResponseBody_Wait wait;
00836 ServerResponseBody_Waitresp waitresp;
00837 ServerResponseBody_Redirect redirect;
00838 ServerResponseBody_Attn attn;
00839 ServerResponseBody_Protocol protocol;
00840 ServerResponseBody_Login login;
00841 ServerResponseBody_Buffer buffer;
00842 ServerResponseBody_Bind bind;
00843 } body;
00844 };
00845
00846 void ServerResponseHeader2NetFmt(struct ServerResponseHeader *srh);
00847
00848
00849 struct ClientInitHandShake {
00850 kXR_int32 first;
00851 kXR_int32 second;
00852 kXR_int32 third;
00853 kXR_int32 fourth;
00854 kXR_int32 fifth;
00855 };
00856
00857
00858 struct ServerInitHandShake {
00859 kXR_int32 msglen;
00860 kXR_int32 protover;
00861 kXR_int32 msgval;
00862 };
00863
00864
00865
00866 typedef kXR_int32 ServerResponseType;
00867
00868 struct ALIGN_CHECK {char chkszreq[25-sizeof(ClientRequest)];
00869 char chkszrsp[ 9-sizeof(ServerResponseHeader)];
00870 };
00871
00872
00873
00874
00875
00876 #include <errno.h>
00877 #if defined(WIN32)
00878 #if !defined(ENOTBLK)
00879 # define ENOTBLK 15
00880 #endif
00881 #if !defined(ETXTBSY)
00882 #define ETXTBSY 26
00883 #endif
00884 #if !defined(ENOBUFS)
00885 #define ENOBUFS 105
00886 #endif
00887 #if !defined(ENETUNREACH)
00888 #define ENETUNREACH 114
00889 #endif
00890 #endif
00891
00892 class XProtocol
00893 {
00894 public:
00895
00896
00897
00898 static int mapError(int rc)
00899 {if (rc < 0) rc = -rc;
00900 switch(rc)
00901 {case ENOENT: return kXR_NotFound;
00902 case EPERM: return kXR_NotAuthorized;
00903 case EACCES: return kXR_NotAuthorized;
00904 case EIO: return kXR_IOError;
00905 case ENOMEM: return kXR_NoMemory;
00906 case ENOBUFS: return kXR_NoMemory;
00907 case ENOSPC: return kXR_NoSpace;
00908 case ENAMETOOLONG: return kXR_ArgTooLong;
00909 case ENETUNREACH: return kXR_noserver;
00910 case ENOTBLK: return kXR_NotFile;
00911 case EISDIR: return kXR_isDirectory;
00912 case EEXIST: return kXR_InvalidRequest;
00913 case ETXTBSY: return kXR_inProgress;
00914 case ENODEV: return kXR_FSError;
00915 case EFAULT: return kXR_ServerError;
00916 case EDOM: return kXR_ChkSumErr;
00917 case EDQUOT: return kXR_overQuota;
00918 case EILSEQ: return kXR_SigVerErr;
00919 case ERANGE: return kXR_DecryptErr;
00920 case EUSERS: return kXR_Overloaded;
00921 default: return kXR_FSError;
00922 }
00923 }
00924
00925 static int toErrno( int xerr )
00926 {
00927 switch(xerr)
00928 {case kXR_ArgInvalid: return EINVAL;
00929 case kXR_ArgMissing: return EINVAL;
00930 case kXR_ArgTooLong: return ENAMETOOLONG;
00931 case kXR_FileLocked: return EDEADLK;
00932 case kXR_FileNotOpen: return EBADF;
00933 case kXR_FSError: return EIO;
00934 case kXR_InvalidRequest:return EEXIST;
00935 case kXR_IOError: return EIO;
00936 case kXR_NoMemory: return ENOMEM;
00937 case kXR_NoSpace: return ENOSPC;
00938 case kXR_NotAuthorized: return EACCES;
00939 case kXR_NotFound: return ENOENT;
00940 case kXR_ServerError: return ENOMSG;
00941 case kXR_Unsupported: return ENOSYS;
00942 case kXR_noserver: return EHOSTUNREACH;
00943 case kXR_NotFile: return ENOTBLK;
00944 case kXR_isDirectory: return EISDIR;
00945 case kXR_Cancelled: return ECANCELED;
00946 case kXR_ChkLenErr: return EDOM;
00947 case kXR_ChkSumErr: return EDOM;
00948 case kXR_inProgress: return EINPROGRESS;
00949 case kXR_overQuota: return EDQUOT;
00950 case kXR_SigVerErr: return EILSEQ;
00951 case kXR_DecryptErr: return ERANGE;
00952 case kXR_Overloaded: return EUSERS;
00953 default: return ENOMSG;
00954 }
00955 }
00956
00957 static const char *errName(kXR_int32 errCode);
00958
00959 static const char *reqName(kXR_unt16 reqCode);
00960 };
00961 #endif