#include "vcl.h"
#include "cache.h"
+
/*--------------------------------------------------------------------
+ * We have a refcounted object on the session, now deliver it.
+ *
DOT subgraph cluster_deliver {
DOT deliver [
DOT shape=ellipse
sp->step = STP_DONE;
}
+
/*--------------------------------------------------------------------
+ * This is the final state, figure out if we should close or recycle
+ * the client connection
+ *
DOT DONE [
DOT shape=hexagon
DOT label="Request completed"
DOT ]
*/
-
static void
cnt_done(struct worker *w, struct sess *sp)
{
}
}
+
/*--------------------------------------------------------------------
+ * Emit an error
+ *
DOT subgraph cluster_error {
DOT error [
DOT shape=ellipse
static void cnt_error(struct worker *w, struct sess *sp) { (void)w; (void)sp; INCOMPL(); }
+
/*--------------------------------------------------------------------
+ * We have fetched the headers from the backend, ask the VCL code what
+ * to do next, then head off in that direction.
+ *
DOT subgraph cluster_fetch {
DOT fetch [
DOT shape=ellipse
INCOMPL();
}
+
/*--------------------------------------------------------------------
+ * We had a cache hit. Ask VCL, then march off as instructed.
+ *
DOT subgraph cluster_hit {
DOT hit [
DOT shape=box
sp->step = STP_DONE;
}
+
/*--------------------------------------------------------------------
+ * Look up request in hash table
+ *
DOT subgraph cluster_lookup {
DOT lookup [
DOT shape=ellipse
}
}
+
/*--------------------------------------------------------------------
+ * We had a miss, ask VCL, proceed as instructed
+ *
DOT subgraph cluster_miss {
DOT miss [
DOT shape=box
INCOMPL();
}
+
/*--------------------------------------------------------------------
+ * Start pass processing by getting headers from backend, then
+ * continue in passbody.
+ *
DOT subgraph cluster_pass {
DOT pass [
DOT shape=ellipse
static void cnt_pass(struct worker *w, struct sess *sp) { (void)w; (void)sp; INCOMPL(); }
+
/*--------------------------------------------------------------------
+ * We get here when we have the backends headers, send them to client
+ * and pass any body the backend may have on as well.
+ *
DOT subgraph cluster_passbody {
DOT passbody [
DOT shape=ellipse
static void cnt_passbody(struct worker *w, struct sess *sp) { (void)w; (void)sp; INCOMPL(); }
+
/*--------------------------------------------------------------------
+ * Ship the request header to the backend unchanged, then pipe
+ * until one of the ends close the connection.
+ *
DOT subgraph cluster_pipe {
DOT pipe [
DOT shape=ellipse
static void cnt_pipe(struct worker *w, struct sess *sp) { (void)w; (void)sp; INCOMPL(); }
+
/*--------------------------------------------------------------------
+ * Dispatch the request as instructed by VCL
+ *
DOT subgraph cluster_recv {
DOT recv [
DOT shape=box