diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2020-04-21 09:48:44 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-21 09:48:44 -0400 |
commit | cc1720132a9c875d377c559d301bccdda2fb71c1 (patch) | |
tree | bba93c08ab0eaea148e754381b5a668f1a88ca28 /cli/ops/tls.rs | |
parent | ef6ee25e09c902e1f9d89a40cf05660432e7143c (diff) |
Move resource_table from deno::State to deno_core::Isolate (#4834)
Diffstat (limited to 'cli/ops/tls.rs')
-rw-r--r-- | cli/ops/tls.rs | 57 |
1 files changed, 30 insertions, 27 deletions
diff --git a/cli/ops/tls.rs b/cli/ops/tls.rs index dca2d8012..27d7739ed 100644 --- a/cli/ops/tls.rs +++ b/cli/ops/tls.rs @@ -28,10 +28,10 @@ use tokio_rustls::{ use webpki::DNSNameRef; pub fn init(i: &mut Isolate, s: &State) { - i.register_op("op_start_tls", s.stateful_json_op(op_start_tls)); - i.register_op("op_connect_tls", s.stateful_json_op(op_connect_tls)); - i.register_op("op_listen_tls", s.stateful_json_op(op_listen_tls)); - i.register_op("op_accept_tls", s.stateful_json_op(op_accept_tls)); + i.register_op("op_start_tls", s.stateful_json_op2(op_start_tls)); + i.register_op("op_connect_tls", s.stateful_json_op2(op_connect_tls)); + i.register_op("op_listen_tls", s.stateful_json_op2(op_listen_tls)); + i.register_op("op_accept_tls", s.stateful_json_op2(op_accept_tls)); } #[derive(Deserialize)] @@ -52,14 +52,15 @@ struct StartTLSArgs { } pub fn op_start_tls( - state: &State, + isolate: &mut deno_core::Isolate, + _state: &State, args: Value, _zero_copy: Option<ZeroCopyBuf>, ) -> Result<JsonOp, OpError> { let args: StartTLSArgs = serde_json::from_value(args)?; let rid = args.rid as u32; let cert_file = args.cert_file.clone(); - let state_ = state.clone(); + let resource_table = isolate.resource_table.clone(); let mut domain = args.hostname; if domain.is_empty() { @@ -67,13 +68,13 @@ pub fn op_start_tls( } let op = async move { - let mut state = state_.borrow_mut(); - - let mut resource_holder = - match state.resource_table.remove::<StreamResourceHolder>(rid) { + let mut resource_holder = { + let mut resource_table_ = resource_table.borrow_mut(); + match resource_table_.remove::<StreamResourceHolder>(rid) { Some(resource) => *resource, None => return Err(OpError::bad_resource_id()), - }; + } + }; if let StreamResource::TcpStream(ref mut tcp_stream) = resource_holder.resource @@ -96,7 +97,8 @@ pub fn op_start_tls( DNSNameRef::try_from_ascii_str(&domain).expect("Invalid DNS lookup"); let tls_stream = tls_connector.connect(dnsname, tcp_stream).await?; - let rid = state.resource_table.add( + let mut resource_table_ = resource_table.borrow_mut(); + let rid = resource_table_.add( "clientTlsStream", Box::new(StreamResourceHolder::new(StreamResource::ClientTlsStream( Box::new(tls_stream), @@ -123,13 +125,14 @@ pub fn op_start_tls( } pub fn op_connect_tls( + isolate: &mut deno_core::Isolate, state: &State, args: Value, _zero_copy: Option<ZeroCopyBuf>, ) -> Result<JsonOp, OpError> { let args: ConnectTLSArgs = serde_json::from_value(args)?; let cert_file = args.cert_file.clone(); - let state_ = state.clone(); + let resource_table = isolate.resource_table.clone(); state.check_net(&args.hostname, args.port)?; if let Some(path) = cert_file.clone() { state.check_read(Path::new(&path))?; @@ -158,8 +161,8 @@ pub fn op_connect_tls( let dnsname = DNSNameRef::try_from_ascii_str(&domain).expect("Invalid DNS lookup"); let tls_stream = tls_connector.connect(dnsname, tcp_stream).await?; - let mut state = state_.borrow_mut(); - let rid = state.resource_table.add( + let mut resource_table_ = resource_table.borrow_mut(); + let rid = resource_table_.add( "clientTlsStream", Box::new(StreamResourceHolder::new(StreamResource::ClientTlsStream( Box::new(tls_stream), @@ -298,6 +301,7 @@ struct ListenTlsArgs { } fn op_listen_tls( + isolate: &mut deno_core::Isolate, state: &State, args: Value, _zero_copy: Option<ZeroCopyBuf>, @@ -327,10 +331,9 @@ fn op_listen_tls( waker: None, local_addr, }; - let mut state = state.borrow_mut(); - let rid = state - .resource_table - .add("tlsListener", Box::new(tls_listener_resource)); + + let mut resource_table = isolate.resource_table.borrow_mut(); + let rid = resource_table.add("tlsListener", Box::new(tls_listener_resource)); Ok(JsonOp::Sync(json!({ "rid": rid, @@ -348,16 +351,17 @@ struct AcceptTlsArgs { } fn op_accept_tls( - state: &State, + isolate: &mut deno_core::Isolate, + _state: &State, args: Value, _zero_copy: Option<ZeroCopyBuf>, ) -> Result<JsonOp, OpError> { let args: AcceptTlsArgs = serde_json::from_value(args)?; let rid = args.rid as u32; - let state = state.clone(); + let resource_table = isolate.resource_table.clone(); let op = async move { let accept_fut = poll_fn(|cx| { - let resource_table = &mut state.borrow_mut().resource_table; + let mut resource_table = resource_table.borrow_mut(); let listener_resource = resource_table .get_mut::<TlsListenerResource>(rid) .ok_or_else(|| { @@ -383,9 +387,8 @@ fn op_accept_tls( let local_addr = tcp_stream.local_addr()?; let remote_addr = tcp_stream.peer_addr()?; let tls_acceptor = { - let state = state.borrow(); - let resource = state - .resource_table + let resource_table = resource_table.borrow(); + let resource = resource_table .get::<TlsListenerResource>(rid) .ok_or_else(OpError::bad_resource_id) .expect("Can't find tls listener"); @@ -393,8 +396,8 @@ fn op_accept_tls( }; let tls_stream = tls_acceptor.accept(tcp_stream).await?; let rid = { - let mut state = state.borrow_mut(); - state.resource_table.add( + let mut resource_table = resource_table.borrow_mut(); + resource_table.add( "serverTlsStream", Box::new(StreamResourceHolder::new(StreamResource::ServerTlsStream( Box::new(tls_stream), |