182 lines
5.5 KiB
JavaScript
182 lines
5.5 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.NlmEncoder = void 0;
|
|
const Writer_1 = require("@jsonjoy.com/util/lib/buffers/Writer");
|
|
const XdrEncoder_1 = require("../../../xdr/XdrEncoder");
|
|
const errors_1 = require("../errors");
|
|
class NlmEncoder {
|
|
constructor(writer = new Writer_1.Writer()) {
|
|
this.writer = writer;
|
|
this.xdr = new XdrEncoder_1.XdrEncoder(writer);
|
|
}
|
|
encodeMessage(message, proc, isRequest) {
|
|
if (isRequest)
|
|
this.writeRequest(message, proc);
|
|
else
|
|
this.writeResponse(message, proc);
|
|
return this.writer.flush();
|
|
}
|
|
writeMessage(message, proc, isRequest) {
|
|
if (isRequest)
|
|
this.writeRequest(message, proc);
|
|
else
|
|
this.writeResponse(message, proc);
|
|
}
|
|
writeRequest(request, proc) {
|
|
switch (proc) {
|
|
case 0:
|
|
return;
|
|
case 1:
|
|
return this.writeTestRequest(request);
|
|
case 2:
|
|
return this.writeLockRequest(request);
|
|
case 3:
|
|
return this.writeCancelRequest(request);
|
|
case 4:
|
|
return this.writeUnlockRequest(request);
|
|
case 5:
|
|
return this.writeGrantedRequest(request);
|
|
case 20:
|
|
return this.writeShareRequest(request);
|
|
case 21:
|
|
return this.writeUnshareRequest(request);
|
|
case 22:
|
|
return this.writeNmLockRequest(request);
|
|
case 23:
|
|
return this.writeFreeAllRequest(request);
|
|
default:
|
|
throw new errors_1.Nfsv3EncodingError(`Unknown NLM procedure: ${proc}`);
|
|
}
|
|
}
|
|
writeResponse(response, proc) {
|
|
switch (proc) {
|
|
case 0:
|
|
return;
|
|
case 1:
|
|
return this.writeTestResponse(response);
|
|
case 2:
|
|
case 3:
|
|
case 4:
|
|
case 5:
|
|
case 22:
|
|
return this.writeResponse4(response);
|
|
case 20:
|
|
case 21:
|
|
return this.writeShareResponse(response);
|
|
default:
|
|
throw new errors_1.Nfsv3EncodingError(`Unknown NLM procedure: ${proc}`);
|
|
}
|
|
}
|
|
writeCookie(cookie) {
|
|
const data = cookie.uint8;
|
|
this.xdr.writeVarlenOpaque(data);
|
|
}
|
|
writeNetobj(obj) {
|
|
const data = obj.uint8;
|
|
this.xdr.writeVarlenOpaque(data);
|
|
}
|
|
writeNlm4Holder(holder) {
|
|
const xdr = this.xdr;
|
|
xdr.writeBoolean(holder.exclusive);
|
|
xdr.writeInt(holder.svid);
|
|
this.writeNetobj(holder.oh);
|
|
xdr.writeUnsignedHyper(holder.offset);
|
|
xdr.writeUnsignedHyper(holder.length);
|
|
}
|
|
writeNlm4Lock(lock) {
|
|
const xdr = this.xdr;
|
|
xdr.writeStr(lock.callerName);
|
|
this.writeNetobj(lock.fh);
|
|
this.writeNetobj(lock.oh);
|
|
xdr.writeInt(lock.svid);
|
|
xdr.writeUnsignedHyper(lock.offset);
|
|
xdr.writeUnsignedHyper(lock.length);
|
|
}
|
|
writeNlm4Share(share) {
|
|
const xdr = this.xdr;
|
|
xdr.writeStr(share.callerName);
|
|
this.writeNetobj(share.fh);
|
|
this.writeNetobj(share.oh);
|
|
xdr.writeUnsignedInt(share.mode);
|
|
xdr.writeUnsignedInt(share.access);
|
|
}
|
|
writeTestArgs(args) {
|
|
this.writeCookie(args.cookie);
|
|
this.xdr.writeBoolean(args.exclusive);
|
|
this.writeNlm4Lock(args.lock);
|
|
}
|
|
writeLockArgs(args) {
|
|
const xdr = this.xdr;
|
|
this.writeCookie(args.cookie);
|
|
xdr.writeBoolean(args.block);
|
|
xdr.writeBoolean(args.exclusive);
|
|
this.writeNlm4Lock(args.lock);
|
|
xdr.writeBoolean(args.reclaim);
|
|
xdr.writeInt(args.state);
|
|
}
|
|
writeCancelArgs(args) {
|
|
const xdr = this.xdr;
|
|
this.writeCookie(args.cookie);
|
|
xdr.writeBoolean(args.block);
|
|
xdr.writeBoolean(args.exclusive);
|
|
this.writeNlm4Lock(args.lock);
|
|
}
|
|
writeUnlockArgs(args) {
|
|
this.writeCookie(args.cookie);
|
|
this.writeNlm4Lock(args.lock);
|
|
}
|
|
writeShareArgs(args) {
|
|
this.writeCookie(args.cookie);
|
|
this.writeNlm4Share(args.share);
|
|
this.xdr.writeBoolean(args.reclaim);
|
|
}
|
|
writeTestRequest(req) {
|
|
this.writeTestArgs(req.args);
|
|
}
|
|
writeTestResponse(res) {
|
|
const xdr = this.xdr;
|
|
this.writeCookie(res.cookie);
|
|
xdr.writeUnsignedInt(res.stat);
|
|
if (res.stat === 1 && res.holder) {
|
|
this.writeNlm4Holder(res.holder);
|
|
}
|
|
}
|
|
writeLockRequest(req) {
|
|
this.writeLockArgs(req.args);
|
|
}
|
|
writeResponse4(res) {
|
|
this.writeCookie(res.cookie);
|
|
this.xdr.writeUnsignedInt(res.stat);
|
|
}
|
|
writeCancelRequest(req) {
|
|
this.writeCancelArgs(req.args);
|
|
}
|
|
writeUnlockRequest(req) {
|
|
this.writeUnlockArgs(req.args);
|
|
}
|
|
writeGrantedRequest(req) {
|
|
this.writeTestArgs(req.args);
|
|
}
|
|
writeShareRequest(req) {
|
|
this.writeShareArgs(req.args);
|
|
}
|
|
writeShareResponse(res) {
|
|
const xdr = this.xdr;
|
|
this.writeCookie(res.cookie);
|
|
xdr.writeUnsignedInt(res.stat);
|
|
xdr.writeInt(res.sequence);
|
|
}
|
|
writeUnshareRequest(req) {
|
|
this.writeShareArgs(req.args);
|
|
}
|
|
writeNmLockRequest(req) {
|
|
this.writeLockArgs(req.args);
|
|
}
|
|
writeFreeAllRequest(req) {
|
|
const xdr = this.xdr;
|
|
xdr.writeStr(req.notify.name);
|
|
xdr.writeInt(req.notify.state);
|
|
}
|
|
}
|
|
exports.NlmEncoder = NlmEncoder;
|
|
//# sourceMappingURL=NlmEncoder.js.map
|