You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by cm...@apache.org on 2024/09/16 20:06:16 UTC
(trafficserver) 03/04: Make the error handle deal with remap redirects (#11567)
This is an automated email from the ASF dual-hosted git repository.
cmcfarlen pushed a commit to branch 10.0.x
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
commit 1ae3a3699c6924cc47628b65c40c1d679e45e98d
Author: Leif Hedstrom <zw...@apache.org>
AuthorDate: Tue Sep 10 15:28:39 2024 -0700
Make the error handle deal with remap redirects (#11567)
(cherry picked from commit fb8f54ead5dfc86b4b96f4e899a130e981e2e9cd)
---
include/cripts/Error.hpp | 26 ++++++++++++++++++++------
src/cripts/Error.cc | 10 ++++++++++
2 files changed, 30 insertions(+), 6 deletions(-)
diff --git a/include/cripts/Error.hpp b/include/cripts/Error.hpp
index c86499f738..d1aefea9a4 100644
--- a/include/cripts/Error.hpp
+++ b/include/cripts/Error.hpp
@@ -71,12 +71,12 @@ public:
Status(const self_type &) = delete;
void operator=(const self_type &) = delete;
- static void _set(cripts::Context *context, TSHttpStatus _status);
+ static void _set(cripts::Context *context, TSHttpStatus status);
static void
- _set(cripts::Context *context, int _status)
+ _set(cripts::Context *context, int status)
{
- _set(context, static_cast<TSHttpStatus>(_status));
+ _set(context, static_cast<TSHttpStatus>(status));
}
static TSHttpStatus _get(cripts::Context *context);
@@ -110,9 +110,22 @@ public:
}
void
- Fail()
+ Fail(bool redirect = false)
{
- _failed = true;
+ _failed = true;
+ _redirect = redirect;
+ }
+
+ void
+ Redirect()
+ {
+ _redirect = true;
+ }
+
+ [[nodiscard]] bool
+ Redirected() const
+ {
+ return _redirect;
}
// Check if we have an error, and set appropriate exit codes etc.
@@ -121,7 +134,8 @@ public:
private:
Reason _reason;
Status _status;
- bool _failed = false;
+ bool _failed = false;
+ bool _redirect = false;
};
} // namespace cripts
diff --git a/src/cripts/Error.cc b/src/cripts/Error.cc
index cfd4db12ac..b1076d6f82 100644
--- a/src/cripts/Error.cc
+++ b/src/cripts/Error.cc
@@ -30,6 +30,10 @@ Error::Execute(cripts::Context *context)
// ToDo: So we can't set the reason phrase here, because ATS doesn't have that
// as a transaction API, only on the response header...
}
+
+ if (Redirected()) {
+ context->rri->redirect = 1;
+ }
}
// These are static, to be used with the set() wrapper define
@@ -45,6 +49,12 @@ Error::Status::_set(cripts::Context *context, TSHttpStatus status)
{
context->state.error.Fail();
context->state.error._status._setter(status);
+
+ if (context->state.error.Redirected() || status == TS_HTTP_STATUS_MOVED_PERMANENTLY ||
+ status == TS_HTTP_STATUS_MOVED_TEMPORARILY || status == TS_HTTP_STATUS_TEMPORARY_REDIRECT ||
+ status == TS_HTTP_STATUS_PERMANENT_REDIRECT) {
+ context->state.error.Redirect();
+ }
}
TSHttpStatus