UNPKG

@jsonjoy.com/json-pack

Version:

High-performance JSON serialization library

176 lines 9.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Nfsv4CompoundProcCtx = void 0; const tslib_1 = require("tslib"); const msg = tslib_1.__importStar(require("../messages")); const format_1 = require("../format"); /** * NFS v4 COMPOUND Procedure Context, holds state for a single COMPOUND procedure * call. This state is injected into each operation handler called as part of * the COMPOUND procedure. */ class Nfsv4CompoundProcCtx { constructor(connection, req) { this.connection = connection; this.req = req; /** Current file handle */ this.cfh = null; /** Saved file handle */ this.sfh = null; } /** * Returns the principal associated with the current RPC call. For now, * this is a stub returning "none" since we don't have real authentication. * In a real implementation, this would extract the principal from the RPC * credentials in the connection's current RPC call context. * * - AUTH_NONE -> `none` * - AUTH_SYS -> `sys:machinename:uid` * - GSS -> `gss:client@REALM` * * @returns The principal associated with the current RPC call. */ getPrincipal() { return 'none'; } async exec() { const { req, connection } = this; const { ops, debug, logger } = connection; const { argarray, tag } = req; const length = argarray.length; let status = 0 /* Nfsv4Stat.NFS4_OK */; const resarray = []; OPS_LOOP: for (let i = 0; i < length; i++) { const op = argarray[i]; const opReq = op; let fn = void 0; let Response = void 0; if (op instanceof msg.Nfsv4AccessRequest) (fn = ops.ACCESS), (Response = msg.Nfsv4AccessResponse); else if (op instanceof msg.Nfsv4PutrootfhRequest) (fn = ops.PUTROOTFH), (Response = msg.Nfsv4PutrootfhResponse); else if (op instanceof msg.Nfsv4PutpubfhRequest) (fn = ops.PUTPUBFH), (Response = msg.Nfsv4PutpubfhResponse); else if (op instanceof msg.Nfsv4PutfhRequest) (fn = ops.PUTFH), (Response = msg.Nfsv4PutfhResponse); else if (op instanceof msg.Nfsv4GetfhRequest) (fn = ops.GETFH), (Response = msg.Nfsv4GetfhResponse); else if (op instanceof msg.Nfsv4SavefhRequest) (fn = ops.SAVEFH), (Response = msg.Nfsv4SavefhResponse); else if (op instanceof msg.Nfsv4ReadRequest) (fn = ops.READ), (Response = msg.Nfsv4ReadResponse); else if (op instanceof msg.Nfsv4ReaddirRequest) (fn = ops.READDIR), (Response = msg.Nfsv4ReaddirResponse); else if (op instanceof msg.Nfsv4ReadlinkRequest) (fn = ops.READLINK), (Response = msg.Nfsv4ReadlinkResponse); else if (op instanceof msg.Nfsv4WriteRequest) (fn = ops.WRITE), (Response = msg.Nfsv4WriteResponse); else if (op instanceof msg.Nfsv4OpenRequest) (fn = ops.OPEN), (Response = msg.Nfsv4OpenResponse); else if (op instanceof msg.Nfsv4CloseRequest) (fn = ops.CLOSE), (Response = msg.Nfsv4CloseResponse); else if (op instanceof msg.Nfsv4RemoveRequest) (fn = ops.REMOVE), (Response = msg.Nfsv4RemoveResponse); else if (op instanceof msg.Nfsv4RenameRequest) (fn = ops.RENAME), (Response = msg.Nfsv4RenameResponse); else if (op instanceof msg.Nfsv4OpenattrRequest) (fn = ops.OPENATTR), (Response = msg.Nfsv4OpenattrResponse); else if (op instanceof msg.Nfsv4GetattrRequest) (fn = ops.GETATTR), (Response = msg.Nfsv4GetattrResponse); else if (op instanceof msg.Nfsv4SetattrRequest) (fn = ops.SETATTR), (Response = msg.Nfsv4SetattrResponse); else if (op instanceof msg.Nfsv4CreateRequest) (fn = ops.CREATE), (Response = msg.Nfsv4CreateResponse); else if (op instanceof msg.Nfsv4SetclientidRequest) (fn = ops.SETCLIENTID), (Response = msg.Nfsv4SetclientidResponse); else if (op instanceof msg.Nfsv4SetclientidConfirmRequest) (fn = ops.SETCLIENTID_CONFIRM), (Response = msg.Nfsv4SetclientidConfirmResponse); else if (op instanceof msg.Nfsv4OpenConfirmRequest) (fn = ops.OPEN_CONFIRM), (Response = msg.Nfsv4OpenConfirmResponse); else if (op instanceof msg.Nfsv4OpenDowngradeRequest) (fn = ops.OPEN_DOWNGRADE), (Response = msg.Nfsv4OpenDowngradeResponse); else if (op instanceof msg.Nfsv4CommitRequest) (fn = ops.COMMIT), (Response = msg.Nfsv4CommitResponse); else if (op instanceof msg.Nfsv4LinkRequest) (fn = ops.LINK), (Response = msg.Nfsv4LinkResponse); else if (op instanceof msg.Nfsv4RenewRequest) (fn = ops.RENEW), (Response = msg.Nfsv4RenewResponse); else if (op instanceof msg.Nfsv4DelegpurgeRequest) (fn = ops.DELEGPURGE), (Response = msg.Nfsv4DelegpurgeResponse); else if (op instanceof msg.Nfsv4DelegreturnRequest) (fn = ops.DELEGRETURN), (Response = msg.Nfsv4DelegreturnResponse); else if (op instanceof msg.Nfsv4RestorefhRequest) (fn = ops.RESTOREFH), (Response = msg.Nfsv4RestorefhResponse); else if (op instanceof msg.Nfsv4SecinfoRequest) (fn = ops.SECINFO), (Response = msg.Nfsv4SecinfoResponse); else if (op instanceof msg.Nfsv4VerifyRequest) (fn = ops.VERIFY), (Response = msg.Nfsv4VerifyResponse); else if (op instanceof msg.Nfsv4LockRequest) (fn = ops.LOCK), (Response = msg.Nfsv4LockResponse); else if (op instanceof msg.Nfsv4LocktRequest) (fn = ops.LOCKT), (Response = msg.Nfsv4LocktResponse); else if (op instanceof msg.Nfsv4LockuRequest) (fn = ops.LOCKU), (Response = msg.Nfsv4LockuResponse); else if (op instanceof msg.Nfsv4LookupRequest) (fn = ops.LOOKUP), (Response = msg.Nfsv4LookupResponse); else if (op instanceof msg.Nfsv4LookuppRequest) (fn = ops.LOOKUPP), (Response = msg.Nfsv4LookuppResponse); else if (op instanceof msg.Nfsv4NverifyRequest) (fn = ops.NVERIFY), (Response = msg.Nfsv4NverifyResponse); else if (op instanceof msg.Nfsv4ReleaseLockOwnerRequest) (fn = ops.RELEASE_LOCKOWNER), (Response = msg.Nfsv4ReleaseLockOwnerResponse); else if (op instanceof msg.Nfsv4IllegalRequest) (fn = ops.ILLEGAL), (Response = msg.Nfsv4IllegalResponse); if (!fn || !Response) return new msg.Nfsv4CompoundResponse(10044 /* Nfsv4Stat.NFS4ERR_OP_ILLEGAL */, tag, resarray); EXEC_OP: try { // if (debug) logger.log(fn.name, opReq); if (debug) logger.log((0, format_1.formatNfsv4Request)(opReq)); const opResponse = await fn.call(ops, opReq, this); if (!(opResponse instanceof Response)) throw new Error('Unexpected response, fn = ' + fn.name); // if (debug) logger.log(fn.name, opResponse); if (debug) logger.log(': ' + (0, format_1.formatNfsv4Response)(opResponse)); status = opResponse.status; resarray.push(opResponse); } catch (err) { if (debug) logger.error(': ERROR', fn.name, err); if (err instanceof Response) { if (err.status !== 0 /* Nfsv4Stat.NFS4_OK */) { status = err.status; resarray.push(err); break EXEC_OP; } else { logger.error('Operation [' + fn.name + '] threw response with NFS4_OK'); err = 10006 /* Nfsv4Stat.NFS4ERR_SERVERFAULT */; } } FIND_STATUS_CODE: { if (typeof err === 'number') { if (err > 0 /* Nfsv4Stat.NFS4_OK */ && err <= 16777215) { status = err; break FIND_STATUS_CODE; } status = 10006 /* Nfsv4Stat.NFS4ERR_SERVERFAULT */; logger.error('Invalid status [code = ' + err + ', fn = ' + fn.name + ']'); break FIND_STATUS_CODE; } status = 10006 /* Nfsv4Stat.NFS4ERR_SERVERFAULT */; logger.error(fn.name, err); } const opResponse = new Response(status); resarray.push(opResponse); } if (status !== 0 /* Nfsv4Stat.NFS4_OK */) break OPS_LOOP; } return new msg.Nfsv4CompoundResponse(status, tag, resarray); } } exports.Nfsv4CompoundProcCtx = Nfsv4CompoundProcCtx; //# sourceMappingURL=Nfsv4CompoundProcCtx.js.map