/*
 * 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/hdr_idx.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)
{
	struct http_txn *txn = &s->txn;

	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 (txn->hdr_idx.v != NULL)
		pool_free_to(s->fe->hdr_idx_pool, txn->hdr_idx.v);

	if (txn->rsp.cap != NULL) {
		struct cap_hdr *h;
		for (h = s->fe->rsp_cap; h; h = h->next) {
			if (txn->rsp.cap[h->index] != NULL)
				pool_free_to(h->pool, txn->rsp.cap[h->index]);
		}
		pool_free_to(s->fe->rsp_cap_pool, txn->rsp.cap);
	}
	if (txn->req.cap != NULL) {
		struct cap_hdr *h;
		for (h = s->fe->req_cap; h; h = h->next) {
			if (txn->req.cap[h->index] != NULL)
				pool_free_to(h->pool, txn->req.cap[h->index]);
		}
		pool_free_to(s->fe->req_cap_pool, txn->req.cap);
	}

	if (txn->uri)
		pool_free(requri, txn->uri);
	if (txn->cli_cookie)
		pool_free(capture, txn->cli_cookie);
	if (txn->srv_cookie)
		pool_free(capture, txn->srv_cookie);

	pool_free(session, s);
}


/*
 * Local variables:
 *  c-indent-level: 8
 *  c-basic-offset: 8
 * End:
 */
