UNPKG

@jsonjoy.com/json-pack

Version:

High-performance JSON serialization library

209 lines 7.53 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NlmDecoder = void 0; const tslib_1 = require("tslib"); const Reader_1 = require("@jsonjoy.com/buffers/lib/Reader"); const XdrDecoder_1 = require("../../../xdr/XdrDecoder"); const errors_1 = require("../errors"); const msg = tslib_1.__importStar(require("./messages")); const structs = tslib_1.__importStar(require("./structs")); class NlmDecoder { constructor(reader = new Reader_1.Reader()) { this.xdr = new XdrDecoder_1.XdrDecoder(reader); } decodeMessage(reader, proc, isRequest) { this.xdr.reader = reader; const startPos = reader.x; try { if (isRequest) { return this.decodeRequest(proc); } else { return this.decodeResponse(proc); } } catch (err) { if (err instanceof RangeError) { reader.x = startPos; return undefined; } throw err; } } decodeRequest(proc) { switch (proc) { case 0 /* NlmProc.NULL */: return undefined; case 1 /* NlmProc.TEST */: return this.decodeTestRequest(); case 2 /* NlmProc.LOCK */: return this.decodeLockRequest(); case 3 /* NlmProc.CANCEL */: return this.decodeCancelRequest(); case 4 /* NlmProc.UNLOCK */: return this.decodeUnlockRequest(); case 5 /* NlmProc.GRANTED */: return this.decodeGrantedRequest(); case 20 /* NlmProc.SHARE */: return this.decodeShareRequest(); case 21 /* NlmProc.UNSHARE */: return this.decodeUnshareRequest(); case 22 /* NlmProc.NM_LOCK */: return this.decodeNmLockRequest(); case 23 /* NlmProc.FREE_ALL */: return this.decodeFreeAllRequest(); default: throw new errors_1.Nfsv3DecodingError(`Unknown NLM procedure: ${proc}`); } } decodeResponse(proc) { switch (proc) { case 0 /* NlmProc.NULL */: return undefined; case 1 /* NlmProc.TEST */: return this.decodeTestResponse(); case 2 /* NlmProc.LOCK */: case 3 /* NlmProc.CANCEL */: case 4 /* NlmProc.UNLOCK */: case 5 /* NlmProc.GRANTED */: case 22 /* NlmProc.NM_LOCK */: return this.decodeResponse4(); case 20 /* NlmProc.SHARE */: case 21 /* NlmProc.UNSHARE */: return this.decodeShareResponse(); default: throw new errors_1.Nfsv3DecodingError(`Unknown NLM procedure: ${proc}`); } } readCookie() { const data = this.xdr.readVarlenOpaque(); return new Reader_1.Reader(data); } readNetobj() { const data = this.xdr.readVarlenOpaque(); return new Reader_1.Reader(data); } readNlm4Holder() { const xdr = this.xdr; const exclusive = xdr.readBoolean(); const svid = xdr.readInt(); const oh = this.readNetobj(); const offset = xdr.readUnsignedHyper(); const length = xdr.readUnsignedHyper(); return new structs.Nlm4Holder(exclusive, svid, oh, offset, length); } readNlm4Lock() { const xdr = this.xdr; const callerName = xdr.readString(); const fh = this.readNetobj(); const oh = this.readNetobj(); const svid = xdr.readInt(); const offset = xdr.readUnsignedHyper(); const length = xdr.readUnsignedHyper(); return new structs.Nlm4Lock(callerName, fh, oh, svid, offset, length); } readNlm4Share() { const xdr = this.xdr; const callerName = xdr.readString(); const fh = this.readNetobj(); const oh = this.readNetobj(); const mode = xdr.readUnsignedInt(); const access = xdr.readUnsignedInt(); return new structs.Nlm4Share(callerName, fh, oh, mode, access); } readTestArgs() { const cookie = this.readCookie(); const exclusive = this.xdr.readBoolean(); const lock = this.readNlm4Lock(); return new msg.Nlm4TestArgs(cookie, exclusive, lock); } readLockArgs() { const xdr = this.xdr; const cookie = this.readCookie(); const block = xdr.readBoolean(); const exclusive = xdr.readBoolean(); const lock = this.readNlm4Lock(); const reclaim = xdr.readBoolean(); const state = xdr.readInt(); return new msg.Nlm4LockArgs(cookie, block, exclusive, lock, reclaim, state); } readCancelArgs() { const xdr = this.xdr; const cookie = this.readCookie(); const block = xdr.readBoolean(); const exclusive = xdr.readBoolean(); const lock = this.readNlm4Lock(); return new msg.Nlm4CancelArgs(cookie, block, exclusive, lock); } readUnlockArgs() { const cookie = this.readCookie(); const lock = this.readNlm4Lock(); return new msg.Nlm4UnlockArgs(cookie, lock); } readShareArgs() { const cookie = this.readCookie(); const share = this.readNlm4Share(); const reclaim = this.xdr.readBoolean(); return new msg.Nlm4ShareArgs(cookie, share, reclaim); } decodeTestRequest() { const args = this.readTestArgs(); return new msg.Nlm4TestRequest(args); } decodeTestResponse() { const xdr = this.xdr; const cookie = this.readCookie(); const stat = xdr.readUnsignedInt(); const holder = stat === 1 /* Nlm4Stat.NLM4_DENIED */ ? this.readNlm4Holder() : undefined; return new msg.Nlm4TestResponse(cookie, stat, holder); } decodeLockRequest() { const args = this.readLockArgs(); return new msg.Nlm4LockRequest(args); } decodeResponse4() { const cookie = this.readCookie(); const stat = this.xdr.readUnsignedInt(); return new msg.Nlm4Response(cookie, stat); } decodeCancelRequest() { const args = this.readCancelArgs(); return new msg.Nlm4CancelRequest(args); } decodeUnlockRequest() { const args = this.readUnlockArgs(); return new msg.Nlm4UnlockRequest(args); } decodeGrantedRequest() { const args = this.readTestArgs(); return new msg.Nlm4GrantedRequest(args); } decodeShareRequest() { const args = this.readShareArgs(); return new msg.Nlm4ShareRequest(args); } decodeShareResponse() { const xdr = this.xdr; const cookie = this.readCookie(); const stat = xdr.readUnsignedInt(); const sequence = xdr.readInt(); return new msg.Nlm4ShareResponse(cookie, stat, sequence); } decodeUnshareRequest() { const args = this.readShareArgs(); return new msg.Nlm4UnshareRequest(args); } decodeNmLockRequest() { const args = this.readLockArgs(); return new msg.Nlm4NmLockRequest(args); } decodeFreeAllRequest() { const xdr = this.xdr; const name = xdr.readString(); const state = xdr.readInt(); const notify = new structs.Nlm4Notify(name, state); return new msg.Nlm4FreeAllRequest(notify); } } exports.NlmDecoder = NlmDecoder; //# sourceMappingURL=NlmDecoder.js.map