MINOR: connection: add a new flag CO_FL_PRIVATE

This flag is set on an outgoing connection when this connection gets
some properties that must not be shared with other connections, such
as dynamic transparent source binding, SNI or a proxy protocol header,
or an authentication challenge from the server. This will be needed
later to implement connection reuse.
This commit is contained in:
Willy Tarreau 2015-08-04 19:24:13 +02:00
parent 173a1c6b43
commit 387ebf84dd
4 changed files with 11 additions and 2 deletions

View File

@ -119,7 +119,10 @@ enum {
*/
CO_FL_POLL_SOCK = CO_FL_HANDSHAKE | CO_FL_WAIT_L4_CONN | CO_FL_WAIT_L6_CONN,
/* unused : 0x10000000, 0x20000000, 0x40000000 */
/* This connection may not be shared between clients */
CO_FL_PRIVATE = 0x10000000,
/* unused : 0x20000000, 0x40000000 */
/* This last flag indicates that the transport layer is used (for instance
* by logs) and must not be cleared yet. The last call to conn_xprt_close()

View File

@ -1087,6 +1087,7 @@ int connect_server(struct stream *s)
/* process the case where the server requires the PROXY protocol to be sent */
srv_conn->send_proxy_ofs = 0;
if (srv && srv->pp_opts) {
srv_conn->flags |= CO_FL_PRIVATE;
srv_conn->send_proxy_ofs = 1; /* must compute size */
cli_conn = objt_conn(strm_orig(s));
if (cli_conn)
@ -1152,6 +1153,7 @@ int connect_server(struct stream *s)
smp->data.str.len = smp->data.str.size - 1;
smp->data.str.str[smp->data.str.len] = 0;
ssl_sock_set_servername(srv_conn, smp->data.str.str);
srv_conn->flags |= CO_FL_PRIVATE;
}
}
#endif /* USE_OPENSSL */

View File

@ -5155,6 +5155,7 @@ void http_end_txn_clean_session(struct stream *s)
* it's better to do it (at least it helps with debugging).
*/
s->txn->flags |= TX_PREFER_LAST;
srv_conn->flags |= CO_FL_PRIVATE;
}
if (fe->options2 & PR_O2_INDEPSTR)

View File

@ -474,12 +474,15 @@ int tcp_connect_server(struct connection *conn, int data, int delack)
if (is_inet_addr(&conn->addr.from)) {
switch (src->opts & CO_SRC_TPROXY_MASK) {
case CO_SRC_TPROXY_ADDR:
case CO_SRC_TPROXY_CLI:
conn->flags |= CO_FL_PRIVATE;
/* fall through */
case CO_SRC_TPROXY_ADDR:
flags = 3;
break;
case CO_SRC_TPROXY_CIP:
case CO_SRC_TPROXY_DYN:
conn->flags |= CO_FL_PRIVATE;
flags = 1;
break;
}