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