summaryrefslogtreecommitdiff
path: root/src/ops.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/ops.rs')
-rw-r--r--src/ops.rs93
1 files changed, 34 insertions, 59 deletions
diff --git a/src/ops.rs b/src/ops.rs
index ef03630f5..d920d25cb 100644
--- a/src/ops.rs
+++ b/src/ops.rs
@@ -389,74 +389,49 @@ fn op_fetch(
assert_eq!(data.len(), 0);
let inner = base.inner_as_fetch().unwrap();
let cmd_id = base.cmd_id();
- let id = inner.id();
- let url = inner.url().unwrap();
+
+ let header = inner.header().unwrap();
+ assert!(header.is_request());
+ let url = header.url().unwrap();
+
+ let body = hyper::Body::empty();
+ let req = msg_util::deserialize_request(header, body);
if let Err(e) = state.check_net(url) {
return odd_future(e);
}
- let url = url.parse::<hyper::Uri>().unwrap();
let client = http_util::get_client();
debug!("Before fetch {}", url);
- let future = client.get(url).and_then(move |res| {
- let status = i32::from(res.status().as_u16());
- debug!("fetch {}", status);
-
- let headers = {
- let map = res.headers();
- let keys = map
- .keys()
- .map(|s| s.as_str().to_string())
- .collect::<Vec<_>>();
- let values = map
- .values()
- .map(|s| s.to_str().unwrap().to_string())
- .collect::<Vec<_>>();
- (keys, values)
- };
-
- let body = res.into_body();
- let body_resource = resources::add_hyper_body(body);
- Ok((status, headers, body_resource))
- });
-
- let future = future.map_err(|err| -> DenoError { err.into() }).and_then(
- move |(status, headers, body_resource)| {
- debug!("fetch body ");
- let builder = &mut FlatBufferBuilder::new();
- // Send the first message without a body. This is just to indicate
- // what status code.
- let header_keys: Vec<&str> = headers.0.iter().map(|s| &**s).collect();
- let header_keys_off =
- builder.create_vector_of_strings(header_keys.as_slice());
- let header_values: Vec<&str> = headers.1.iter().map(|s| &**s).collect();
- let header_values_off =
- builder.create_vector_of_strings(header_values.as_slice());
-
- let inner = msg::FetchRes::create(
- builder,
- &msg::FetchResArgs {
- id,
- status,
- body_rid: body_resource.rid,
- header_key: Some(header_keys_off),
- header_value: Some(header_values_off),
- },
- );
+ let future =
+ client
+ .request(req)
+ .map_err(DenoError::from)
+ .and_then(move |res| {
+ let builder = &mut FlatBufferBuilder::new();
+ let header_off = msg_util::serialize_http_response(builder, &res);
+ let body = res.into_body();
+ let body_resource = resources::add_hyper_body(body);
+ let inner = msg::FetchRes::create(
+ builder,
+ &msg::FetchResArgs {
+ header: Some(header_off),
+ body_rid: body_resource.rid,
+ ..Default::default()
+ },
+ );
- Ok(serialize_response(
- cmd_id,
- builder,
- msg::BaseArgs {
- inner: Some(inner.as_union_value()),
- inner_type: msg::Any::FetchRes,
- ..Default::default()
- },
- ))
- },
- );
+ Ok(serialize_response(
+ cmd_id,
+ builder,
+ msg::BaseArgs {
+ inner: Some(inner.as_union_value()),
+ inner_type: msg::Any::FetchRes,
+ ..Default::default()
+ },
+ ))
+ });
Box::new(future)
}