summaryrefslogtreecommitdiff
path: root/cli/ops/net.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/ops/net.rs')
-rw-r--r--cli/ops/net.rs61
1 files changed, 29 insertions, 32 deletions
diff --git a/cli/ops/net.rs b/cli/ops/net.rs
index 445c69106..25639cb79 100644
--- a/cli/ops/net.rs
+++ b/cli/ops/net.rs
@@ -1,16 +1,15 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
use super::dispatch_json::{Deserialize, JsonOp, Value};
use super::io::{StreamResource, StreamResourceHolder};
-use crate::op_error::OpError;
use crate::resolve_addr::resolve_addr;
use crate::state::State;
use deno_core::CoreIsolate;
use deno_core::CoreIsolateState;
+use deno_core::ErrBox;
use deno_core::ResourceTable;
use deno_core::ZeroCopyBuf;
use futures::future::poll_fn;
use futures::future::FutureExt;
-use std::convert::From;
use std::net::Shutdown;
use std::net::SocketAddr;
use std::rc::Rc;
@@ -45,7 +44,7 @@ fn accept_tcp(
isolate_state: &mut CoreIsolateState,
args: AcceptArgs,
_zero_copy: &mut [ZeroCopyBuf],
-) -> Result<JsonOp, OpError> {
+) -> Result<JsonOp, ErrBox> {
let rid = args.rid as u32;
let resource_table = isolate_state.resource_table.clone();
@@ -55,10 +54,10 @@ fn accept_tcp(
let listener_resource = resource_table
.get_mut::<TcpListenerResource>(rid)
.ok_or_else(|| {
- OpError::bad_resource("Listener has been closed".to_string())
+ ErrBox::bad_resource("Listener has been closed".to_string())
})?;
let listener = &mut listener_resource.listener;
- match listener.poll_accept(cx).map_err(OpError::from) {
+ match listener.poll_accept(cx).map_err(ErrBox::from) {
Poll::Ready(Ok((stream, addr))) => {
listener_resource.untrack_task();
Poll::Ready(Ok((stream, addr)))
@@ -106,13 +105,13 @@ fn op_accept(
_state: &Rc<State>,
args: Value,
zero_copy: &mut [ZeroCopyBuf],
-) -> Result<JsonOp, OpError> {
+) -> Result<JsonOp, ErrBox> {
let args: AcceptArgs = serde_json::from_value(args)?;
match args.transport.as_str() {
"tcp" => accept_tcp(isolate_state, args, zero_copy),
#[cfg(unix)]
"unix" => net_unix::accept_unix(isolate_state, args.rid as u32, zero_copy),
- _ => Err(OpError::other(format!(
+ _ => Err(ErrBox::error(format!(
"Unsupported transport protocol {}",
args.transport
))),
@@ -130,7 +129,7 @@ fn receive_udp(
_state: &Rc<State>,
args: ReceiveArgs,
zero_copy: &mut [ZeroCopyBuf],
-) -> Result<JsonOp, OpError> {
+) -> Result<JsonOp, ErrBox> {
assert_eq!(zero_copy.len(), 1, "Invalid number of arguments");
let mut zero_copy = zero_copy[0].clone();
@@ -144,12 +143,12 @@ fn receive_udp(
let resource = resource_table
.get_mut::<UdpSocketResource>(rid)
.ok_or_else(|| {
- OpError::bad_resource("Socket has been closed".to_string())
+ ErrBox::bad_resource("Socket has been closed".to_string())
})?;
let socket = &mut resource.socket;
socket
.poll_recv_from(cx, &mut zero_copy)
- .map_err(OpError::from)
+ .map_err(ErrBox::from)
});
let (size, remote_addr) = receive_fut.await?;
Ok(json!({
@@ -170,7 +169,7 @@ fn op_datagram_receive(
state: &Rc<State>,
args: Value,
zero_copy: &mut [ZeroCopyBuf],
-) -> Result<JsonOp, OpError> {
+) -> Result<JsonOp, ErrBox> {
assert_eq!(zero_copy.len(), 1, "Invalid number of arguments");
let args: ReceiveArgs = serde_json::from_value(args)?;
@@ -180,7 +179,7 @@ fn op_datagram_receive(
"unixpacket" => {
net_unix::receive_unix_packet(isolate_state, args.rid as u32, zero_copy)
}
- _ => Err(OpError::other(format!(
+ _ => Err(ErrBox::error(format!(
"Unsupported transport protocol {}",
args.transport
))),
@@ -200,7 +199,7 @@ fn op_datagram_send(
state: &Rc<State>,
args: Value,
zero_copy: &mut [ZeroCopyBuf],
-) -> Result<JsonOp, OpError> {
+) -> Result<JsonOp, ErrBox> {
assert_eq!(zero_copy.len(), 1, "Invalid number of arguments");
let zero_copy = zero_copy[0].clone();
@@ -218,13 +217,13 @@ fn op_datagram_send(
let resource = resource_table
.get_mut::<UdpSocketResource>(rid as u32)
.ok_or_else(|| {
- OpError::bad_resource("Socket has been closed".to_string())
+ ErrBox::bad_resource("Socket has been closed".to_string())
})?;
resource
.socket
.poll_send_to(cx, &zero_copy, &addr)
- .map_err(OpError::from)
.map_ok(|byte_length| json!(byte_length))
+ .map_err(ErrBox::from)
});
Ok(JsonOp::Async(f.boxed_local()))
}
@@ -241,9 +240,8 @@ fn op_datagram_send(
let resource = resource_table
.get_mut::<net_unix::UnixDatagramResource>(rid as u32)
.ok_or_else(|| {
- OpError::other("Socket has been closed".to_string())
+ ErrBox::new("NotConnected", "Socket has been closed")
})?;
-
let socket = &mut resource.socket;
let byte_length = socket
.send_to(&zero_copy, &resource.local_addr.as_pathname().unwrap())
@@ -254,7 +252,7 @@ fn op_datagram_send(
Ok(JsonOp::Async(op.boxed_local()))
}
- _ => Err(OpError::other("Wrong argument format!".to_owned())),
+ _ => Err(ErrBox::type_error("Wrong argument format!")),
}
}
@@ -270,7 +268,7 @@ fn op_connect(
state: &Rc<State>,
args: Value,
_zero_copy: &mut [ZeroCopyBuf],
-) -> Result<JsonOp, OpError> {
+) -> Result<JsonOp, ErrBox> {
let resource_table = isolate_state.resource_table.clone();
match serde_json::from_value(args)? {
ConnectArgs {
@@ -341,7 +339,7 @@ fn op_connect(
};
Ok(JsonOp::Async(op.boxed_local()))
}
- _ => Err(OpError::other("Wrong argument format!".to_owned())),
+ _ => Err(ErrBox::type_error("Wrong argument format!")),
}
}
@@ -356,7 +354,7 @@ fn op_shutdown(
state: &Rc<State>,
args: Value,
_zero_copy: &mut [ZeroCopyBuf],
-) -> Result<JsonOp, OpError> {
+) -> Result<JsonOp, ErrBox> {
state.check_unstable("Deno.shutdown");
let args: ShutdownArgs = serde_json::from_value(args)?;
@@ -373,17 +371,16 @@ fn op_shutdown(
let mut resource_table = isolate_state.resource_table.borrow_mut();
let resource_holder = resource_table
.get_mut::<StreamResourceHolder>(rid)
- .ok_or_else(OpError::bad_resource_id)?;
+ .ok_or_else(ErrBox::bad_resource_id)?;
match resource_holder.resource {
StreamResource::TcpStream(Some(ref mut stream)) => {
- TcpStream::shutdown(stream, shutdown_mode).map_err(OpError::from)?;
+ TcpStream::shutdown(stream, shutdown_mode)?;
}
#[cfg(unix)]
StreamResource::UnixStream(ref mut stream) => {
- net_unix::UnixStream::shutdown(stream, shutdown_mode)
- .map_err(OpError::from)?;
+ net_unix::UnixStream::shutdown(stream, shutdown_mode)?;
}
- _ => return Err(OpError::bad_resource_id()),
+ _ => return Err(ErrBox::bad_resource_id()),
}
Ok(JsonOp::Sync(json!({})))
@@ -407,13 +404,13 @@ impl TcpListenerResource {
/// can be notified when listener is closed.
///
/// Throws an error if another task is already tracked.
- pub fn track_task(&mut self, cx: &Context) -> Result<(), OpError> {
+ pub fn track_task(&mut self, cx: &Context) -> Result<(), ErrBox> {
// Currently, we only allow tracking a single accept task for a listener.
// This might be changed in the future with multiple workers.
// Caveat: TcpListener by itself also only tracks an accept task at a time.
// See https://github.com/tokio-rs/tokio/issues/846#issuecomment-454208883
if self.waker.is_some() {
- return Err(OpError::other("Another accept task is ongoing".to_string()));
+ return Err(ErrBox::new("Busy", "Another accept task is ongoing"));
}
let waker = futures::task::AtomicWaker::new();
@@ -466,7 +463,7 @@ struct ListenArgs {
fn listen_tcp(
resource_table: &mut ResourceTable,
addr: SocketAddr,
-) -> Result<(u32, SocketAddr), OpError> {
+) -> Result<(u32, SocketAddr), ErrBox> {
let std_listener = std::net::TcpListener::bind(&addr)?;
let listener = TcpListener::from_std(std_listener)?;
let local_addr = listener.local_addr()?;
@@ -483,7 +480,7 @@ fn listen_tcp(
fn listen_udp(
resource_table: &mut ResourceTable,
addr: SocketAddr,
-) -> Result<(u32, SocketAddr), OpError> {
+) -> Result<(u32, SocketAddr), ErrBox> {
let std_socket = std::net::UdpSocket::bind(&addr)?;
let socket = UdpSocket::from_std(std_socket)?;
let local_addr = socket.local_addr()?;
@@ -498,7 +495,7 @@ fn op_listen(
state: &Rc<State>,
args: Value,
_zero_copy: &mut [ZeroCopyBuf],
-) -> Result<JsonOp, OpError> {
+) -> Result<JsonOp, ErrBox> {
let mut resource_table = isolate_state.resource_table.borrow_mut();
match serde_json::from_value(args)? {
ListenArgs {
@@ -563,6 +560,6 @@ fn op_listen(
})))
}
#[cfg(unix)]
- _ => Err(OpError::other("Wrong argument format!".to_owned())),
+ _ => Err(ErrBox::type_error("Wrong argument format!")),
}
}