format.js 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.formatNfsv4CompoundResponse = exports.formatNfsv4CompoundRequest = exports.formatNfsv4Response = exports.formatNfsv4Request = exports.formatNfsv4Bitmap = exports.formatNfsv4Mode = exports.formatNfsv4Access = exports.formatNfsv4LockType = exports.formatNfsv4DelegType = exports.formatNfsv4OpenClaimType = exports.formatNfsv4OpenDeny = exports.formatNfsv4OpenAccess = exports.formatNfsv4OpenFlags = exports.formatNfsv4CreateMode = exports.formatNfsv4StableHow = exports.formatNfsv4TimeHow = exports.formatNfsv4FType = exports.formatNfsv4Attr = exports.formatNfsv4Op = exports.formatNfsv4Stat = void 0;
  4. const tslib_1 = require("tslib");
  5. const msg = tslib_1.__importStar(require("./messages"));
  6. const attributes_1 = require("./attributes");
  7. const printTree_1 = require("tree-dump/lib/printTree");
  8. const formatNfsv4Stat = (stat) => {
  9. switch (stat) {
  10. case 0:
  11. return 'NFS4_OK';
  12. case 1:
  13. return 'NFS4ERR_PERM';
  14. case 2:
  15. return 'NFS4ERR_NOENT';
  16. case 5:
  17. return 'NFS4ERR_IO';
  18. case 6:
  19. return 'NFS4ERR_NXIO';
  20. case 13:
  21. return 'NFS4ERR_ACCESS';
  22. case 17:
  23. return 'NFS4ERR_EXIST';
  24. case 18:
  25. return 'NFS4ERR_XDEV';
  26. case 20:
  27. return 'NFS4ERR_NOTDIR';
  28. case 21:
  29. return 'NFS4ERR_ISDIR';
  30. case 22:
  31. return 'NFS4ERR_INVAL';
  32. case 27:
  33. return 'NFS4ERR_FBIG';
  34. case 28:
  35. return 'NFS4ERR_NOSPC';
  36. case 30:
  37. return 'NFS4ERR_ROFS';
  38. case 31:
  39. return 'NFS4ERR_MLINK';
  40. case 63:
  41. return 'NFS4ERR_NAMETOOLONG';
  42. case 66:
  43. return 'NFS4ERR_NOTEMPTY';
  44. case 69:
  45. return 'NFS4ERR_DQUOT';
  46. case 70:
  47. return 'NFS4ERR_STALE';
  48. case 10001:
  49. return 'NFS4ERR_BADHANDLE';
  50. case 10003:
  51. return 'NFS4ERR_BAD_COOKIE';
  52. case 10004:
  53. return 'NFS4ERR_NOTSUPP';
  54. case 10005:
  55. return 'NFS4ERR_TOOSMALL';
  56. case 10006:
  57. return 'NFS4ERR_SERVERFAULT';
  58. case 10007:
  59. return 'NFS4ERR_BADTYPE';
  60. case 10008:
  61. return 'NFS4ERR_DELAY';
  62. case 10009:
  63. return 'NFS4ERR_SAME';
  64. case 10010:
  65. return 'NFS4ERR_DENIED';
  66. case 10011:
  67. return 'NFS4ERR_EXPIRED';
  68. case 10012:
  69. return 'NFS4ERR_LOCKED';
  70. case 10013:
  71. return 'NFS4ERR_GRACE';
  72. case 10014:
  73. return 'NFS4ERR_FHEXPIRED';
  74. case 10015:
  75. return 'NFS4ERR_SHARE_DENIED';
  76. case 10016:
  77. return 'NFS4ERR_WRONGSEC';
  78. case 10017:
  79. return 'NFS4ERR_CLID_INUSE';
  80. case 10018:
  81. return 'NFS4ERR_RESOURCE';
  82. case 10019:
  83. return 'NFS4ERR_MOVED';
  84. case 10020:
  85. return 'NFS4ERR_NOFILEHANDLE';
  86. case 10021:
  87. return 'NFS4ERR_MINOR_VERS_MISMATCH';
  88. case 10022:
  89. return 'NFS4ERR_STALE_CLIENTID';
  90. case 10023:
  91. return 'NFS4ERR_STALE_STATEID';
  92. case 10024:
  93. return 'NFS4ERR_OLD_STATEID';
  94. case 10025:
  95. return 'NFS4ERR_BAD_STATEID';
  96. case 10026:
  97. return 'NFS4ERR_BAD_SEQID';
  98. case 10027:
  99. return 'NFS4ERR_NOT_SAME';
  100. case 10028:
  101. return 'NFS4ERR_LOCK_RANGE';
  102. case 10029:
  103. return 'NFS4ERR_SYMLINK';
  104. case 10030:
  105. return 'NFS4ERR_RESTOREFH';
  106. case 10031:
  107. return 'NFS4ERR_LEASE_MOVED';
  108. case 10032:
  109. return 'NFS4ERR_ATTRNOTSUPP';
  110. case 10033:
  111. return 'NFS4ERR_NO_GRACE';
  112. case 10034:
  113. return 'NFS4ERR_RECLAIM_BAD';
  114. case 10035:
  115. return 'NFS4ERR_RECLAIM_CONFLICT';
  116. case 10036:
  117. return 'NFS4ERR_BADXDR';
  118. case 10037:
  119. return 'NFS4ERR_LOCKS_HELD';
  120. case 10038:
  121. return 'NFS4ERR_OPENMODE';
  122. case 10039:
  123. return 'NFS4ERR_BADOWNER';
  124. case 10040:
  125. return 'NFS4ERR_BADCHAR';
  126. case 10041:
  127. return 'NFS4ERR_BADNAME';
  128. case 10042:
  129. return 'NFS4ERR_BAD_RANGE';
  130. case 10043:
  131. return 'NFS4ERR_LOCK_NOTSUPP';
  132. case 10044:
  133. return 'NFS4ERR_OP_ILLEGAL';
  134. case 10045:
  135. return 'NFS4ERR_DEADLOCK';
  136. case 10046:
  137. return 'NFS4ERR_FILE_OPEN';
  138. case 10047:
  139. return 'NFS4ERR_ADMIN_REVOKED';
  140. case 10048:
  141. return 'NFS4ERR_CB_PATH_DOWN';
  142. default:
  143. return `Unknown(${stat})`;
  144. }
  145. };
  146. exports.formatNfsv4Stat = formatNfsv4Stat;
  147. const formatNfsv4Op = (op) => {
  148. switch (op) {
  149. case 3:
  150. return 'ACCESS';
  151. case 4:
  152. return 'CLOSE';
  153. case 5:
  154. return 'COMMIT';
  155. case 6:
  156. return 'CREATE';
  157. case 7:
  158. return 'DELEGPURGE';
  159. case 8:
  160. return 'DELEGRETURN';
  161. case 9:
  162. return 'GETATTR';
  163. case 10:
  164. return 'GETFH';
  165. case 11:
  166. return 'LINK';
  167. case 12:
  168. return 'LOCK';
  169. case 13:
  170. return 'LOCKT';
  171. case 14:
  172. return 'LOCKU';
  173. case 15:
  174. return 'LOOKUP';
  175. case 16:
  176. return 'LOOKUPP';
  177. case 17:
  178. return 'NVERIFY';
  179. case 18:
  180. return 'OPEN';
  181. case 19:
  182. return 'OPENATTR';
  183. case 20:
  184. return 'OPEN_CONFIRM';
  185. case 21:
  186. return 'OPEN_DOWNGRADE';
  187. case 22:
  188. return 'PUTFH';
  189. case 23:
  190. return 'PUTPUBFH';
  191. case 24:
  192. return 'PUTROOTFH';
  193. case 25:
  194. return 'READ';
  195. case 26:
  196. return 'READDIR';
  197. case 27:
  198. return 'READLINK';
  199. case 28:
  200. return 'REMOVE';
  201. case 29:
  202. return 'RENAME';
  203. case 30:
  204. return 'RENEW';
  205. case 31:
  206. return 'RESTOREFH';
  207. case 32:
  208. return 'SAVEFH';
  209. case 33:
  210. return 'SECINFO';
  211. case 34:
  212. return 'SETATTR';
  213. case 35:
  214. return 'SETCLIENTID';
  215. case 36:
  216. return 'SETCLIENTID_CONFIRM';
  217. case 37:
  218. return 'VERIFY';
  219. case 38:
  220. return 'WRITE';
  221. case 39:
  222. return 'RELEASE_LOCKOWNER';
  223. case 10044:
  224. return 'ILLEGAL';
  225. default:
  226. return `Unknown(${op})`;
  227. }
  228. };
  229. exports.formatNfsv4Op = formatNfsv4Op;
  230. const formatNfsv4Attr = (attr) => {
  231. switch (attr) {
  232. case 0:
  233. return 'supported_attrs';
  234. case 1:
  235. return 'type';
  236. case 2:
  237. return 'fh_expire_type';
  238. case 3:
  239. return 'change';
  240. case 4:
  241. return 'size';
  242. case 5:
  243. return 'link_support';
  244. case 6:
  245. return 'symlink_support';
  246. case 7:
  247. return 'named_attr';
  248. case 8:
  249. return 'fsid';
  250. case 9:
  251. return 'unique_handles';
  252. case 10:
  253. return 'lease_time';
  254. case 11:
  255. return 'rdattr_error';
  256. case 12:
  257. return 'acl';
  258. case 13:
  259. return 'aclsupport';
  260. case 14:
  261. return 'archive';
  262. case 15:
  263. return 'can_set_time';
  264. case 16:
  265. return 'case_insensitive';
  266. case 17:
  267. return 'case_preserving';
  268. case 18:
  269. return 'chown_restricted';
  270. case 19:
  271. return 'filehandle';
  272. case 20:
  273. return 'fileid';
  274. case 21:
  275. return 'files_avail';
  276. case 22:
  277. return 'files_free';
  278. case 23:
  279. return 'files_total';
  280. case 24:
  281. return 'fs_locations';
  282. case 25:
  283. return 'hidden';
  284. case 26:
  285. return 'homogeneous';
  286. case 27:
  287. return 'maxfilesize';
  288. case 28:
  289. return 'maxlink';
  290. case 29:
  291. return 'maxname';
  292. case 30:
  293. return 'maxread';
  294. case 31:
  295. return 'maxwrite';
  296. case 32:
  297. return 'mimetype';
  298. case 33:
  299. return 'mode';
  300. case 34:
  301. return 'no_trunc';
  302. case 35:
  303. return 'numlinks';
  304. case 36:
  305. return 'owner';
  306. case 37:
  307. return 'owner_group';
  308. case 38:
  309. return 'quota_avail_hard';
  310. case 39:
  311. return 'quota_avail_soft';
  312. case 40:
  313. return 'quota_used';
  314. case 41:
  315. return 'rawdev';
  316. case 42:
  317. return 'space_avail';
  318. case 43:
  319. return 'space_free';
  320. case 44:
  321. return 'space_total';
  322. case 45:
  323. return 'space_used';
  324. case 46:
  325. return 'system';
  326. case 47:
  327. return 'time_access';
  328. case 48:
  329. return 'time_access_set';
  330. case 49:
  331. return 'time_backup';
  332. case 50:
  333. return 'time_create';
  334. case 51:
  335. return 'time_delta';
  336. case 52:
  337. return 'time_metadata';
  338. case 53:
  339. return 'time_modify';
  340. case 54:
  341. return 'time_modify_set';
  342. case 55:
  343. return 'mounted_on_fileid';
  344. default:
  345. return `Unknown(${attr})`;
  346. }
  347. };
  348. exports.formatNfsv4Attr = formatNfsv4Attr;
  349. const formatNfsv4FType = (ftype) => {
  350. switch (ftype) {
  351. case 1:
  352. return 'NF4REG';
  353. case 2:
  354. return 'NF4DIR';
  355. case 3:
  356. return 'NF4BLK';
  357. case 4:
  358. return 'NF4CHR';
  359. case 5:
  360. return 'NF4LNK';
  361. case 6:
  362. return 'NF4SOCK';
  363. case 7:
  364. return 'NF4FIFO';
  365. case 8:
  366. return 'NF4ATTRDIR';
  367. case 9:
  368. return 'NF4NAMEDATTR';
  369. default:
  370. return `Unknown(${ftype})`;
  371. }
  372. };
  373. exports.formatNfsv4FType = formatNfsv4FType;
  374. const formatNfsv4TimeHow = (how) => {
  375. switch (how) {
  376. case 0:
  377. return 'SET_TO_SERVER_TIME4';
  378. case 1:
  379. return 'SET_TO_CLIENT_TIME4';
  380. default:
  381. return `Unknown(${how})`;
  382. }
  383. };
  384. exports.formatNfsv4TimeHow = formatNfsv4TimeHow;
  385. const formatNfsv4StableHow = (stable) => {
  386. switch (stable) {
  387. case 0:
  388. return 'UNSTABLE4';
  389. case 1:
  390. return 'DATA_SYNC4';
  391. case 2:
  392. return 'FILE_SYNC4';
  393. default:
  394. return `Unknown(${stable})`;
  395. }
  396. };
  397. exports.formatNfsv4StableHow = formatNfsv4StableHow;
  398. const formatNfsv4CreateMode = (mode) => {
  399. switch (mode) {
  400. case 0:
  401. return 'UNCHECKED4';
  402. case 1:
  403. return 'GUARDED4';
  404. case 2:
  405. return 'EXCLUSIVE4';
  406. default:
  407. return `Unknown(${mode})`;
  408. }
  409. };
  410. exports.formatNfsv4CreateMode = formatNfsv4CreateMode;
  411. const formatNfsv4OpenFlags = (flags) => {
  412. switch (flags) {
  413. case 0:
  414. return 'OPEN4_NOCREATE';
  415. case 1:
  416. return 'OPEN4_CREATE';
  417. default:
  418. return `Unknown(${flags})`;
  419. }
  420. };
  421. exports.formatNfsv4OpenFlags = formatNfsv4OpenFlags;
  422. const formatNfsv4OpenAccess = (access) => {
  423. switch (access) {
  424. case 1:
  425. return 'OPEN4_SHARE_ACCESS_READ';
  426. case 2:
  427. return 'OPEN4_SHARE_ACCESS_WRITE';
  428. case 3:
  429. return 'OPEN4_SHARE_ACCESS_BOTH';
  430. default:
  431. return `Unknown(${access})`;
  432. }
  433. };
  434. exports.formatNfsv4OpenAccess = formatNfsv4OpenAccess;
  435. const formatNfsv4OpenDeny = (deny) => {
  436. switch (deny) {
  437. case 0:
  438. return 'OPEN4_SHARE_DENY_NONE';
  439. case 1:
  440. return 'OPEN4_SHARE_DENY_READ';
  441. case 2:
  442. return 'OPEN4_SHARE_DENY_WRITE';
  443. case 3:
  444. return 'OPEN4_SHARE_DENY_BOTH';
  445. default:
  446. return `Unknown(${deny})`;
  447. }
  448. };
  449. exports.formatNfsv4OpenDeny = formatNfsv4OpenDeny;
  450. const formatNfsv4OpenClaimType = (claim) => {
  451. switch (claim) {
  452. case 0:
  453. return 'CLAIM_NULL';
  454. case 1:
  455. return 'CLAIM_PREVIOUS';
  456. case 2:
  457. return 'CLAIM_DELEGATE_CUR';
  458. case 3:
  459. return 'CLAIM_DELEGATE_PREV';
  460. default:
  461. return `Unknown(${claim})`;
  462. }
  463. };
  464. exports.formatNfsv4OpenClaimType = formatNfsv4OpenClaimType;
  465. const formatNfsv4DelegType = (deleg) => {
  466. switch (deleg) {
  467. case 0:
  468. return 'OPEN_DELEGATE_NONE';
  469. case 1:
  470. return 'OPEN_DELEGATE_READ';
  471. case 2:
  472. return 'OPEN_DELEGATE_WRITE';
  473. default:
  474. return `Unknown(${deleg})`;
  475. }
  476. };
  477. exports.formatNfsv4DelegType = formatNfsv4DelegType;
  478. const formatNfsv4LockType = (locktype) => {
  479. switch (locktype) {
  480. case 1:
  481. return 'READ_LT';
  482. case 2:
  483. return 'WRITE_LT';
  484. case 3:
  485. return 'READW_LT';
  486. case 4:
  487. return 'WRITEW_LT';
  488. default:
  489. return `Unknown(${locktype})`;
  490. }
  491. };
  492. exports.formatNfsv4LockType = formatNfsv4LockType;
  493. const formatNfsv4Access = (access) => {
  494. const flags = [];
  495. if (access & 1)
  496. flags.push('READ');
  497. if (access & 2)
  498. flags.push('LOOKUP');
  499. if (access & 4)
  500. flags.push('MODIFY');
  501. if (access & 8)
  502. flags.push('EXTEND');
  503. if (access & 16)
  504. flags.push('DELETE');
  505. if (access & 32)
  506. flags.push('EXECUTE');
  507. return flags.length > 0 ? flags.join('|') : `0x${access.toString(16)}`;
  508. };
  509. exports.formatNfsv4Access = formatNfsv4Access;
  510. const formatNfsv4Mode = (mode) => {
  511. const flags = [];
  512. if (mode & 2048)
  513. flags.push('SUID');
  514. if (mode & 1024)
  515. flags.push('SGID');
  516. if (mode & 512)
  517. flags.push('SVTX');
  518. if (mode & 256)
  519. flags.push('RUSR');
  520. if (mode & 128)
  521. flags.push('WUSR');
  522. if (mode & 64)
  523. flags.push('XUSR');
  524. if (mode & 32)
  525. flags.push('RGRP');
  526. if (mode & 16)
  527. flags.push('WGRP');
  528. if (mode & 8)
  529. flags.push('XGRP');
  530. if (mode & 4)
  531. flags.push('ROTH');
  532. if (mode & 2)
  533. flags.push('WOTH');
  534. if (mode & 1)
  535. flags.push('XOTH');
  536. const octal = mode.toString(8).padStart(4, '0');
  537. return flags.length > 0 ? `${octal} (${flags.join('|')})` : octal;
  538. };
  539. exports.formatNfsv4Mode = formatNfsv4Mode;
  540. const formatNfsv4Bitmap = (bitmap) => {
  541. const attrs = [];
  542. const attrNums = (0, attributes_1.parseBitmask)(bitmap.mask);
  543. for (const num of attrNums)
  544. attrs.push((0, exports.formatNfsv4Attr)(num));
  545. return attrs.length > 0 ? `[${attrs.join(', ')}]` : '[]';
  546. };
  547. exports.formatNfsv4Bitmap = formatNfsv4Bitmap;
  548. const formatBytes = (data, maxLen = 32) => {
  549. if (data.length === 0)
  550. return '[]';
  551. const hex = Array.from(data.slice(0, maxLen), (b) => b.toString(16).padStart(2, '0')).join(' ');
  552. return data.length > maxLen ? `[${hex}... (${data.length} bytes)]` : `[${hex}]`;
  553. };
  554. const formatStateid = (stateid, tab = '') => {
  555. return `Stateid { seqid = ${stateid.seqid}, other = ${formatBytes(stateid.other)} }`;
  556. };
  557. const formatFileHandle = (fh) => {
  558. return formatBytes(fh.data, 16);
  559. };
  560. const formatNfsv4Request = (req, tab = '') => {
  561. if (req instanceof msg.Nfsv4AccessRequest) {
  562. return `ACCESS access = ${(0, exports.formatNfsv4Access)(req.access)}`;
  563. }
  564. else if (req instanceof msg.Nfsv4CloseRequest) {
  565. return `CLOSE seqid = ${req.seqid}, stateid = ${formatStateid(req.openStateid, tab)}`;
  566. }
  567. else if (req instanceof msg.Nfsv4CommitRequest) {
  568. return `COMMIT offset = ${req.offset}, count = ${req.count}`;
  569. }
  570. else if (req instanceof msg.Nfsv4CreateRequest) {
  571. return `CREATE objtype = ${(0, exports.formatNfsv4FType)(req.objtype.type)}, objname = "${req.objname}"`;
  572. }
  573. else if (req instanceof msg.Nfsv4DelegpurgeRequest) {
  574. return `DELEGPURGE clientid = ${req.clientid}`;
  575. }
  576. else if (req instanceof msg.Nfsv4DelegreturnRequest) {
  577. return `DELEGRETURN stateid = ${formatStateid(req.delegStateid, tab)}`;
  578. }
  579. else if (req instanceof msg.Nfsv4GetattrRequest) {
  580. return `GETATTR attrs = ${(0, exports.formatNfsv4Bitmap)(req.attrRequest)}`;
  581. }
  582. else if (req instanceof msg.Nfsv4GetfhRequest) {
  583. return 'GETFH';
  584. }
  585. else if (req instanceof msg.Nfsv4LinkRequest) {
  586. return `LINK newname = "${req.newname}"`;
  587. }
  588. else if (req instanceof msg.Nfsv4LockRequest) {
  589. return `LOCK locktype = ${(0, exports.formatNfsv4LockType)(req.locktype)}, reclaim = ${req.reclaim}, offset = ${req.offset}, length = ${req.length}`;
  590. }
  591. else if (req instanceof msg.Nfsv4LocktRequest) {
  592. return `LOCKT locktype = ${(0, exports.formatNfsv4LockType)(req.locktype)}, offset = ${req.offset}, length = ${req.length}`;
  593. }
  594. else if (req instanceof msg.Nfsv4LockuRequest) {
  595. return `LOCKU locktype = ${(0, exports.formatNfsv4LockType)(req.locktype)}, seqid = ${req.seqid}, stateid = ${formatStateid(req.lockStateid, tab)}, offset = ${req.offset}, length = ${req.length}`;
  596. }
  597. else if (req instanceof msg.Nfsv4LookupRequest) {
  598. return `LOOKUP objname = "${req.objname}"`;
  599. }
  600. else if (req instanceof msg.Nfsv4LookuppRequest) {
  601. return 'LOOKUPP';
  602. }
  603. else if (req instanceof msg.Nfsv4NverifyRequest) {
  604. return `NVERIFY attrs = ${(0, exports.formatNfsv4Bitmap)(req.objAttributes.attrmask)}`;
  605. }
  606. else if (req instanceof msg.Nfsv4OpenRequest) {
  607. const createInfo = req.openhow.how ? `, createmode = ${(0, exports.formatNfsv4CreateMode)(req.openhow.how.mode)}` : '';
  608. return `OPEN seqid = ${req.seqid}, shareAccess = ${(0, exports.formatNfsv4OpenAccess)(req.shareAccess)}, shareDeny = ${(0, exports.formatNfsv4OpenDeny)(req.shareDeny)}, opentype = ${(0, exports.formatNfsv4OpenFlags)(req.openhow.opentype)}${createInfo}, claim = ${(0, exports.formatNfsv4OpenClaimType)(req.claim.claimType)}`;
  609. }
  610. else if (req instanceof msg.Nfsv4OpenattrRequest) {
  611. return `OPENATTR createdir = ${req.createdir}`;
  612. }
  613. else if (req instanceof msg.Nfsv4OpenConfirmRequest) {
  614. return `OPEN_CONFIRM stateid = ${formatStateid(req.openStateid, tab)}, seqid = ${req.seqid}`;
  615. }
  616. else if (req instanceof msg.Nfsv4OpenDowngradeRequest) {
  617. return `OPEN_DOWNGRADE stateid = ${formatStateid(req.openStateid, tab)}, seqid = ${req.seqid}, shareAccess = ${(0, exports.formatNfsv4OpenAccess)(req.shareAccess)}, shareDeny = ${(0, exports.formatNfsv4OpenDeny)(req.shareDeny)}`;
  618. }
  619. else if (req instanceof msg.Nfsv4PutfhRequest) {
  620. return `PUTFH fh = ${formatFileHandle(req.object)}`;
  621. }
  622. else if (req instanceof msg.Nfsv4PutpubfhRequest) {
  623. return 'PUTPUBFH';
  624. }
  625. else if (req instanceof msg.Nfsv4PutrootfhRequest) {
  626. return 'PUTROOTFH';
  627. }
  628. else if (req instanceof msg.Nfsv4ReadRequest) {
  629. return `READ stateid = ${formatStateid(req.stateid, tab)}, offset = ${req.offset}, count = ${req.count}`;
  630. }
  631. else if (req instanceof msg.Nfsv4ReaddirRequest) {
  632. return `READDIR cookie = ${req.cookie}, dircount = ${req.dircount}, maxcount = ${req.maxcount}, attrs = ${(0, exports.formatNfsv4Bitmap)(req.attrRequest)}`;
  633. }
  634. else if (req instanceof msg.Nfsv4ReadlinkRequest) {
  635. return 'READLINK';
  636. }
  637. else if (req instanceof msg.Nfsv4RemoveRequest) {
  638. return `REMOVE target = "${req.target}"`;
  639. }
  640. else if (req instanceof msg.Nfsv4RenameRequest) {
  641. return `RENAME oldname = "${req.oldname}", newname = "${req.newname}"`;
  642. }
  643. else if (req instanceof msg.Nfsv4RenewRequest) {
  644. return `RENEW clientid = ${req.clientid}`;
  645. }
  646. else if (req instanceof msg.Nfsv4RestorefhRequest) {
  647. return 'RESTOREFH';
  648. }
  649. else if (req instanceof msg.Nfsv4SavefhRequest) {
  650. return 'SAVEFH';
  651. }
  652. else if (req instanceof msg.Nfsv4SecinfoRequest) {
  653. return `SECINFO name = "${req.name}"`;
  654. }
  655. else if (req instanceof msg.Nfsv4SetattrRequest) {
  656. return `SETATTR stateid = ${formatStateid(req.stateid, tab)}, attrs = ${(0, exports.formatNfsv4Bitmap)(req.objAttributes.attrmask)}`;
  657. }
  658. else if (req instanceof msg.Nfsv4SetclientidRequest) {
  659. return `SETCLIENTID callbackIdent = ${req.callbackIdent}`;
  660. }
  661. else if (req instanceof msg.Nfsv4SetclientidConfirmRequest) {
  662. return `SETCLIENTID_CONFIRM clientid = ${req.clientid}`;
  663. }
  664. else if (req instanceof msg.Nfsv4VerifyRequest) {
  665. return `VERIFY attrs = ${(0, exports.formatNfsv4Bitmap)(req.objAttributes.attrmask)}`;
  666. }
  667. else if (req instanceof msg.Nfsv4WriteRequest) {
  668. return `WRITE stateid = ${formatStateid(req.stateid, tab)}, offset = ${req.offset}, stable = ${(0, exports.formatNfsv4StableHow)(req.stable)}, length = ${req.data.length}`;
  669. }
  670. else if (req instanceof msg.Nfsv4ReleaseLockOwnerRequest) {
  671. return 'RELEASE_LOCKOWNER';
  672. }
  673. else if (req instanceof msg.Nfsv4IllegalRequest) {
  674. return 'ILLEGAL';
  675. }
  676. return 'Unknown Request';
  677. };
  678. exports.formatNfsv4Request = formatNfsv4Request;
  679. const formatNfsv4Response = (res, tab = '') => {
  680. if (res instanceof msg.Nfsv4AccessResponse) {
  681. if (res.status === 0 && res.resok) {
  682. return `ACCESS (${(0, exports.formatNfsv4Stat)(res.status)}) supported = ${(0, exports.formatNfsv4Access)(res.resok.supported)}, access = ${(0, exports.formatNfsv4Access)(res.resok.access)}`;
  683. }
  684. return `ACCESS (${(0, exports.formatNfsv4Stat)(res.status)})`;
  685. }
  686. else if (res instanceof msg.Nfsv4CloseResponse) {
  687. const items = [];
  688. if (res.status === 0 && res.resok) {
  689. items.push((tab) => `stateid = ${formatStateid(res.resok.openStateid, tab)}`);
  690. }
  691. return `CLOSE (${(0, exports.formatNfsv4Stat)(res.status)})` + (0, printTree_1.printTree)(tab, items);
  692. }
  693. else if (res instanceof msg.Nfsv4CommitResponse) {
  694. return `COMMIT (${(0, exports.formatNfsv4Stat)(res.status)})`;
  695. }
  696. else if (res instanceof msg.Nfsv4CreateResponse) {
  697. return `CREATE (${(0, exports.formatNfsv4Stat)(res.status)})`;
  698. }
  699. else if (res instanceof msg.Nfsv4DelegpurgeResponse) {
  700. return `DELEGPURGE (${(0, exports.formatNfsv4Stat)(res.status)})`;
  701. }
  702. else if (res instanceof msg.Nfsv4DelegreturnResponse) {
  703. return `DELEGRETURN (${(0, exports.formatNfsv4Stat)(res.status)})`;
  704. }
  705. else if (res instanceof msg.Nfsv4GetattrResponse) {
  706. const items = [];
  707. if (res.status === 0 && res.resok) {
  708. items.push((tab) => `attrs = ${(0, exports.formatNfsv4Bitmap)(res.resok.objAttributes.attrmask)}`);
  709. }
  710. return `GETATTR (${(0, exports.formatNfsv4Stat)(res.status)})` + (0, printTree_1.printTree)(tab, items);
  711. }
  712. else if (res instanceof msg.Nfsv4GetfhResponse) {
  713. if (res.status === 0 && res.resok) {
  714. return `GETFH (${(0, exports.formatNfsv4Stat)(res.status)}) fh = ${formatFileHandle(res.resok.object)}`;
  715. }
  716. return `GETFH (${(0, exports.formatNfsv4Stat)(res.status)})`;
  717. }
  718. else if (res instanceof msg.Nfsv4LinkResponse) {
  719. return `LINK (${(0, exports.formatNfsv4Stat)(res.status)})`;
  720. }
  721. else if (res instanceof msg.Nfsv4LockResponse) {
  722. if (res.status === 0 && res.resok) {
  723. return `LOCK (${(0, exports.formatNfsv4Stat)(res.status)}) stateid = ${formatStateid(res.resok.lockStateid, tab)}`;
  724. }
  725. return `LOCK (${(0, exports.formatNfsv4Stat)(res.status)})`;
  726. }
  727. else if (res instanceof msg.Nfsv4LocktResponse) {
  728. return `LOCKT (${(0, exports.formatNfsv4Stat)(res.status)})`;
  729. }
  730. else if (res instanceof msg.Nfsv4LockuResponse) {
  731. if (res.status === 0 && res.resok) {
  732. return `LOCKU (${(0, exports.formatNfsv4Stat)(res.status)}) stateid = ${formatStateid(res.resok.lockStateid, tab)}`;
  733. }
  734. return `LOCKU (${(0, exports.formatNfsv4Stat)(res.status)})`;
  735. }
  736. else if (res instanceof msg.Nfsv4LookupResponse) {
  737. return `LOOKUP (${(0, exports.formatNfsv4Stat)(res.status)})`;
  738. }
  739. else if (res instanceof msg.Nfsv4LookuppResponse) {
  740. return `LOOKUPP (${(0, exports.formatNfsv4Stat)(res.status)})`;
  741. }
  742. else if (res instanceof msg.Nfsv4NverifyResponse) {
  743. return `NVERIFY (${(0, exports.formatNfsv4Stat)(res.status)})`;
  744. }
  745. else if (res instanceof msg.Nfsv4OpenResponse) {
  746. if (res.status === 0 && res.resok) {
  747. return `OPEN (${(0, exports.formatNfsv4Stat)(res.status)}) stateid = ${formatStateid(res.resok.stateid, tab)}`;
  748. }
  749. return `OPEN (${(0, exports.formatNfsv4Stat)(res.status)})`;
  750. }
  751. else if (res instanceof msg.Nfsv4OpenattrResponse) {
  752. return `OPENATTR (${(0, exports.formatNfsv4Stat)(res.status)})`;
  753. }
  754. else if (res instanceof msg.Nfsv4OpenConfirmResponse) {
  755. const items = [];
  756. if (res.status === 0 && res.resok) {
  757. items.push((tab) => `stateid = ${formatStateid(res.resok.openStateid, tab)}`);
  758. }
  759. return `OPEN_CONFIRM (${(0, exports.formatNfsv4Stat)(res.status)})` + (0, printTree_1.printTree)(tab, items);
  760. }
  761. else if (res instanceof msg.Nfsv4OpenDowngradeResponse) {
  762. const items = [];
  763. if (res.status === 0 && res.resok) {
  764. items.push((tab) => `stateid = ${formatStateid(res.resok.openStateid, tab)}`);
  765. }
  766. return `OPEN_DOWNGRADE (${(0, exports.formatNfsv4Stat)(res.status)})` + (0, printTree_1.printTree)(tab, items);
  767. }
  768. else if (res instanceof msg.Nfsv4PutfhResponse) {
  769. return `PUTFH (${(0, exports.formatNfsv4Stat)(res.status)})`;
  770. }
  771. else if (res instanceof msg.Nfsv4PutpubfhResponse) {
  772. return `PUTPUBFH (${(0, exports.formatNfsv4Stat)(res.status)})`;
  773. }
  774. else if (res instanceof msg.Nfsv4PutrootfhResponse) {
  775. return `PUTROOTFH (${(0, exports.formatNfsv4Stat)(res.status)})`;
  776. }
  777. else if (res instanceof msg.Nfsv4ReadResponse) {
  778. if (res.status === 0 && res.resok) {
  779. return `READ (${(0, exports.formatNfsv4Stat)(res.status)}) eof = ${res.resok.eof}, length = ${res.resok.data.length}`;
  780. }
  781. return `READ (${(0, exports.formatNfsv4Stat)(res.status)})`;
  782. }
  783. else if (res instanceof msg.Nfsv4ReaddirResponse) {
  784. return `READDIR (${(0, exports.formatNfsv4Stat)(res.status)})`;
  785. }
  786. else if (res instanceof msg.Nfsv4ReadlinkResponse) {
  787. const items = [];
  788. if (res.status === 0 && res.resok) {
  789. items.push((tab) => `link = "${res.resok.link}"`);
  790. }
  791. return `READLINK (${(0, exports.formatNfsv4Stat)(res.status)})` + (0, printTree_1.printTree)(tab, items);
  792. }
  793. else if (res instanceof msg.Nfsv4RemoveResponse) {
  794. return `REMOVE (${(0, exports.formatNfsv4Stat)(res.status)})`;
  795. }
  796. else if (res instanceof msg.Nfsv4RenameResponse) {
  797. return `RENAME (${(0, exports.formatNfsv4Stat)(res.status)})`;
  798. }
  799. else if (res instanceof msg.Nfsv4RenewResponse) {
  800. return `RENEW (${(0, exports.formatNfsv4Stat)(res.status)})`;
  801. }
  802. else if (res instanceof msg.Nfsv4RestorefhResponse) {
  803. return `RESTOREFH (${(0, exports.formatNfsv4Stat)(res.status)})`;
  804. }
  805. else if (res instanceof msg.Nfsv4SavefhResponse) {
  806. return `SAVEFH (${(0, exports.formatNfsv4Stat)(res.status)})`;
  807. }
  808. else if (res instanceof msg.Nfsv4SecinfoResponse) {
  809. return `SECINFO (${(0, exports.formatNfsv4Stat)(res.status)})`;
  810. }
  811. else if (res instanceof msg.Nfsv4SetattrResponse) {
  812. const items = [];
  813. if (res.status === 0 && res.resok) {
  814. items.push((tab) => `attrsset = ${(0, exports.formatNfsv4Bitmap)(res.resok.attrsset)}`);
  815. }
  816. return `SETATTR (${(0, exports.formatNfsv4Stat)(res.status)})` + (0, printTree_1.printTree)(tab, items);
  817. }
  818. else if (res instanceof msg.Nfsv4SetclientidResponse) {
  819. const items = [];
  820. if (res.status === 0 && res.resok) {
  821. items.push((tab) => `clientid = ${res.resok.clientid}`);
  822. }
  823. return `SETCLIENTID (${(0, exports.formatNfsv4Stat)(res.status)})` + (0, printTree_1.printTree)(tab, items);
  824. }
  825. else if (res instanceof msg.Nfsv4SetclientidConfirmResponse) {
  826. return `SETCLIENTID_CONFIRM (${(0, exports.formatNfsv4Stat)(res.status)})`;
  827. }
  828. else if (res instanceof msg.Nfsv4VerifyResponse) {
  829. return `VERIFY (${(0, exports.formatNfsv4Stat)(res.status)})`;
  830. }
  831. else if (res instanceof msg.Nfsv4WriteResponse) {
  832. const items = [];
  833. if (res.status === 0 && res.resok) {
  834. items.push((tab) => `count = ${res.resok.count}`);
  835. items.push((tab) => `committed = ${(0, exports.formatNfsv4StableHow)(res.resok.committed)}`);
  836. }
  837. return `WRITE (${(0, exports.formatNfsv4Stat)(res.status)})` + (0, printTree_1.printTree)(tab, items);
  838. }
  839. else if (res instanceof msg.Nfsv4ReleaseLockOwnerResponse) {
  840. return `RELEASE_LOCKOWNER (${(0, exports.formatNfsv4Stat)(res.status)})`;
  841. }
  842. else if (res instanceof msg.Nfsv4IllegalResponse) {
  843. return `ILLEGAL (${(0, exports.formatNfsv4Stat)(res.status)})`;
  844. }
  845. return 'Unknown Response';
  846. };
  847. exports.formatNfsv4Response = formatNfsv4Response;
  848. const formatNfsv4CompoundRequest = (req, tab = '') => {
  849. const items = [
  850. (tab) => `tag = "${req.tag}"`,
  851. (tab) => `minorversion = ${req.minorversion}`,
  852. ];
  853. req.argarray.forEach((op, i) => {
  854. items.push((tab) => `[${i}] ${(0, exports.formatNfsv4Request)(op, tab)}`);
  855. });
  856. return 'COMPOUND' + (0, printTree_1.printTree)(tab, items);
  857. };
  858. exports.formatNfsv4CompoundRequest = formatNfsv4CompoundRequest;
  859. const formatNfsv4CompoundResponse = (res, tab = '') => {
  860. const items = [
  861. (tab) => `status = ${(0, exports.formatNfsv4Stat)(res.status)}`,
  862. (tab) => `tag = "${res.tag}"`,
  863. ];
  864. res.resarray.forEach((op, i) => {
  865. items.push((tab) => `[${i}] ${(0, exports.formatNfsv4Response)(op, tab)}`);
  866. });
  867. return 'COMPOUND' + (0, printTree_1.printTree)(tab, items);
  868. };
  869. exports.formatNfsv4CompoundResponse = formatNfsv4CompoundResponse;
  870. //# sourceMappingURL=format.js.map