Unverified Commit 803dc849 authored by Nugine's avatar Nugine Committed by GitHub
Browse files

s3s: ops: get_object: Transfer-Encoding (#81)

parent 72940cb0
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -627,9 +627,11 @@ fn codegen_op_http_call(op: &Operation) {

    if op.name == "GetObject" {
        g!("resp.headers.extend(overrided_headers);");
        g!("super::get_object::merge_custom_headers(&mut resp, s3_resp.headers);");
    } else {
        g!("resp.headers.extend(s3_resp.headers);");
    }

    g!("resp.headers.extend(s3_resp.headers);");
    g!("resp.extensions.extend(s3_resp.extensions);");
    g!("Ok(resp)");

+1 −1
Original line number Diff line number Diff line
@@ -2558,7 +2558,7 @@ impl super::Operation for GetObject {
        };
        let mut resp = Self::serialize_http(s3_resp.output)?;
        resp.headers.extend(overrided_headers);
        resp.headers.extend(s3_resp.headers);
        super::get_object::merge_custom_headers(&mut resp, s3_resp.headers);
        resp.extensions.extend(s3_resp.extensions);
        Ok(resp)
    }
+14 −0
Original line number Diff line number Diff line
@@ -2,10 +2,13 @@ use crate::dto::GetObjectInput;
use crate::dto::Timestamp;
use crate::dto::TimestampFormat;
use crate::header;
use crate::http::Response;
use crate::utils::format::fmt_timestamp;
use crate::S3Request;
use crate::S3Result;

use hyper::header::CONTENT_LENGTH;
use hyper::header::TRANSFER_ENCODING;
use hyper::http::HeaderName;
use hyper::http::HeaderValue;
use hyper::HeaderMap;
@@ -42,3 +45,14 @@ fn add_ts(map: &mut HeaderMap<HeaderValue>, name: HeaderName, value: Option<&Tim
    }
    Ok(())
}

pub fn merge_custom_headers(resp: &mut Response, headers: HeaderMap<HeaderValue>) {
    resp.headers.extend(headers);

    // special case for https://github.com/Nugine/s3s/issues/80
    if let Some(val) = resp.headers.get(TRANSFER_ENCODING) {
        if val.as_bytes() == b"chunked" {
            resp.headers.remove(CONTENT_LENGTH);
        }
    }
}