MCPcopy Create free account
hub / github.com/apache/trafficserver / handle

Method handle

plugins/experimental/inliner/fetcher.h:200–300  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

198 }
199
200 static int
201 handle(TSCont c, TSEvent e, void * /* d ATS_UNUSED */)
202 {
203 Self *const self = static_cast<Self *const>(TSContDataGet(c));
204 assert(self != nullptr);
205 switch (e) {
206 case TS_EVENT_ERROR:
207 Dbg(dbg_ctl, "HttpTransaction: ERROR");
208 self->t_.error();
209 self->abort();
210 close(self);
211 TSContDataSet(c, nullptr);
212 break;
213 case TS_EVENT_VCONN_EOS:
214 Dbg(dbg_ctl, "HttpTransaction: EOS");
215 goto here;
216
217 case TS_EVENT_VCONN_READ_COMPLETE:
218 Dbg(dbg_ctl, "HttpTransaction: Read Complete");
219 goto here;
220
221 case TS_EVENT_VCONN_READ_READY:
222 Dbg(dbg_ctl, "HttpTransaction: Read");
223 here: {
224 assert(self->in_ != nullptr);
225 assert(self->in_->reader != nullptr);
226 assert(self->in_->vio != nullptr);
227 const int64_t available = TSIOBufferReaderAvail(self->in_->reader);
228 if (available > 0) {
229 if (self->parsingHeaders_) {
230 if (self->parser_.parse(*self->in_)) {
231 if (isChunkEncoding(self->parser_.buffer_, self->parser_.location_)) {
232 assert(self->chunkDecoder_ == nullptr);
233 self->chunkDecoder_ = new ChunkDecoder();
234 }
235 self->t_.header(self->parser_.buffer_, self->parser_.location_);
236 self->parsingHeaders_ = false;
237 }
238 }
239 if (!self->parsingHeaders_) {
240 if (self->chunkDecoder_ != nullptr) {
241 int64_t i = self->chunkDecoder_->decode(self->in_->reader);
242 do {
243 assert(i <= available);
244 self->t_.data(self->in_->reader, i);
245 TSIOBufferReaderConsume(self->in_->reader, i);
246 i = self->chunkDecoder_->decode(self->in_->reader);
247 } while (i > 0);
248 } else {
249 const int64_t l = self->t_.data(self->in_->reader, available);
250 TSIOBufferReaderConsume(self->in_->reader, l);
251 }
252 }
253 }
254 if (e == TS_EVENT_VCONN_READ_COMPLETE || e == TS_EVENT_VCONN_EOS) {
255 self->t_.done();
256 close(self);
257 TSContDataSet(c, nullptr);

Callers

nothing calls this directly

Calls 15

abortMethod · 0.95
TSContDataGetFunction · 0.85
TSContDataSetFunction · 0.85
TSIOBufferReaderAvailFunction · 0.85
TSVIOReenableFunction · 0.85
TSVConnShutdownFunction · 0.85
TSVIONDoneGetFunction · 0.85
TSVIONTodoGetFunction · 0.85
readFunction · 0.70
TSIOBufferReaderConsumeFunction · 0.50
errorMethod · 0.45
parseMethod · 0.45

Tested by

no test coverage detected