move bogus "unsafe" to utils

* These are needed to make rust-analyzer stop complaining
This commit is contained in:
Peter Cai 2021-04-04 11:12:18 +08:00
parent 9f81a770d3
commit aae2e94cc8
2 changed files with 21 additions and 6 deletions

View File

@ -6,7 +6,7 @@ use domain_core::bits::record::Record;
use domain_core::bits::{ParsedDname, SectionBuilder};
use domain_core::iana::Opcode;
use domain_core::rdata::AllRecordData;
use js_sys::{ArrayBuffer, Math, Uint8Array};
use js_sys::{ArrayBuffer, Uint8Array};
use wasm_bindgen_futures::JsFuture;
use web_sys::{Headers, Request, RequestInit, Response};
@ -51,7 +51,7 @@ impl Client {
// Select an upstream randomly
fn select_upstream(&self) -> String {
let idx = unsafe { Math::random() } * self.options.upstream_urls.len() as f64;
let idx = crate::util::random() * self.options.upstream_urls.len() as f64;
self.options.upstream_urls[idx as usize].clone()
}
@ -62,7 +62,7 @@ impl Client {
let mut builder = MessageBuilder::new_udp();
// Set up the header
let header = builder.header_mut();
header.set_id((unsafe { Math::random() } * u16::MAX as f64) as u16);
header.set_id((crate::util::random() * u16::MAX as f64) as u16);
header.set_qr(false); // For queries, QR = false
header.set_opcode(Opcode::Query);
header.set_rd(true); // Ask for recursive queries
@ -93,7 +93,7 @@ impl Client {
let request = Request::new_with_str_and_init(upstream, &request_init)
.map_err(|_| "Failed to create Request object".to_string())?;
let resp: Response = JsFuture::from(unsafe { crate::util::fetch(&request) })
let resp: Response = crate::util::fetch_rs(&request)
.await
.map_err(|_| "Upstream request error".to_string())?
.into();

View File

@ -1,7 +1,9 @@
use bytes::Bytes;
use domain_core::bits::message::Message;
use js_sys::Promise;
use js_sys::{Math, Promise};
use wasm_bindgen::JsValue;
use wasm_bindgen::prelude::*;
use wasm_bindgen_futures::JsFuture;
use web_sys::Request;
#[wasm_bindgen]
@ -10,10 +12,23 @@ extern "C" {
// In cloudflare workers, there's no Window object
// and unfortunately the bionding in web_sys depends
// on Window being present.
pub fn fetch(req: &Request) -> Promise;
fn fetch(req: &Request) -> Promise;
}
pub fn parse_dns_wireformat(msg: &[u8]) -> Result<Message, String> {
let bytes = Bytes::from(msg);
Message::from_bytes(bytes).map_err(|_| "Failed to parse DNS wireformat message".to_string())
}
// Rust wrapper around JS functions
// For convenience, and also to work around bugs in rust-analyzer
// which thinks all JS functions are "unsafe"
#[allow(unused_unsafe)]
pub async fn fetch_rs(req: &Request) -> Result<JsValue, JsValue> {
JsFuture::from(unsafe { fetch(req) }).await
}
#[allow(unused_unsafe)]
pub fn random() -> f64 {
unsafe { Math::random() }
}