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

Method onLocalReply

plugins/experimental/wasm/ats_context.cc:382–436  ·  view source on GitHub ↗

local reply handler

Source from the content-addressed store, hash-verified

380
381// local reply handler
382void
383Context::onLocalReply()
384{
385 if (local_reply_) {
386 if (txnp_ == nullptr) {
387 return;
388 }
389
390 TSMBuffer bufp = nullptr;
391 TSMLoc hdr_loc = nullptr;
392 if (TSHttpTxnClientRespGet(txnp_, &bufp, &hdr_loc) != TS_SUCCESS) {
393 return;
394 }
395
396 // set local reply reason
397 if (!local_reply_details_.empty()) {
398 TSHttpHdrReasonSet(bufp, hdr_loc, local_reply_details_.data(), local_reply_details_.size());
399 }
400
401 // set local reply headers
402 for (auto &p : local_reply_headers_) {
403 std::string key(p.first);
404 std::string value(p.second);
405
406 auto *loc = TSMimeHdrFieldFind(bufp, hdr_loc, key.data(), static_cast<int>(key.size()));
407 if (loc != TS_NULL_MLOC) {
408 int first = 1;
409 while (loc != TS_NULL_MLOC) {
410 auto *tmp = TSMimeHdrFieldNextDup(bufp, hdr_loc, loc);
411 if (first != 0) {
412 first = 0;
413 TSMimeHdrFieldValueStringSet(bufp, hdr_loc, loc, -1, value.data(), static_cast<int>(value.size()));
414 } else {
415 TSMimeHdrFieldDestroy(bufp, hdr_loc, loc);
416 }
417 TSHandleMLocRelease(bufp, hdr_loc, loc);
418 loc = tmp;
419 }
420 } else if (TSMimeHdrFieldCreateNamed(bufp, hdr_loc, key.data(), static_cast<int>(key.size()), &loc) != TS_SUCCESS) {
421 TSError("[wasm][%s] TSMimeHdrFieldCreateNamed error", __FUNCTION__);
422 TSHandleMLocRelease(bufp, TS_NULL_MLOC, hdr_loc);
423 return;
424 } else {
425 TSMimeHdrFieldValueStringSet(bufp, hdr_loc, loc, -1, value.data(), static_cast<int>(value.size()));
426 TSMimeHdrFieldAppend(bufp, hdr_loc, loc);
427 }
428
429 if (loc != TS_NULL_MLOC) {
430 TSHandleMLocRelease(bufp, hdr_loc, loc);
431 }
432 }
433
434 TSHandleMLocRelease(bufp, TS_NULL_MLOC, hdr_loc);
435 }
436}
437
438//
439// General functions

Callers 1

http_event_handlerFunction · 0.80

Calls 13

TSHttpTxnClientRespGetFunction · 0.85
TSHttpHdrReasonSetFunction · 0.85
TSMimeHdrFieldFindFunction · 0.85
TSMimeHdrFieldNextDupFunction · 0.85
TSMimeHdrFieldDestroyFunction · 0.85
TSHandleMLocReleaseFunction · 0.85
TSMimeHdrFieldAppendFunction · 0.85
TSErrorFunction · 0.50
emptyMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected