NlmEncoder.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.NlmEncoder = void 0;
  4. const Writer_1 = require("@jsonjoy.com/util/lib/buffers/Writer");
  5. const XdrEncoder_1 = require("../../../xdr/XdrEncoder");
  6. const errors_1 = require("../errors");
  7. class NlmEncoder {
  8. constructor(writer = new Writer_1.Writer()) {
  9. this.writer = writer;
  10. this.xdr = new XdrEncoder_1.XdrEncoder(writer);
  11. }
  12. encodeMessage(message, proc, isRequest) {
  13. if (isRequest)
  14. this.writeRequest(message, proc);
  15. else
  16. this.writeResponse(message, proc);
  17. return this.writer.flush();
  18. }
  19. writeMessage(message, proc, isRequest) {
  20. if (isRequest)
  21. this.writeRequest(message, proc);
  22. else
  23. this.writeResponse(message, proc);
  24. }
  25. writeRequest(request, proc) {
  26. switch (proc) {
  27. case 0:
  28. return;
  29. case 1:
  30. return this.writeTestRequest(request);
  31. case 2:
  32. return this.writeLockRequest(request);
  33. case 3:
  34. return this.writeCancelRequest(request);
  35. case 4:
  36. return this.writeUnlockRequest(request);
  37. case 5:
  38. return this.writeGrantedRequest(request);
  39. case 20:
  40. return this.writeShareRequest(request);
  41. case 21:
  42. return this.writeUnshareRequest(request);
  43. case 22:
  44. return this.writeNmLockRequest(request);
  45. case 23:
  46. return this.writeFreeAllRequest(request);
  47. default:
  48. throw new errors_1.Nfsv3EncodingError(`Unknown NLM procedure: ${proc}`);
  49. }
  50. }
  51. writeResponse(response, proc) {
  52. switch (proc) {
  53. case 0:
  54. return;
  55. case 1:
  56. return this.writeTestResponse(response);
  57. case 2:
  58. case 3:
  59. case 4:
  60. case 5:
  61. case 22:
  62. return this.writeResponse4(response);
  63. case 20:
  64. case 21:
  65. return this.writeShareResponse(response);
  66. default:
  67. throw new errors_1.Nfsv3EncodingError(`Unknown NLM procedure: ${proc}`);
  68. }
  69. }
  70. writeCookie(cookie) {
  71. const data = cookie.uint8;
  72. this.xdr.writeVarlenOpaque(data);
  73. }
  74. writeNetobj(obj) {
  75. const data = obj.uint8;
  76. this.xdr.writeVarlenOpaque(data);
  77. }
  78. writeNlm4Holder(holder) {
  79. const xdr = this.xdr;
  80. xdr.writeBoolean(holder.exclusive);
  81. xdr.writeInt(holder.svid);
  82. this.writeNetobj(holder.oh);
  83. xdr.writeUnsignedHyper(holder.offset);
  84. xdr.writeUnsignedHyper(holder.length);
  85. }
  86. writeNlm4Lock(lock) {
  87. const xdr = this.xdr;
  88. xdr.writeStr(lock.callerName);
  89. this.writeNetobj(lock.fh);
  90. this.writeNetobj(lock.oh);
  91. xdr.writeInt(lock.svid);
  92. xdr.writeUnsignedHyper(lock.offset);
  93. xdr.writeUnsignedHyper(lock.length);
  94. }
  95. writeNlm4Share(share) {
  96. const xdr = this.xdr;
  97. xdr.writeStr(share.callerName);
  98. this.writeNetobj(share.fh);
  99. this.writeNetobj(share.oh);
  100. xdr.writeUnsignedInt(share.mode);
  101. xdr.writeUnsignedInt(share.access);
  102. }
  103. writeTestArgs(args) {
  104. this.writeCookie(args.cookie);
  105. this.xdr.writeBoolean(args.exclusive);
  106. this.writeNlm4Lock(args.lock);
  107. }
  108. writeLockArgs(args) {
  109. const xdr = this.xdr;
  110. this.writeCookie(args.cookie);
  111. xdr.writeBoolean(args.block);
  112. xdr.writeBoolean(args.exclusive);
  113. this.writeNlm4Lock(args.lock);
  114. xdr.writeBoolean(args.reclaim);
  115. xdr.writeInt(args.state);
  116. }
  117. writeCancelArgs(args) {
  118. const xdr = this.xdr;
  119. this.writeCookie(args.cookie);
  120. xdr.writeBoolean(args.block);
  121. xdr.writeBoolean(args.exclusive);
  122. this.writeNlm4Lock(args.lock);
  123. }
  124. writeUnlockArgs(args) {
  125. this.writeCookie(args.cookie);
  126. this.writeNlm4Lock(args.lock);
  127. }
  128. writeShareArgs(args) {
  129. this.writeCookie(args.cookie);
  130. this.writeNlm4Share(args.share);
  131. this.xdr.writeBoolean(args.reclaim);
  132. }
  133. writeTestRequest(req) {
  134. this.writeTestArgs(req.args);
  135. }
  136. writeTestResponse(res) {
  137. const xdr = this.xdr;
  138. this.writeCookie(res.cookie);
  139. xdr.writeUnsignedInt(res.stat);
  140. if (res.stat === 1 && res.holder) {
  141. this.writeNlm4Holder(res.holder);
  142. }
  143. }
  144. writeLockRequest(req) {
  145. this.writeLockArgs(req.args);
  146. }
  147. writeResponse4(res) {
  148. this.writeCookie(res.cookie);
  149. this.xdr.writeUnsignedInt(res.stat);
  150. }
  151. writeCancelRequest(req) {
  152. this.writeCancelArgs(req.args);
  153. }
  154. writeUnlockRequest(req) {
  155. this.writeUnlockArgs(req.args);
  156. }
  157. writeGrantedRequest(req) {
  158. this.writeTestArgs(req.args);
  159. }
  160. writeShareRequest(req) {
  161. this.writeShareArgs(req.args);
  162. }
  163. writeShareResponse(res) {
  164. const xdr = this.xdr;
  165. this.writeCookie(res.cookie);
  166. xdr.writeUnsignedInt(res.stat);
  167. xdr.writeInt(res.sequence);
  168. }
  169. writeUnshareRequest(req) {
  170. this.writeShareArgs(req.args);
  171. }
  172. writeNmLockRequest(req) {
  173. this.writeLockArgs(req.args);
  174. }
  175. writeFreeAllRequest(req) {
  176. const xdr = this.xdr;
  177. xdr.writeStr(req.notify.name);
  178. xdr.writeInt(req.notify.state);
  179. }
  180. }
  181. exports.NlmEncoder = NlmEncoder;
  182. //# sourceMappingURL=NlmEncoder.js.map