@microsoft/dev-tunnels-ssh-tcp
Version:
SSH TCP extensions library for Dev Tunnels
53 lines • 2.02 kB
JavaScript
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
Object.defineProperty(exports, "__esModule", { value: true });
exports.StreamForwarder = void 0;
const dev_tunnels_ssh_1 = require("@microsoft/dev-tunnels-ssh");
const net_1 = require("net");
class StreamForwarder {
/* @internal */
constructor(localStream, remoteStream, trace) {
this.localStream = localStream;
this.remoteStream = remoteStream;
this.trace = trace;
this.disposed = false;
if (!localStream)
throw new TypeError('Local stream is required.');
if (!remoteStream)
throw new TypeError('Remote stream is required.');
localStream.pipe(remoteStream);
remoteStream.pipe(localStream);
}
close(abort, errorMessage) {
try {
if (abort && this.localStream instanceof net_1.Socket) {
this.localStream.destroy();
}
else {
this.localStream.end();
}
if (this.remoteStream instanceof dev_tunnels_ssh_1.SshStream) {
this.remoteStream.channel.close('SIGABRT', errorMessage).catch((e) => { });
}
else {
this.remoteStream.end();
}
this.trace(dev_tunnels_ssh_1.TraceLevel.Verbose, dev_tunnels_ssh_1.SshTraceEventIds.portForwardChannelClosed, `Stream forwarder ${abort ? 'aborted' : 'closed'} connection.`);
}
catch (e) {
if (!(e instanceof Error))
throw e;
this.trace(dev_tunnels_ssh_1.TraceLevel.Warning, dev_tunnels_ssh_1.SshTraceEventIds.unknownError, `Stream forwarder unexpected error closing connection: ${e.message}`);
}
}
dispose() {
if (!this.disposed) {
this.disposed = true;
this.close(true);
}
}
}
exports.StreamForwarder = StreamForwarder;
//# sourceMappingURL=streamForwarder.js.map
;