diff options
Diffstat (limited to 'ext/http')
-rw-r--r-- | ext/http/01_http.js | 4 | ||||
-rw-r--r-- | ext/http/lib.rs | 21 |
2 files changed, 19 insertions, 6 deletions
diff --git a/ext/http/01_http.js b/ext/http/01_http.js index de546285d..877342428 100644 --- a/ext/http/01_http.js +++ b/ext/http/01_http.js @@ -111,7 +111,7 @@ return null; } - const [streamRid, method, headersList, url] = nextRequest; + const [streamRid, method, url] = nextRequest; SetPrototypeAdd(this.managedResources, streamRid); /** @type {ReadableStream<Uint8Array> | undefined} */ @@ -126,7 +126,7 @@ const innerRequest = newInnerRequest( method, url, - headersList, + () => core.opSync("op_http_headers", streamRid), body !== null ? new InnerBody(body) : null, false, ); diff --git a/ext/http/lib.rs b/ext/http/lib.rs index 918e48120..ce41a7ef2 100644 --- a/ext/http/lib.rs +++ b/ext/http/lib.rs @@ -79,6 +79,7 @@ pub fn init() -> Extension { op_http_accept::decl(), op_http_read::decl(), op_http_write_headers::decl(), + op_http_headers::decl(), op_http_write::decl(), op_http_write_resource::decl(), op_http_shutdown::decl(), @@ -365,8 +366,6 @@ struct NextRequestResponse( // This is a String rather than a ByteString because reqwest will only return // the method as a str which is guaranteed to be ASCII-only. String, - // headers: - Vec<(ByteString, ByteString)>, // url: String, ); @@ -403,12 +402,11 @@ async fn op_http_accept( }); let method = request.method().to_string(); - let headers = req_headers(request); let url = req_url(request, conn.scheme(), conn.addr()); let stream_rid = state.borrow_mut().resource_table.add_rc(stream); - let r = NextRequestResponse(stream_rid, method, headers, url); + let r = NextRequestResponse(stream_rid, method, url); Ok(Some(r)) } @@ -561,6 +559,21 @@ async fn op_http_write_headers( } } +#[op] +fn op_http_headers( + state: &mut OpState, + rid: u32, +) -> Result<Vec<(ByteString, ByteString)>, AnyError> { + let stream = state.resource_table.get::<HttpStreamResource>(rid)?; + let rd = RcRef::map(&stream, |r| &r.rd) + .try_borrow() + .ok_or_else(|| http_error("already in use"))?; + match &*rd { + HttpRequestReader::Headers(request) => Ok(req_headers(request)), + _ => unreachable!(), + } +} + fn http_response( data: Option<StringOrBuffer>, compressing: bool, |