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