/src/haproxy/include/haproxy/sc_strm.h
Line | Count | Source |
1 | | /* |
2 | | * include/haproxy/sc_strm.h |
3 | | * This file contains stream-specific stream-connector functions prototypes |
4 | | * |
5 | | * Copyright 2022 Christopher Faulet <cfaulet@haproxy.com> |
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 _HAPROXY_SC_STRM_H |
23 | | #define _HAPROXY_SC_STRM_H |
24 | | |
25 | | #include <haproxy/api.h> |
26 | | #include <haproxy/buf-t.h> |
27 | | #include <haproxy/channel-t.h> |
28 | | #include <haproxy/stream-t.h> |
29 | | #include <haproxy/task-t.h> |
30 | | #include <haproxy/connection.h> |
31 | | #include <haproxy/channel.h> |
32 | | #include <haproxy/session.h> |
33 | | #include <haproxy/stconn.h> |
34 | | #include <haproxy/stream.h> |
35 | | |
36 | | void sc_update_rx(struct stconn *sc); |
37 | | void sc_update_tx(struct stconn *sc); |
38 | | |
39 | | struct task *sc_conn_io_cb(struct task *t, void *ctx, unsigned int state); |
40 | | int sc_conn_sync_recv(struct stconn *sc); |
41 | | void sc_conn_sync_send(struct stconn *sc); |
42 | | |
43 | | int sc_applet_sync_recv(struct stconn *sc); |
44 | | void sc_applet_sync_send(struct stconn *sc); |
45 | | |
46 | | int sc_applet_sync_recv(struct stconn *sc); |
47 | | void sc_applet_sync_send(struct stconn *sc); |
48 | | |
49 | | |
50 | | /* returns the channel which receives data from this stream connector (input channel) */ |
51 | | static inline struct channel *sc_ic(const struct stconn *sc) |
52 | 0 | { |
53 | 0 | struct stream *strm = __sc_strm(sc); |
54 | |
|
55 | 0 | return ((sc->flags & SC_FL_ISBACK) ? &(strm->res) : &(strm->req)); |
56 | 0 | } Unexecuted instantiation: cli.c:sc_ic Unexecuted instantiation: connection.c:sc_ic Unexecuted instantiation: debug.c:sc_ic Unexecuted instantiation: errors.c:sc_ic Unexecuted instantiation: frontend.c:sc_ic Unexecuted instantiation: haproxy.c:sc_ic Unexecuted instantiation: http_ana.c:sc_ic Unexecuted instantiation: http_ext.c:sc_ic Unexecuted instantiation: log.c:sc_ic Unexecuted instantiation: mworker.c:sc_ic Unexecuted instantiation: peers.c:sc_ic Unexecuted instantiation: pool.c:sc_ic Unexecuted instantiation: proxy.c:sc_ic Unexecuted instantiation: resolvers.c:sc_ic Unexecuted instantiation: ring.c:sc_ic Unexecuted instantiation: sample.c:sc_ic Unexecuted instantiation: server.c:sc_ic Unexecuted instantiation: sink.c:sc_ic Unexecuted instantiation: stats-html.c:sc_ic Unexecuted instantiation: stats.c:sc_ic Unexecuted instantiation: stconn.c:sc_ic Unexecuted instantiation: stick_table.c:sc_ic Unexecuted instantiation: stream.c:sc_ic Unexecuted instantiation: tcp_rules.c:sc_ic Unexecuted instantiation: tools.c:sc_ic Unexecuted instantiation: trace.c:sc_ic Unexecuted instantiation: vars.c:sc_ic Unexecuted instantiation: activity.c:sc_ic Unexecuted instantiation: applet.c:sc_ic Unexecuted instantiation: backend.c:sc_ic Unexecuted instantiation: cache.c:sc_ic Unexecuted instantiation: dns.c:sc_ic Unexecuted instantiation: dns_ring.c:sc_ic Unexecuted instantiation: http_fetch.c:sc_ic Unexecuted instantiation: stats-json.c:sc_ic Unexecuted instantiation: flt_spoe.c:sc_ic |
57 | | |
58 | | /* returns the channel which feeds data to this stream connector (output channel) */ |
59 | | static inline struct channel *sc_oc(const struct stconn *sc) |
60 | 0 | { |
61 | 0 | struct stream *strm = __sc_strm(sc); |
62 | |
|
63 | 0 | return ((sc->flags & SC_FL_ISBACK) ? &(strm->req) : &(strm->res)); |
64 | 0 | } Unexecuted instantiation: cli.c:sc_oc Unexecuted instantiation: connection.c:sc_oc Unexecuted instantiation: debug.c:sc_oc Unexecuted instantiation: errors.c:sc_oc Unexecuted instantiation: frontend.c:sc_oc Unexecuted instantiation: haproxy.c:sc_oc Unexecuted instantiation: http_ana.c:sc_oc Unexecuted instantiation: http_ext.c:sc_oc Unexecuted instantiation: log.c:sc_oc Unexecuted instantiation: mworker.c:sc_oc Unexecuted instantiation: peers.c:sc_oc Unexecuted instantiation: pool.c:sc_oc Unexecuted instantiation: proxy.c:sc_oc Unexecuted instantiation: resolvers.c:sc_oc Unexecuted instantiation: ring.c:sc_oc Unexecuted instantiation: sample.c:sc_oc Unexecuted instantiation: server.c:sc_oc Unexecuted instantiation: sink.c:sc_oc Unexecuted instantiation: stats-html.c:sc_oc Unexecuted instantiation: stats.c:sc_oc Unexecuted instantiation: stconn.c:sc_oc Unexecuted instantiation: stick_table.c:sc_oc Unexecuted instantiation: stream.c:sc_oc Unexecuted instantiation: tcp_rules.c:sc_oc Unexecuted instantiation: tools.c:sc_oc Unexecuted instantiation: trace.c:sc_oc Unexecuted instantiation: vars.c:sc_oc Unexecuted instantiation: activity.c:sc_oc Unexecuted instantiation: applet.c:sc_oc Unexecuted instantiation: backend.c:sc_oc Unexecuted instantiation: cache.c:sc_oc Unexecuted instantiation: dns.c:sc_oc Unexecuted instantiation: dns_ring.c:sc_oc Unexecuted instantiation: http_fetch.c:sc_oc Unexecuted instantiation: stats-json.c:sc_oc Unexecuted instantiation: flt_spoe.c:sc_oc |
65 | | |
66 | | /* returns the buffer which receives data from this stream connector (input channel's buffer) */ |
67 | | static inline struct buffer *sc_ib(const struct stconn *sc) |
68 | 0 | { |
69 | 0 | return &sc_ic(sc)->buf; |
70 | 0 | } Unexecuted instantiation: cli.c:sc_ib Unexecuted instantiation: connection.c:sc_ib Unexecuted instantiation: debug.c:sc_ib Unexecuted instantiation: errors.c:sc_ib Unexecuted instantiation: frontend.c:sc_ib Unexecuted instantiation: haproxy.c:sc_ib Unexecuted instantiation: http_ana.c:sc_ib Unexecuted instantiation: http_ext.c:sc_ib Unexecuted instantiation: log.c:sc_ib Unexecuted instantiation: mworker.c:sc_ib Unexecuted instantiation: peers.c:sc_ib Unexecuted instantiation: pool.c:sc_ib Unexecuted instantiation: proxy.c:sc_ib Unexecuted instantiation: resolvers.c:sc_ib Unexecuted instantiation: ring.c:sc_ib Unexecuted instantiation: sample.c:sc_ib Unexecuted instantiation: server.c:sc_ib Unexecuted instantiation: sink.c:sc_ib Unexecuted instantiation: stats-html.c:sc_ib Unexecuted instantiation: stats.c:sc_ib Unexecuted instantiation: stconn.c:sc_ib Unexecuted instantiation: stick_table.c:sc_ib Unexecuted instantiation: stream.c:sc_ib Unexecuted instantiation: tcp_rules.c:sc_ib Unexecuted instantiation: tools.c:sc_ib Unexecuted instantiation: trace.c:sc_ib Unexecuted instantiation: vars.c:sc_ib Unexecuted instantiation: activity.c:sc_ib Unexecuted instantiation: applet.c:sc_ib Unexecuted instantiation: backend.c:sc_ib Unexecuted instantiation: cache.c:sc_ib Unexecuted instantiation: dns.c:sc_ib Unexecuted instantiation: dns_ring.c:sc_ib Unexecuted instantiation: http_fetch.c:sc_ib Unexecuted instantiation: stats-json.c:sc_ib Unexecuted instantiation: flt_spoe.c:sc_ib |
71 | | |
72 | | /* returns the buffer which feeds data to this stream connector (output channel's buffer) */ |
73 | | static inline struct buffer *sc_ob(const struct stconn *sc) |
74 | 0 | { |
75 | 0 | return &sc_oc(sc)->buf; |
76 | 0 | } Unexecuted instantiation: cli.c:sc_ob Unexecuted instantiation: connection.c:sc_ob Unexecuted instantiation: debug.c:sc_ob Unexecuted instantiation: errors.c:sc_ob Unexecuted instantiation: frontend.c:sc_ob Unexecuted instantiation: haproxy.c:sc_ob Unexecuted instantiation: http_ana.c:sc_ob Unexecuted instantiation: http_ext.c:sc_ob Unexecuted instantiation: log.c:sc_ob Unexecuted instantiation: mworker.c:sc_ob Unexecuted instantiation: peers.c:sc_ob Unexecuted instantiation: pool.c:sc_ob Unexecuted instantiation: proxy.c:sc_ob Unexecuted instantiation: resolvers.c:sc_ob Unexecuted instantiation: ring.c:sc_ob Unexecuted instantiation: sample.c:sc_ob Unexecuted instantiation: server.c:sc_ob Unexecuted instantiation: sink.c:sc_ob Unexecuted instantiation: stats-html.c:sc_ob Unexecuted instantiation: stats.c:sc_ob Unexecuted instantiation: stconn.c:sc_ob Unexecuted instantiation: stick_table.c:sc_ob Unexecuted instantiation: stream.c:sc_ob Unexecuted instantiation: tcp_rules.c:sc_ob Unexecuted instantiation: tools.c:sc_ob Unexecuted instantiation: trace.c:sc_ob Unexecuted instantiation: vars.c:sc_ob Unexecuted instantiation: activity.c:sc_ob Unexecuted instantiation: applet.c:sc_ob Unexecuted instantiation: backend.c:sc_ob Unexecuted instantiation: cache.c:sc_ob Unexecuted instantiation: dns.c:sc_ob Unexecuted instantiation: dns_ring.c:sc_ob Unexecuted instantiation: http_fetch.c:sc_ob Unexecuted instantiation: stats-json.c:sc_ob Unexecuted instantiation: flt_spoe.c:sc_ob |
77 | | /* returns the stream's task associated to this stream connector */ |
78 | | static inline struct task *sc_strm_task(const struct stconn *sc) |
79 | 0 | { |
80 | 0 | struct stream *strm = __sc_strm(sc); |
81 | |
|
82 | 0 | return strm->task; |
83 | 0 | } Unexecuted instantiation: cli.c:sc_strm_task Unexecuted instantiation: connection.c:sc_strm_task Unexecuted instantiation: debug.c:sc_strm_task Unexecuted instantiation: errors.c:sc_strm_task Unexecuted instantiation: frontend.c:sc_strm_task Unexecuted instantiation: haproxy.c:sc_strm_task Unexecuted instantiation: http_ana.c:sc_strm_task Unexecuted instantiation: http_ext.c:sc_strm_task Unexecuted instantiation: log.c:sc_strm_task Unexecuted instantiation: mworker.c:sc_strm_task Unexecuted instantiation: peers.c:sc_strm_task Unexecuted instantiation: pool.c:sc_strm_task Unexecuted instantiation: proxy.c:sc_strm_task Unexecuted instantiation: resolvers.c:sc_strm_task Unexecuted instantiation: ring.c:sc_strm_task Unexecuted instantiation: sample.c:sc_strm_task Unexecuted instantiation: server.c:sc_strm_task Unexecuted instantiation: sink.c:sc_strm_task Unexecuted instantiation: stats-html.c:sc_strm_task Unexecuted instantiation: stats.c:sc_strm_task Unexecuted instantiation: stconn.c:sc_strm_task Unexecuted instantiation: stick_table.c:sc_strm_task Unexecuted instantiation: stream.c:sc_strm_task Unexecuted instantiation: tcp_rules.c:sc_strm_task Unexecuted instantiation: tools.c:sc_strm_task Unexecuted instantiation: trace.c:sc_strm_task Unexecuted instantiation: vars.c:sc_strm_task Unexecuted instantiation: activity.c:sc_strm_task Unexecuted instantiation: applet.c:sc_strm_task Unexecuted instantiation: backend.c:sc_strm_task Unexecuted instantiation: cache.c:sc_strm_task Unexecuted instantiation: dns.c:sc_strm_task Unexecuted instantiation: dns_ring.c:sc_strm_task Unexecuted instantiation: http_fetch.c:sc_strm_task Unexecuted instantiation: stats-json.c:sc_strm_task Unexecuted instantiation: flt_spoe.c:sc_strm_task |
84 | | |
85 | | /* returns the stream connector on the other side. Used during forwarding. */ |
86 | | static inline struct stconn *sc_opposite(const struct stconn *sc) |
87 | 0 | { |
88 | 0 | struct stream *strm = __sc_strm(sc); |
89 | |
|
90 | 0 | return ((sc->flags & SC_FL_ISBACK) ? strm->scf : strm->scb); |
91 | 0 | } Unexecuted instantiation: cli.c:sc_opposite Unexecuted instantiation: connection.c:sc_opposite Unexecuted instantiation: debug.c:sc_opposite Unexecuted instantiation: errors.c:sc_opposite Unexecuted instantiation: frontend.c:sc_opposite Unexecuted instantiation: haproxy.c:sc_opposite Unexecuted instantiation: http_ana.c:sc_opposite Unexecuted instantiation: http_ext.c:sc_opposite Unexecuted instantiation: log.c:sc_opposite Unexecuted instantiation: mworker.c:sc_opposite Unexecuted instantiation: peers.c:sc_opposite Unexecuted instantiation: pool.c:sc_opposite Unexecuted instantiation: proxy.c:sc_opposite Unexecuted instantiation: resolvers.c:sc_opposite Unexecuted instantiation: ring.c:sc_opposite Unexecuted instantiation: sample.c:sc_opposite Unexecuted instantiation: server.c:sc_opposite Unexecuted instantiation: sink.c:sc_opposite Unexecuted instantiation: stats-html.c:sc_opposite Unexecuted instantiation: stats.c:sc_opposite Unexecuted instantiation: stconn.c:sc_opposite Unexecuted instantiation: stick_table.c:sc_opposite Unexecuted instantiation: stream.c:sc_opposite Unexecuted instantiation: tcp_rules.c:sc_opposite Unexecuted instantiation: tools.c:sc_opposite Unexecuted instantiation: trace.c:sc_opposite Unexecuted instantiation: vars.c:sc_opposite Unexecuted instantiation: activity.c:sc_opposite Unexecuted instantiation: applet.c:sc_opposite Unexecuted instantiation: backend.c:sc_opposite Unexecuted instantiation: cache.c:sc_opposite Unexecuted instantiation: dns.c:sc_opposite Unexecuted instantiation: dns_ring.c:sc_opposite Unexecuted instantiation: http_fetch.c:sc_opposite Unexecuted instantiation: stats-json.c:sc_opposite Unexecuted instantiation: flt_spoe.c:sc_opposite |
92 | | |
93 | | |
94 | | /* sets the current and previous state of a stream connector to <state>. This is |
95 | | * mainly used to create one in the established state on incoming connections. |
96 | | */ |
97 | | static inline void sc_set_state(struct stconn *sc, int state) |
98 | 0 | { |
99 | 0 | sc->state = __sc_strm(sc)->prev_conn_state = state; |
100 | 0 | } Unexecuted instantiation: cli.c:sc_set_state Unexecuted instantiation: connection.c:sc_set_state Unexecuted instantiation: debug.c:sc_set_state Unexecuted instantiation: errors.c:sc_set_state Unexecuted instantiation: frontend.c:sc_set_state Unexecuted instantiation: haproxy.c:sc_set_state Unexecuted instantiation: http_ana.c:sc_set_state Unexecuted instantiation: http_ext.c:sc_set_state Unexecuted instantiation: log.c:sc_set_state Unexecuted instantiation: mworker.c:sc_set_state Unexecuted instantiation: peers.c:sc_set_state Unexecuted instantiation: pool.c:sc_set_state Unexecuted instantiation: proxy.c:sc_set_state Unexecuted instantiation: resolvers.c:sc_set_state Unexecuted instantiation: ring.c:sc_set_state Unexecuted instantiation: sample.c:sc_set_state Unexecuted instantiation: server.c:sc_set_state Unexecuted instantiation: sink.c:sc_set_state Unexecuted instantiation: stats-html.c:sc_set_state Unexecuted instantiation: stats.c:sc_set_state Unexecuted instantiation: stconn.c:sc_set_state Unexecuted instantiation: stick_table.c:sc_set_state Unexecuted instantiation: stream.c:sc_set_state Unexecuted instantiation: tcp_rules.c:sc_set_state Unexecuted instantiation: tools.c:sc_set_state Unexecuted instantiation: trace.c:sc_set_state Unexecuted instantiation: vars.c:sc_set_state Unexecuted instantiation: activity.c:sc_set_state Unexecuted instantiation: applet.c:sc_set_state Unexecuted instantiation: backend.c:sc_set_state Unexecuted instantiation: cache.c:sc_set_state Unexecuted instantiation: dns.c:sc_set_state Unexecuted instantiation: dns_ring.c:sc_set_state Unexecuted instantiation: http_fetch.c:sc_set_state Unexecuted instantiation: stats-json.c:sc_set_state Unexecuted instantiation: flt_spoe.c:sc_set_state |
101 | | |
102 | | /* returns a bit for a stream connector state, to match against SC_SB_* */ |
103 | | static inline enum sc_state_bit sc_state_bit(enum sc_state state) |
104 | 0 | { |
105 | 0 | BUG_ON(state > SC_ST_CLO); |
106 | 0 | return 1U << state; |
107 | 0 | } Unexecuted instantiation: cli.c:sc_state_bit Unexecuted instantiation: connection.c:sc_state_bit Unexecuted instantiation: debug.c:sc_state_bit Unexecuted instantiation: errors.c:sc_state_bit Unexecuted instantiation: frontend.c:sc_state_bit Unexecuted instantiation: haproxy.c:sc_state_bit Unexecuted instantiation: http_ana.c:sc_state_bit Unexecuted instantiation: http_ext.c:sc_state_bit Unexecuted instantiation: log.c:sc_state_bit Unexecuted instantiation: mworker.c:sc_state_bit Unexecuted instantiation: peers.c:sc_state_bit Unexecuted instantiation: pool.c:sc_state_bit Unexecuted instantiation: proxy.c:sc_state_bit Unexecuted instantiation: resolvers.c:sc_state_bit Unexecuted instantiation: ring.c:sc_state_bit Unexecuted instantiation: sample.c:sc_state_bit Unexecuted instantiation: server.c:sc_state_bit Unexecuted instantiation: sink.c:sc_state_bit Unexecuted instantiation: stats-html.c:sc_state_bit Unexecuted instantiation: stats.c:sc_state_bit Unexecuted instantiation: stconn.c:sc_state_bit Unexecuted instantiation: stick_table.c:sc_state_bit Unexecuted instantiation: stream.c:sc_state_bit Unexecuted instantiation: tcp_rules.c:sc_state_bit Unexecuted instantiation: tools.c:sc_state_bit Unexecuted instantiation: trace.c:sc_state_bit Unexecuted instantiation: vars.c:sc_state_bit Unexecuted instantiation: activity.c:sc_state_bit Unexecuted instantiation: applet.c:sc_state_bit Unexecuted instantiation: backend.c:sc_state_bit Unexecuted instantiation: cache.c:sc_state_bit Unexecuted instantiation: dns.c:sc_state_bit Unexecuted instantiation: dns_ring.c:sc_state_bit Unexecuted instantiation: http_fetch.c:sc_state_bit Unexecuted instantiation: stats-json.c:sc_state_bit Unexecuted instantiation: flt_spoe.c:sc_state_bit |
108 | | |
109 | | /* returns true if <state> matches one of the SC_SB_* bits in <mask> */ |
110 | | static inline int sc_state_in(enum sc_state state, enum sc_state_bit mask) |
111 | 0 | { |
112 | 0 | BUG_ON(mask & ~SC_SB_ALL); |
113 | 0 | return !!(sc_state_bit(state) & mask); |
114 | 0 | } Unexecuted instantiation: cli.c:sc_state_in Unexecuted instantiation: connection.c:sc_state_in Unexecuted instantiation: debug.c:sc_state_in Unexecuted instantiation: errors.c:sc_state_in Unexecuted instantiation: frontend.c:sc_state_in Unexecuted instantiation: haproxy.c:sc_state_in Unexecuted instantiation: http_ana.c:sc_state_in Unexecuted instantiation: http_ext.c:sc_state_in Unexecuted instantiation: log.c:sc_state_in Unexecuted instantiation: mworker.c:sc_state_in Unexecuted instantiation: peers.c:sc_state_in Unexecuted instantiation: pool.c:sc_state_in Unexecuted instantiation: proxy.c:sc_state_in Unexecuted instantiation: resolvers.c:sc_state_in Unexecuted instantiation: ring.c:sc_state_in Unexecuted instantiation: sample.c:sc_state_in Unexecuted instantiation: server.c:sc_state_in Unexecuted instantiation: sink.c:sc_state_in Unexecuted instantiation: stats-html.c:sc_state_in Unexecuted instantiation: stats.c:sc_state_in Unexecuted instantiation: stconn.c:sc_state_in Unexecuted instantiation: stick_table.c:sc_state_in Unexecuted instantiation: stream.c:sc_state_in Unexecuted instantiation: tcp_rules.c:sc_state_in Unexecuted instantiation: tools.c:sc_state_in Unexecuted instantiation: trace.c:sc_state_in Unexecuted instantiation: vars.c:sc_state_in Unexecuted instantiation: activity.c:sc_state_in Unexecuted instantiation: applet.c:sc_state_in Unexecuted instantiation: backend.c:sc_state_in Unexecuted instantiation: cache.c:sc_state_in Unexecuted instantiation: dns.c:sc_state_in Unexecuted instantiation: dns_ring.c:sc_state_in Unexecuted instantiation: http_fetch.c:sc_state_in Unexecuted instantiation: stats-json.c:sc_state_in Unexecuted instantiation: flt_spoe.c:sc_state_in |
115 | | |
116 | | /* Returns true if a connection is attached to the stream connector <sc> and if this |
117 | | * connection is ready. |
118 | | */ |
119 | | static inline int sc_conn_ready(const struct stconn *sc) |
120 | 0 | { |
121 | 0 | const struct connection *conn = sc_conn(sc); |
122 | |
|
123 | 0 | return conn && conn_ctrl_ready(conn) && conn_xprt_ready(conn); |
124 | 0 | } Unexecuted instantiation: cli.c:sc_conn_ready Unexecuted instantiation: connection.c:sc_conn_ready Unexecuted instantiation: debug.c:sc_conn_ready Unexecuted instantiation: errors.c:sc_conn_ready Unexecuted instantiation: frontend.c:sc_conn_ready Unexecuted instantiation: haproxy.c:sc_conn_ready Unexecuted instantiation: http_ana.c:sc_conn_ready Unexecuted instantiation: http_ext.c:sc_conn_ready Unexecuted instantiation: log.c:sc_conn_ready Unexecuted instantiation: mworker.c:sc_conn_ready Unexecuted instantiation: peers.c:sc_conn_ready Unexecuted instantiation: pool.c:sc_conn_ready Unexecuted instantiation: proxy.c:sc_conn_ready Unexecuted instantiation: resolvers.c:sc_conn_ready Unexecuted instantiation: ring.c:sc_conn_ready Unexecuted instantiation: sample.c:sc_conn_ready Unexecuted instantiation: server.c:sc_conn_ready Unexecuted instantiation: sink.c:sc_conn_ready Unexecuted instantiation: stats-html.c:sc_conn_ready Unexecuted instantiation: stats.c:sc_conn_ready Unexecuted instantiation: stconn.c:sc_conn_ready Unexecuted instantiation: stick_table.c:sc_conn_ready Unexecuted instantiation: stream.c:sc_conn_ready Unexecuted instantiation: tcp_rules.c:sc_conn_ready Unexecuted instantiation: tools.c:sc_conn_ready Unexecuted instantiation: trace.c:sc_conn_ready Unexecuted instantiation: vars.c:sc_conn_ready Unexecuted instantiation: activity.c:sc_conn_ready Unexecuted instantiation: applet.c:sc_conn_ready Unexecuted instantiation: backend.c:sc_conn_ready Unexecuted instantiation: cache.c:sc_conn_ready Unexecuted instantiation: dns.c:sc_conn_ready Unexecuted instantiation: dns_ring.c:sc_conn_ready Unexecuted instantiation: http_fetch.c:sc_conn_ready Unexecuted instantiation: stats-json.c:sc_conn_ready Unexecuted instantiation: flt_spoe.c:sc_conn_ready |
125 | | |
126 | | |
127 | | /* The stream connector is only responsible for the connection during the early |
128 | | * states, before plugging a mux. Thus it should only care about CO_FL_ERROR |
129 | | * before SC_ST_EST, and after that it must absolutely ignore it since the mux |
130 | | * may hold pending data. This function returns true if such an error was |
131 | | * reported. Both the SC and the CONN must be valid. |
132 | | */ |
133 | | static inline int sc_is_conn_error(const struct stconn *sc) |
134 | 0 | { |
135 | 0 | const struct connection *conn; |
136 | |
|
137 | 0 | if (sc->state >= SC_ST_EST) |
138 | 0 | return 0; |
139 | | |
140 | 0 | conn = __sc_conn(sc); |
141 | 0 | BUG_ON(!conn); |
142 | 0 | return !!(conn->flags & CO_FL_ERROR); |
143 | 0 | } Unexecuted instantiation: cli.c:sc_is_conn_error Unexecuted instantiation: connection.c:sc_is_conn_error Unexecuted instantiation: debug.c:sc_is_conn_error Unexecuted instantiation: errors.c:sc_is_conn_error Unexecuted instantiation: frontend.c:sc_is_conn_error Unexecuted instantiation: haproxy.c:sc_is_conn_error Unexecuted instantiation: http_ana.c:sc_is_conn_error Unexecuted instantiation: http_ext.c:sc_is_conn_error Unexecuted instantiation: log.c:sc_is_conn_error Unexecuted instantiation: mworker.c:sc_is_conn_error Unexecuted instantiation: peers.c:sc_is_conn_error Unexecuted instantiation: pool.c:sc_is_conn_error Unexecuted instantiation: proxy.c:sc_is_conn_error Unexecuted instantiation: resolvers.c:sc_is_conn_error Unexecuted instantiation: ring.c:sc_is_conn_error Unexecuted instantiation: sample.c:sc_is_conn_error Unexecuted instantiation: server.c:sc_is_conn_error Unexecuted instantiation: sink.c:sc_is_conn_error Unexecuted instantiation: stats-html.c:sc_is_conn_error Unexecuted instantiation: stats.c:sc_is_conn_error Unexecuted instantiation: stconn.c:sc_is_conn_error Unexecuted instantiation: stick_table.c:sc_is_conn_error Unexecuted instantiation: stream.c:sc_is_conn_error Unexecuted instantiation: tcp_rules.c:sc_is_conn_error Unexecuted instantiation: tools.c:sc_is_conn_error Unexecuted instantiation: trace.c:sc_is_conn_error Unexecuted instantiation: vars.c:sc_is_conn_error Unexecuted instantiation: activity.c:sc_is_conn_error Unexecuted instantiation: applet.c:sc_is_conn_error Unexecuted instantiation: backend.c:sc_is_conn_error Unexecuted instantiation: cache.c:sc_is_conn_error Unexecuted instantiation: dns.c:sc_is_conn_error Unexecuted instantiation: dns_ring.c:sc_is_conn_error Unexecuted instantiation: http_fetch.c:sc_is_conn_error Unexecuted instantiation: stats-json.c:sc_is_conn_error Unexecuted instantiation: flt_spoe.c:sc_is_conn_error |
144 | | |
145 | | /* Try to allocate a buffer for the stream connector's input channel. It relies on |
146 | | * channel_alloc_buffer() for this so it abides by its rules. It returns 0 on |
147 | | * failure, non-zero otherwise. If no buffer is available, the requester, |
148 | | * represented by the <wait> pointer, will be added in the list of objects |
149 | | * waiting for an available buffer, and SC_FL_NEED_BUFF will be set on the |
150 | | * stream connector and SE_FL_HAVE_NO_DATA cleared. The requester will be responsible |
151 | | * for calling this function to try again once woken up. |
152 | | */ |
153 | | static inline int sc_alloc_ibuf(struct stconn *sc, struct buffer_wait *wait) |
154 | 0 | { |
155 | 0 | int ret; |
156 | |
|
157 | 0 | ret = channel_alloc_buffer(sc_ic(sc), wait); |
158 | 0 | if (ret) |
159 | 0 | sc_used_buff(sc); |
160 | 0 | else |
161 | 0 | sc_need_buff(sc); |
162 | |
|
163 | 0 | return ret; |
164 | 0 | } Unexecuted instantiation: cli.c:sc_alloc_ibuf Unexecuted instantiation: connection.c:sc_alloc_ibuf Unexecuted instantiation: debug.c:sc_alloc_ibuf Unexecuted instantiation: errors.c:sc_alloc_ibuf Unexecuted instantiation: frontend.c:sc_alloc_ibuf Unexecuted instantiation: haproxy.c:sc_alloc_ibuf Unexecuted instantiation: http_ana.c:sc_alloc_ibuf Unexecuted instantiation: http_ext.c:sc_alloc_ibuf Unexecuted instantiation: log.c:sc_alloc_ibuf Unexecuted instantiation: mworker.c:sc_alloc_ibuf Unexecuted instantiation: peers.c:sc_alloc_ibuf Unexecuted instantiation: pool.c:sc_alloc_ibuf Unexecuted instantiation: proxy.c:sc_alloc_ibuf Unexecuted instantiation: resolvers.c:sc_alloc_ibuf Unexecuted instantiation: ring.c:sc_alloc_ibuf Unexecuted instantiation: sample.c:sc_alloc_ibuf Unexecuted instantiation: server.c:sc_alloc_ibuf Unexecuted instantiation: sink.c:sc_alloc_ibuf Unexecuted instantiation: stats-html.c:sc_alloc_ibuf Unexecuted instantiation: stats.c:sc_alloc_ibuf Unexecuted instantiation: stconn.c:sc_alloc_ibuf Unexecuted instantiation: stick_table.c:sc_alloc_ibuf Unexecuted instantiation: stream.c:sc_alloc_ibuf Unexecuted instantiation: tcp_rules.c:sc_alloc_ibuf Unexecuted instantiation: tools.c:sc_alloc_ibuf Unexecuted instantiation: trace.c:sc_alloc_ibuf Unexecuted instantiation: vars.c:sc_alloc_ibuf Unexecuted instantiation: activity.c:sc_alloc_ibuf Unexecuted instantiation: applet.c:sc_alloc_ibuf Unexecuted instantiation: backend.c:sc_alloc_ibuf Unexecuted instantiation: cache.c:sc_alloc_ibuf Unexecuted instantiation: dns.c:sc_alloc_ibuf Unexecuted instantiation: dns_ring.c:sc_alloc_ibuf Unexecuted instantiation: http_fetch.c:sc_alloc_ibuf Unexecuted instantiation: stats-json.c:sc_alloc_ibuf Unexecuted instantiation: flt_spoe.c:sc_alloc_ibuf |
165 | | |
166 | | |
167 | | /* Returns the source address of the stream connector and, if not set, fallbacks on |
168 | | * the session for frontend SC and the server connection for the backend SC. It |
169 | | * returns a const address on success or NULL on failure. |
170 | | */ |
171 | | static inline const struct sockaddr_storage *sc_src(const struct stconn *sc) |
172 | 0 | { |
173 | 0 | if (sc->src) |
174 | 0 | return sc->src; |
175 | 0 | if (!(sc->flags & SC_FL_ISBACK)) |
176 | 0 | return sess_src(strm_sess(__sc_strm(sc))); |
177 | 0 | else { |
178 | 0 | struct connection *conn = sc_conn(sc); |
179 | |
|
180 | 0 | if (conn) |
181 | 0 | return conn_src(conn); |
182 | 0 | } |
183 | 0 | return NULL; |
184 | 0 | } Unexecuted instantiation: cli.c:sc_src Unexecuted instantiation: connection.c:sc_src Unexecuted instantiation: debug.c:sc_src Unexecuted instantiation: errors.c:sc_src Unexecuted instantiation: frontend.c:sc_src Unexecuted instantiation: haproxy.c:sc_src Unexecuted instantiation: http_ana.c:sc_src Unexecuted instantiation: http_ext.c:sc_src Unexecuted instantiation: log.c:sc_src Unexecuted instantiation: mworker.c:sc_src Unexecuted instantiation: peers.c:sc_src Unexecuted instantiation: pool.c:sc_src Unexecuted instantiation: proxy.c:sc_src Unexecuted instantiation: resolvers.c:sc_src Unexecuted instantiation: ring.c:sc_src Unexecuted instantiation: sample.c:sc_src Unexecuted instantiation: server.c:sc_src Unexecuted instantiation: sink.c:sc_src Unexecuted instantiation: stats-html.c:sc_src Unexecuted instantiation: stats.c:sc_src Unexecuted instantiation: stconn.c:sc_src Unexecuted instantiation: stick_table.c:sc_src Unexecuted instantiation: stream.c:sc_src Unexecuted instantiation: tcp_rules.c:sc_src Unexecuted instantiation: tools.c:sc_src Unexecuted instantiation: trace.c:sc_src Unexecuted instantiation: vars.c:sc_src Unexecuted instantiation: activity.c:sc_src Unexecuted instantiation: applet.c:sc_src Unexecuted instantiation: backend.c:sc_src Unexecuted instantiation: cache.c:sc_src Unexecuted instantiation: dns.c:sc_src Unexecuted instantiation: dns_ring.c:sc_src Unexecuted instantiation: http_fetch.c:sc_src Unexecuted instantiation: stats-json.c:sc_src Unexecuted instantiation: flt_spoe.c:sc_src |
185 | | |
186 | | |
187 | | /* Returns the destination address of the stream connector and, if not set, fallbacks |
188 | | * on the session for frontend SC and the server connection for the backend |
189 | | * SC. It returns a const address on success or NULL on failure. |
190 | | */ |
191 | | static inline const struct sockaddr_storage *sc_dst(const struct stconn *sc) |
192 | 0 | { |
193 | 0 | if (sc->dst) |
194 | 0 | return sc->dst; |
195 | 0 | if (!(sc->flags & SC_FL_ISBACK)) |
196 | 0 | return sess_dst(strm_sess(__sc_strm(sc))); |
197 | 0 | else { |
198 | 0 | struct connection *conn = sc_conn(sc); |
199 | |
|
200 | 0 | if (conn) |
201 | 0 | return conn_dst(conn); |
202 | 0 | } |
203 | 0 | return NULL; |
204 | 0 | } Unexecuted instantiation: cli.c:sc_dst Unexecuted instantiation: connection.c:sc_dst Unexecuted instantiation: debug.c:sc_dst Unexecuted instantiation: errors.c:sc_dst Unexecuted instantiation: frontend.c:sc_dst Unexecuted instantiation: haproxy.c:sc_dst Unexecuted instantiation: http_ana.c:sc_dst Unexecuted instantiation: http_ext.c:sc_dst Unexecuted instantiation: log.c:sc_dst Unexecuted instantiation: mworker.c:sc_dst Unexecuted instantiation: peers.c:sc_dst Unexecuted instantiation: pool.c:sc_dst Unexecuted instantiation: proxy.c:sc_dst Unexecuted instantiation: resolvers.c:sc_dst Unexecuted instantiation: ring.c:sc_dst Unexecuted instantiation: sample.c:sc_dst Unexecuted instantiation: server.c:sc_dst Unexecuted instantiation: sink.c:sc_dst Unexecuted instantiation: stats-html.c:sc_dst Unexecuted instantiation: stats.c:sc_dst Unexecuted instantiation: stconn.c:sc_dst Unexecuted instantiation: stick_table.c:sc_dst Unexecuted instantiation: stream.c:sc_dst Unexecuted instantiation: tcp_rules.c:sc_dst Unexecuted instantiation: tools.c:sc_dst Unexecuted instantiation: trace.c:sc_dst Unexecuted instantiation: vars.c:sc_dst Unexecuted instantiation: activity.c:sc_dst Unexecuted instantiation: applet.c:sc_dst Unexecuted instantiation: backend.c:sc_dst Unexecuted instantiation: cache.c:sc_dst Unexecuted instantiation: dns.c:sc_dst Unexecuted instantiation: dns_ring.c:sc_dst Unexecuted instantiation: http_fetch.c:sc_dst Unexecuted instantiation: stats-json.c:sc_dst Unexecuted instantiation: flt_spoe.c:sc_dst |
205 | | |
206 | | /* Retrieves the source address of the stream connector. Returns non-zero on success |
207 | | * or zero on failure. The operation is only performed once and the address is |
208 | | * stored in the stream connector for future use. On the first call, the stream connector |
209 | | * source address is copied from the session one for frontend SC and the server |
210 | | * connection for the backend SC. |
211 | | */ |
212 | | static inline int sc_get_src(struct stconn *sc) |
213 | 0 | { |
214 | 0 | const struct sockaddr_storage *src = NULL; |
215 | 0 |
|
216 | 0 | if (sc->src) |
217 | 0 | return 1; |
218 | 0 |
|
219 | 0 | if (!(sc->flags & SC_FL_ISBACK)) |
220 | 0 | src = sess_src(strm_sess(__sc_strm(sc))); |
221 | 0 | else { |
222 | 0 | struct connection *conn = sc_conn(sc); |
223 | 0 |
|
224 | 0 | if (conn) |
225 | 0 | src = conn_src(conn); |
226 | 0 | } |
227 | 0 | if (!src) |
228 | 0 | return 0; |
229 | 0 |
|
230 | 0 | if (!sockaddr_alloc(&sc->src, src, sizeof(*src))) |
231 | 0 | return 0; |
232 | 0 |
|
233 | 0 | return 1; |
234 | 0 | } Unexecuted instantiation: cli.c:sc_get_src Unexecuted instantiation: connection.c:sc_get_src Unexecuted instantiation: debug.c:sc_get_src Unexecuted instantiation: errors.c:sc_get_src Unexecuted instantiation: frontend.c:sc_get_src Unexecuted instantiation: haproxy.c:sc_get_src Unexecuted instantiation: http_ana.c:sc_get_src Unexecuted instantiation: http_ext.c:sc_get_src Unexecuted instantiation: log.c:sc_get_src Unexecuted instantiation: mworker.c:sc_get_src Unexecuted instantiation: peers.c:sc_get_src Unexecuted instantiation: pool.c:sc_get_src Unexecuted instantiation: proxy.c:sc_get_src Unexecuted instantiation: resolvers.c:sc_get_src Unexecuted instantiation: ring.c:sc_get_src Unexecuted instantiation: sample.c:sc_get_src Unexecuted instantiation: server.c:sc_get_src Unexecuted instantiation: sink.c:sc_get_src Unexecuted instantiation: stats-html.c:sc_get_src Unexecuted instantiation: stats.c:sc_get_src Unexecuted instantiation: stconn.c:sc_get_src Unexecuted instantiation: stick_table.c:sc_get_src Unexecuted instantiation: stream.c:sc_get_src Unexecuted instantiation: tcp_rules.c:sc_get_src Unexecuted instantiation: tools.c:sc_get_src Unexecuted instantiation: trace.c:sc_get_src Unexecuted instantiation: vars.c:sc_get_src Unexecuted instantiation: activity.c:sc_get_src Unexecuted instantiation: applet.c:sc_get_src Unexecuted instantiation: backend.c:sc_get_src Unexecuted instantiation: cache.c:sc_get_src Unexecuted instantiation: dns.c:sc_get_src Unexecuted instantiation: dns_ring.c:sc_get_src Unexecuted instantiation: http_fetch.c:sc_get_src Unexecuted instantiation: stats-json.c:sc_get_src Unexecuted instantiation: flt_spoe.c:sc_get_src |
235 | | |
236 | | /* Retrieves the destination address of the stream connector. Returns non-zero on |
237 | | * success or zero on failure. The operation is only performed once and the |
238 | | * address is stored in the stream connector for future use. On the first call, the |
239 | | * stream connector destination address is copied from the session one for frontend |
240 | | * SC and the server connection for the backend SC. |
241 | | */ |
242 | | static inline int sc_get_dst(struct stconn *sc) |
243 | 0 | { |
244 | 0 | const struct sockaddr_storage *dst = NULL; |
245 | 0 |
|
246 | 0 | if (sc->dst) |
247 | 0 | return 1; |
248 | 0 |
|
249 | 0 | if (!(sc->flags & SC_FL_ISBACK)) |
250 | 0 | dst = sess_dst(strm_sess(__sc_strm(sc))); |
251 | 0 | else { |
252 | 0 | struct connection *conn = sc_conn(sc); |
253 | 0 |
|
254 | 0 | if (conn) |
255 | 0 | dst = conn_dst(conn); |
256 | 0 | } |
257 | 0 | if (!dst) |
258 | 0 | return 0; |
259 | 0 |
|
260 | 0 | if (!sockaddr_alloc(&sc->dst, dst, sizeof(*dst))) |
261 | 0 | return 0; |
262 | 0 |
|
263 | 0 | return 1; |
264 | 0 | } Unexecuted instantiation: cli.c:sc_get_dst Unexecuted instantiation: connection.c:sc_get_dst Unexecuted instantiation: debug.c:sc_get_dst Unexecuted instantiation: errors.c:sc_get_dst Unexecuted instantiation: frontend.c:sc_get_dst Unexecuted instantiation: haproxy.c:sc_get_dst Unexecuted instantiation: http_ana.c:sc_get_dst Unexecuted instantiation: http_ext.c:sc_get_dst Unexecuted instantiation: log.c:sc_get_dst Unexecuted instantiation: mworker.c:sc_get_dst Unexecuted instantiation: peers.c:sc_get_dst Unexecuted instantiation: pool.c:sc_get_dst Unexecuted instantiation: proxy.c:sc_get_dst Unexecuted instantiation: resolvers.c:sc_get_dst Unexecuted instantiation: ring.c:sc_get_dst Unexecuted instantiation: sample.c:sc_get_dst Unexecuted instantiation: server.c:sc_get_dst Unexecuted instantiation: sink.c:sc_get_dst Unexecuted instantiation: stats-html.c:sc_get_dst Unexecuted instantiation: stats.c:sc_get_dst Unexecuted instantiation: stconn.c:sc_get_dst Unexecuted instantiation: stick_table.c:sc_get_dst Unexecuted instantiation: stream.c:sc_get_dst Unexecuted instantiation: tcp_rules.c:sc_get_dst Unexecuted instantiation: tools.c:sc_get_dst Unexecuted instantiation: trace.c:sc_get_dst Unexecuted instantiation: vars.c:sc_get_dst Unexecuted instantiation: activity.c:sc_get_dst Unexecuted instantiation: applet.c:sc_get_dst Unexecuted instantiation: backend.c:sc_get_dst Unexecuted instantiation: cache.c:sc_get_dst Unexecuted instantiation: dns.c:sc_get_dst Unexecuted instantiation: dns_ring.c:sc_get_dst Unexecuted instantiation: http_fetch.c:sc_get_dst Unexecuted instantiation: stats-json.c:sc_get_dst Unexecuted instantiation: flt_spoe.c:sc_get_dst |
265 | | |
266 | | |
267 | | /* Marks on the stream connector that next shutdown must kill the whole connection */ |
268 | | static inline void sc_must_kill_conn(struct stconn *sc) |
269 | 0 | { |
270 | 0 | sc_ep_set(sc, SE_FL_KILL_CONN); |
271 | 0 | } Unexecuted instantiation: cli.c:sc_must_kill_conn Unexecuted instantiation: connection.c:sc_must_kill_conn Unexecuted instantiation: debug.c:sc_must_kill_conn Unexecuted instantiation: errors.c:sc_must_kill_conn Unexecuted instantiation: frontend.c:sc_must_kill_conn Unexecuted instantiation: haproxy.c:sc_must_kill_conn Unexecuted instantiation: http_ana.c:sc_must_kill_conn Unexecuted instantiation: http_ext.c:sc_must_kill_conn Unexecuted instantiation: log.c:sc_must_kill_conn Unexecuted instantiation: mworker.c:sc_must_kill_conn Unexecuted instantiation: peers.c:sc_must_kill_conn Unexecuted instantiation: pool.c:sc_must_kill_conn Unexecuted instantiation: proxy.c:sc_must_kill_conn Unexecuted instantiation: resolvers.c:sc_must_kill_conn Unexecuted instantiation: ring.c:sc_must_kill_conn Unexecuted instantiation: sample.c:sc_must_kill_conn Unexecuted instantiation: server.c:sc_must_kill_conn Unexecuted instantiation: sink.c:sc_must_kill_conn Unexecuted instantiation: stats-html.c:sc_must_kill_conn Unexecuted instantiation: stats.c:sc_must_kill_conn Unexecuted instantiation: stconn.c:sc_must_kill_conn Unexecuted instantiation: stick_table.c:sc_must_kill_conn Unexecuted instantiation: stream.c:sc_must_kill_conn Unexecuted instantiation: tcp_rules.c:sc_must_kill_conn Unexecuted instantiation: tools.c:sc_must_kill_conn Unexecuted instantiation: trace.c:sc_must_kill_conn Unexecuted instantiation: vars.c:sc_must_kill_conn Unexecuted instantiation: activity.c:sc_must_kill_conn Unexecuted instantiation: applet.c:sc_must_kill_conn Unexecuted instantiation: backend.c:sc_must_kill_conn Unexecuted instantiation: cache.c:sc_must_kill_conn Unexecuted instantiation: dns.c:sc_must_kill_conn Unexecuted instantiation: dns_ring.c:sc_must_kill_conn Unexecuted instantiation: http_fetch.c:sc_must_kill_conn Unexecuted instantiation: stats-json.c:sc_must_kill_conn Unexecuted instantiation: flt_spoe.c:sc_must_kill_conn |
272 | | |
273 | | |
274 | | /* Returns non-zero if the stream connector is allowed to receive from the |
275 | | * endpoint, which means that no flag indicating a blocked channel, lack of |
276 | | * buffer or room is set, and that the endpoint is not waiting for the |
277 | | * application to complete a connection setup on the other side, and that |
278 | | * the stream's channel is not shut for reads. This is only used by stream |
279 | | * applications. |
280 | | */ |
281 | | __attribute__((warn_unused_result)) |
282 | | static inline int sc_is_recv_allowed(const struct stconn *sc) |
283 | 0 | { |
284 | 0 | if (sc->flags & (SC_FL_ABRT_DONE|SC_FL_EOS)) |
285 | 0 | return 0; |
286 | | |
287 | 0 | if (sc_ep_test(sc, SE_FL_APPLET_NEED_CONN)) |
288 | 0 | return 0; |
289 | | |
290 | 0 | if (sc_ep_test(sc, SE_FL_HAVE_NO_DATA)) |
291 | 0 | return 0; |
292 | | |
293 | 0 | if (sc_ep_test(sc, SE_FL_MAY_FASTFWD_PROD) && (sc_opposite(sc)->sedesc->iobuf.flags & IOBUF_FL_FF_BLOCKED)) |
294 | 0 | return 0; |
295 | | |
296 | 0 | return !(sc->flags & (SC_FL_WONT_READ|SC_FL_NEED_BUFF|SC_FL_NEED_ROOM)); |
297 | 0 | } Unexecuted instantiation: cli.c:sc_is_recv_allowed Unexecuted instantiation: connection.c:sc_is_recv_allowed Unexecuted instantiation: debug.c:sc_is_recv_allowed Unexecuted instantiation: errors.c:sc_is_recv_allowed Unexecuted instantiation: frontend.c:sc_is_recv_allowed Unexecuted instantiation: haproxy.c:sc_is_recv_allowed Unexecuted instantiation: http_ana.c:sc_is_recv_allowed Unexecuted instantiation: http_ext.c:sc_is_recv_allowed Unexecuted instantiation: log.c:sc_is_recv_allowed Unexecuted instantiation: mworker.c:sc_is_recv_allowed Unexecuted instantiation: peers.c:sc_is_recv_allowed Unexecuted instantiation: pool.c:sc_is_recv_allowed Unexecuted instantiation: proxy.c:sc_is_recv_allowed Unexecuted instantiation: resolvers.c:sc_is_recv_allowed Unexecuted instantiation: ring.c:sc_is_recv_allowed Unexecuted instantiation: sample.c:sc_is_recv_allowed Unexecuted instantiation: server.c:sc_is_recv_allowed Unexecuted instantiation: sink.c:sc_is_recv_allowed Unexecuted instantiation: stats-html.c:sc_is_recv_allowed Unexecuted instantiation: stats.c:sc_is_recv_allowed Unexecuted instantiation: stconn.c:sc_is_recv_allowed Unexecuted instantiation: stick_table.c:sc_is_recv_allowed Unexecuted instantiation: stream.c:sc_is_recv_allowed Unexecuted instantiation: tcp_rules.c:sc_is_recv_allowed Unexecuted instantiation: tools.c:sc_is_recv_allowed Unexecuted instantiation: trace.c:sc_is_recv_allowed Unexecuted instantiation: vars.c:sc_is_recv_allowed Unexecuted instantiation: activity.c:sc_is_recv_allowed Unexecuted instantiation: applet.c:sc_is_recv_allowed Unexecuted instantiation: backend.c:sc_is_recv_allowed Unexecuted instantiation: cache.c:sc_is_recv_allowed Unexecuted instantiation: dns.c:sc_is_recv_allowed Unexecuted instantiation: dns_ring.c:sc_is_recv_allowed Unexecuted instantiation: http_fetch.c:sc_is_recv_allowed Unexecuted instantiation: stats-json.c:sc_is_recv_allowed Unexecuted instantiation: flt_spoe.c:sc_is_recv_allowed |
298 | | |
299 | | /* This is to be used after making some room available in a channel. It will |
300 | | * return without doing anything if the stream connector's RX path is blocked. |
301 | | * It will automatically mark the stream connector as busy processing the end |
302 | | * point in order to avoid useless repeated wakeups. |
303 | | * It will then call ->chk_rcv() to enable receipt of new data. |
304 | | */ |
305 | | static inline void sc_chk_rcv(struct stconn *sc) |
306 | 0 | { |
307 | 0 | if (sc_ep_test(sc, SE_FL_APPLET_NEED_CONN) && |
308 | 0 | sc_state_in(sc_opposite(sc)->state, SC_SB_RDY|SC_SB_EST|SC_SB_DIS|SC_SB_CLO)) { |
309 | 0 | sc_ep_clr(sc, SE_FL_APPLET_NEED_CONN); |
310 | 0 | sc_ep_report_read_activity(sc); |
311 | 0 | } |
312 | |
|
313 | 0 | if (!sc_is_recv_allowed(sc)) |
314 | 0 | return; |
315 | | |
316 | 0 | if (!sc_state_in(sc->state, SC_SB_RDY|SC_SB_EST)) |
317 | 0 | return; |
318 | | |
319 | 0 | sc_ep_set(sc, SE_FL_HAVE_NO_DATA); |
320 | 0 | if (likely(sc->app_ops->chk_rcv)) |
321 | 0 | sc->app_ops->chk_rcv(sc); |
322 | 0 | } Unexecuted instantiation: cli.c:sc_chk_rcv Unexecuted instantiation: connection.c:sc_chk_rcv Unexecuted instantiation: debug.c:sc_chk_rcv Unexecuted instantiation: errors.c:sc_chk_rcv Unexecuted instantiation: frontend.c:sc_chk_rcv Unexecuted instantiation: haproxy.c:sc_chk_rcv Unexecuted instantiation: http_ana.c:sc_chk_rcv Unexecuted instantiation: http_ext.c:sc_chk_rcv Unexecuted instantiation: log.c:sc_chk_rcv Unexecuted instantiation: mworker.c:sc_chk_rcv Unexecuted instantiation: peers.c:sc_chk_rcv Unexecuted instantiation: pool.c:sc_chk_rcv Unexecuted instantiation: proxy.c:sc_chk_rcv Unexecuted instantiation: resolvers.c:sc_chk_rcv Unexecuted instantiation: ring.c:sc_chk_rcv Unexecuted instantiation: sample.c:sc_chk_rcv Unexecuted instantiation: server.c:sc_chk_rcv Unexecuted instantiation: sink.c:sc_chk_rcv Unexecuted instantiation: stats-html.c:sc_chk_rcv Unexecuted instantiation: stats.c:sc_chk_rcv Unexecuted instantiation: stconn.c:sc_chk_rcv Unexecuted instantiation: stick_table.c:sc_chk_rcv Unexecuted instantiation: stream.c:sc_chk_rcv Unexecuted instantiation: tcp_rules.c:sc_chk_rcv Unexecuted instantiation: tools.c:sc_chk_rcv Unexecuted instantiation: trace.c:sc_chk_rcv Unexecuted instantiation: vars.c:sc_chk_rcv Unexecuted instantiation: activity.c:sc_chk_rcv Unexecuted instantiation: applet.c:sc_chk_rcv Unexecuted instantiation: backend.c:sc_chk_rcv Unexecuted instantiation: cache.c:sc_chk_rcv Unexecuted instantiation: dns.c:sc_chk_rcv Unexecuted instantiation: dns_ring.c:sc_chk_rcv Unexecuted instantiation: http_fetch.c:sc_chk_rcv Unexecuted instantiation: stats-json.c:sc_chk_rcv Unexecuted instantiation: flt_spoe.c:sc_chk_rcv |
323 | | |
324 | | /* Calls chk_snd on the endpoint using the data layer */ |
325 | | static inline void sc_chk_snd(struct stconn *sc) |
326 | 0 | { |
327 | 0 | if (likely(sc->app_ops->chk_snd)) |
328 | 0 | sc->app_ops->chk_snd(sc); |
329 | 0 | } Unexecuted instantiation: cli.c:sc_chk_snd Unexecuted instantiation: connection.c:sc_chk_snd Unexecuted instantiation: debug.c:sc_chk_snd Unexecuted instantiation: errors.c:sc_chk_snd Unexecuted instantiation: frontend.c:sc_chk_snd Unexecuted instantiation: haproxy.c:sc_chk_snd Unexecuted instantiation: http_ana.c:sc_chk_snd Unexecuted instantiation: http_ext.c:sc_chk_snd Unexecuted instantiation: log.c:sc_chk_snd Unexecuted instantiation: mworker.c:sc_chk_snd Unexecuted instantiation: peers.c:sc_chk_snd Unexecuted instantiation: pool.c:sc_chk_snd Unexecuted instantiation: proxy.c:sc_chk_snd Unexecuted instantiation: resolvers.c:sc_chk_snd Unexecuted instantiation: ring.c:sc_chk_snd Unexecuted instantiation: sample.c:sc_chk_snd Unexecuted instantiation: server.c:sc_chk_snd Unexecuted instantiation: sink.c:sc_chk_snd Unexecuted instantiation: stats-html.c:sc_chk_snd Unexecuted instantiation: stats.c:sc_chk_snd Unexecuted instantiation: stconn.c:sc_chk_snd Unexecuted instantiation: stick_table.c:sc_chk_snd Unexecuted instantiation: stream.c:sc_chk_snd Unexecuted instantiation: tcp_rules.c:sc_chk_snd Unexecuted instantiation: tools.c:sc_chk_snd Unexecuted instantiation: trace.c:sc_chk_snd Unexecuted instantiation: vars.c:sc_chk_snd Unexecuted instantiation: activity.c:sc_chk_snd Unexecuted instantiation: applet.c:sc_chk_snd Unexecuted instantiation: backend.c:sc_chk_snd Unexecuted instantiation: cache.c:sc_chk_snd Unexecuted instantiation: dns.c:sc_chk_snd Unexecuted instantiation: dns_ring.c:sc_chk_snd Unexecuted instantiation: http_fetch.c:sc_chk_snd Unexecuted instantiation: stats-json.c:sc_chk_snd Unexecuted instantiation: flt_spoe.c:sc_chk_snd |
330 | | |
331 | | |
332 | | /* Perform a synchronous receive using the right version, depending the endpoing |
333 | | * is a connection or an applet. |
334 | | */ |
335 | | static inline int sc_sync_recv(struct stconn *sc) |
336 | 0 | { |
337 | 0 | if (sc_ep_test(sc, SE_FL_T_MUX)) |
338 | 0 | return sc_conn_sync_recv(sc); |
339 | 0 | else if (sc_ep_test(sc, SE_FL_T_APPLET)) |
340 | 0 | return sc_applet_sync_recv(sc); |
341 | 0 | return 0; |
342 | 0 | } Unexecuted instantiation: cli.c:sc_sync_recv Unexecuted instantiation: connection.c:sc_sync_recv Unexecuted instantiation: debug.c:sc_sync_recv Unexecuted instantiation: errors.c:sc_sync_recv Unexecuted instantiation: frontend.c:sc_sync_recv Unexecuted instantiation: haproxy.c:sc_sync_recv Unexecuted instantiation: http_ana.c:sc_sync_recv Unexecuted instantiation: http_ext.c:sc_sync_recv Unexecuted instantiation: log.c:sc_sync_recv Unexecuted instantiation: mworker.c:sc_sync_recv Unexecuted instantiation: peers.c:sc_sync_recv Unexecuted instantiation: pool.c:sc_sync_recv Unexecuted instantiation: proxy.c:sc_sync_recv Unexecuted instantiation: resolvers.c:sc_sync_recv Unexecuted instantiation: ring.c:sc_sync_recv Unexecuted instantiation: sample.c:sc_sync_recv Unexecuted instantiation: server.c:sc_sync_recv Unexecuted instantiation: sink.c:sc_sync_recv Unexecuted instantiation: stats-html.c:sc_sync_recv Unexecuted instantiation: stats.c:sc_sync_recv Unexecuted instantiation: stconn.c:sc_sync_recv Unexecuted instantiation: stick_table.c:sc_sync_recv Unexecuted instantiation: stream.c:sc_sync_recv Unexecuted instantiation: tcp_rules.c:sc_sync_recv Unexecuted instantiation: tools.c:sc_sync_recv Unexecuted instantiation: trace.c:sc_sync_recv Unexecuted instantiation: vars.c:sc_sync_recv Unexecuted instantiation: activity.c:sc_sync_recv Unexecuted instantiation: applet.c:sc_sync_recv Unexecuted instantiation: backend.c:sc_sync_recv Unexecuted instantiation: cache.c:sc_sync_recv Unexecuted instantiation: dns.c:sc_sync_recv Unexecuted instantiation: dns_ring.c:sc_sync_recv Unexecuted instantiation: http_fetch.c:sc_sync_recv Unexecuted instantiation: stats-json.c:sc_sync_recv Unexecuted instantiation: flt_spoe.c:sc_sync_recv |
343 | | |
344 | | /* Perform a synchronous send using the right version, depending the endpoing is |
345 | | * a connection or an applet. |
346 | | */ |
347 | | static inline void sc_sync_send(struct stconn *sc) |
348 | 0 | { |
349 | 0 | if (sc_ep_test(sc, SE_FL_T_MUX)) |
350 | 0 | sc_conn_sync_send(sc); |
351 | 0 | } Unexecuted instantiation: cli.c:sc_sync_send Unexecuted instantiation: connection.c:sc_sync_send Unexecuted instantiation: debug.c:sc_sync_send Unexecuted instantiation: errors.c:sc_sync_send Unexecuted instantiation: frontend.c:sc_sync_send Unexecuted instantiation: haproxy.c:sc_sync_send Unexecuted instantiation: http_ana.c:sc_sync_send Unexecuted instantiation: http_ext.c:sc_sync_send Unexecuted instantiation: log.c:sc_sync_send Unexecuted instantiation: mworker.c:sc_sync_send Unexecuted instantiation: peers.c:sc_sync_send Unexecuted instantiation: pool.c:sc_sync_send Unexecuted instantiation: proxy.c:sc_sync_send Unexecuted instantiation: resolvers.c:sc_sync_send Unexecuted instantiation: ring.c:sc_sync_send Unexecuted instantiation: sample.c:sc_sync_send Unexecuted instantiation: server.c:sc_sync_send Unexecuted instantiation: sink.c:sc_sync_send Unexecuted instantiation: stats-html.c:sc_sync_send Unexecuted instantiation: stats.c:sc_sync_send Unexecuted instantiation: stconn.c:sc_sync_send Unexecuted instantiation: stick_table.c:sc_sync_send Unexecuted instantiation: stream.c:sc_sync_send Unexecuted instantiation: tcp_rules.c:sc_sync_send Unexecuted instantiation: tools.c:sc_sync_send Unexecuted instantiation: trace.c:sc_sync_send Unexecuted instantiation: vars.c:sc_sync_send Unexecuted instantiation: activity.c:sc_sync_send Unexecuted instantiation: applet.c:sc_sync_send Unexecuted instantiation: backend.c:sc_sync_send Unexecuted instantiation: cache.c:sc_sync_send Unexecuted instantiation: dns.c:sc_sync_send Unexecuted instantiation: dns_ring.c:sc_sync_send Unexecuted instantiation: http_fetch.c:sc_sync_send Unexecuted instantiation: stats-json.c:sc_sync_send Unexecuted instantiation: flt_spoe.c:sc_sync_send |
352 | | |
353 | | /* Combines both sc_update_rx() and sc_update_tx() at once */ |
354 | | static inline void sc_update(struct stconn *sc) |
355 | 0 | { |
356 | 0 | sc_update_rx(sc); |
357 | 0 | sc_update_tx(sc); |
358 | 0 | } Unexecuted instantiation: cli.c:sc_update Unexecuted instantiation: connection.c:sc_update Unexecuted instantiation: debug.c:sc_update Unexecuted instantiation: errors.c:sc_update Unexecuted instantiation: frontend.c:sc_update Unexecuted instantiation: haproxy.c:sc_update Unexecuted instantiation: http_ana.c:sc_update Unexecuted instantiation: http_ext.c:sc_update Unexecuted instantiation: log.c:sc_update Unexecuted instantiation: mworker.c:sc_update Unexecuted instantiation: peers.c:sc_update Unexecuted instantiation: pool.c:sc_update Unexecuted instantiation: proxy.c:sc_update Unexecuted instantiation: resolvers.c:sc_update Unexecuted instantiation: ring.c:sc_update Unexecuted instantiation: sample.c:sc_update Unexecuted instantiation: server.c:sc_update Unexecuted instantiation: sink.c:sc_update Unexecuted instantiation: stats-html.c:sc_update Unexecuted instantiation: stats.c:sc_update Unexecuted instantiation: stconn.c:sc_update Unexecuted instantiation: stick_table.c:sc_update Unexecuted instantiation: stream.c:sc_update Unexecuted instantiation: tcp_rules.c:sc_update Unexecuted instantiation: tools.c:sc_update Unexecuted instantiation: trace.c:sc_update Unexecuted instantiation: vars.c:sc_update Unexecuted instantiation: activity.c:sc_update Unexecuted instantiation: applet.c:sc_update Unexecuted instantiation: backend.c:sc_update Unexecuted instantiation: cache.c:sc_update Unexecuted instantiation: dns.c:sc_update Unexecuted instantiation: dns_ring.c:sc_update Unexecuted instantiation: http_fetch.c:sc_update Unexecuted instantiation: stats-json.c:sc_update Unexecuted instantiation: flt_spoe.c:sc_update |
359 | | |
360 | | /* for debugging, reports the stream connector state name */ |
361 | | static inline const char *sc_state_str(int state) |
362 | 0 | { |
363 | 0 | switch (state) { |
364 | 0 | case SC_ST_INI: return "INI"; |
365 | 0 | case SC_ST_REQ: return "REQ"; |
366 | 0 | case SC_ST_QUE: return "QUE"; |
367 | 0 | case SC_ST_TAR: return "TAR"; |
368 | 0 | case SC_ST_ASS: return "ASS"; |
369 | 0 | case SC_ST_CON: return "CON"; |
370 | 0 | case SC_ST_CER: return "CER"; |
371 | 0 | case SC_ST_RDY: return "RDY"; |
372 | 0 | case SC_ST_EST: return "EST"; |
373 | 0 | case SC_ST_DIS: return "DIS"; |
374 | 0 | case SC_ST_CLO: return "CLO"; |
375 | 0 | default: return "???"; |
376 | 0 | } |
377 | 0 | } Unexecuted instantiation: cli.c:sc_state_str Unexecuted instantiation: connection.c:sc_state_str Unexecuted instantiation: debug.c:sc_state_str Unexecuted instantiation: errors.c:sc_state_str Unexecuted instantiation: frontend.c:sc_state_str Unexecuted instantiation: haproxy.c:sc_state_str Unexecuted instantiation: http_ana.c:sc_state_str Unexecuted instantiation: http_ext.c:sc_state_str Unexecuted instantiation: log.c:sc_state_str Unexecuted instantiation: mworker.c:sc_state_str Unexecuted instantiation: peers.c:sc_state_str Unexecuted instantiation: pool.c:sc_state_str Unexecuted instantiation: proxy.c:sc_state_str Unexecuted instantiation: resolvers.c:sc_state_str Unexecuted instantiation: ring.c:sc_state_str Unexecuted instantiation: sample.c:sc_state_str Unexecuted instantiation: server.c:sc_state_str Unexecuted instantiation: sink.c:sc_state_str Unexecuted instantiation: stats-html.c:sc_state_str Unexecuted instantiation: stats.c:sc_state_str Unexecuted instantiation: stconn.c:sc_state_str Unexecuted instantiation: stick_table.c:sc_state_str Unexecuted instantiation: stream.c:sc_state_str Unexecuted instantiation: tcp_rules.c:sc_state_str Unexecuted instantiation: tools.c:sc_state_str Unexecuted instantiation: trace.c:sc_state_str Unexecuted instantiation: vars.c:sc_state_str Unexecuted instantiation: activity.c:sc_state_str Unexecuted instantiation: applet.c:sc_state_str Unexecuted instantiation: backend.c:sc_state_str Unexecuted instantiation: cache.c:sc_state_str Unexecuted instantiation: dns.c:sc_state_str Unexecuted instantiation: dns_ring.c:sc_state_str Unexecuted instantiation: http_fetch.c:sc_state_str Unexecuted instantiation: stats-json.c:sc_state_str Unexecuted instantiation: flt_spoe.c:sc_state_str |
378 | | |
379 | | /* indicates if the connector may send data to the endpoint, that is, the |
380 | | * endpoint is both willing to receive data and ready to do so. This is only |
381 | | * used with applets so there's always a stream attached to this connector. |
382 | | */ |
383 | | __attribute__((warn_unused_result)) |
384 | | static inline int sc_is_send_allowed(const struct stconn *sc) |
385 | 0 | { |
386 | 0 | if (sc->flags & SC_FL_SHUT_DONE) |
387 | 0 | return 0; |
388 | | |
389 | 0 | if (!sc_appctx(sc) || !(__sc_appctx(sc)->applet->flags & APPLET_FL_NEW_API)) |
390 | 0 | return !sc_ep_test(sc, SE_FL_WAIT_DATA | SE_FL_WONT_CONSUME); |
391 | | |
392 | 0 | if (sc_ep_test(sc, SE_FL_WONT_CONSUME)) |
393 | 0 | return 0; |
394 | | |
395 | 0 | if (sc_ep_test(sc, SE_FL_WAIT_DATA)) { |
396 | 0 | if (__sc_appctx(sc)->flags & (APPCTX_FL_INBLK_FULL|APPCTX_FL_INBLK_ALLOC)) |
397 | 0 | return 0; |
398 | 0 | if (!co_data(sc_oc(sc))) |
399 | 0 | return 0; |
400 | 0 | } |
401 | 0 | return 1; |
402 | 0 | } Unexecuted instantiation: cli.c:sc_is_send_allowed Unexecuted instantiation: connection.c:sc_is_send_allowed Unexecuted instantiation: debug.c:sc_is_send_allowed Unexecuted instantiation: errors.c:sc_is_send_allowed Unexecuted instantiation: frontend.c:sc_is_send_allowed Unexecuted instantiation: haproxy.c:sc_is_send_allowed Unexecuted instantiation: http_ana.c:sc_is_send_allowed Unexecuted instantiation: http_ext.c:sc_is_send_allowed Unexecuted instantiation: log.c:sc_is_send_allowed Unexecuted instantiation: mworker.c:sc_is_send_allowed Unexecuted instantiation: peers.c:sc_is_send_allowed Unexecuted instantiation: pool.c:sc_is_send_allowed Unexecuted instantiation: proxy.c:sc_is_send_allowed Unexecuted instantiation: resolvers.c:sc_is_send_allowed Unexecuted instantiation: ring.c:sc_is_send_allowed Unexecuted instantiation: sample.c:sc_is_send_allowed Unexecuted instantiation: server.c:sc_is_send_allowed Unexecuted instantiation: sink.c:sc_is_send_allowed Unexecuted instantiation: stats-html.c:sc_is_send_allowed Unexecuted instantiation: stats.c:sc_is_send_allowed Unexecuted instantiation: stconn.c:sc_is_send_allowed Unexecuted instantiation: stick_table.c:sc_is_send_allowed Unexecuted instantiation: stream.c:sc_is_send_allowed Unexecuted instantiation: tcp_rules.c:sc_is_send_allowed Unexecuted instantiation: tools.c:sc_is_send_allowed Unexecuted instantiation: trace.c:sc_is_send_allowed Unexecuted instantiation: vars.c:sc_is_send_allowed Unexecuted instantiation: activity.c:sc_is_send_allowed Unexecuted instantiation: applet.c:sc_is_send_allowed Unexecuted instantiation: backend.c:sc_is_send_allowed Unexecuted instantiation: cache.c:sc_is_send_allowed Unexecuted instantiation: dns.c:sc_is_send_allowed Unexecuted instantiation: dns_ring.c:sc_is_send_allowed Unexecuted instantiation: http_fetch.c:sc_is_send_allowed Unexecuted instantiation: stats-json.c:sc_is_send_allowed Unexecuted instantiation: flt_spoe.c:sc_is_send_allowed |
403 | | |
404 | | static inline int sc_rcv_may_expire(const struct stconn *sc) |
405 | 0 | { |
406 | 0 | if ((sc->flags & (SC_FL_ABRT_DONE|SC_FL_EOS)) || (sc_ic(sc)->flags & CF_READ_TIMEOUT)) |
407 | 0 | return 0; |
408 | 0 | if (sc->flags & (SC_FL_EOI|SC_FL_WONT_READ|SC_FL_NEED_BUFF|SC_FL_NEED_ROOM)) |
409 | 0 | return 0; |
410 | 0 | if (sc_ep_test(sc, SE_FL_APPLET_NEED_CONN) || sc_ep_test(sc_opposite(sc), SE_FL_EXP_NO_DATA)) |
411 | 0 | return 0; |
412 | 0 | return 1; |
413 | 0 | } Unexecuted instantiation: cli.c:sc_rcv_may_expire Unexecuted instantiation: connection.c:sc_rcv_may_expire Unexecuted instantiation: debug.c:sc_rcv_may_expire Unexecuted instantiation: errors.c:sc_rcv_may_expire Unexecuted instantiation: frontend.c:sc_rcv_may_expire Unexecuted instantiation: haproxy.c:sc_rcv_may_expire Unexecuted instantiation: http_ana.c:sc_rcv_may_expire Unexecuted instantiation: http_ext.c:sc_rcv_may_expire Unexecuted instantiation: log.c:sc_rcv_may_expire Unexecuted instantiation: mworker.c:sc_rcv_may_expire Unexecuted instantiation: peers.c:sc_rcv_may_expire Unexecuted instantiation: pool.c:sc_rcv_may_expire Unexecuted instantiation: proxy.c:sc_rcv_may_expire Unexecuted instantiation: resolvers.c:sc_rcv_may_expire Unexecuted instantiation: ring.c:sc_rcv_may_expire Unexecuted instantiation: sample.c:sc_rcv_may_expire Unexecuted instantiation: server.c:sc_rcv_may_expire Unexecuted instantiation: sink.c:sc_rcv_may_expire Unexecuted instantiation: stats-html.c:sc_rcv_may_expire Unexecuted instantiation: stats.c:sc_rcv_may_expire Unexecuted instantiation: stconn.c:sc_rcv_may_expire Unexecuted instantiation: stick_table.c:sc_rcv_may_expire Unexecuted instantiation: stream.c:sc_rcv_may_expire Unexecuted instantiation: tcp_rules.c:sc_rcv_may_expire Unexecuted instantiation: tools.c:sc_rcv_may_expire Unexecuted instantiation: trace.c:sc_rcv_may_expire Unexecuted instantiation: vars.c:sc_rcv_may_expire Unexecuted instantiation: activity.c:sc_rcv_may_expire Unexecuted instantiation: applet.c:sc_rcv_may_expire Unexecuted instantiation: backend.c:sc_rcv_may_expire Unexecuted instantiation: cache.c:sc_rcv_may_expire Unexecuted instantiation: dns.c:sc_rcv_may_expire Unexecuted instantiation: dns_ring.c:sc_rcv_may_expire Unexecuted instantiation: http_fetch.c:sc_rcv_may_expire Unexecuted instantiation: stats-json.c:sc_rcv_may_expire Unexecuted instantiation: flt_spoe.c:sc_rcv_may_expire |
414 | | |
415 | | static inline int sc_snd_may_expire(const struct stconn *sc) |
416 | 0 | { |
417 | 0 | if ((sc->flags & SC_FL_SHUT_DONE) || (sc_oc(sc)->flags & CF_WRITE_TIMEOUT)) |
418 | 0 | return 0; |
419 | 0 | if (sc_ep_test(sc, SE_FL_WONT_CONSUME)) |
420 | 0 | return 0; |
421 | 0 | return 1; |
422 | 0 | } Unexecuted instantiation: cli.c:sc_snd_may_expire Unexecuted instantiation: connection.c:sc_snd_may_expire Unexecuted instantiation: debug.c:sc_snd_may_expire Unexecuted instantiation: errors.c:sc_snd_may_expire Unexecuted instantiation: frontend.c:sc_snd_may_expire Unexecuted instantiation: haproxy.c:sc_snd_may_expire Unexecuted instantiation: http_ana.c:sc_snd_may_expire Unexecuted instantiation: http_ext.c:sc_snd_may_expire Unexecuted instantiation: log.c:sc_snd_may_expire Unexecuted instantiation: mworker.c:sc_snd_may_expire Unexecuted instantiation: peers.c:sc_snd_may_expire Unexecuted instantiation: pool.c:sc_snd_may_expire Unexecuted instantiation: proxy.c:sc_snd_may_expire Unexecuted instantiation: resolvers.c:sc_snd_may_expire Unexecuted instantiation: ring.c:sc_snd_may_expire Unexecuted instantiation: sample.c:sc_snd_may_expire Unexecuted instantiation: server.c:sc_snd_may_expire Unexecuted instantiation: sink.c:sc_snd_may_expire Unexecuted instantiation: stats-html.c:sc_snd_may_expire Unexecuted instantiation: stats.c:sc_snd_may_expire Unexecuted instantiation: stconn.c:sc_snd_may_expire Unexecuted instantiation: stick_table.c:sc_snd_may_expire Unexecuted instantiation: stream.c:sc_snd_may_expire Unexecuted instantiation: tcp_rules.c:sc_snd_may_expire Unexecuted instantiation: tools.c:sc_snd_may_expire Unexecuted instantiation: trace.c:sc_snd_may_expire Unexecuted instantiation: vars.c:sc_snd_may_expire Unexecuted instantiation: activity.c:sc_snd_may_expire Unexecuted instantiation: applet.c:sc_snd_may_expire Unexecuted instantiation: backend.c:sc_snd_may_expire Unexecuted instantiation: cache.c:sc_snd_may_expire Unexecuted instantiation: dns.c:sc_snd_may_expire Unexecuted instantiation: dns_ring.c:sc_snd_may_expire Unexecuted instantiation: http_fetch.c:sc_snd_may_expire Unexecuted instantiation: stats-json.c:sc_snd_may_expire Unexecuted instantiation: flt_spoe.c:sc_snd_may_expire |
423 | | |
424 | | static forceinline int sc_ep_rcv_ex(const struct stconn *sc) |
425 | 0 | { |
426 | 0 | return ((tick_isset(sc->sedesc->lra) && sc_rcv_may_expire(sc)) |
427 | 0 | ? tick_add_ifset(sc->sedesc->lra, sc->ioto) |
428 | 0 | : TICK_ETERNITY); |
429 | 0 | } Unexecuted instantiation: cli.c:sc_ep_rcv_ex Unexecuted instantiation: connection.c:sc_ep_rcv_ex Unexecuted instantiation: debug.c:sc_ep_rcv_ex Unexecuted instantiation: errors.c:sc_ep_rcv_ex Unexecuted instantiation: frontend.c:sc_ep_rcv_ex Unexecuted instantiation: haproxy.c:sc_ep_rcv_ex Unexecuted instantiation: http_ana.c:sc_ep_rcv_ex Unexecuted instantiation: http_ext.c:sc_ep_rcv_ex Unexecuted instantiation: log.c:sc_ep_rcv_ex Unexecuted instantiation: mworker.c:sc_ep_rcv_ex Unexecuted instantiation: peers.c:sc_ep_rcv_ex Unexecuted instantiation: pool.c:sc_ep_rcv_ex Unexecuted instantiation: proxy.c:sc_ep_rcv_ex Unexecuted instantiation: resolvers.c:sc_ep_rcv_ex Unexecuted instantiation: ring.c:sc_ep_rcv_ex Unexecuted instantiation: sample.c:sc_ep_rcv_ex Unexecuted instantiation: server.c:sc_ep_rcv_ex Unexecuted instantiation: sink.c:sc_ep_rcv_ex Unexecuted instantiation: stats-html.c:sc_ep_rcv_ex Unexecuted instantiation: stats.c:sc_ep_rcv_ex Unexecuted instantiation: stconn.c:sc_ep_rcv_ex Unexecuted instantiation: stick_table.c:sc_ep_rcv_ex Unexecuted instantiation: stream.c:sc_ep_rcv_ex Unexecuted instantiation: tcp_rules.c:sc_ep_rcv_ex Unexecuted instantiation: tools.c:sc_ep_rcv_ex Unexecuted instantiation: trace.c:sc_ep_rcv_ex Unexecuted instantiation: vars.c:sc_ep_rcv_ex Unexecuted instantiation: activity.c:sc_ep_rcv_ex Unexecuted instantiation: applet.c:sc_ep_rcv_ex Unexecuted instantiation: backend.c:sc_ep_rcv_ex Unexecuted instantiation: cache.c:sc_ep_rcv_ex Unexecuted instantiation: dns.c:sc_ep_rcv_ex Unexecuted instantiation: dns_ring.c:sc_ep_rcv_ex Unexecuted instantiation: http_fetch.c:sc_ep_rcv_ex Unexecuted instantiation: stats-json.c:sc_ep_rcv_ex Unexecuted instantiation: flt_spoe.c:sc_ep_rcv_ex |
430 | | |
431 | | static forceinline int sc_ep_snd_ex(const struct stconn *sc) |
432 | 0 | { |
433 | 0 | return ((tick_isset(sc->sedesc->fsb) && sc_snd_may_expire(sc)) |
434 | 0 | ? tick_add_ifset(sc->sedesc->fsb, sc->ioto) |
435 | 0 | : TICK_ETERNITY); |
436 | 0 | } Unexecuted instantiation: cli.c:sc_ep_snd_ex Unexecuted instantiation: connection.c:sc_ep_snd_ex Unexecuted instantiation: debug.c:sc_ep_snd_ex Unexecuted instantiation: errors.c:sc_ep_snd_ex Unexecuted instantiation: frontend.c:sc_ep_snd_ex Unexecuted instantiation: haproxy.c:sc_ep_snd_ex Unexecuted instantiation: http_ana.c:sc_ep_snd_ex Unexecuted instantiation: http_ext.c:sc_ep_snd_ex Unexecuted instantiation: log.c:sc_ep_snd_ex Unexecuted instantiation: mworker.c:sc_ep_snd_ex Unexecuted instantiation: peers.c:sc_ep_snd_ex Unexecuted instantiation: pool.c:sc_ep_snd_ex Unexecuted instantiation: proxy.c:sc_ep_snd_ex Unexecuted instantiation: resolvers.c:sc_ep_snd_ex Unexecuted instantiation: ring.c:sc_ep_snd_ex Unexecuted instantiation: sample.c:sc_ep_snd_ex Unexecuted instantiation: server.c:sc_ep_snd_ex Unexecuted instantiation: sink.c:sc_ep_snd_ex Unexecuted instantiation: stats-html.c:sc_ep_snd_ex Unexecuted instantiation: stats.c:sc_ep_snd_ex Unexecuted instantiation: stconn.c:sc_ep_snd_ex Unexecuted instantiation: stick_table.c:sc_ep_snd_ex Unexecuted instantiation: stream.c:sc_ep_snd_ex Unexecuted instantiation: tcp_rules.c:sc_ep_snd_ex Unexecuted instantiation: tools.c:sc_ep_snd_ex Unexecuted instantiation: trace.c:sc_ep_snd_ex Unexecuted instantiation: vars.c:sc_ep_snd_ex Unexecuted instantiation: activity.c:sc_ep_snd_ex Unexecuted instantiation: applet.c:sc_ep_snd_ex Unexecuted instantiation: backend.c:sc_ep_snd_ex Unexecuted instantiation: cache.c:sc_ep_snd_ex Unexecuted instantiation: dns.c:sc_ep_snd_ex Unexecuted instantiation: dns_ring.c:sc_ep_snd_ex Unexecuted instantiation: http_fetch.c:sc_ep_snd_ex Unexecuted instantiation: stats-json.c:sc_ep_snd_ex Unexecuted instantiation: flt_spoe.c:sc_ep_snd_ex |
437 | | |
438 | | static inline void sc_check_timeouts(const struct stconn *sc) |
439 | 0 | { |
440 | 0 | if (unlikely(tick_is_expired(sc_ep_rcv_ex(sc), now_ms))) |
441 | 0 | sc_ic(sc)->flags |= CF_READ_TIMEOUT; |
442 | 0 | if (unlikely(tick_is_expired(sc_ep_snd_ex(sc), now_ms))) |
443 | 0 | sc_oc(sc)->flags |= CF_WRITE_TIMEOUT; |
444 | 0 | } Unexecuted instantiation: cli.c:sc_check_timeouts Unexecuted instantiation: connection.c:sc_check_timeouts Unexecuted instantiation: debug.c:sc_check_timeouts Unexecuted instantiation: errors.c:sc_check_timeouts Unexecuted instantiation: frontend.c:sc_check_timeouts Unexecuted instantiation: haproxy.c:sc_check_timeouts Unexecuted instantiation: http_ana.c:sc_check_timeouts Unexecuted instantiation: http_ext.c:sc_check_timeouts Unexecuted instantiation: log.c:sc_check_timeouts Unexecuted instantiation: mworker.c:sc_check_timeouts Unexecuted instantiation: peers.c:sc_check_timeouts Unexecuted instantiation: pool.c:sc_check_timeouts Unexecuted instantiation: proxy.c:sc_check_timeouts Unexecuted instantiation: resolvers.c:sc_check_timeouts Unexecuted instantiation: ring.c:sc_check_timeouts Unexecuted instantiation: sample.c:sc_check_timeouts Unexecuted instantiation: server.c:sc_check_timeouts Unexecuted instantiation: sink.c:sc_check_timeouts Unexecuted instantiation: stats-html.c:sc_check_timeouts Unexecuted instantiation: stats.c:sc_check_timeouts Unexecuted instantiation: stconn.c:sc_check_timeouts Unexecuted instantiation: stick_table.c:sc_check_timeouts Unexecuted instantiation: stream.c:sc_check_timeouts Unexecuted instantiation: tcp_rules.c:sc_check_timeouts Unexecuted instantiation: tools.c:sc_check_timeouts Unexecuted instantiation: trace.c:sc_check_timeouts Unexecuted instantiation: vars.c:sc_check_timeouts Unexecuted instantiation: activity.c:sc_check_timeouts Unexecuted instantiation: applet.c:sc_check_timeouts Unexecuted instantiation: backend.c:sc_check_timeouts Unexecuted instantiation: cache.c:sc_check_timeouts Unexecuted instantiation: dns.c:sc_check_timeouts Unexecuted instantiation: dns_ring.c:sc_check_timeouts Unexecuted instantiation: http_fetch.c:sc_check_timeouts Unexecuted instantiation: stats-json.c:sc_check_timeouts Unexecuted instantiation: flt_spoe.c:sc_check_timeouts |
445 | | |
446 | | static inline void sc_set_hcto(struct stconn *sc) |
447 | 0 | { |
448 | 0 | struct stream *strm = __sc_strm(sc); |
449 | |
|
450 | 0 | if (IS_HTX_STRM(strm)) |
451 | 0 | return; |
452 | | |
453 | 0 | if (sc->flags & SC_FL_ISBACK) { |
454 | 0 | if ((strm->flags & SF_BE_ASSIGNED) && tick_isset(strm->be->timeout.serverfin)) |
455 | 0 | sc->ioto = strm->be->timeout.serverfin; |
456 | 0 | } |
457 | 0 | else { |
458 | 0 | if (tick_isset(strm_fe(strm)->timeout.clientfin)) |
459 | 0 | sc->ioto = strm_fe(strm)->timeout.clientfin; |
460 | 0 | } |
461 | |
|
462 | 0 | } Unexecuted instantiation: cli.c:sc_set_hcto Unexecuted instantiation: connection.c:sc_set_hcto Unexecuted instantiation: debug.c:sc_set_hcto Unexecuted instantiation: errors.c:sc_set_hcto Unexecuted instantiation: frontend.c:sc_set_hcto Unexecuted instantiation: haproxy.c:sc_set_hcto Unexecuted instantiation: http_ana.c:sc_set_hcto Unexecuted instantiation: http_ext.c:sc_set_hcto Unexecuted instantiation: log.c:sc_set_hcto Unexecuted instantiation: mworker.c:sc_set_hcto Unexecuted instantiation: peers.c:sc_set_hcto Unexecuted instantiation: pool.c:sc_set_hcto Unexecuted instantiation: proxy.c:sc_set_hcto Unexecuted instantiation: resolvers.c:sc_set_hcto Unexecuted instantiation: ring.c:sc_set_hcto Unexecuted instantiation: sample.c:sc_set_hcto Unexecuted instantiation: server.c:sc_set_hcto Unexecuted instantiation: sink.c:sc_set_hcto Unexecuted instantiation: stats-html.c:sc_set_hcto Unexecuted instantiation: stats.c:sc_set_hcto Unexecuted instantiation: stconn.c:sc_set_hcto Unexecuted instantiation: stick_table.c:sc_set_hcto Unexecuted instantiation: stream.c:sc_set_hcto Unexecuted instantiation: tcp_rules.c:sc_set_hcto Unexecuted instantiation: tools.c:sc_set_hcto Unexecuted instantiation: trace.c:sc_set_hcto Unexecuted instantiation: vars.c:sc_set_hcto Unexecuted instantiation: activity.c:sc_set_hcto Unexecuted instantiation: applet.c:sc_set_hcto Unexecuted instantiation: backend.c:sc_set_hcto Unexecuted instantiation: cache.c:sc_set_hcto Unexecuted instantiation: dns.c:sc_set_hcto Unexecuted instantiation: dns_ring.c:sc_set_hcto Unexecuted instantiation: http_fetch.c:sc_set_hcto Unexecuted instantiation: stats-json.c:sc_set_hcto Unexecuted instantiation: flt_spoe.c:sc_set_hcto |
463 | | |
464 | | /* Schedule an abort for the SC */ |
465 | | static inline void sc_schedule_abort(struct stconn *sc) |
466 | 0 | { |
467 | 0 | sc->flags |= SC_FL_ABRT_WANTED; |
468 | 0 | } Unexecuted instantiation: cli.c:sc_schedule_abort Unexecuted instantiation: connection.c:sc_schedule_abort Unexecuted instantiation: debug.c:sc_schedule_abort Unexecuted instantiation: errors.c:sc_schedule_abort Unexecuted instantiation: frontend.c:sc_schedule_abort Unexecuted instantiation: haproxy.c:sc_schedule_abort Unexecuted instantiation: http_ana.c:sc_schedule_abort Unexecuted instantiation: http_ext.c:sc_schedule_abort Unexecuted instantiation: log.c:sc_schedule_abort Unexecuted instantiation: mworker.c:sc_schedule_abort Unexecuted instantiation: peers.c:sc_schedule_abort Unexecuted instantiation: pool.c:sc_schedule_abort Unexecuted instantiation: proxy.c:sc_schedule_abort Unexecuted instantiation: resolvers.c:sc_schedule_abort Unexecuted instantiation: ring.c:sc_schedule_abort Unexecuted instantiation: sample.c:sc_schedule_abort Unexecuted instantiation: server.c:sc_schedule_abort Unexecuted instantiation: sink.c:sc_schedule_abort Unexecuted instantiation: stats-html.c:sc_schedule_abort Unexecuted instantiation: stats.c:sc_schedule_abort Unexecuted instantiation: stconn.c:sc_schedule_abort Unexecuted instantiation: stick_table.c:sc_schedule_abort Unexecuted instantiation: stream.c:sc_schedule_abort Unexecuted instantiation: tcp_rules.c:sc_schedule_abort Unexecuted instantiation: tools.c:sc_schedule_abort Unexecuted instantiation: trace.c:sc_schedule_abort Unexecuted instantiation: vars.c:sc_schedule_abort Unexecuted instantiation: activity.c:sc_schedule_abort Unexecuted instantiation: applet.c:sc_schedule_abort Unexecuted instantiation: backend.c:sc_schedule_abort Unexecuted instantiation: cache.c:sc_schedule_abort Unexecuted instantiation: dns.c:sc_schedule_abort Unexecuted instantiation: dns_ring.c:sc_schedule_abort Unexecuted instantiation: http_fetch.c:sc_schedule_abort Unexecuted instantiation: stats-json.c:sc_schedule_abort Unexecuted instantiation: flt_spoe.c:sc_schedule_abort |
469 | | |
470 | | /* Abort the SC and notify the endpoint using the data layer */ |
471 | | static inline void sc_abort(struct stconn *sc) |
472 | 0 | { |
473 | 0 | if (likely(sc->app_ops->abort)) |
474 | 0 | sc->app_ops->abort(sc); |
475 | 0 | } Unexecuted instantiation: cli.c:sc_abort Unexecuted instantiation: connection.c:sc_abort Unexecuted instantiation: debug.c:sc_abort Unexecuted instantiation: errors.c:sc_abort Unexecuted instantiation: frontend.c:sc_abort Unexecuted instantiation: haproxy.c:sc_abort Unexecuted instantiation: http_ana.c:sc_abort Unexecuted instantiation: http_ext.c:sc_abort Unexecuted instantiation: log.c:sc_abort Unexecuted instantiation: mworker.c:sc_abort Unexecuted instantiation: peers.c:sc_abort Unexecuted instantiation: pool.c:sc_abort Unexecuted instantiation: proxy.c:sc_abort Unexecuted instantiation: resolvers.c:sc_abort Unexecuted instantiation: ring.c:sc_abort Unexecuted instantiation: sample.c:sc_abort Unexecuted instantiation: server.c:sc_abort Unexecuted instantiation: sink.c:sc_abort Unexecuted instantiation: stats-html.c:sc_abort Unexecuted instantiation: stats.c:sc_abort Unexecuted instantiation: stconn.c:sc_abort Unexecuted instantiation: stick_table.c:sc_abort Unexecuted instantiation: stream.c:sc_abort Unexecuted instantiation: tcp_rules.c:sc_abort Unexecuted instantiation: tools.c:sc_abort Unexecuted instantiation: trace.c:sc_abort Unexecuted instantiation: vars.c:sc_abort Unexecuted instantiation: activity.c:sc_abort Unexecuted instantiation: applet.c:sc_abort Unexecuted instantiation: backend.c:sc_abort Unexecuted instantiation: cache.c:sc_abort Unexecuted instantiation: dns.c:sc_abort Unexecuted instantiation: dns_ring.c:sc_abort Unexecuted instantiation: http_fetch.c:sc_abort Unexecuted instantiation: stats-json.c:sc_abort Unexecuted instantiation: flt_spoe.c:sc_abort |
476 | | |
477 | | /* Schedule a shutdown for the SC */ |
478 | | static inline void sc_schedule_shutdown(struct stconn *sc) |
479 | 0 | { |
480 | 0 | sc->flags |= SC_FL_SHUT_WANTED; |
481 | 0 | } Unexecuted instantiation: cli.c:sc_schedule_shutdown Unexecuted instantiation: connection.c:sc_schedule_shutdown Unexecuted instantiation: debug.c:sc_schedule_shutdown Unexecuted instantiation: errors.c:sc_schedule_shutdown Unexecuted instantiation: frontend.c:sc_schedule_shutdown Unexecuted instantiation: haproxy.c:sc_schedule_shutdown Unexecuted instantiation: http_ana.c:sc_schedule_shutdown Unexecuted instantiation: http_ext.c:sc_schedule_shutdown Unexecuted instantiation: log.c:sc_schedule_shutdown Unexecuted instantiation: mworker.c:sc_schedule_shutdown Unexecuted instantiation: peers.c:sc_schedule_shutdown Unexecuted instantiation: pool.c:sc_schedule_shutdown Unexecuted instantiation: proxy.c:sc_schedule_shutdown Unexecuted instantiation: resolvers.c:sc_schedule_shutdown Unexecuted instantiation: ring.c:sc_schedule_shutdown Unexecuted instantiation: sample.c:sc_schedule_shutdown Unexecuted instantiation: server.c:sc_schedule_shutdown Unexecuted instantiation: sink.c:sc_schedule_shutdown Unexecuted instantiation: stats-html.c:sc_schedule_shutdown Unexecuted instantiation: stats.c:sc_schedule_shutdown Unexecuted instantiation: stconn.c:sc_schedule_shutdown Unexecuted instantiation: stick_table.c:sc_schedule_shutdown Unexecuted instantiation: stream.c:sc_schedule_shutdown Unexecuted instantiation: tcp_rules.c:sc_schedule_shutdown Unexecuted instantiation: tools.c:sc_schedule_shutdown Unexecuted instantiation: trace.c:sc_schedule_shutdown Unexecuted instantiation: vars.c:sc_schedule_shutdown Unexecuted instantiation: activity.c:sc_schedule_shutdown Unexecuted instantiation: applet.c:sc_schedule_shutdown Unexecuted instantiation: backend.c:sc_schedule_shutdown Unexecuted instantiation: cache.c:sc_schedule_shutdown Unexecuted instantiation: dns.c:sc_schedule_shutdown Unexecuted instantiation: dns_ring.c:sc_schedule_shutdown Unexecuted instantiation: http_fetch.c:sc_schedule_shutdown Unexecuted instantiation: stats-json.c:sc_schedule_shutdown Unexecuted instantiation: flt_spoe.c:sc_schedule_shutdown |
482 | | |
483 | | /* Shutdown the SC and notify the endpoint using the data layer */ |
484 | | static inline void sc_shutdown(struct stconn *sc) |
485 | 0 | { |
486 | 0 | if (likely(sc->app_ops->shutdown)) |
487 | 0 | sc->app_ops->shutdown(sc); |
488 | 0 | } Unexecuted instantiation: cli.c:sc_shutdown Unexecuted instantiation: connection.c:sc_shutdown Unexecuted instantiation: debug.c:sc_shutdown Unexecuted instantiation: errors.c:sc_shutdown Unexecuted instantiation: frontend.c:sc_shutdown Unexecuted instantiation: haproxy.c:sc_shutdown Unexecuted instantiation: http_ana.c:sc_shutdown Unexecuted instantiation: http_ext.c:sc_shutdown Unexecuted instantiation: log.c:sc_shutdown Unexecuted instantiation: mworker.c:sc_shutdown Unexecuted instantiation: peers.c:sc_shutdown Unexecuted instantiation: pool.c:sc_shutdown Unexecuted instantiation: proxy.c:sc_shutdown Unexecuted instantiation: resolvers.c:sc_shutdown Unexecuted instantiation: ring.c:sc_shutdown Unexecuted instantiation: sample.c:sc_shutdown Unexecuted instantiation: server.c:sc_shutdown Unexecuted instantiation: sink.c:sc_shutdown Unexecuted instantiation: stats-html.c:sc_shutdown Unexecuted instantiation: stats.c:sc_shutdown Unexecuted instantiation: stconn.c:sc_shutdown Unexecuted instantiation: stick_table.c:sc_shutdown Unexecuted instantiation: stream.c:sc_shutdown Unexecuted instantiation: tcp_rules.c:sc_shutdown Unexecuted instantiation: tools.c:sc_shutdown Unexecuted instantiation: trace.c:sc_shutdown Unexecuted instantiation: vars.c:sc_shutdown Unexecuted instantiation: activity.c:sc_shutdown Unexecuted instantiation: applet.c:sc_shutdown Unexecuted instantiation: backend.c:sc_shutdown Unexecuted instantiation: cache.c:sc_shutdown Unexecuted instantiation: dns.c:sc_shutdown Unexecuted instantiation: dns_ring.c:sc_shutdown Unexecuted instantiation: http_fetch.c:sc_shutdown Unexecuted instantiation: stats-json.c:sc_shutdown Unexecuted instantiation: flt_spoe.c:sc_shutdown |
489 | | |
490 | | #endif /* _HAPROXY_SC_STRM_H */ |