/* cache_acceptor.c */
void vca_write(struct sess *sp, void *ptr, size_t len);
+void vca_write_obj(struct sess *sp, struct sbuf *hdr);
void vca_flush(struct sess *sp);
void vca_return_session(struct sess *sp);
void vca_close_session(struct sess *sp, const char *why);
sp->mem->liov += len;
}
+void
+vca_write_obj(struct sess *sp, struct sbuf *hdr)
+{
+ struct storage *st;
+
+ vca_write(sp, sbuf_data(hdr), sbuf_len(hdr));
+ TAILQ_FOREACH(st, &sp->obj->store, list) {
+ if (st->stevedore->send != NULL)
+ st->stevedore->send(st, sp);
+ else
+ vca_write(sp, st->ptr, st->len);
+ }
+ vca_flush(sp);
+}
+
/*--------------------------------------------------------------------*/
static void
}
http_BuildSbuf(2, w->sb, hp);
- vca_write(sp, sbuf_data(w->sb), sbuf_len(w->sb));
- vca_write(sp, st->ptr, st->len);
- vca_flush(sp);
+
+ vca_write_obj(sp, w->sb);
hash->deref(sp->obj);
return (0);
}
http_BuildSbuf(2, w->sb, hp);
- vca_write(sp, sbuf_data(w->sb), sbuf_len(w->sb));
- TAILQ_FOREACH(st, &sp->obj->store, list)
- vca_write(sp, st->ptr, st->len);
- vca_flush(sp);
+ vca_write_obj(sp, w->sb);
hash->deref(sp->obj);
static int
DeliverSession(struct worker *w, struct sess *sp)
{
- char buf[BUFSIZ];
- struct storage *st;
- sprintf(buf,
+ sbuf_clear(w->sb);
+ sbuf_printf(w->sb,
"HTTP/1.1 200 OK\r\n"
"Server: Varnish\r\n"
"Content-Length: %u\r\n"
"\r\n", sp->obj->len);
- vca_write(sp, buf, strlen(buf));
- TAILQ_FOREACH(st, &sp->obj->store, list) {
- if (st->stevedore->send != NULL)
- st->stevedore->send(st, sp);
- else
- vca_write(sp, st->ptr, st->len);
- }
- vca_flush(sp);
+ vca_write_obj(sp, w->sb);
return (1);
}