mirror of
https://github.com/denoland/deno.git
synced 2024-11-01 09:24:20 -04:00
b4aa153097
This PR refactors all internal js files (except core) to be written as ES modules. `__bootstrap`has been mostly replaced with static imports in form in `internal:[path to file from repo root]`. To specify if files are ESM, an `esm` method has been added to `Extension`, similar to the `js` method. A new ModuleLoader called `InternalModuleLoader` has been added to enable the loading of internal specifiers, which is used in all situations except when a snapshot is only loaded, and not a new one is created from it. --------- Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
98 lines
2.3 KiB
JavaScript
98 lines
2.3 KiB
JavaScript
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
|
|
|
|
const core = globalThis.Deno.core;
|
|
const ops = core.ops;
|
|
import { Conn, Listener } from "internal:ext/net/01_net.js";
|
|
const primordials = globalThis.__bootstrap.primordials;
|
|
const { TypeError } = primordials;
|
|
|
|
function opStartTls(args) {
|
|
return core.opAsync("op_tls_start", args);
|
|
}
|
|
|
|
function opTlsHandshake(rid) {
|
|
return core.opAsync("op_tls_handshake", rid);
|
|
}
|
|
|
|
class TlsConn extends Conn {
|
|
handshake() {
|
|
return opTlsHandshake(this.rid);
|
|
}
|
|
}
|
|
|
|
async function connectTls({
|
|
port,
|
|
hostname = "127.0.0.1",
|
|
transport = "tcp",
|
|
certFile = undefined,
|
|
caCerts = [],
|
|
certChain = undefined,
|
|
privateKey = undefined,
|
|
alpnProtocols = undefined,
|
|
}) {
|
|
if (transport !== "tcp") {
|
|
throw new TypeError(`Unsupported transport: '${transport}'`);
|
|
}
|
|
const { 0: rid, 1: localAddr, 2: remoteAddr } = await core.opAsync(
|
|
"op_net_connect_tls",
|
|
{ hostname, port },
|
|
{ certFile, caCerts, certChain, privateKey, alpnProtocols },
|
|
);
|
|
localAddr.transport = "tcp";
|
|
remoteAddr.transport = "tcp";
|
|
return new TlsConn(rid, remoteAddr, localAddr);
|
|
}
|
|
|
|
class TlsListener extends Listener {
|
|
async accept() {
|
|
const { 0: rid, 1: localAddr, 2: remoteAddr } = await core.opAsync(
|
|
"op_net_accept_tls",
|
|
this.rid,
|
|
);
|
|
localAddr.transport = "tcp";
|
|
remoteAddr.transport = "tcp";
|
|
return new TlsConn(rid, remoteAddr, localAddr);
|
|
}
|
|
}
|
|
|
|
function listenTls({
|
|
port,
|
|
cert,
|
|
certFile,
|
|
key,
|
|
keyFile,
|
|
hostname = "0.0.0.0",
|
|
transport = "tcp",
|
|
alpnProtocols = undefined,
|
|
reusePort = false,
|
|
}) {
|
|
if (transport !== "tcp") {
|
|
throw new TypeError(`Unsupported transport: '${transport}'`);
|
|
}
|
|
const { 0: rid, 1: localAddr } = ops.op_net_listen_tls(
|
|
{ hostname, port },
|
|
{ cert, certFile, key, keyFile, alpnProtocols, reusePort },
|
|
);
|
|
return new TlsListener(rid, localAddr);
|
|
}
|
|
|
|
async function startTls(
|
|
conn,
|
|
{
|
|
hostname = "127.0.0.1",
|
|
certFile = undefined,
|
|
caCerts = [],
|
|
alpnProtocols = undefined,
|
|
} = {},
|
|
) {
|
|
const { 0: rid, 1: localAddr, 2: remoteAddr } = await opStartTls({
|
|
rid: conn.rid,
|
|
hostname,
|
|
certFile,
|
|
caCerts,
|
|
alpnProtocols,
|
|
});
|
|
return new TlsConn(rid, remoteAddr, localAddr);
|
|
}
|
|
|
|
export { connectTls, listenTls, startTls, TlsConn, TlsListener };
|