aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/http/io
diff options
context:
space:
mode:
authorermolovd <ermolovd@yandex-team.ru>2022-02-10 16:47:53 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:47:53 +0300
commit2a4a975b112fa0fa138abc7457fe67e0e1e7fd02 (patch)
treec0748b5dcbade83af788c0abfa89c0383d6b779c /library/cpp/http/io
parentb91bcef7c99a119b0846479ef71bfab4beec72ca (diff)
downloadydb-2a4a975b112fa0fa138abc7457fe67e0e1e7fd02.tar.gz
Restoring authorship annotation for <ermolovd@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'library/cpp/http/io')
-rw-r--r--library/cpp/http/io/chunk.cpp22
-rw-r--r--library/cpp/http/io/chunk.h10
-rw-r--r--library/cpp/http/io/compression.h2
-rw-r--r--library/cpp/http/io/headers.h12
-rw-r--r--library/cpp/http/io/stream.cpp44
-rw-r--r--library/cpp/http/io/stream.h20
-rw-r--r--library/cpp/http/io/stream_ut.cpp140
7 files changed, 125 insertions, 125 deletions
diff --git a/library/cpp/http/io/chunk.cpp b/library/cpp/http/io/chunk.cpp
index 7edd115b75..6975d9eac1 100644
--- a/library/cpp/http/io/chunk.cpp
+++ b/library/cpp/http/io/chunk.cpp
@@ -1,7 +1,7 @@
#include "chunk.h"
-#include "headers.h"
-
+#include "headers.h"
+
#include <util/string/cast.h>
#include <util/generic/utility.h>
#include <util/generic/yexception.h>
@@ -52,13 +52,13 @@ class TChunkedInput::TImpl {
public:
inline TImpl(IInputStream* slave, TMaybe<THttpHeaders>* trailers)
: Slave_(slave)
- , Trailers_(trailers)
+ , Trailers_(trailers)
, Pending_(0)
, LastChunkReaded_(false)
{
- if (Trailers_) {
- Trailers_->Clear();
- }
+ if (Trailers_) {
+ Trailers_->Clear();
+ }
}
inline ~TImpl() {
@@ -127,9 +127,9 @@ private:
return true;
}
- if (Trailers_) {
- Trailers_->ConstructInPlace(Slave_);
- }
+ if (Trailers_) {
+ Trailers_->ConstructInPlace(Slave_);
+ }
LastChunkReaded_ = true;
return false;
@@ -137,13 +137,13 @@ private:
private:
IInputStream* Slave_;
- TMaybe<THttpHeaders>* Trailers_;
+ TMaybe<THttpHeaders>* Trailers_;
size_t Pending_;
bool LastChunkReaded_;
};
TChunkedInput::TChunkedInput(IInputStream* slave, TMaybe<THttpHeaders>* trailers)
- : Impl_(new TImpl(slave, trailers))
+ : Impl_(new TImpl(slave, trailers))
{
}
diff --git a/library/cpp/http/io/chunk.h b/library/cpp/http/io/chunk.h
index a94b2083db..88d89fafda 100644
--- a/library/cpp/http/io/chunk.h
+++ b/library/cpp/http/io/chunk.h
@@ -1,11 +1,11 @@
#pragma once
#include <util/stream/output.h>
-#include <util/generic/maybe.h>
+#include <util/generic/maybe.h>
#include <util/generic/ptr.h>
-class THttpHeaders;
-
+class THttpHeaders;
+
/// @addtogroup Streams_Chunked
/// @{
/// Ввод данных порциями.
@@ -13,8 +13,8 @@ class THttpHeaders;
/// данные записаны в виде <длина блока><блок данных>.
class TChunkedInput: public IInputStream {
public:
- /// Если передан указатель на trailers, то туда будут записаны HTTP trailer'ы (возможно пустые),
- /// которые идут после чанков.
+ /// Если передан указатель на trailers, то туда будут записаны HTTP trailer'ы (возможно пустые),
+ /// которые идут после чанков.
TChunkedInput(IInputStream* slave, TMaybe<THttpHeaders>* trailers = nullptr);
~TChunkedInput() override;
diff --git a/library/cpp/http/io/compression.h b/library/cpp/http/io/compression.h
index 2a603d4634..f16c4a18eb 100644
--- a/library/cpp/http/io/compression.h
+++ b/library/cpp/http/io/compression.h
@@ -15,7 +15,7 @@ public:
static inline TCompressionCodecFactory& Instance() noexcept {
return *SingletonWithPriority<TCompressionCodecFactory, 0>();
}
-
+
inline const TDecoderConstructor* FindDecoder(TStringBuf name) const {
if (auto codec = Codecs_.FindPtr(name)) {
return &codec->Decoder;
diff --git a/library/cpp/http/io/headers.h b/library/cpp/http/io/headers.h
index 265796f8aa..a71793d1c6 100644
--- a/library/cpp/http/io/headers.h
+++ b/library/cpp/http/io/headers.h
@@ -59,17 +59,17 @@ public:
inline TConstIterator Begin() const noexcept {
return Headers_.begin();
}
- inline TConstIterator begin() const noexcept {
- return Headers_.begin();
- }
+ inline TConstIterator begin() const noexcept {
+ return Headers_.begin();
+ }
/// Стандартный итератор.
inline TConstIterator End() const noexcept {
return Headers_.end();
}
- inline TConstIterator end() const noexcept {
- return Headers_.end();
- }
+ inline TConstIterator end() const noexcept {
+ return Headers_.end();
+ }
/// Возвращает количество заголовков в контейнере.
inline size_t Count() const noexcept {
diff --git a/library/cpp/http/io/stream.cpp b/library/cpp/http/io/stream.cpp
index cb3959db27..6689be684f 100644
--- a/library/cpp/http/io/stream.cpp
+++ b/library/cpp/http/io/stream.cpp
@@ -176,10 +176,10 @@ public:
return Headers_;
}
- inline const TMaybe<THttpHeaders>& Trailers() const noexcept {
- return Trailers_;
- }
-
+ inline const TMaybe<THttpHeaders>& Trailers() const noexcept {
+ return Trailers_;
+ }
+
inline bool IsKeepAlive() const noexcept {
return KeepAlive_;
}
@@ -212,16 +212,16 @@ private:
template <class Operation>
inline size_t Perform(size_t len, const Operation& operation) {
size_t processed = operation(len);
- if (processed == 0 && len > 0) {
- if (!ChunkedInput_) {
- Trailers_.ConstructInPlace();
- } else {
- // Read the header of the trailing chunk. It remains in
- // the TChunkedInput stream if the HTTP response is compressed.
- char symbol;
- if (ChunkedInput_->Read(&symbol, 1) != 0) {
- ythrow THttpParseException() << "some data remaining in TChunkedInput";
- }
+ if (processed == 0 && len > 0) {
+ if (!ChunkedInput_) {
+ Trailers_.ConstructInPlace();
+ } else {
+ // Read the header of the trailing chunk. It remains in
+ // the TChunkedInput stream if the HTTP response is compressed.
+ char symbol;
+ if (ChunkedInput_->Read(&symbol, 1) != 0) {
+ ythrow THttpParseException() << "some data remaining in TChunkedInput";
+ }
}
}
return processed;
@@ -337,10 +337,10 @@ private:
}
if (p.Chunked) {
- ChunkedInput_ = Streams_.Add(new TChunkedInput(&Buffered_, &Trailers_));
- Input_ = ChunkedInput_;
+ ChunkedInput_ = Streams_.Add(new TChunkedInput(&Buffered_, &Trailers_));
+ Input_ = ChunkedInput_;
} else {
- // disable buffering
+ // disable buffering
Buffered_.Reset(&Cnull);
Input_ = Streams_.Add(new TMultiInput(&Buffered_, Slave_));
@@ -377,7 +377,7 @@ private:
TString FirstLine_;
THttpHeaders Headers_;
- TMaybe<THttpHeaders> Trailers_;
+ TMaybe<THttpHeaders> Trailers_;
bool KeepAlive_;
TAcceptCodings Codings_;
@@ -411,10 +411,10 @@ const THttpHeaders& THttpInput::Headers() const noexcept {
return Impl_->Headers();
}
-const TMaybe<THttpHeaders>& THttpInput::Trailers() const noexcept {
- return Impl_->Trailers();
-}
-
+const TMaybe<THttpHeaders>& THttpInput::Trailers() const noexcept {
+ return Impl_->Trailers();
+}
+
const TString& THttpInput::FirstLine() const noexcept {
return Impl_->FirstLine();
}
diff --git a/library/cpp/http/io/stream.h b/library/cpp/http/io/stream.h
index d2009adb79..78ca4fc814 100644
--- a/library/cpp/http/io/stream.h
+++ b/library/cpp/http/io/stream.h
@@ -3,7 +3,7 @@
#include "headers.h"
#include <util/stream/output.h>
-#include <util/generic/maybe.h>
+#include <util/generic/maybe.h>
#include <util/generic/ptr.h>
#include <util/generic/string.h>
#include <util/generic/strbuf.h>
@@ -35,15 +35,15 @@ public:
const THttpHeaders& Headers() const noexcept;
/*
- * parsed http trailers
- */
- /// Возвращает контейнер (возможно пустой) с trailer'ами ответа HTTP-сервера.
- /// Поток должен быть вычитан полностью прежде чем trailer'ы будут доступны.
- /// Пока поток не вычитан до конца возвращается Nothing.
- /// https://tools.ietf.org/html/rfc7230#section-4.1.2
- const TMaybe<THttpHeaders>& Trailers() const noexcept;
-
- /*
+ * parsed http trailers
+ */
+ /// Возвращает контейнер (возможно пустой) с trailer'ами ответа HTTP-сервера.
+ /// Поток должен быть вычитан полностью прежде чем trailer'ы будут доступны.
+ /// Пока поток не вычитан до конца возвращается Nothing.
+ /// https://tools.ietf.org/html/rfc7230#section-4.1.2
+ const TMaybe<THttpHeaders>& Trailers() const noexcept;
+
+ /*
* first line - response or request
*/
/// Возвращает первую строку ответа HTTP-сервера.
diff --git a/library/cpp/http/io/stream_ut.cpp b/library/cpp/http/io/stream_ut.cpp
index ff27378996..1ea35df675 100644
--- a/library/cpp/http/io/stream_ut.cpp
+++ b/library/cpp/http/io/stream_ut.cpp
@@ -488,82 +488,82 @@ Y_UNIT_TEST_SUITE(THttpStreamTest) {
}
Y_UNIT_TEST(HasTrailers) {
- TMemoryInput response(
- "HTTP/1.1 200 OK\r\n"
- "Transfer-Encoding: chunked\r\n"
- "\r\n"
- "3\r\n"
- "foo"
- "0\r\n"
- "Bar: baz\r\n"
- "\r\n");
- THttpInput i(&response);
- TMaybe<THttpHeaders> trailers = i.Trailers();
- UNIT_ASSERT(!trailers.Defined());
- i.ReadAll();
- trailers = i.Trailers();
- UNIT_ASSERT_VALUES_EQUAL(trailers.GetRef().Count(), 1);
- UNIT_ASSERT_VALUES_EQUAL(trailers.GetRef().Begin()->ToString(), "Bar: baz");
- }
-
+ TMemoryInput response(
+ "HTTP/1.1 200 OK\r\n"
+ "Transfer-Encoding: chunked\r\n"
+ "\r\n"
+ "3\r\n"
+ "foo"
+ "0\r\n"
+ "Bar: baz\r\n"
+ "\r\n");
+ THttpInput i(&response);
+ TMaybe<THttpHeaders> trailers = i.Trailers();
+ UNIT_ASSERT(!trailers.Defined());
+ i.ReadAll();
+ trailers = i.Trailers();
+ UNIT_ASSERT_VALUES_EQUAL(trailers.GetRef().Count(), 1);
+ UNIT_ASSERT_VALUES_EQUAL(trailers.GetRef().Begin()->ToString(), "Bar: baz");
+ }
+
Y_UNIT_TEST(NoTrailersWithChunks) {
- TMemoryInput response(
- "HTTP/1.1 200 OK\r\n"
- "Transfer-Encoding: chunked\r\n"
- "\r\n"
- "3\r\n"
- "foo"
- "0\r\n"
- "\r\n");
- THttpInput i(&response);
- TMaybe<THttpHeaders> trailers = i.Trailers();
- UNIT_ASSERT(!trailers.Defined());
- i.ReadAll();
- trailers = i.Trailers();
- UNIT_ASSERT_VALUES_EQUAL(trailers.GetRef().Count(), 0);
- }
-
+ TMemoryInput response(
+ "HTTP/1.1 200 OK\r\n"
+ "Transfer-Encoding: chunked\r\n"
+ "\r\n"
+ "3\r\n"
+ "foo"
+ "0\r\n"
+ "\r\n");
+ THttpInput i(&response);
+ TMaybe<THttpHeaders> trailers = i.Trailers();
+ UNIT_ASSERT(!trailers.Defined());
+ i.ReadAll();
+ trailers = i.Trailers();
+ UNIT_ASSERT_VALUES_EQUAL(trailers.GetRef().Count(), 0);
+ }
+
Y_UNIT_TEST(NoTrailersNoChunks) {
- TMemoryInput response(
- "HTTP/1.1 200 OK\r\n"
- "Content-Length: 3\r\n"
- "\r\n"
- "bar");
- THttpInput i(&response);
- TMaybe<THttpHeaders> trailers = i.Trailers();
- UNIT_ASSERT(!trailers.Defined());
- i.ReadAll();
- trailers = i.Trailers();
- UNIT_ASSERT_VALUES_EQUAL(trailers.GetRef().Count(), 0);
- }
-
+ TMemoryInput response(
+ "HTTP/1.1 200 OK\r\n"
+ "Content-Length: 3\r\n"
+ "\r\n"
+ "bar");
+ THttpInput i(&response);
+ TMaybe<THttpHeaders> trailers = i.Trailers();
+ UNIT_ASSERT(!trailers.Defined());
+ i.ReadAll();
+ trailers = i.Trailers();
+ UNIT_ASSERT_VALUES_EQUAL(trailers.GetRef().Count(), 0);
+ }
+
Y_UNIT_TEST(RequestWithoutContentLength) {
- TStringStream request;
- {
- THttpOutput httpOutput(&request);
+ TStringStream request;
+ {
+ THttpOutput httpOutput(&request);
httpOutput << "POST / HTTP/1.1\r\n"
"Host: yandex.ru\r\n"
"\r\n";
- httpOutput << "GGLOL";
- }
- {
- TStringInput input(request.Str());
- THttpInput httpInput(&input);
- bool chunkedOrHasContentLength = false;
- for (const auto& header : httpInput.Headers()) {
- if (header.Name() == "Transfer-Encoding" && header.Value() == "chunked" || header.Name() == "Content-Length") {
- chunkedOrHasContentLength = true;
- }
- }
-
- // If request doesn't contain neither Content-Length header nor Transfer-Encoding header
- // then server considers message body length to be zero.
- // (See https://tools.ietf.org/html/rfc7230#section-3.3.3)
- UNIT_ASSERT(chunkedOrHasContentLength);
-
- UNIT_ASSERT_VALUES_EQUAL(httpInput.ReadAll(), "GGLOL");
- }
- }
+ httpOutput << "GGLOL";
+ }
+ {
+ TStringInput input(request.Str());
+ THttpInput httpInput(&input);
+ bool chunkedOrHasContentLength = false;
+ for (const auto& header : httpInput.Headers()) {
+ if (header.Name() == "Transfer-Encoding" && header.Value() == "chunked" || header.Name() == "Content-Length") {
+ chunkedOrHasContentLength = true;
+ }
+ }
+
+ // If request doesn't contain neither Content-Length header nor Transfer-Encoding header
+ // then server considers message body length to be zero.
+ // (See https://tools.ietf.org/html/rfc7230#section-3.3.3)
+ UNIT_ASSERT(chunkedOrHasContentLength);
+
+ UNIT_ASSERT_VALUES_EQUAL(httpInput.ReadAll(), "GGLOL");
+ }
+ }
Y_UNIT_TEST(TestInputHasContent) {
{