Server::Response::write convenience functions now always add Content-Length header field if it does not exists and if chunked transfer encoding is not used
This commit is contained in:
parent
985809791c
commit
48d74a974a
2 changed files with 12 additions and 7 deletions
|
|
@ -57,14 +57,18 @@ namespace SimpleWeb {
|
||||||
Response(const std::shared_ptr<socket_type> &socket): std::ostream(&streambuf), socket(socket) {}
|
Response(const std::shared_ptr<socket_type> &socket): std::ostream(&streambuf), socket(socket) {}
|
||||||
|
|
||||||
template<class size_type>
|
template<class size_type>
|
||||||
void write_header(const CaseInsensitiveMultimap &header, size_type size=0) {
|
void write_header(const CaseInsensitiveMultimap &header, size_type size) {
|
||||||
bool content_length_written=false;
|
bool content_length_written=false;
|
||||||
for(auto &header_field: header) {
|
bool chunked_transfer_encoding=false;
|
||||||
if(size && !content_length_written && case_insensitive_equal(header_field.first, "content-length"))
|
for(auto &field: header) {
|
||||||
content_length_written=true;
|
if(!content_length_written && case_insensitive_equal(field.first, "content-length"))
|
||||||
*this << header_field.first << ": " << header_field.second << "\r\n";
|
content_length_written=true;
|
||||||
|
else if(!chunked_transfer_encoding && case_insensitive_equal(field.first, "transfer-encoding") && case_insensitive_equal(field.second, "chunked"))
|
||||||
|
chunked_transfer_encoding=true;
|
||||||
|
|
||||||
|
*this << field.first << ": " << field.second << "\r\n";
|
||||||
}
|
}
|
||||||
if(size && !content_length_written)
|
if(!content_length_written && !chunked_transfer_encoding)
|
||||||
*this << "Content-Length: " << size << "\r\n\r\n";
|
*this << "Content-Length: " << size << "\r\n\r\n";
|
||||||
else
|
else
|
||||||
*this << "\r\n";
|
*this << "\r\n";
|
||||||
|
|
|
||||||
|
|
@ -97,9 +97,10 @@ int main() {
|
||||||
stringstream output;
|
stringstream output;
|
||||||
auto r=client.request("POST", "/string4", "A string");
|
auto r=client.request("POST", "/string4", "A string");
|
||||||
assert(SimpleWeb::status_code(r->status_code)==SimpleWeb::StatusCode::client_error_forbidden);
|
assert(SimpleWeb::status_code(r->status_code)==SimpleWeb::StatusCode::client_error_forbidden);
|
||||||
assert(r->header.size()==2);
|
assert(r->header.size()==3);
|
||||||
assert(r->header.find("test1")->second=="test2");
|
assert(r->header.find("test1")->second=="test2");
|
||||||
assert(r->header.find("tEst3")->second=="test4");
|
assert(r->header.find("tEst3")->second=="test4");
|
||||||
|
assert(r->header.find("content-length")->second=="0");
|
||||||
output << r->content.rdbuf();
|
output << r->content.rdbuf();
|
||||||
assert(output.str()=="");
|
assert(output.str()=="");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue