diff options
Diffstat (limited to 'ext/net')
-rw-r--r-- | ext/net/01_net.js | 62 | ||||
-rw-r--r-- | ext/net/02_tls.js | 16 | ||||
-rw-r--r-- | ext/net/lib.rs | 26 |
3 files changed, 69 insertions, 35 deletions
diff --git a/ext/net/01_net.js b/ext/net/01_net.js index c81ca61c5..0f9a65122 100644 --- a/ext/net/01_net.js +++ b/ext/net/01_net.js @@ -10,6 +10,23 @@ import { } from "ext:deno_web/06_streams.js"; import * as abortSignal from "ext:deno_web/03_abort_signal.js"; import { SymbolDispose } from "ext:deno_web/00_infra.js"; +const { + op_dns_resolve, + op_net_accept_tcp, + op_net_accept_unix, + op_net_connect_tcp, + op_net_connect_unix, + op_net_recv_udp, + op_net_recv_unixpacket, + op_net_send_udp, + op_net_send_unixpacket, + op_net_set_multi_loopback_udp, + op_net_set_multi_ttl_udp, + op_net_join_multi_v4_udp, + op_net_join_multi_v6_udp, + op_net_leave_multi_v4_udp, + op_net_leave_multi_v6_udp, +} = core.ensureFastOps(); const { Error, @@ -46,7 +63,7 @@ async function resolveDns(query, recordType, options) { } try { - return await core.opAsync("op_dns_resolve", { + return await op_dns_resolve({ cancelRid, query, recordType, @@ -200,10 +217,10 @@ class Listener { let promise; switch (this.addr.transport) { case "tcp": - promise = core.opAsync("op_net_accept_tcp", this.rid); + promise = op_net_accept_tcp(this.rid); break; case "unix": - promise = core.opAsync("op_net_accept_unix", this.rid); + promise = op_net_accept_unix(this.rid); break; default: throw new Error(`Unsupported transport: ${this.addr.transport}`); @@ -294,8 +311,7 @@ class Datagram { } async joinMulticastV4(addr, multiInterface) { - await core.opAsync( - "op_net_join_multi_v4_udp", + await op_net_join_multi_v4_udp( this.rid, addr, multiInterface, @@ -303,22 +319,19 @@ class Datagram { return { leave: () => - core.opAsync( - "op_net_leave_multi_v4_udp", + op_net_leave_multi_v4_udp( this.rid, addr, multiInterface, ), setLoopback: (loopback) => - core.opAsync( - "op_net_set_multi_loopback_udp", + op_net_set_multi_loopback_udp( this.rid, true, loopback, ), setTTL: (ttl) => - core.opAsync( - "op_net_set_multi_ttl_udp", + op_net_set_multi_ttl_udp( this.rid, ttl, ), @@ -326,8 +339,7 @@ class Datagram { } async joinMulticastV6(addr, multiInterface) { - await core.opAsync( - "op_net_join_multi_v6_udp", + await op_net_join_multi_v6_udp( this.rid, addr, multiInterface, @@ -335,15 +347,13 @@ class Datagram { return { leave: () => - core.opAsync( - "op_net_leave_multi_v6_udp", + op_net_leave_multi_v6_udp( this.rid, addr, multiInterface, ), setLoopback: (loopback) => - core.opAsync( - "op_net_set_multi_loopback_udp", + op_net_set_multi_loopback_udp( this.rid, false, loopback, @@ -357,8 +367,7 @@ class Datagram { let remoteAddr; switch (this.addr.transport) { case "udp": { - ({ 0: nread, 1: remoteAddr } = await core.opAsync( - "op_net_recv_udp", + ({ 0: nread, 1: remoteAddr } = await op_net_recv_udp( this.rid, buf, )); @@ -367,8 +376,7 @@ class Datagram { } case "unixpacket": { let path; - ({ 0: nread, 1: path } = await core.opAsync( - "op_net_recv_unixpacket", + ({ 0: nread, 1: path } = await op_net_recv_unixpacket( this.rid, buf, )); @@ -385,15 +393,13 @@ class Datagram { async send(p, opts) { switch (this.addr.transport) { case "udp": - return await core.opAsync( - "op_net_send_udp", + return await op_net_send_udp( this.rid, { hostname: opts.hostname ?? "127.0.0.1", port: opts.port }, p, ); case "unixpacket": - return await core.opAsync( - "op_net_send_unixpacket", + return await op_net_send_unixpacket( this.rid, opts.path, p, @@ -484,8 +490,7 @@ function createListenDatagram(udpOpFn, unixOpFn) { async function connect(args) { switch (args.transport ?? "tcp") { case "tcp": { - const { 0: rid, 1: localAddr, 2: remoteAddr } = await core.opAsync( - "op_net_connect_tcp", + const { 0: rid, 1: localAddr, 2: remoteAddr } = await op_net_connect_tcp( { hostname: args.hostname ?? "127.0.0.1", port: args.port, @@ -496,8 +501,7 @@ async function connect(args) { return new TcpConn(rid, remoteAddr, localAddr); } case "unix": { - const { 0: rid, 1: localAddr, 2: remoteAddr } = await core.opAsync( - "op_net_connect_unix", + const { 0: rid, 1: localAddr, 2: remoteAddr } = await op_net_connect_unix( args.path, ); return new UnixConn( diff --git a/ext/net/02_tls.js b/ext/net/02_tls.js index a73e3ef04..492e5fc30 100644 --- a/ext/net/02_tls.js +++ b/ext/net/02_tls.js @@ -4,13 +4,19 @@ import { core, primordials } from "ext:core/mod.js"; const ops = core.ops; import { Conn, Listener } from "ext:deno_net/01_net.js"; const { Number, TypeError } = primordials; +const { + op_tls_handshake, + op_tls_start, + op_net_accept_tls, + op_net_connect_tls, +} = core.ensureFastOps(); function opStartTls(args) { - return core.opAsync("op_tls_start", args); + return op_tls_start(args); } function opTlsHandshake(rid) { - return core.opAsync("op_tls_handshake", rid); + return op_tls_handshake(rid); } class TlsConn extends Conn { @@ -32,8 +38,7 @@ async function connectTls({ if (transport !== "tcp") { throw new TypeError(`Unsupported transport: '${transport}'`); } - const { 0: rid, 1: localAddr, 2: remoteAddr } = await core.opAsync( - "op_net_connect_tls", + const { 0: rid, 1: localAddr, 2: remoteAddr } = await op_net_connect_tls( { hostname, port }, { certFile, caCerts, certChain, privateKey, alpnProtocols }, ); @@ -44,8 +49,7 @@ async function connectTls({ class TlsListener extends Listener { async accept() { - const { 0: rid, 1: localAddr, 2: remoteAddr } = await core.opAsync( - "op_net_accept_tls", + const { 0: rid, 1: localAddr, 2: remoteAddr } = await op_net_accept_tls( this.rid, ); localAddr.transport = "tcp"; diff --git a/ext/net/lib.rs b/ext/net/lib.rs index fb8dda514..1695fd264 100644 --- a/ext/net/lib.rs +++ b/ext/net/lib.rs @@ -9,6 +9,7 @@ pub mod raw; pub mod resolve_addr; use deno_core::error::AnyError; +use deno_core::op2; use deno_core::OpState; use deno_tls::rustls::RootCertStore; use deno_tls::RootCertStoreProvider; @@ -96,6 +97,14 @@ deno_core::extension!(deno_net, #[cfg(unix)] ops_unix::op_node_unstable_net_listen_unixpacket<P>, #[cfg(unix)] ops_unix::op_net_recv_unixpacket, #[cfg(unix)] ops_unix::op_net_send_unixpacket<P>, + + #[cfg(not(unix))] op_net_accept_unix, + #[cfg(not(unix))] op_net_connect_unix, + #[cfg(not(unix))] op_net_listen_unix, + #[cfg(not(unix))] op_net_listen_unixpacket, + #[cfg(not(unix))] op_node_unstable_net_listen_unixpacket, + #[cfg(not(unix))] op_net_recv_unixpacket, + #[cfg(not(unix))] op_net_send_unixpacket, ], esm = [ "01_net.js", "02_tls.js" ], options = { @@ -111,3 +120,20 @@ deno_core::extension!(deno_net, )); }, ); + +macro_rules! stub_op { + ($name:ident) => { + #[op2(fast)] + fn $name() { + panic!("Unsupported on non-unix platforms") + } + }; +} + +stub_op!(op_net_accept_unix); +stub_op!(op_net_connect_unix); +stub_op!(op_net_listen_unix); +stub_op!(op_net_listen_unixpacket); +stub_op!(op_node_unstable_net_listen_unixpacket); +stub_op!(op_net_recv_unixpacket); +stub_op!(op_net_send_unixpacket); |