aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2010-04-28 09:03:08 +0200
committerMartin Willi <martin@revosec.ch>2010-04-28 09:03:08 +0200
commit40fb7165a9d0dc64a9b221952b3fada51910deb8 (patch)
tree48bd865fa11268068a21950bc56ce20f6b761a6d /src
parent69e492f2e20063c1685afc1a00106bdf4cdcf090 (diff)
downloadstrongswan-40fb7165a9d0dc64a9b221952b3fada51910deb8.tar.bz2
strongswan-40fb7165a9d0dc64a9b221952b3fada51910deb8.tar.xz
Reintroduce to_referer(), redirect() does not work with get_referer()
Diffstat (limited to 'src')
-rw-r--r--src/libfast/request.c20
-rw-r--r--src/libfast/request.h5
2 files changed, 25 insertions, 0 deletions
diff --git a/src/libfast/request.c b/src/libfast/request.c
index 2cbdd2ef8..6bf596fd8 100644
--- a/src/libfast/request.c
+++ b/src/libfast/request.c
@@ -245,6 +245,25 @@ static char* get_referer(private_request_t *this)
}
/**
+ * 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.
*/
static bool session_closed(private_request_t *this)
@@ -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 e77801800..af0f8e4f5 100644
--- a/src/libfast/request.h
+++ b/src/libfast/request.h
@@ -113,6 +113,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.
*
* @param key key to set