Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(576)

Unified Diff: net/test/embedded_test_server/http_request.cc

Issue 920483004: Added chunked upload support for embedded_test_server (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/test/embedded_test_server/http_request.cc
diff --git a/net/test/embedded_test_server/http_request.cc b/net/test/embedded_test_server/http_request.cc
index 3156e5134faa29cfe86586bc03d8ecbcef7ea137..7e41adc3ddc24fc8471e257120d22c995f445930 100644
--- a/net/test/embedded_test_server/http_request.cc
+++ b/net/test/embedded_test_server/http_request.cc
@@ -10,6 +10,7 @@
#include "base/strings/string_util.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h"
+#include "net/http/http_chunked_decoder.h"
namespace net {
namespace test_server {
@@ -140,6 +141,13 @@ HttpRequestParser::ParseResult HttpRequestParser::ParseHeaders() {
http_request_->headers["Content-Length"],
&declared_content_length_);
DCHECK(success) << "Malformed Content-Length header's value.";
+ } else if (http_request_->headers.count("Transfer-Encoding") > 0) {
+ if (http_request_->headers["Transfer-Encoding"] == "chunked") {
+ http_request_->has_content = true;
+ chunked_decoder_.reset(new HttpChunkedDecoder());
+ state_ = STATE_CONTENT;
+ return WAITING;
+ }
}
if (declared_content_length_ == 0) {
// No content data, so parsing is finished.
@@ -155,6 +163,21 @@ HttpRequestParser::ParseResult HttpRequestParser::ParseHeaders() {
HttpRequestParser::ParseResult HttpRequestParser::ParseContent() {
const size_t available_bytes = buffer_.size() - buffer_position_;
+ if (chunked_decoder_.get()) {
+ std::string result;
+ result.append(buffer_.data() + buffer_position_, available_bytes);
+ int bytes_written = chunked_decoder_->FilterBuf(
+ &result[0], static_cast<int>(result.size()));
mmenke 2015/02/12 18:22:48 &result[0] -> result.data()
+ buffer_position_ += available_bytes;
xunjieli 2015/02/12 16:54:52 I know why I was having issue with FilterBuf. we s
mmenke 2015/02/12 18:22:48 FilterBuf will parse everything you give it, up to
xunjieli 2015/02/12 22:15:45 I guess one benefit of using result is that we won
+ http_request_->content.append(result.data(), bytes_written);
+ if (chunked_decoder_->reached_eof()) {
+ state_ = STATE_ACCEPTED;
+ return ACCEPTED;
+ }
+ state_ = STATE_CONTENT;
+ return WAITING;
+ }
+
const size_t fetch_bytes = std::min(
available_bytes,
declared_content_length_ - http_request_->content.size());

Powered by Google App Engine
This is Rietveld 408576698