summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/handlers.rs33
-rw-r--r--src/msg.fbs3
2 files changed, 32 insertions, 4 deletions
diff --git a/src/handlers.rs b/src/handlers.rs
index 09b4e299a..326c2f2dd 100644
--- a/src/handlers.rs
+++ b/src/handlers.rs
@@ -323,27 +323,54 @@ fn handle_fetch_req(d: *const DenoC, base: &msg::Base) -> Box<Op> {
let url = url.parse::<hyper::Uri>().unwrap();
let client = Client::new();
- let future = client.get(url).and_then(|res| {
+ let future = client.get(url).and_then(move |res| {
let status = res.status().as_u16() as i32;
+
+ 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)
+ };
+
// TODO Handle streaming body.
- res.into_body().concat2().map(move |body| (status, body))
+ res
+ .into_body()
+ .concat2()
+ .map(move |body| (status, body, headers))
});
let future = future.map_err(|err| -> DenoError { err.into() }).and_then(
- move |(status, body)| {
+ move |(status, body, headers)| {
let builder = &mut FlatBufferBuilder::new();
// Send the first message without a body. This is just to indicate
// what status code.
let body_off = builder.create_vector(body.as_ref());
+ 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 msg = msg::FetchRes::create(
builder,
&msg::FetchResArgs {
id,
status,
body: Some(body_off),
+ header_key: Some(header_keys_off),
+ header_value: Some(header_values_off),
..Default::default()
},
);
+
Ok(serialize_response(
cmd_id,
builder,
diff --git a/src/msg.fbs b/src/msg.fbs
index c630fec9d..e80713236 100644
--- a/src/msg.fbs
+++ b/src/msg.fbs
@@ -154,7 +154,8 @@ table FetchReq {
table FetchRes {
id: uint;
status: int;
- header_line: [string];
+ header_key: [string];
+ header_value: [string];
body: [ubyte];
}