summaryrefslogtreecommitdiff
path: root/cli/ops/net_unix.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/ops/net_unix.rs')
-rw-r--r--cli/ops/net_unix.rs58
1 files changed, 35 insertions, 23 deletions
diff --git a/cli/ops/net_unix.rs b/cli/ops/net_unix.rs
index 29851b093..a73db89b2 100644
--- a/cli/ops/net_unix.rs
+++ b/cli/ops/net_unix.rs
@@ -1,9 +1,12 @@
-use super::dispatch_json::{Deserialize, Value};
-use super::io::{StreamResource, StreamResourceHolder};
+use crate::ops::io::StreamResource;
+use crate::ops::io::StreamResourceHolder;
+use crate::ops::net::AcceptArgs;
+use crate::ops::net::ReceiveArgs;
+use crate::state::State;
use deno_core::BufVec;
use deno_core::ErrBox;
-use deno_core::ResourceTable;
-use std::cell::RefCell;
+use serde_derive::Deserialize;
+use serde_json::Value;
use std::fs::remove_file;
use std::os::unix;
pub use std::path::Path;
@@ -26,24 +29,25 @@ pub struct UnixListenArgs {
pub path: String,
}
-pub async fn accept_unix(
- resource_table: Rc<RefCell<ResourceTable>>,
- rid: u32,
- _zero_copy: BufVec,
+pub(crate) async fn accept_unix(
+ state: Rc<State>,
+ args: AcceptArgs,
+ _bufs: BufVec,
) -> Result<Value, ErrBox> {
- let mut resource_table_ = resource_table.borrow_mut();
+ let rid = args.rid as u32;
+
+ let mut resource_table_ = state.resource_table.borrow_mut();
let listener_resource = {
resource_table_
.get_mut::<UnixListenerResource>(rid)
.ok_or_else(|| ErrBox::bad_resource("Listener has been closed"))?
};
-
let (unix_stream, _socket_addr) = listener_resource.listener.accept().await?;
drop(resource_table_);
let local_addr = unix_stream.local_addr()?;
let remote_addr = unix_stream.peer_addr()?;
- let mut resource_table_ = resource_table.borrow_mut();
+ let mut resource_table_ = state.resource_table.borrow_mut();
let rid = resource_table_.add(
"unixStream",
Box::new(StreamResourceHolder::new(StreamResource::UnixStream(
@@ -63,19 +67,21 @@ pub async fn accept_unix(
}))
}
-pub async fn receive_unix_packet(
- resource_table: Rc<RefCell<ResourceTable>>,
- rid: u32,
- zero_copy: BufVec,
+pub(crate) async fn receive_unix_packet(
+ state: Rc<State>,
+ args: ReceiveArgs,
+ bufs: BufVec,
) -> Result<Value, ErrBox> {
- assert_eq!(zero_copy.len(), 1, "Invalid number of arguments");
- let mut zero_copy = zero_copy[0].clone();
+ assert_eq!(bufs.len(), 1, "Invalid number of arguments");
+
+ let rid = args.rid as u32;
+ let mut buf = bufs.into_iter().next().unwrap();
- let mut resource_table_ = resource_table.borrow_mut();
+ let mut resource_table_ = state.resource_table.borrow_mut();
let resource = resource_table_
.get_mut::<UnixDatagramResource>(rid)
.ok_or_else(|| ErrBox::bad_resource("Socket has been closed"))?;
- let (size, remote_addr) = resource.socket.recv_from(&mut zero_copy).await?;
+ let (size, remote_addr) = resource.socket.recv_from(&mut buf).await?;
Ok(json!({
"size": size,
"remoteAddr": {
@@ -86,7 +92,7 @@ pub async fn receive_unix_packet(
}
pub fn listen_unix(
- resource_table: &mut ResourceTable,
+ state: &State,
addr: &Path,
) -> Result<(u32, unix::net::SocketAddr), ErrBox> {
if addr.exists() {
@@ -95,13 +101,16 @@ pub fn listen_unix(
let listener = UnixListener::bind(&addr)?;
let local_addr = listener.local_addr()?;
let listener_resource = UnixListenerResource { listener };
- let rid = resource_table.add("unixListener", Box::new(listener_resource));
+ let rid = state
+ .resource_table
+ .borrow_mut()
+ .add("unixListener", Box::new(listener_resource));
Ok((rid, local_addr))
}
pub fn listen_unix_packet(
- resource_table: &mut ResourceTable,
+ state: &State,
addr: &Path,
) -> Result<(u32, unix::net::SocketAddr), ErrBox> {
if addr.exists() {
@@ -113,7 +122,10 @@ pub fn listen_unix_packet(
socket,
local_addr: local_addr.clone(),
};
- let rid = resource_table.add("unixDatagram", Box::new(datagram_resource));
+ let rid = state
+ .resource_table
+ .borrow_mut()
+ .add("unixDatagram", Box::new(datagram_resource));
Ok((rid, local_addr))
}