diff options
author | Bert Belder <bertbelder@gmail.com> | 2020-09-06 02:34:02 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-06 02:34:02 +0200 |
commit | c821e8f2f1fb8ad5e9eb00854277cafc8c80b2f5 (patch) | |
tree | c429a3c2707a4047fb512443a8468b7e15e5730d /cli/ops/net_unix.rs | |
parent | 849431eb1d112d1f79f4a327830dc1a5bf22dd47 (diff) |
Move JSON ops to deno_core (#7336)
Diffstat (limited to 'cli/ops/net_unix.rs')
-rw-r--r-- | cli/ops/net_unix.rs | 58 |
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)) } |