From: Willy Tarreau Date: Sun, 4 Dec 2016 17:42:09 +0000 (+0100) Subject: MINOR: connection: add a .get_alpn() method to xprt_ops X-Git-Tag: v1.8-dev3~268 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a9c1741820830ea47d4ebfbc7a87fac902e764bf;p=thirdparty%2Fhaproxy.git MINOR: connection: add a .get_alpn() method to xprt_ops This will be used to retrieve the ALPN negociated over SSL (or possibly via the proxy protocol later). It's likely that this information should be stored in the connection itself, but it requires adding an extra pointer and an extra integer. Thus better rely on the transport layer to pass this info for now. --- diff --git a/include/proto/connection.h b/include/proto/connection.h index e8674462be..09467ba504 100644 --- a/include/proto/connection.h +++ b/include/proto/connection.h @@ -650,6 +650,13 @@ static inline struct xprt_ops *xprt_get(int id) return registered_xprt[id]; } +static inline int conn_get_alpn(const struct connection *conn, const char **str, int *len) +{ + if (!conn_xprt_ready(conn) || !conn->xprt->get_alpn) + return 0; + return conn->xprt->get_alpn(conn, str, len); +} + #endif /* _PROTO_CONNECTION_H */ /* diff --git a/include/types/connection.h b/include/types/connection.h index 60d977218e..1e3fb73899 100644 --- a/include/types/connection.h +++ b/include/types/connection.h @@ -228,6 +228,7 @@ struct xprt_ops { void (*destroy_bind_conf)(struct bind_conf *conf); /* destroy a whole bind_conf */ int (*prepare_srv)(struct server *srv); /* prepare a server context */ void (*destroy_srv)(struct server *srv); /* destroy a server context */ + int (*get_alpn)(const struct connection *conn, const char **str, int *len); /* get application layer name */ char name[8]; /* transport layer name, zero-terminated */ };