*/
static int
-cnt_deliver(struct worker *w, struct sess *sp)
+cnt_deliver(struct sess *sp)
{
- vca_write_obj(w, sp);
+ vca_write_obj(sp->wrk, sp);
sp->step = STP_DONE;
return (0);
}
*/
static int
-cnt_done(struct worker *w, struct sess *sp)
+cnt_done(struct sess *sp)
{
char *b;
- (void)w;
if (http_GetHdr(sp->http, "Connection", &b) &&
!strcmp(b, "close")) {
vca_close_session(sp, "Connection header");
strcmp(b, "HTTP/1.1")) {
vca_close_session(sp, "not HTTP/1.1");
}
+ VCL_Rel(sp->vcl);
+ sp->vcl = NULL;
+
+ vca_return_session(sp);
return (1);
}
DOT error -> DONE
*/
-static int cnt_error(struct worker *w, struct sess *sp) { (void)w; (void)sp; INCOMPL(); }
+static int cnt_error(struct sess *sp) { (void)sp; INCOMPL(); }
/*--------------------------------------------------------------------
*/
static int
-cnt_fetch(struct worker *w, struct sess *sp)
+cnt_fetch(struct sess *sp)
{
RFC2616_cache_policy(sp, sp->bkd_http);
}
if (sp->handling == VCL_RET_INSERT) {
sp->obj->cacheable = 1;
- FetchBody(w, sp);
+ FetchBody(sp->wrk, sp);
sp->step = STP_DELIVER;
return (0);
}
*/
static int
-cnt_hit(struct worker *w, struct sess *sp)
+cnt_hit(struct sess *sp)
{
VCL_hit_method(sp);
sp->handling = VCL_RET_PASS;
if (sp->handling == VCL_RET_DELIVER) {
- vca_write_obj(w, sp);
+ vca_write_obj(sp->wrk, sp);
HSH_Deref(sp->obj);
sp->obj = NULL;
sp->step = STP_DONE;
if (sp->handling == VCL_RET_PASS) {
HSH_Deref(sp->obj);
sp->obj = NULL;
- PassSession(w, sp);
+ PassSession(sp->wrk, sp);
sp->step = STP_PASSBODY;
return (0);
}
*/
static int
-cnt_lookup(struct worker *w, struct sess *sp)
+cnt_lookup(struct sess *sp)
{
- sp->obj = HSH_Lookup(w, sp->http);
+ sp->obj = HSH_Lookup(sp->wrk, sp->http);
if (sp->obj->busy) {
VSL_stats->cache_miss++;
sp->step = STP_MISS;
*/
static int
-cnt_miss(struct worker *w, struct sess *sp)
+cnt_miss(struct sess *sp)
{
VCL_miss_method(sp);
HSH_Unbusy(sp->obj);
HSH_Deref(sp->obj);
sp->obj = 0;
- PassSession(w, sp);
+ PassSession(sp->wrk, sp);
sp->step = STP_PASSBODY;
return (0);
}
if (sp->handling == VCL_RET_LOOKUP)
INCOMPL();
if (sp->handling == VCL_RET_FETCH) {
- FetchHeaders(w, sp);
+ FetchHeaders(sp->wrk, sp);
sp->step = STP_FETCH;
return (0);
}
*/
static int
-cnt_pass(struct worker *w, struct sess *sp)
+cnt_pass(struct sess *sp)
{
- PassSession(w, sp);
+ PassSession(sp->wrk, sp);
sp->step = STP_PASSBODY;
return (0);
}
*/
static int
-cnt_passbody(struct worker *w, struct sess *sp)
+cnt_passbody(struct sess *sp)
{
- PassBody(w, sp);
+ PassBody(sp->wrk, sp);
sp->step = STP_DONE;
return (0);
}
*/
static int
-cnt_pipe(struct worker *w, struct sess *sp)
+cnt_pipe(struct sess *sp)
{
- PipeSession(w, sp);
+ PipeSession(sp->wrk, sp);
sp->step = STP_DONE;
return (0);
}
*/
static int
-cnt_recv(struct worker *w, struct sess *sp)
+cnt_recv(struct sess *sp)
{
int done;
+ sp->t0 = time(NULL);
+ sp->vcl = VCL_Get();
+ SES_RefSrcAddr(sp);
+
done = http_DissectRequest(sp->http, sp->fd);
if (done != 0) {
- RES_Error(w, sp, done, NULL);
+ RES_Error(sp->wrk, sp, done, NULL);
sp->step = STP_DONE;
return (0);
}
*/
void
-CNT_Session(struct worker *w, struct sess *sp)
+CNT_Session(struct sess *sp)
{
int done;
- sp->t0 = time(NULL);
- sp->vcl = VCL_Get();
-
- sp->wrk = w;
-
- SES_RefSrcAddr(sp);
-
sp->step = STP_RECV;
for (done = 0; !done; ) {
switch (sp->step) {
#define STEP(l,u) \
case STP_##u: \
VSL(SLT_Debug, sp->fd, "State " #u); \
- done = cnt_##l(w, sp); \
+ done = cnt_##l(sp); \
break;
#include "steps.h"
#undef STEP
}
}
- VCL_Rel(sp->vcl);
- sp->vcl = NULL;
-
- vca_return_session(sp);
}
/*