]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: rhttp: support PROXY emission on preconnect
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Tue, 14 May 2024 14:34:49 +0000 (16:34 +0200)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Wed, 22 May 2024 08:01:57 +0000 (10:01 +0200)
Extend preconnect to support PROXY protocol emission. Code is duplicated
from connect_server() into new_reverse_conn(). This is necessary to
support send-proxy on server line used as rhttp.

src/proto_rhttp.c

index f0f26f2b59a04b8f2198a070875576e5c8c0b320..9bf02157c13874666a0e770101eef1a7207ebc4a 100644 (file)
@@ -79,6 +79,14 @@ static struct connection *new_reverse_conn(struct listener *l, struct server *sr
        *conn->dst = srv->addr;
        set_host_port(conn->dst, srv->svc_port);
 
+       conn->send_proxy_ofs = 0;
+       if (srv->pp_opts) {
+               conn->flags |= CO_FL_SEND_PROXY;
+               conn->send_proxy_ofs = 1; /* must compute size */
+       }
+
+       /* TODO support SOCKS4 */
+
        if (conn_prepare(conn, protocol_lookup(conn->dst->ss_family, PROTO_TYPE_STREAM, 0), srv->xprt))
                goto err;
 
@@ -97,6 +105,14 @@ static struct connection *new_reverse_conn(struct listener *l, struct server *sr
        }
 #endif /* USE_OPENSSL */
 
+       /* The CO_FL_SEND_PROXY flag may have been set by the connect method,
+        * if so, add our handshake pseudo-XPRT now.
+        */
+       if (conn->flags & CO_FL_HANDSHAKE) {
+               if (xprt_add_hs(conn) < 0)
+                       goto err;
+       }
+
        if (conn_xprt_start(conn) < 0)
                goto err;
 
@@ -107,8 +123,6 @@ static struct connection *new_reverse_conn(struct listener *l, struct server *sr
                        goto err;
        }
 
-       /* Not expected here. */
-       BUG_ON((conn->flags & CO_FL_HANDSHAKE));
        return conn;
 
  err: