h2load: Add content-length header field for HTTP/2 and SPDY as well

This commit is contained in:
Tatsuhiro Tsujikawa 2016-06-12 17:52:47 +09:00
parent 9bdf214f48
commit 1a2dc1e822
1 changed files with 24 additions and 7 deletions

View File

@ -2217,6 +2217,11 @@ int main(int argc, char **argv) {
}
}
std::string content_length_str;
if (config.data_fd != -1) {
content_length_str = util::utos(config.data_length);
}
auto method_it =
std::find_if(std::begin(shared_nva), std::end(shared_nva),
[](const Header &nv) { return nv.name == ":method"; });
@ -2247,10 +2252,10 @@ int main(int argc, char **argv) {
h1req += nv.value;
h1req += "\r\n";
}
// TODO do this for h2 and spdy too.
if (config.data_fd != -1) {
if (!content_length_str.empty()) {
h1req += "Content-Length: ";
h1req += util::utos(config.data_length);
h1req += content_length_str;
h1req += "\r\n";
}
h1req += "\r\n";
@ -2259,8 +2264,8 @@ int main(int argc, char **argv) {
// For nghttp2
std::vector<nghttp2_nv> nva;
// 1 for :path
nva.reserve(1 + shared_nva.size());
// 2 for :path, and possible content-length
nva.reserve(2 + shared_nva.size());
nva.push_back(http2::make_nv_ls(":path", req));
@ -2268,12 +2273,18 @@ int main(int argc, char **argv) {
nva.push_back(http2::make_nv(nv.name, nv.value, false));
}
if (!content_length_str.empty()) {
nva.push_back(http2::make_nv(StringRef::from_lit("content-length"),
StringRef{content_length_str}));
}
config.nva.push_back(std::move(nva));
// For spdylay
std::vector<const char *> cva;
// 2 for :path and :version, 1 for terminal nullptr
cva.reserve(2 * (2 + shared_nva.size()) + 1);
// 3 for :path, :version, and possible content-length, 1 for
// terminal nullptr
cva.reserve(2 * (3 + shared_nva.size()) + 1);
cva.push_back(":path");
cva.push_back(req.c_str());
@ -2288,6 +2299,12 @@ int main(int argc, char **argv) {
}
cva.push_back(":version");
cva.push_back("HTTP/1.1");
if (!content_length_str.empty()) {
cva.push_back("content-length");
cva.push_back(content_length_str.c_str());
}
cva.push_back(nullptr);
config.nv.push_back(std::move(cva));