blob: 824799a514b0c68bbbe8bc4cdf8f19eb3f30027d [file] [log] [blame]
Willy Tarreaub1ec8c42015-04-03 13:53:24 +02001/*
2 * include/types/session.h
3 * This file defines everything related to sessions.
4 *
5 * Copyright (C) 2000-2015 Willy Tarreau - w@1wt.eu
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation, version 2.1
10 * exclusively.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22#ifndef _TYPES_SESSION_H
23#define _TYPES_SESSION_H
24
25
26#include <sys/time.h>
27#include <unistd.h>
28#include <netinet/in.h>
29#include <arpa/inet.h>
30
31#include <common/config.h>
32#include <common/mini-clist.h>
33
34#include <types/obj_type.h>
35#include <types/proxy.h>
36#include <types/stick_table.h>
Willy Tarreau02a0c0e2015-04-04 18:08:21 +020037#include <types/task.h>
Willy Tarreauebcd4842015-06-19 11:59:02 +020038#include <types/vars.h>
Willy Tarreaub1ec8c42015-04-03 13:53:24 +020039
Olivier Houchard00cf70f2018-11-30 17:24:55 +010040struct sess_srv_list {
41 void *target;
Olivier Houchard351411f2018-12-27 17:20:54 +010042 struct list conn_list; /* Head of the connections list */
43 struct list srv_list; /* Next element of the server list */
Olivier Houchard00cf70f2018-11-30 17:24:55 +010044};
45
46#define MAX_SRV_LIST 5
47
Olivier Houchard250031e2019-05-29 15:01:50 +020048/* session flags */
49enum {
50 SESS_FL_NONE = 0x00000000, /* nothing */
51 SESS_FL_PREFER_LAST = 0x00000001, /* NTML authent, we should reuse last conn */
52};
53
Willy Tarreaub1ec8c42015-04-03 13:53:24 +020054struct session {
Willy Tarreaue36cbcb2015-04-03 15:40:56 +020055 struct proxy *fe; /* the proxy this session depends on for the client side */
Willy Tarreaufb0afa72015-04-03 14:46:27 +020056 struct listener *listener; /* the listener by which the request arrived */
Willy Tarreau40606ab2015-04-03 18:08:29 +020057 enum obj_type *origin; /* the connection / applet which initiated this session */
Willy Tarreau7ea671b2015-04-04 14:46:56 +020058 struct timeval accept_date; /* date of the session's accept() in user date */
59 struct timeval tv_accept; /* date of the session's accept() in internal date (monotonic) */
Willy Tarreaub2bf8332015-04-04 15:58:58 +020060 struct stkctr stkctr[MAX_SESS_STKCTR]; /* stick counters for tcp-connection */
Willy Tarreauebcd4842015-06-19 11:59:02 +020061 struct vars vars; /* list of variables for the session scope. */
Willy Tarreau0b74eae2017-08-28 19:02:51 +020062 struct task *task; /* handshake timeout processing */
Willy Tarreau590a0512018-09-05 11:56:48 +020063 long t_handshake; /* handshake duration, -1 = not completed */
Olivier Houcharda2dbeb22018-12-28 18:50:57 +010064 int idle_conns; /* Number of connections we're currently responsible for that we are not using */
Olivier Houchard351411f2018-12-27 17:20:54 +010065 struct list srv_list; /* List of servers and the connections the session is currently responsible for */
Olivier Houchard250031e2019-05-29 15:01:50 +020066 unsigned int flags; /* session flags, SESS_FL_* */
Willy Tarreaub1ec8c42015-04-03 13:53:24 +020067};
68
69#endif /* _TYPES_SESSION_H */
70
71/*
72 * Local variables:
73 * c-indent-level: 8
74 * c-basic-offset: 8
75 * End:
76 */