MCPcopy Create free account
hub / github.com/catboost/catboost / TTcp2Message

Class TTcp2Message

library/cpp/neh/tcp2.cpp:150–271  ·  view source on GitHub ↗

buffer for read input data, - header + message data

Source from the content-addressed store, hash-verified

148
149 //buffer for read input data, - header + message data
150 struct TTcp2Message {
151 TTcp2Message()
152 : Loader_(&TTcp2Message::LoadBaseHeader)
153 , RequireBytesForComplete_(sizeof(TBaseHeader))
154 , Header_(sizeof(TBaseHeader))
155 {
156 }
157
158 void Clear() {
159 Loader_ = &TTcp2Message::LoadBaseHeader;
160 RequireBytesForComplete_ = sizeof(TBaseHeader);
161 Header_.Clear();
162 Content_.clear();
163 }
164
165 TBuffer& Header() noexcept {
166 return Header_;
167 }
168
169 const TString& Content() const noexcept {
170 return Content_;
171 }
172
173 bool IsComplete() const noexcept {
174 return RequireBytesForComplete_ == 0;
175 }
176
177 size_t LoadFrom(const char* buf, size_t len) {
178 return (this->*Loader_)(buf, len);
179 }
180
181 const TBaseHeader& BaseHeader() const {
182 return *reinterpret_cast<const TBaseHeader*>(Header_.Data());
183 }
184
185 const TRequestHeader& RequestHeader() const {
186 return *reinterpret_cast<const TRequestHeader*>(Header_.Data());
187 }
188
189 const TResponseHeader& ResponseHeader() const {
190 return *reinterpret_cast<const TResponseHeader*>(Header_.Data());
191 }
192
193 private:
194 size_t LoadBaseHeader(const char* buf, size_t len) {
195 size_t useBytes = Min<size_t>(sizeof(TBaseHeader) - Header_.Size(), len);
196 Header_.Append(buf, useBytes);
197 if (Y_UNLIKELY(sizeof(TBaseHeader) > Header_.Size())) {
198 //base header yet not complete
199 return useBytes;
200 }
201 {
202 const TBaseHeader& hdr = BaseHeader();
203 if (BaseHeader().HeaderLength > 32000) { //some heuristic header size limit
204 throw yexception() << TStringBuf("to large neh/tcp2 header size: ") << BaseHeader().HeaderLength;
205 }
206 //header completed
207 Header_.Reserve(hdr.HeaderLength);

Callers

nothing calls this directly

Calls 1

DataMethod · 0.45

Tested by

no test coverage detected