From: Martin Willi Date: Wed, 28 Apr 2010 07:03:08 +0000 (+0200) Subject: Reintroduce to_referer(), redirect() does not work with get_referer() X-Git-Tag: 4.4.0~18 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=40fb7165a9d0dc64a9b221952b3fada51910deb8;p=thirdparty%2Fstrongswan.git Reintroduce to_referer(), redirect() does not work with get_referer() --- diff --git a/src/libfast/request.c b/src/libfast/request.c index 2cbdd2ef83..6bf596fd88 100644 --- a/src/libfast/request.c +++ b/src/libfast/request.c @@ -244,6 +244,25 @@ static char* get_referer(private_request_t *this) return FCGX_GetParam("HTTP_REFERER", this->req.envp); } +/** + * Implementation of request_t.to_referer. + */ +static void to_referer(private_request_t *this) +{ + char *referer; + + referer = get_referer(this); + if (referer) + { + FCGX_FPrintF(this->req.out, "Status: 303 See Other\n"); + FCGX_FPrintF(this->req.out, "Location: %s\n\n", referer); + } + else + { + redirect(this, "/"); + } +} + /** * Implementation of request_t.session_closed. */ @@ -392,6 +411,7 @@ request_t *request_create(int fd, bool debug) this->public.close_session = (void(*)(request_t*))close_session; this->public.redirect = (void(*)(request_t*, char *fmt,...))redirect; this->public.get_referer = (char*(*)(request_t*))get_referer; + this->public.to_referer = (void(*)(request_t*))to_referer; this->public.render = (void(*)(request_t*,char*))render; this->public.streamf = (int(*)(request_t*, char *format, ...))streamf; this->public.serve = (void(*)(request_t*,char*,chunk_t))serve; diff --git a/src/libfast/request.h b/src/libfast/request.h index e778018007..af0f8e4f5e 100644 --- a/src/libfast/request.h +++ b/src/libfast/request.h @@ -112,6 +112,11 @@ struct request_t { */ char* (*get_referer)(request_t *this); + /** + * Redirect back to the referer. + */ + void (*to_referer)(request_t *this); + /** * Set a template value. *