summaryrefslogtreecommitdiff
path: root/ext/net
diff options
context:
space:
mode:
Diffstat (limited to 'ext/net')
-rw-r--r--ext/net/01_net.js62
-rw-r--r--ext/net/02_tls.js16
-rw-r--r--ext/net/lib.rs26
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);