103 lines
2.3 KiB
JavaScript
103 lines
2.3 KiB
JavaScript
'use strict';
|
|
const {ERR_HTTP2_NO_SOCKET_MANIPULATION} = require('./errors.js');
|
|
|
|
/* istanbul ignore file */
|
|
/* https://github.com/nodejs/node/blob/6eec858f34a40ffa489c1ec54bb24da72a28c781/lib/internal/http2/compat.js#L195-L272 */
|
|
|
|
const proxySocketHandler = {
|
|
has(stream, property) {
|
|
// Replaced [kSocket] with .socket
|
|
const reference = stream.session === undefined ? stream : stream.session.socket;
|
|
return (property in stream) || (property in reference);
|
|
},
|
|
|
|
get(stream, property) {
|
|
switch (property) {
|
|
case 'on':
|
|
case 'once':
|
|
case 'end':
|
|
case 'emit':
|
|
case 'destroy':
|
|
return stream[property].bind(stream);
|
|
case 'writable':
|
|
case 'destroyed':
|
|
return stream[property];
|
|
case 'readable':
|
|
if (stream.destroyed) {
|
|
return false;
|
|
}
|
|
|
|
return stream.readable;
|
|
case 'setTimeout': {
|
|
const {session} = stream;
|
|
if (session !== undefined) {
|
|
return session.setTimeout.bind(session);
|
|
}
|
|
|
|
return stream.setTimeout.bind(stream);
|
|
}
|
|
|
|
case 'write':
|
|
case 'read':
|
|
case 'pause':
|
|
case 'resume':
|
|
throw new ERR_HTTP2_NO_SOCKET_MANIPULATION();
|
|
default: {
|
|
// Replaced [kSocket] with .socket
|
|
const reference = stream.session === undefined ? stream : stream.session.socket;
|
|
const value = reference[property];
|
|
|
|
return typeof value === 'function' ? value.bind(reference) : value;
|
|
}
|
|
}
|
|
},
|
|
|
|
getPrototypeOf(stream) {
|
|
if (stream.session !== undefined) {
|
|
// Replaced [kSocket] with .socket
|
|
return Reflect.getPrototypeOf(stream.session.socket);
|
|
}
|
|
|
|
return Reflect.getPrototypeOf(stream);
|
|
},
|
|
|
|
set(stream, property, value) {
|
|
switch (property) {
|
|
case 'writable':
|
|
case 'readable':
|
|
case 'destroyed':
|
|
case 'on':
|
|
case 'once':
|
|
case 'end':
|
|
case 'emit':
|
|
case 'destroy':
|
|
stream[property] = value;
|
|
return true;
|
|
case 'setTimeout': {
|
|
const {session} = stream;
|
|
if (session === undefined) {
|
|
stream.setTimeout = value;
|
|
} else {
|
|
session.setTimeout = value;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
case 'write':
|
|
case 'read':
|
|
case 'pause':
|
|
case 'resume':
|
|
throw new ERR_HTTP2_NO_SOCKET_MANIPULATION();
|
|
default: {
|
|
// Replaced [kSocket] with .socket
|
|
const reference = stream.session === undefined ? stream : stream.session.socket;
|
|
reference[property] = value;
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
module.exports = proxySocketHandler;
|