summaryrefslogtreecommitdiff
path: root/runtime
diff options
context:
space:
mode:
authorBert Belder <bertbelder@gmail.com>2021-10-04 18:50:40 -0700
committerBert Belder <bertbelder@gmail.com>2021-11-10 14:51:43 -0800
commit72a6231a614e71a57c4f8ce5f9de68ab97171dd1 (patch)
treeb19bbd749ad67f606ef331fee00bfe2b34477633 /runtime
parent0cc8a9741a16efe3e37167731238b33d26887fd0 (diff)
refactor(ext/http): rewrite hyper integration and fix bug (#12732)
Fixes: #12193 Fixes: #12251 Closes: #12714
Diffstat (limited to 'runtime')
-rw-r--r--runtime/errors.rs5
-rw-r--r--runtime/ops/http.rs5
2 files changed, 8 insertions, 2 deletions
diff --git a/runtime/errors.rs b/runtime/errors.rs
index fe6e71193..1491161d3 100644
--- a/runtime/errors.rs
+++ b/runtime/errors.rs
@@ -17,6 +17,7 @@ use deno_fetch::reqwest;
use std::env;
use std::error::Error;
use std::io;
+use std::sync::Arc;
fn get_dlopen_error_class(error: &dlopen::Error) -> &'static str {
use dlopen::Error::*;
@@ -164,6 +165,10 @@ pub fn get_error_class_name(e: &AnyError) -> Option<&'static str> {
})
.or_else(|| e.downcast_ref::<hyper::Error>().map(get_hyper_error_class))
.or_else(|| {
+ e.downcast_ref::<Arc<hyper::Error>>()
+ .map(|e| get_hyper_error_class(&**e))
+ })
+ .or_else(|| {
e.downcast_ref::<deno_core::Canceled>().map(|e| {
let io_err: io::Error = e.to_owned().into();
get_io_error_class(&io_err)
diff --git a/runtime/ops/http.rs b/runtime/ops/http.rs
index 683dc1a57..fddac9261 100644
--- a/runtime/ops/http.rs
+++ b/runtime/ops/http.rs
@@ -6,6 +6,7 @@ use deno_core::op_sync;
use deno_core::Extension;
use deno_core::OpState;
use deno_core::ResourceId;
+use deno_http::http_create_conn_resource;
use deno_net::io::TcpStreamResource;
use deno_net::ops_tls::TlsStreamResource;
@@ -29,7 +30,7 @@ fn op_http_start(
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");
+ return http_create_conn_resource(state, tcp_stream, addr, "http");
}
if let Ok(resource_rc) = state
@@ -41,7 +42,7 @@ fn op_http_start(
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");
+ return http_create_conn_resource(state, tls_stream, addr, "https");
}
Err(bad_resource_id())