mirror of
https://github.com/MercuryWorkshop/epoxy-tls.git
synced 2025-05-12 22:10:01 -04:00
untested body and request type support
This commit is contained in:
parent
d508f90a62
commit
9083de531e
3 changed files with 38 additions and 5 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -1437,6 +1437,7 @@ dependencies = [
|
||||||
"tokio-rustls",
|
"tokio-rustls",
|
||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
"wasm-bindgen-futures",
|
"wasm-bindgen-futures",
|
||||||
|
"web-sys",
|
||||||
"webpki-roots",
|
"webpki-roots",
|
||||||
"ws_stream_wasm",
|
"ws_stream_wasm",
|
||||||
]
|
]
|
||||||
|
|
|
@ -25,6 +25,7 @@ futures-util = "0.3.30"
|
||||||
js-sys = "0.3.66"
|
js-sys = "0.3.66"
|
||||||
webpki-roots = "0.26.0"
|
webpki-roots = "0.26.0"
|
||||||
tokio-rustls = "0.25.0"
|
tokio-rustls = "0.25.0"
|
||||||
|
web-sys = { version = "0.3.66", features = ["TextEncoder"] }
|
||||||
|
|
||||||
[dependencies.getrandom]
|
[dependencies.getrandom]
|
||||||
features = ["js"]
|
features = ["js"]
|
||||||
|
|
|
@ -11,7 +11,8 @@ use std::sync::Arc;
|
||||||
use bytes::Bytes;
|
use bytes::Bytes;
|
||||||
use http::{uri, Request};
|
use http::{uri, Request};
|
||||||
use hyper::{body::Incoming, client::conn as hyper_conn};
|
use hyper::{body::Incoming, client::conn as hyper_conn};
|
||||||
use js_sys::Object;
|
use web_sys::TextEncoder;
|
||||||
|
use js_sys::{Object, Reflect, Uint8Array};
|
||||||
use penguin_mux_wasm::{Multiplexor, MuxStream, Role};
|
use penguin_mux_wasm::{Multiplexor, MuxStream, Role};
|
||||||
use tokio_rustls::{client::TlsStream, rustls, rustls::RootCertStore, TlsConnector};
|
use tokio_rustls::{client::TlsStream, rustls, rustls::RootCertStore, TlsConnector};
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
|
@ -87,6 +88,30 @@ impl WsTcpWorker {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let req_method_string: String = match Reflect::get(&options, &JsValue::from_str("method")) {
|
||||||
|
Ok(val) => val.as_string().unwrap_or("GET".to_string()),
|
||||||
|
Err(_) => "GET".to_string(),
|
||||||
|
};
|
||||||
|
let req_method: http::Method =
|
||||||
|
http::Method::try_from(<String as AsRef<str>>::as_ref(&req_method_string))
|
||||||
|
.expect_throw("Invalid http method");
|
||||||
|
|
||||||
|
let body: Option<Vec<u8>> = Reflect::get(&options, &JsValue::from_str("body")).map(|val| {
|
||||||
|
if val.is_string() {
|
||||||
|
let str = val.as_string().expect_throw("Failed to encode body into uint8array");
|
||||||
|
let encoder = TextEncoder::new().expect_throw("Failed to encode body into uint8array");
|
||||||
|
let encoded = encoder.encode_with_input(str.as_ref());
|
||||||
|
Some(encoded)
|
||||||
|
} else {
|
||||||
|
Some(Uint8Array::new(&val).to_vec())
|
||||||
|
}
|
||||||
|
}).unwrap_or(None);
|
||||||
|
|
||||||
|
let body_bytes: Bytes = match body {
|
||||||
|
Some(vec) => Bytes::from(vec),
|
||||||
|
None => Bytes::new()
|
||||||
|
};
|
||||||
|
|
||||||
let channel = self
|
let channel = self
|
||||||
.mux
|
.mux
|
||||||
.client_new_stream_channel(uri_host.as_bytes(), uri_port)
|
.client_new_stream_channel(uri_host.as_bytes(), uri_port)
|
||||||
|
@ -96,8 +121,8 @@ impl WsTcpWorker {
|
||||||
let request = Request::builder()
|
let request = Request::builder()
|
||||||
.header("Host", uri_host)
|
.header("Host", uri_host)
|
||||||
.header("Connection", "close")
|
.header("Connection", "close")
|
||||||
.method("GET")
|
.method(req_method)
|
||||||
.body(HttpBody::new(Bytes::new()))
|
.body(HttpBody::new(body_bytes))
|
||||||
.expect_throw("Failed to create request");
|
.expect_throw("Failed to create request");
|
||||||
|
|
||||||
let resp: hyper::Response<Incoming>;
|
let resp: hyper::Response<Incoming>;
|
||||||
|
@ -126,7 +151,10 @@ impl WsTcpWorker {
|
||||||
});
|
});
|
||||||
|
|
||||||
debug!("sending req tls");
|
debug!("sending req tls");
|
||||||
resp = req_sender.send_request(request).await.expect_throw("Failed to send request");
|
resp = req_sender
|
||||||
|
.send_request(request)
|
||||||
|
.await
|
||||||
|
.expect_throw("Failed to send request");
|
||||||
debug!("recieved resp");
|
debug!("recieved resp");
|
||||||
} else {
|
} else {
|
||||||
let io = TokioIo::new(channel);
|
let io = TokioIo::new(channel);
|
||||||
|
@ -140,7 +168,10 @@ impl WsTcpWorker {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
debug!("sending req");
|
debug!("sending req");
|
||||||
resp = req_sender.send_request(request).await.expect_throw("Failed to send request");
|
resp = req_sender
|
||||||
|
.send_request(request)
|
||||||
|
.await
|
||||||
|
.expect_throw("Failed to send request");
|
||||||
debug!("recieved resp");
|
debug!("recieved resp");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue