summaryrefslogtreecommitdiff
path: root/ext/flash/request.rs
diff options
context:
space:
mode:
Diffstat (limited to 'ext/flash/request.rs')
-rw-r--r--ext/flash/request.rs49
1 files changed, 49 insertions, 0 deletions
diff --git a/ext/flash/request.rs b/ext/flash/request.rs
new file mode 100644
index 000000000..0736b5620
--- /dev/null
+++ b/ext/flash/request.rs
@@ -0,0 +1,49 @@
+// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
+
+use crate::Stream;
+use std::pin::Pin;
+
+#[derive(Debug)]
+pub struct InnerRequest {
+ /// Backing buffer for the request.
+ pub buffer: Pin<Box<[u8]>>,
+ /// Owned headers, we have to keep it around since its referenced in `req`.
+ pub _headers: Vec<httparse::Header<'static>>,
+ /// Fully parsed request.
+ pub req: httparse::Request<'static, 'static>,
+ pub body_offset: usize,
+ pub body_len: usize,
+}
+
+#[derive(Debug)]
+pub struct Request {
+ pub inner: InnerRequest,
+ // Pointer to stream owned by the server loop thread.
+ //
+ // Dereferencing is safe until server thread finishes and
+ // op_flash_serve resolves or websocket upgrade is performed.
+ pub socket: *mut Stream,
+ pub keep_alive: bool,
+ pub content_read: usize,
+ pub content_length: Option<u64>,
+ pub remaining_chunk_size: Option<usize>,
+ pub te_chunked: bool,
+ pub expect_continue: bool,
+}
+
+// SAFETY: Sent from server thread to JS thread.
+// See comment above for `socket`.
+unsafe impl Send for Request {}
+
+impl Request {
+ #[inline(always)]
+ pub fn socket<'a>(&self) -> &'a mut Stream {
+ // SAFETY: Dereferencing is safe until server thread detaches socket or finishes.
+ unsafe { &mut *self.socket }
+ }
+
+ #[inline(always)]
+ pub fn method(&self) -> &str {
+ self.inner.req.method.unwrap()
+ }
+}