From f649960f87a408124b5b0d6f55f3be7f5724a4e7 Mon Sep 17 00:00:00 2001 From: Luca Casonato Date: Mon, 12 Jul 2021 12:44:49 +0200 Subject: refactor: deno_http op crate (#11335) --- runtime/ops/http.rs | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ runtime/ops/mod.rs | 1 + 2 files changed, 49 insertions(+) create mode 100644 runtime/ops/http.rs (limited to 'runtime/ops') diff --git a/runtime/ops/http.rs b/runtime/ops/http.rs new file mode 100644 index 000000000..5b156fc11 --- /dev/null +++ b/runtime/ops/http.rs @@ -0,0 +1,48 @@ +use std::rc::Rc; + +use deno_core::error::bad_resource_id; +use deno_core::error::AnyError; +use deno_core::op_sync; +use deno_core::Extension; +use deno_core::OpState; +use deno_core::ResourceId; +use deno_net::io::TcpStreamResource; +use deno_net::io::TlsStreamResource; + +pub fn init() -> Extension { + Extension::builder() + .ops(vec![("op_http_start", op_sync(op_http_start))]) + .build() +} + +fn op_http_start( + state: &mut OpState, + tcp_stream_rid: ResourceId, + _: (), +) -> Result { + if let Some(resource_rc) = state + .resource_table + .take::(tcp_stream_rid) + { + let resource = Rc::try_unwrap(resource_rc) + .expect("Only a single use of this resource should happen"); + let (read_half, write_half) = resource.into_inner(); + let tcp_stream = read_half.reunite(write_half)?; + let addr = tcp_stream.local_addr()?; + return deno_http::start_http(state, tcp_stream, addr, "http"); + } + + if let Some(resource_rc) = state + .resource_table + .take::(tcp_stream_rid) + { + let resource = Rc::try_unwrap(resource_rc) + .expect("Only a single use of this resource should happen"); + let (read_half, write_half) = resource.into_inner(); + let tls_stream = read_half.reunite(write_half); + let addr = tls_stream.get_ref().0.local_addr()?; + return deno_http::start_http(state, tls_stream, addr, "https"); + } + + Err(bad_resource_id()) +} diff --git a/runtime/ops/mod.rs b/runtime/ops/mod.rs index c94020780..82ccf0506 100644 --- a/runtime/ops/mod.rs +++ b/runtime/ops/mod.rs @@ -2,6 +2,7 @@ pub mod fs; pub mod fs_events; +pub mod http; pub mod io; pub mod os; pub mod permissions; -- cgit v1.2.3