Files
haproxy/src/session.c
Willy Tarreau 830ff458de [MAJOR] reworked ->be, ->fe and ->fi in sessions
There was a confusion about the way to find filters and backend
parameters from sessions. The chaining has been changed between
the session and the proxy.

Now, a session knows only two proxies : one frontend (->fe) and
one backend (->be). Each proxy has a link to the proxy providing
filters and to the proxy providing backend parameters (both self
by default).

The captures (cookies and headers) have been attached to the
frontend's filters for now.

The uri_auth and the statistics are attached to the backend's
filters so that the uri can depend on a hostname for instance.
2006-12-17 19:31:23 +01:00

76 lines
1.7 KiB
C

/*
* Server management functions.
*
* Copyright 2000-2006 Willy Tarreau <w@1wt.eu>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
*/
#include <stdlib.h>
#include <common/config.h>
#include <common/memory.h>
#include <types/backend.h>
#include <types/capture.h>
#include <types/log.h>
#include <types/proxy.h>
#include <types/server.h>
#include <proto/session.h>
#include <proto/queue.h>
void **pool_session = NULL;
/*
* frees the context associated to a session. It must have been removed first.
*/
void session_free(struct session *s)
{
if (s->pend_pos)
pendconn_free(s->pend_pos);
if (s->req)
pool_free(buffer, s->req);
if (s->rep)
pool_free(buffer, s->rep);
if (s->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]);
}
pool_free_to(s->fe->fiprm->rsp_cap_pool, s->rsp_cap);
}
if (s->hreq.cap != NULL) {
struct cap_hdr *h;
for (h = s->fe->fiprm->req_cap; h; h = h->next) {
if (s->hreq.cap[h->index] != NULL)
pool_free_to(h->pool, s->hreq.cap[h->index]);
}
pool_free_to(s->fe->fiprm->req_cap_pool, s->hreq.cap);
}
if (s->logs.uri)
pool_free(requri, s->logs.uri);
if (s->logs.cli_cookie)
pool_free(capture, s->logs.cli_cookie);
if (s->logs.srv_cookie)
pool_free(capture, s->logs.srv_cookie);
pool_free(session, s);
}
/*
* Local variables:
* c-indent-level: 8
* c-basic-offset: 8
* End:
*/