~ubuntu-branches/ubuntu/precise/haproxy/precise-security

« back to all changes in this revision

Viewing changes to include/types/stream_interface.h

  • Committer: Bazaar Package Importer
  • Author(s): Arnaud Cornet
  • Date: 2009-06-26 00:11:01 UTC
  • mfrom: (1.1.6 upstream) (2.1.4 squeeze)
  • Revision ID: james.westby@ubuntu.com-20090626001101-qo261ke2mjh3d8cn
Tags: 1.3.18-1
* New Upstream Version (Closes: #534583).
* Add contrib directory in docs

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
  include/types/stream_interface.h
 
3
  This file describes the stream_interface struct and associated constants.
 
4
 
 
5
  Copyright (C) 2000-2008 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_STREAM_INTERFACE_H
 
23
#define _TYPES_STREAM_INTERFACE_H
 
24
 
 
25
#include <stdlib.h>
 
26
 
 
27
#include <types/buffers.h>
 
28
#include <common/config.h>
 
29
 
 
30
/* A stream interface must have its own errors independantly of the buffer's,
 
31
 * so that applications can rely on what the buffer reports while the stream
 
32
 * interface is performing some retries (eg: connection error). Some states are
 
33
 * transient and do not last beyond process_session().
 
34
 */
 
35
enum {
 
36
        SI_ST_INI = 0,           /* interface not sollicitated yet */
 
37
        SI_ST_REQ,               /* [transient] connection initiation desired and not started yet */
 
38
        SI_ST_QUE,               /* interface waiting in queue */
 
39
        SI_ST_TAR,               /* interface in turn-around state after failed connect attempt */
 
40
        SI_ST_ASS,               /* server just assigned to this interface */
 
41
        SI_ST_CON,               /* initiated connection request (resource exists) */
 
42
        SI_ST_CER,               /* [transient] previous connection attempt failed (resource released) */
 
43
        SI_ST_EST,               /* connection established (resource exists) */
 
44
        SI_ST_DIS,               /* [transient] disconnected from other side, but cleanup not done yet */
 
45
        SI_ST_CLO,               /* stream intf closed, might not existing anymore. Buffers shut. */
 
46
};
 
47
 
 
48
/* error types reported on the streams interface for more accurate reporting */
 
49
enum {
 
50
        SI_ET_NONE       = 0x0000,  /* no error yet, leave it to zero */
 
51
        SI_ET_QUEUE_TO   = 0x0001,  /* queue timeout */
 
52
        SI_ET_QUEUE_ERR  = 0x0002,  /* queue error (eg: full) */
 
53
        SI_ET_QUEUE_ABRT = 0x0004,  /* aborted in queue by external cause */
 
54
        SI_ET_CONN_TO    = 0x0008,  /* connection timeout */
 
55
        SI_ET_CONN_ERR   = 0x0010,  /* connection error (eg: no server available) */
 
56
        SI_ET_CONN_ABRT  = 0x0020,  /* connection aborted by external cause (eg: abort) */
 
57
        SI_ET_CONN_OTHER = 0x0040,  /* connection aborted for other reason (eg: 500) */
 
58
        SI_ET_DATA_TO    = 0x0080,  /* timeout during data phase */
 
59
        SI_ET_DATA_ERR   = 0x0100,  /* error during data phase */
 
60
        SI_ET_DATA_ABRT  = 0x0200,  /* data phase aborted by external cause */
 
61
};
 
62
 
 
63
/* flags set after I/O */
 
64
enum {
 
65
        SI_FL_NONE       = 0x0000,  /* nothing */
 
66
        SI_FL_EXP        = 0x0001,  /* timeout has expired */
 
67
        SI_FL_ERR        = 0x0002,  /* a non-recoverable error has occurred */
 
68
        SI_FL_WAIT_ROOM  = 0x0004,  /* waiting for space to store incoming data */
 
69
        SI_FL_WAIT_DATA  = 0x0008,  /* waiting for more data to send */
 
70
};
 
71
 
 
72
struct stream_interface {
 
73
        unsigned int state;     /* SI_ST* */
 
74
        unsigned int prev_state;/* SI_ST*, copy of previous state */
 
75
        void *owner;            /* generally a (struct task*) */
 
76
        int fd;                 /* file descriptor for a stream driver when known */
 
77
        unsigned int flags;     /* SI_FL_*, must be cleared before I/O */
 
78
        unsigned int exp;       /* wake up time for connect, queue, turn-around, ... */
 
79
        void (*shutr)(struct stream_interface *);  /* shutr function */
 
80
        void (*shutw)(struct stream_interface *);  /* shutw function */
 
81
        void (*chk_rcv)(struct stream_interface *);/* chk_rcv function */
 
82
        void (*chk_snd)(struct stream_interface *);/* chk_snd function */
 
83
        struct buffer *ib, *ob; /* input and output buffers */
 
84
        unsigned int err_type;  /* first error detected, one of SI_ET_* */
 
85
        void *err_loc;          /* commonly the server, NULL when SI_ET_NONE */
 
86
};
 
87
 
 
88
 
 
89
#endif /* _TYPES_STREAM_INTERFACE_H */
 
90
 
 
91
/*
 
92
 * Local variables:
 
93
 *  c-indent-level: 8
 
94
 *  c-basic-offset: 8
 
95
 * End:
 
96
 */