11
11
#include < userver/engine/async.hpp>
12
12
#include < userver/utils/datetime/wall_coarse_clock.hpp>
13
13
#include < userver/utils/scope_guard.hpp>
14
+ #include < userver/utils/small_string.hpp>
14
15
15
16
namespace userver_techempower ::bare {
16
17
17
18
namespace {
18
19
19
- template <std::size_t N>
20
- class SmallString final {
21
- public:
22
- SmallString () = default ;
23
-
24
- void Append (const char * data, std::size_t length) {
25
- const auto old_size = Size ();
26
- data_.resize (old_size + length);
27
- std::memcpy (Data () + old_size, data, length);
28
- }
29
-
30
- void Append (std::string_view sw) { Append (sw.data (), sw.size ()); }
31
-
32
- [[nodiscard]] std::string_view AsSw () const { return {Data (), Size ()}; }
33
-
34
- [[nodiscard]] char * Data () { return data_.data (); }
35
- [[nodiscard]] const char * Data () const { return data_.data (); }
36
-
37
- [[nodiscard]] std::size_t Size () const { return data_.size (); }
38
-
39
- void Clear () { data_.resize (0 ); }
40
-
41
- private:
42
- boost::container::small_vector<char , N> data_;
43
- };
44
-
45
20
struct HttpParser final {
46
21
http_parser parser{};
47
22
http_parser_settings parser_settings{};
48
23
49
24
std::function<void (std::string_view)> on_request_cb{};
50
25
51
- SmallString<50 > url;
26
+ userver::utils:: SmallString<50 > url;
52
27
53
28
explicit HttpParser (std::function<void (std::string_view)> on_request_cb)
54
29
: on_request_cb{std::move (on_request_cb)} {
@@ -68,26 +43,26 @@ struct HttpParser final {
68
43
static int HttpOnUrl (http_parser* parser, const char * data,
69
44
std::size_t length) {
70
45
auto * self = static_cast <HttpParser*>(parser->data );
71
- self->url .Append ( data, length);
46
+ self->url .append (std::string_view{ data, length} );
72
47
return 0 ;
73
48
}
74
49
75
50
static int HttpOnMessageBegin (http_parser* parser) {
76
51
auto * self = static_cast <HttpParser*>(parser->data );
77
- self->url .Clear ();
52
+ self->url .clear ();
78
53
return 0 ;
79
54
}
80
55
81
56
static int HttpOnMessageComplete (http_parser* parser) {
82
57
auto * self = static_cast <HttpParser*>(parser->data );
83
- self->on_request_cb (self->url . AsSw ( ));
58
+ self->on_request_cb (static_cast <std::string_view>( self->url ));
84
59
return 0 ;
85
60
}
86
61
};
87
62
88
63
class ResponseBuffers final {
89
64
public:
90
- using HeadersString = SmallString<200 >;
65
+ using HeadersString = userver::utils:: SmallString<200 >;
91
66
92
67
HeadersString& Next (userver::engine::io::Socket& socket, std::string&& body) {
93
68
if (Size () == kMaxResponses ) {
@@ -111,9 +86,9 @@ class ResponseBuffers final {
111
86
std::size_t index = 0 ;
112
87
std::size_t total_size = 0 ;
113
88
for (const auto & response : responses_) {
114
- iovec[index++] = {response.headers .Data (), response.headers .Size ()};
89
+ iovec[index++] = {response.headers .data (), response.headers .size ()};
115
90
iovec[index++] = {response.body .data (), response.body .size ()};
116
- total_size += response.headers .Size () + response.body .size ();
91
+ total_size += response.headers .size () + response.body .size ();
117
92
}
118
93
119
94
if (socket.SendAll (iovec.data (), iovec.size (), {}) != total_size) {
@@ -191,17 +166,17 @@ void SimpleConnection::Process() {
191
166
const auto content_length_str = std::to_string (response.body .size ());
192
167
auto & headers = buffers.Next (socket_, std::move (response.body ));
193
168
194
- headers.Append (kCommonHeaders );
195
- headers.Append (" Content-Type: " );
196
- headers.Append (response.content_type );
169
+ headers.append (kCommonHeaders );
170
+ headers.append (" Content-Type: " );
171
+ headers.append (response.content_type );
197
172
198
- headers.Append (" \r\n Content-Length: " );
199
- headers.Append (content_length_str);
173
+ headers.append (" \r\n Content-Length: " );
174
+ headers.append (content_length_str);
200
175
201
- headers.Append (" \r\n Date: " );
202
- headers.Append (GetCachedDate ());
176
+ headers.append (" \r\n Date: " );
177
+ headers.append (GetCachedDate ());
203
178
204
- headers.Append (kHeadersEnd );
179
+ headers.append (kHeadersEnd );
205
180
};
206
181
HttpParser parser{handle_request};
207
182
0 commit comments