(unstable: bool) -> Extension {
+ let mut ops_to_register = vec![];
+ ops_to_register.extend(io::init());
+ ops_to_register.extend(ops::init::());
+ ops_to_register.extend(ops_tls::init::
());
+ ops_to_register.extend(ops_http::init());
+
+ Extension::builder()
+ .js(include_js_files!(
+ prefix "deno:extensions/net",
+ "01_net.js",
+ "02_tls.js",
+ "03_http.js",
+ "04_net_unstable.js",
+ ))
+ .ops(ops_to_register)
+ .state(move |state| {
+ state.put(UnstableChecker { unstable });
+ Ok(())
+ })
+ .build()
+}
diff --git a/runtime/ops/net.rs b/extensions/net/ops.rs
similarity index 92%
rename from runtime/ops/net.rs
rename to extensions/net/ops.rs
index c9195aab75..a02bbf91a7 100644
--- a/runtime/ops/net.rs
+++ b/extensions/net/ops.rs
@@ -1,8 +1,9 @@
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
-use crate::ops::io::TcpStreamResource;
-use crate::permissions::Permissions;
+
+use crate::io::TcpStreamResource;
use crate::resolve_addr::resolve_addr;
use crate::resolve_addr::resolve_addr_sync;
+use crate::NetPermissions;
use deno_core::error::bad_resource;
use deno_core::error::custom_error;
use deno_core::error::generic_error;
@@ -14,7 +15,7 @@ use deno_core::op_sync;
use deno_core::AsyncRefCell;
use deno_core::CancelHandle;
use deno_core::CancelTryFuture;
-use deno_core::Extension;
+use deno_core::OpPair;
use deno_core::OpState;
use deno_core::RcRef;
use deno_core::Resource;
@@ -39,23 +40,21 @@ use trust_dns_resolver::system_conf;
use trust_dns_resolver::AsyncResolver;
#[cfg(unix)]
-use super::net_unix;
+use super::ops_unix as net_unix;
#[cfg(unix)]
-use crate::ops::io::UnixStreamResource;
+use crate::io::UnixStreamResource;
#[cfg(unix)]
use std::path::Path;
-pub fn init() -> Extension {
- Extension::builder()
- .ops(vec![
- ("op_accept", op_async(op_accept)),
- ("op_connect", op_async(op_connect)),
- ("op_listen", op_sync(op_listen)),
- ("op_datagram_receive", op_async(op_datagram_receive)),
- ("op_datagram_send", op_async(op_datagram_send)),
- ("op_dns_resolve", op_async(op_dns_resolve)),
- ])
- .build()
+pub fn init() -> Vec {
+ vec![
+ ("op_accept", op_async(op_accept)),
+ ("op_connect", op_async(op_connect::)),
+ ("op_listen", op_sync(op_listen::
)),
+ ("op_datagram_receive", op_async(op_datagram_receive)),
+ ("op_datagram_send", op_async(op_datagram_send::
)),
+ ("op_dns_resolve", op_async(op_dns_resolve::
)),
+ ]
}
#[derive(Serialize)]
@@ -216,11 +215,14 @@ struct SendArgs {
transport_args: ArgsEnum,
}
-async fn op_datagram_send(
+async fn op_datagram_send(
state: Rc>,
args: SendArgs,
zero_copy: Option,
-) -> Result {
+) -> Result
+where
+ NP: NetPermissions + 'static,
+{
let zero_copy = zero_copy.ok_or_else(null_opbuf)?;
let zero_copy = zero_copy.clone();
@@ -232,9 +234,8 @@ async fn op_datagram_send(
} if transport == "udp" => {
{
let mut s = state.borrow_mut();
- s.borrow_mut::()
- .net
- .check(&(&args.hostname, Some(args.port)))?;
+ s.borrow_mut::()
+ .check_net(&(&args.hostname, Some(args.port)))?;
}
let addr = resolve_addr(&args.hostname, args.port)
.await?
@@ -259,7 +260,7 @@ async fn op_datagram_send(
let address_path = Path::new(&args.path);
{
let mut s = state.borrow_mut();
- s.borrow_mut::().write.check(&address_path)?;
+ s.borrow_mut::().check_write(&address_path)?;
}
let resource = state
.borrow()
@@ -285,11 +286,14 @@ struct ConnectArgs {
transport_args: ArgsEnum,
}
-async fn op_connect(
+async fn op_connect(
state: Rc>,
args: ConnectArgs,
_: (),
-) -> Result {
+) -> Result
+where
+ NP: NetPermissions + 'static,
+{
match args {
ConnectArgs {
transport,
@@ -298,9 +302,8 @@ async fn op_connect(
{
let mut state_ = state.borrow_mut();
state_
- .borrow_mut::()
- .net
- .check(&(&args.hostname, Some(args.port)))?;
+ .borrow_mut::()
+ .check_net(&(&args.hostname, Some(args.port)))?;
}
let addr = resolve_addr(&args.hostname, args.port)
.await?
@@ -335,14 +338,8 @@ async fn op_connect(
super::check_unstable2(&state, "Deno.connect");
{
let mut state_ = state.borrow_mut();
- state_
- .borrow_mut::()
- .read
- .check(&address_path)?;
- state_
- .borrow_mut::()
- .write
- .check(&address_path)?;
+ state_.borrow_mut::().check_read(&address_path)?;
+ state_.borrow_mut::().check_write(&address_path)?;
}
let path = args.path;
let unix_stream = net_unix::UnixStream::connect(Path::new(&path)).await?;
@@ -451,11 +448,14 @@ fn listen_udp(
Ok((rid, local_addr))
}
-fn op_listen(
+fn op_listen(
state: &mut OpState,
args: ListenArgs,
_: (),
-) -> Result {
+) -> Result
+where
+ NP: NetPermissions + 'static,
+{
match args {
ListenArgs {
transport,
@@ -466,9 +466,8 @@ fn op_listen(
super::check_unstable(state, "Deno.listenDatagram");
}
state
- .borrow_mut::()
- .net
- .check(&(&args.hostname, Some(args.port)))?;
+ .borrow_mut::()
+ .check_net(&(&args.hostname, Some(args.port)))?;
}
let addr = resolve_addr_sync(&args.hostname, args.port)?
.next()
@@ -512,9 +511,9 @@ fn op_listen(
if transport == "unixpacket" {
super::check_unstable(state, "Deno.listenDatagram");
}
- let permissions = state.borrow_mut::();
- permissions.read.check(&address_path)?;
- permissions.write.check(&address_path)?;
+ let permissions = state.borrow_mut::();
+ permissions.check_read(&address_path)?;
+ permissions.check_write(&address_path)?;
}
let (rid, local_addr) = if transport == "unix" {
net_unix::listen_unix(state, &address_path)?
@@ -592,11 +591,14 @@ pub struct NameServer {
port: u16,
}
-async fn op_dns_resolve(
+async fn op_dns_resolve(
state: Rc>,
args: ResolveAddrArgs,
_: (),
-) -> Result, AnyError> {
+) -> Result, AnyError>
+where
+ NP: NetPermissions + 'static,
+{
let ResolveAddrArgs {
query,
record_type,
@@ -621,14 +623,14 @@ async fn op_dns_resolve(
{
let mut s = state.borrow_mut();
- let perm = s.borrow_mut::();
+ let perm = s.borrow_mut::();
// Checks permission against the name servers which will be actually queried.
for ns in config.name_servers() {
let socker_addr = &ns.socket_addr;
let ip = socker_addr.ip().to_string();
let port = socker_addr.port();
- perm.net.check(&(ip, Some(port)))?;
+ perm.check_net(&(ip, Some(port)))?;
}
}
diff --git a/runtime/ops/http.rs b/extensions/net/ops_http.rs
similarity index 96%
rename from runtime/ops/http.rs
rename to extensions/net/ops_http.rs
index 01658c8020..54e06c3a7a 100644
--- a/runtime/ops/http.rs
+++ b/extensions/net/ops_http.rs
@@ -1,8 +1,8 @@
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
-use crate::ops::io::TcpStreamResource;
-use crate::ops::io::TlsStreamResource;
-use crate::ops::tls::TlsStream;
+use crate::io::TcpStreamResource;
+use crate::io::TlsStreamResource;
+use crate::ops_tls::TlsStream;
use deno_core::error::bad_resource_id;
use deno_core::error::null_opbuf;
use deno_core::error::type_error;
@@ -17,7 +17,7 @@ use deno_core::AsyncRefCell;
use deno_core::ByteString;
use deno_core::CancelHandle;
use deno_core::CancelTryFuture;
-use deno_core::Extension;
+use deno_core::OpPair;
use deno_core::OpState;
use deno_core::RcRef;
use deno_core::Resource;
@@ -46,17 +46,15 @@ use tokio::net::TcpStream;
use tokio::sync::oneshot;
use tokio_util::io::StreamReader;
-pub fn init() -> Extension {
- Extension::builder()
- .ops(vec![
- ("op_http_start", op_sync(op_http_start)),
- ("op_http_request_next", op_async(op_http_request_next)),
- ("op_http_request_read", op_async(op_http_request_read)),
- ("op_http_response", op_async(op_http_response)),
- ("op_http_response_write", op_async(op_http_response_write)),
- ("op_http_response_close", op_async(op_http_response_close)),
- ])
- .build()
+pub fn init() -> Vec {
+ vec![
+ ("op_http_start", op_sync(op_http_start)),
+ ("op_http_request_next", op_async(op_http_request_next)),
+ ("op_http_request_read", op_async(op_http_request_read)),
+ ("op_http_response", op_async(op_http_response)),
+ ("op_http_response_write", op_async(op_http_response_write)),
+ ("op_http_response_close", op_async(op_http_response_close)),
+ ]
}
struct ServiceInner {
diff --git a/runtime/ops/tls.rs b/extensions/net/ops_tls.rs
similarity index 95%
rename from runtime/ops/tls.rs
rename to extensions/net/ops_tls.rs
index c3f554856d..701c5d1a18 100644
--- a/runtime/ops/tls.rs
+++ b/extensions/net/ops_tls.rs
@@ -3,14 +3,14 @@
pub use rustls;
pub use webpki;
-use crate::ops::io::TcpStreamResource;
-use crate::ops::io::TlsStreamResource;
-use crate::ops::net::IpAddr;
-use crate::ops::net::OpAddr;
-use crate::ops::net::OpConn;
-use crate::permissions::Permissions;
+use crate::io::TcpStreamResource;
+use crate::io::TlsStreamResource;
+use crate::ops::IpAddr;
+use crate::ops::OpAddr;
+use crate::ops::OpConn;
use crate::resolve_addr::resolve_addr;
use crate::resolve_addr::resolve_addr_sync;
+use crate::NetPermissions;
use deno_core::error::bad_resource;
use deno_core::error::bad_resource_id;
use deno_core::error::custom_error;
@@ -31,7 +31,7 @@ use deno_core::op_sync;
use deno_core::AsyncRefCell;
use deno_core::CancelHandle;
use deno_core::CancelTryFuture;
-use deno_core::Extension;
+use deno_core::OpPair;
use deno_core::OpState;
use deno_core::RcRef;
use deno_core::Resource;
@@ -662,15 +662,13 @@ impl Write for ImplementWriteTrait<'_, TcpStream> {
}
}
-pub fn init() -> Extension {
- Extension::builder()
- .ops(vec![
- ("op_start_tls", op_async(op_start_tls)),
- ("op_connect_tls", op_async(op_connect_tls)),
- ("op_listen_tls", op_sync(op_listen_tls)),
- ("op_accept_tls", op_async(op_accept_tls)),
- ])
- .build()
+pub fn init() -> Vec {
+ vec![
+ ("op_start_tls", op_async(op_start_tls::)),
+ ("op_connect_tls", op_async(op_connect_tls::
)),
+ ("op_listen_tls", op_sync(op_listen_tls::
)),
+ ("op_accept_tls", op_async(op_accept_tls)),
+ ]
}
#[derive(Deserialize)]
@@ -690,11 +688,14 @@ struct StartTlsArgs {
hostname: String,
}
-async fn op_start_tls(
+async fn op_start_tls(
state: Rc>,
args: StartTlsArgs,
_: (),
-) -> Result {
+) -> Result
+where
+ NP: NetPermissions + 'static,
+{
let rid = args.rid;
let hostname = match &*args.hostname {
"" => "localhost",
@@ -705,10 +706,10 @@ async fn op_start_tls(
{
super::check_unstable2(&state, "Deno.startTls");
let mut s = state.borrow_mut();
- let permissions = s.borrow_mut::();
- permissions.net.check(&(hostname, Some(0)))?;
+ let permissions = s.borrow_mut::();
+ permissions.check_net(&(hostname, Some(0)))?;
if let Some(path) = cert_file {
- permissions.read.check(Path::new(path))?;
+ permissions.check_read(Path::new(path))?;
}
}
@@ -763,11 +764,14 @@ async fn op_start_tls(
})
}
-async fn op_connect_tls(
+async fn op_connect_tls(
state: Rc>,
args: ConnectTlsArgs,
_: (),
-) -> Result {
+) -> Result
+where
+ NP: NetPermissions + 'static,
+{
assert_eq!(args.transport, "tcp");
let hostname = match &*args.hostname {
"" => "localhost",
@@ -778,10 +782,10 @@ async fn op_connect_tls(
{
let mut s = state.borrow_mut();
- let permissions = s.borrow_mut::();
- permissions.net.check(&(hostname, Some(port)))?;
+ let permissions = s.borrow_mut::();
+ permissions.check_net(&(hostname, Some(port)))?;
if let Some(path) = cert_file {
- permissions.read.check(Path::new(path))?;
+ permissions.check_read(Path::new(path))?;
}
}
@@ -912,11 +916,14 @@ pub struct ListenTlsArgs {
alpn_protocols: Option>,
}
-fn op_listen_tls(
+fn op_listen_tls(
state: &mut OpState,
args: ListenTlsArgs,
_: (),
-) -> Result {
+) -> Result
+where
+ NP: NetPermissions + 'static,
+{
assert_eq!(args.transport, "tcp");
let hostname = &*args.hostname;
let port = args.port;
@@ -924,10 +931,10 @@ fn op_listen_tls(
let key_file = &*args.key_file;
{
- let permissions = state.borrow_mut::();
- permissions.net.check(&(hostname, Some(port)))?;
- permissions.read.check(Path::new(cert_file))?;
- permissions.read.check(Path::new(key_file))?;
+ let permissions = state.borrow_mut::();
+ permissions.check_net(&(hostname, Some(port)))?;
+ permissions.check_read(Path::new(cert_file))?;
+ permissions.check_read(Path::new(key_file))?;
}
let mut tls_config = ServerConfig::new(NoClientAuth::new());
diff --git a/runtime/ops/net_unix.rs b/extensions/net/ops_unix.rs
similarity index 90%
rename from runtime/ops/net_unix.rs
rename to extensions/net/ops_unix.rs
index d56dc76d95..9dfcc231ec 100644
--- a/runtime/ops/net_unix.rs
+++ b/extensions/net/ops_unix.rs
@@ -1,12 +1,11 @@
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
-use super::utils::into_string;
-use crate::ops::io::UnixStreamResource;
-use crate::ops::net::AcceptArgs;
-use crate::ops::net::OpAddr;
-use crate::ops::net::OpConn;
-use crate::ops::net::OpPacket;
-use crate::ops::net::ReceiveArgs;
+use crate::io::UnixStreamResource;
+use crate::ops::AcceptArgs;
+use crate::ops::OpAddr;
+use crate::ops::OpConn;
+use crate::ops::OpPacket;
+use crate::ops::ReceiveArgs;
use deno_core::error::bad_resource;
use deno_core::error::custom_error;
use deno_core::error::null_opbuf;
@@ -29,6 +28,14 @@ use tokio::net::UnixDatagram;
use tokio::net::UnixListener;
pub use tokio::net::UnixStream;
+/// A utility function to map OsStrings to Strings
+pub fn into_string(s: std::ffi::OsString) -> Result {
+ s.into_string().map_err(|s| {
+ let message = format!("File name or path {:?} is not valid UTF-8", s);
+ custom_error("InvalidData", message)
+ })
+}
+
struct UnixListenerResource {
listener: AsyncRefCell,
cancel: CancelHandle,
diff --git a/runtime/resolve_addr.rs b/extensions/net/resolve_addr.rs
similarity index 100%
rename from runtime/resolve_addr.rs
rename to extensions/net/resolve_addr.rs
diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml
index bf1c24847c..b3f1527061 100644
--- a/runtime/Cargo.toml
+++ b/runtime/Cargo.toml
@@ -23,6 +23,7 @@ deno_console = { version = "0.10.0", path = "../extensions/console" }
deno_core = { version = "0.92.0", path = "../core" }
deno_crypto = { version = "0.24.0", path = "../extensions/crypto" }
deno_fetch = { version = "0.32.0", path = "../extensions/fetch" }
+deno_net = { version = "0.1.0", path = "../extensions/net" }
deno_timers = { version = "0.8.0", path = "../extensions/timers" }
deno_url = { version = "0.10.0", path = "../extensions/url" }
deno_web = { version = "0.41.0", path = "../extensions/web" }
@@ -41,6 +42,7 @@ deno_console = { version = "0.10.0", path = "../extensions/console" }
deno_core = { version = "0.92.0", path = "../core" }
deno_crypto = { version = "0.24.0", path = "../extensions/crypto" }
deno_fetch = { version = "0.32.0", path = "../extensions/fetch" }
+deno_net = { version = "0.1.0", path = "../extensions/net" }
deno_timers = { version = "0.8.0", path = "../extensions/timers" }
deno_url = { version = "0.10.0", path = "../extensions/url" }
deno_web = { version = "0.41.0", path = "../extensions/web" }
@@ -50,7 +52,6 @@ deno_websocket = { version = "0.15.0", path = "../extensions/websocket" }
deno_webstorage = { version = "0.5.0", path = "../extensions/webstorage" }
atty = "0.2.14"
-bytes = "1"
dlopen = "0.1.8"
encoding_rs = "0.8.28"
filetime = "0.2.14"
@@ -64,17 +65,11 @@ notify = "5.0.0-pre.7"
percent-encoding = "2.1.0"
regex = "1.4.3"
ring = "0.16.20"
-rustls = "0.19.0"
serde = { version = "1.0.125", features = ["derive"] }
sys-info = "0.9.0"
termcolor = "1.1.2"
tokio = { version = "1.7.1", features = ["full"] }
-tokio-util = { version = "0.6", features = ["io"] }
uuid = { version = "0.8.2", features = ["v4"] }
-webpki = "0.21.4"
-webpki-roots = "0.21.1"
-trust-dns-proto = "0.20.3"
-trust-dns-resolver = { version = "0.20.3", features = ["tokio-runtime", "serde-config"] }
[target.'cfg(windows)'.dependencies]
fwdansi = "1.1.0"
diff --git a/runtime/build.rs b/runtime/build.rs
index 7d086b0450..3e8f8e5b0e 100644
--- a/runtime/build.rs
+++ b/runtime/build.rs
@@ -59,6 +59,7 @@ fn create_runtime_snapshot(snapshot_path: &Path, files: Vec) {
deno_broadcast_channel::InMemoryBroadcastChannel::default(),
false, // No --unstable.
),
+ deno_net::init::(false), // No --unstable.
];
let js_runtime = JsRuntime::new(RuntimeOptions {
diff --git a/runtime/js/01_errors.js b/runtime/js/01_errors.js
index a46a0a1494..d59bd7adbf 100644
--- a/runtime/js/01_errors.js
+++ b/runtime/js/01_errors.js
@@ -2,6 +2,9 @@
"use strict";
((window) => {
+ const core = window.Deno.core;
+ const { BadResource, Interrupted } = core;
+
class NotFound extends Error {
constructor(msg) {
super(msg);
@@ -86,13 +89,6 @@
}
}
- class Interrupted extends Error {
- constructor(msg) {
- super(msg);
- this.name = "Interrupted";
- }
- }
-
class WriteZero extends Error {
constructor(msg) {
super(msg);
@@ -107,13 +103,6 @@
}
}
- class BadResource extends Error {
- constructor(msg) {
- super(msg);
- this.name = "BadResource";
- }
- }
-
class Http extends Error {
constructor(msg) {
super(msg);
diff --git a/runtime/lib.rs b/runtime/lib.rs
index 63829c2d25..aa95aefbca 100644
--- a/runtime/lib.rs
+++ b/runtime/lib.rs
@@ -4,6 +4,7 @@ pub use deno_broadcast_channel;
pub use deno_console;
pub use deno_crypto;
pub use deno_fetch;
+pub use deno_net;
pub use deno_timers;
pub use deno_url;
pub use deno_web;
@@ -20,7 +21,6 @@ pub mod js;
pub mod metrics;
pub mod ops;
pub mod permissions;
-pub mod resolve_addr;
pub mod tokio_util;
pub mod web_worker;
pub mod worker;
diff --git a/runtime/ops/io.rs b/runtime/ops/io.rs
index 18279c0eb2..e188464664 100644
--- a/runtime/ops/io.rs
+++ b/runtime/ops/io.rs
@@ -1,6 +1,5 @@
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
-use crate::ops::tls;
use deno_core::error::null_opbuf;
use deno_core::error::resource_unavailable;
use deno_core::error::AnyError;
@@ -17,6 +16,9 @@ use deno_core::RcRef;
use deno_core::Resource;
use deno_core::ResourceId;
use deno_core::ZeroCopyBuf;
+use deno_net::io::TcpStreamResource;
+use deno_net::io::TlsStreamResource;
+use deno_net::io::UnixStreamResource;
use std::borrow::Cow;
use std::cell::RefCell;
use std::io::Read;
@@ -26,13 +28,10 @@ use tokio::io::AsyncRead;
use tokio::io::AsyncReadExt;
use tokio::io::AsyncWrite;
use tokio::io::AsyncWriteExt;
-use tokio::net::tcp;
use tokio::process;
#[cfg(unix)]
use std::os::unix::io::FromRawFd;
-#[cfg(unix)]
-use tokio::net::unix;
#[cfg(windows)]
use std::os::windows::io::FromRawHandle;
@@ -238,70 +237,6 @@ where
}
}
-/// A full duplex resource has a read and write ends that are completely
-/// independent, like TCP/Unix sockets and TLS streams.
-#[derive(Debug)]
-pub struct FullDuplexResource {
- rd: AsyncRefCell,
- wr: AsyncRefCell,
- // When a full-duplex resource is closed, all pending 'read' ops are
- // canceled, while 'write' ops are allowed to complete. Therefore only
- // 'read' futures should be attached to this cancel handle.
- cancel_handle: CancelHandle,
-}
-
-impl FullDuplexResource
-where
- R: AsyncRead + Unpin + 'static,
- W: AsyncWrite + Unpin + 'static,
-{
- pub fn new((rd, wr): (R, W)) -> Self {
- Self {
- rd: rd.into(),
- wr: wr.into(),
- cancel_handle: Default::default(),
- }
- }
-
- pub fn into_inner(self) -> (R, W) {
- (self.rd.into_inner(), self.wr.into_inner())
- }
-
- pub fn rd_borrow_mut(self: &Rc) -> AsyncMutFuture {
- RcRef::map(self, |r| &r.rd).borrow_mut()
- }
-
- pub fn wr_borrow_mut(self: &Rc) -> AsyncMutFuture {
- RcRef::map(self, |r| &r.wr).borrow_mut()
- }
-
- pub fn cancel_handle(self: &Rc) -> RcRef {
- RcRef::map(self, |r| &r.cancel_handle)
- }
-
- pub fn cancel_read_ops(&self) {
- self.cancel_handle.cancel()
- }
-
- async fn read(self: &Rc, buf: &mut [u8]) -> Result {
- let mut rd = self.rd_borrow_mut().await;
- let nread = rd.read(buf).try_or_cancel(self.cancel_handle()).await?;
- Ok(nread)
- }
-
- async fn write(self: &Rc, buf: &[u8]) -> Result {
- let mut wr = self.wr_borrow_mut().await;
- let nwritten = wr.write(buf).await?;
- Ok(nwritten)
- }
-
- async fn shutdown(self: &Rc) -> Result<(), AnyError> {
- let mut wr = self.wr_borrow_mut().await;
- wr.shutdown().await?;
- Ok(())
- }
-}
-
pub type ChildStdinResource = WriteOnlyResource;
impl Resource for ChildStdinResource {
@@ -334,64 +269,6 @@ impl Resource for ChildStderrResource {
}
}
-pub type TcpStreamResource =
- FullDuplexResource;
-
-impl Resource for TcpStreamResource {
- fn name(&self) -> Cow {
- "tcpStream".into()
- }
-
- fn close(self: Rc) {
- self.cancel_read_ops();
- }
-}
-
-pub type TlsStreamResource = FullDuplexResource;
-
-impl Resource for TlsStreamResource {
- fn name(&self) -> Cow {
- "tlsStream".into()
- }
-
- fn close(self: Rc) {
- self.cancel_read_ops();
- }
-}
-
-#[cfg(unix)]
-pub type UnixStreamResource =
- FullDuplexResource;
-
-#[cfg(not(unix))]
-struct UnixStreamResource;
-
-#[cfg(not(unix))]
-impl UnixStreamResource {
- async fn read(self: &Rc, _buf: &mut [u8]) -> Result {
- unreachable!()
- }
- async fn write(self: &Rc, _buf: &[u8]) -> Result {
- unreachable!()
- }
- async fn shutdown(self: &Rc) -> Result<(), AnyError> {
- unreachable!()
- }
- fn cancel_read_ops(&self) {
- unreachable!()
- }
-}
-
-impl Resource for UnixStreamResource {
- fn name(&self) -> Cow {
- "unixStream".into()
- }
-
- fn close(self: Rc) {
- self.cancel_read_ops();
- }
-}
-
#[derive(Debug, Default)]
pub struct StdFileResource {
pub fs_file:
diff --git a/runtime/ops/mod.rs b/runtime/ops/mod.rs
index b05a911808..c940207802 100644
--- a/runtime/ops/mod.rs
+++ b/runtime/ops/mod.rs
@@ -2,18 +2,13 @@
pub mod fs;
pub mod fs_events;
-pub mod http;
pub mod io;
-pub mod net;
-#[cfg(unix)]
-mod net_unix;
pub mod os;
pub mod permissions;
pub mod plugin;
pub mod process;
pub mod runtime;
pub mod signal;
-pub mod tls;
pub mod tty;
mod utils;
pub mod web_worker;
diff --git a/runtime/permissions.rs b/runtime/permissions.rs
index f8385e2013..d78e200764 100644
--- a/runtime/permissions.rs
+++ b/runtime/permissions.rs
@@ -962,6 +962,23 @@ impl Permissions {
}
}
+impl deno_net::NetPermissions for Permissions {
+ fn check_net>(
+ &mut self,
+ host: &(T, Option),
+ ) -> Result<(), AnyError> {
+ self.net.check(host)
+ }
+
+ fn check_read(&mut self, path: &Path) -> Result<(), AnyError> {
+ self.read.check(path)
+ }
+
+ fn check_write(&mut self, path: &Path) -> Result<(), AnyError> {
+ self.write.check(path)
+ }
+}
+
impl deno_fetch::FetchPermissions for Permissions {
fn check_net_url(&mut self, url: &url::Url) -> Result<(), AnyError> {
self.net.check_url(url)
diff --git a/runtime/web_worker.rs b/runtime/web_worker.rs
index a3a062221d..ac87d285b5 100644
--- a/runtime/web_worker.rs
+++ b/runtime/web_worker.rs
@@ -330,14 +330,12 @@ impl WebWorker {
vec![
ops::fs_events::init(),
ops::fs::init(),
- ops::net::init(),
+ deno_net::init::(options.unstable),
ops::os::init(),
- ops::http::init(),
ops::permissions::init(),
ops::plugin::init(),
ops::process::init(),
ops::signal::init(),
- ops::tls::init(),
ops::tty::init(),
ops::io::init_stdio(),
]
diff --git a/runtime/worker.rs b/runtime/worker.rs
index 9dfdcc8252..567e752536 100644
--- a/runtime/worker.rs
+++ b/runtime/worker.rs
@@ -120,16 +120,14 @@ impl MainWorker {
ops::worker_host::init(options.create_web_worker_cb.clone()),
ops::fs_events::init(),
ops::fs::init(),
- ops::http::init(),
ops::io::init(),
ops::io::init_stdio(),
- ops::net::init(),
+ deno_net::init::(options.unstable),
ops::os::init(),
ops::permissions::init(),
ops::plugin::init(),
ops::process::init(),
ops::signal::init(),
- ops::tls::init(),
ops::tty::init(),
// Permissions ext (worker specific state)
perm_ext,