[MINOR] move the response headers to the http_req

This commit is contained in:
Willy Tarreau 2007-01-21 20:49:31 +01:00
parent ee68cf29bb
commit 362b34d05c
5 changed files with 25 additions and 21 deletions

View File

@ -139,7 +139,7 @@ struct http_msg {
int sor; /* Start Of Request, relative to buffer */
int col, sov; /* current header: colon, start of value */
int eoh; /* End Of Headers, relative to buffer */
char **cap; /* array of captured request headers (may be NULL) */
char **cap; /* array of captured headers (may be NULL) */
union { /* useful start line pointers, relative to buffer */
struct {
int l; /* request line length (not including CR) */
@ -187,7 +187,6 @@ struct session {
struct sockaddr_in srv_addr; /* the address to connect to */
struct server *srv; /* the server being used */
struct pendconn *pend_pos; /* if not NULL, points to the position in the pending queue */
char **rsp_cap; /* array of captured response headers (may be NULL) */
struct http_req hreq; /* current HTTP request being processed. Should become a list. */
struct {
int logwait; /* log fields waiting to be collected : LW_* */

View File

@ -198,9 +198,9 @@ int event_accept(int fd) {
s->uniq_id = totalconn;
p->cum_feconn++; /* cum_beconn will be increased once assigned */
s->rsp_cap = NULL;
hreq = &s->hreq;
hreq->req.cap = NULL;
hreq->rsp.cap = NULL;
hreq->hdr_idx.v = NULL;
hreq->hdr_idx.size = hreq->hdr_idx.used = 0;
@ -226,7 +226,7 @@ int event_accept(int fd) {
if (p->fiprm->nb_rsp_cap > 0) {
if ((s->rsp_cap =
if ((hreq->rsp.cap =
pool_alloc_from(p->fiprm->rsp_cap_pool, p->fiprm->nb_rsp_cap*sizeof(char *)))
== NULL) { /* no memory */
if (hreq->req.cap != NULL)
@ -236,15 +236,15 @@ int event_accept(int fd) {
pool_free(session, s);
return 0;
}
memset(s->rsp_cap, 0, p->fiprm->nb_rsp_cap*sizeof(char *));
memset(hreq->rsp.cap, 0, p->fiprm->nb_rsp_cap*sizeof(char *));
}
if ((hreq->hdr_idx.v =
pool_alloc_from(p->hdr_idx_pool, hreq->hdr_idx.size*sizeof(*hreq->hdr_idx.v)))
== NULL) { /* no memory */
if (s->rsp_cap != NULL)
pool_free_to(p->fiprm->rsp_cap_pool, s->rsp_cap);
if (hreq->rsp.cap != NULL)
pool_free_to(p->fiprm->rsp_cap_pool, hreq->rsp.cap);
if (hreq->req.cap != NULL)
pool_free_to(p->fiprm->req_cap_pool, hreq->req.cap);
close(cfd); /* nothing can be done for this fd without memory */
@ -333,8 +333,8 @@ int event_accept(int fd) {
if ((s->req = pool_alloc(buffer)) == NULL) { /* no memory */
if (hreq->hdr_idx.v != NULL)
pool_free_to(p->hdr_idx_pool, hreq->hdr_idx.v);
if (s->rsp_cap != NULL)
pool_free_to(p->fiprm->rsp_cap_pool, s->rsp_cap);
if (hreq->rsp.cap != NULL)
pool_free_to(p->fiprm->rsp_cap_pool, hreq->rsp.cap);
if (hreq->req.cap != NULL)
pool_free_to(p->fiprm->req_cap_pool, hreq->req.cap);
close(cfd); /* nothing can be done for this fd without memory */
@ -356,8 +356,8 @@ int event_accept(int fd) {
pool_free(buffer, s->req);
if (hreq->hdr_idx.v != NULL)
pool_free_to(p->hdr_idx_pool, hreq->hdr_idx.v);
if (s->rsp_cap != NULL)
pool_free_to(p->fiprm->rsp_cap_pool, s->rsp_cap);
if (hreq->rsp.cap != NULL)
pool_free_to(p->fiprm->rsp_cap_pool, hreq->rsp.cap);
if (hreq->req.cap != NULL)
pool_free_to(p->fiprm->req_cap_pool, hreq->req.cap);
close(cfd); /* nothing can be done for this fd without memory */

View File

@ -368,9 +368,9 @@ void sess_log(struct session *s)
for (hdr = 0; hdr < fe->nb_rsp_cap; hdr++) {
if (hdr)
*(h++) = '|';
if (s->rsp_cap[hdr] != NULL)
if (hreq->rsp.cap[hdr] != NULL)
h = encode_string(h, tmpline + sizeof(tmpline) - 4,
'#', hdr_encode_map, s->rsp_cap[hdr]);
'#', hdr_encode_map, hreq->rsp.cap[hdr]);
}
*(h++) = '}';
}

View File

@ -2192,16 +2192,21 @@ int process_srv(struct session *t)
if ((h->namelen + 2 <= ptr - rep->h) &&
(rep->h[h->namelen] == ':') &&
(strncasecmp(rep->h, h->name, h->namelen) == 0)) {
if (hreq->rsp.cap[h->index] == NULL)
hreq->rsp.cap[h->index] =
pool_alloc_from(h->pool, h->len + 1);
if (t->rsp_cap[h->index] == NULL)
t->rsp_cap[h->index] = pool_alloc_from(h->pool, h->len + 1);
if (hreq->rsp.cap[h->index] == NULL) {
Alert("HTTP capture : out of memory.\n");
continue;
}
len = ptr - (rep->h + h->namelen + 2);
if (len > h->len)
len = h->len;
memcpy(t->rsp_cap[h->index], rep->h + h->namelen + 2, len);
t->rsp_cap[h->index][len]=0;
memcpy(hreq->rsp.cap[h->index], rep->h + h->namelen + 2, len);
hreq->rsp.cap[h->index][len]=0;
}
}

View File

@ -45,13 +45,13 @@ void session_free(struct session *s)
if (hreq->hdr_idx.v != NULL)
pool_free_to(s->fe->hdr_idx_pool, hreq->hdr_idx.v);
if (s->rsp_cap != NULL) {
if (hreq->rsp.cap != NULL) {
struct cap_hdr *h;
for (h = s->fe->fiprm->rsp_cap; h; h = h->next) {
if (s->rsp_cap[h->index] != NULL)
pool_free_to(h->pool, s->rsp_cap[h->index]);
if (hreq->rsp.cap[h->index] != NULL)
pool_free_to(h->pool, hreq->rsp.cap[h->index]);
}
pool_free_to(s->fe->fiprm->rsp_cap_pool, s->rsp_cap);
pool_free_to(s->fe->fiprm->rsp_cap_pool, hreq->rsp.cap);
}
if (hreq->req.cap != NULL) {
struct cap_hdr *h;