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

Function add_header

plugins/regex_revalidate/regex_revalidate.cc:621–671  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

619}
620
621static void
622add_header(TSHttpTxn txn, const char *const header, invalidate_t *const rule)
623{
624 TSMBuffer bufp = NULL;
625 TSMLoc lochdr = TS_NULL_MLOC;
626 TSMLoc locfield = TS_NULL_MLOC;
627 char rulestr[LINE_MAX];
628 int rulelen = 0;
629 char encstr[LINE_MAX];
630 size_t enclen = 0;
631
632 TSReleaseAssert(header && rule);
633
634 if (TS_SUCCESS != TSHttpTxnClientReqGet(txn, &bufp, &lochdr)) {
635 Dbg(dbg_ctl, "Unable to get client request from transaction");
636 }
637
638 rulelen =
639 snprintf(rulestr, sizeof(rulestr), "%s %jd %s", rule->regex_text, (intmax_t)rule->expiry, strForResult(rule->new_result));
640
641 if (TS_SUCCESS != TSStringPercentEncode(rulestr, rulelen, encstr, sizeof(encstr), &enclen, NULL)) {
642 Dbg(dbg_ctl, "Unable to get encode matching rule '%s'", rulestr);
643 return;
644 }
645
646 locfield = TSMimeHdrFieldFind(bufp, lochdr, header, strlen(header));
647
648 if (TS_NULL_MLOC == locfield) { // create header
649 if (TS_SUCCESS == TSMimeHdrFieldCreateNamed(bufp, lochdr, header, strlen(header), &locfield)) {
650 if (TS_SUCCESS == TSMimeHdrFieldValueStringSet(bufp, lochdr, locfield, -1, encstr, enclen)) {
651 TSMimeHdrFieldAppend(bufp, lochdr, locfield);
652 Dbg(dbg_ctl, "Added header %s: '%.*s'", header, (int)enclen, encstr);
653 }
654 }
655 TSHandleMLocRelease(bufp, lochdr, locfield);
656 } else { // replace header
657 bool first = true;
658 while (locfield) {
659 const TSMLoc tmp = TSMimeHdrFieldNextDup(bufp, lochdr, locfield);
660 if (first) {
661 first = false;
662 TSMimeHdrFieldValueStringSet(bufp, lochdr, locfield, -1, encstr, enclen);
663 Dbg(dbg_ctl, "Added header '%s': '%.*s'", header, (int)enclen, encstr);
664 } else {
665 TSMimeHdrFieldDestroy(bufp, lochdr, locfield);
666 }
667 TSHandleMLocRelease(bufp, lochdr, locfield);
668 locfield = tmp;
669 }
670 }
671}
672
673static int
674main_handler(TSCont cont, TSEvent event, void *edata)

Callers 1

main_handlerFunction · 0.70

Calls 10

TSHttpTxnClientReqGetFunction · 0.85
strForResultFunction · 0.85
TSStringPercentEncodeFunction · 0.85
TSMimeHdrFieldFindFunction · 0.85
TSMimeHdrFieldAppendFunction · 0.85
TSHandleMLocReleaseFunction · 0.85
TSMimeHdrFieldNextDupFunction · 0.85
TSMimeHdrFieldDestroyFunction · 0.85

Tested by

no test coverage detected