From: Olivier Houchard Date: Sun, 2 Dec 2018 00:31:17 +0000 (+0100) Subject: MINOR: mux: add a "max_streams" method. X-Git-Tag: v1.9-dev9~26 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8defe4b51aeb478b7d8138e7e867b2b9e2a6990f;p=thirdparty%2Fhaproxy.git MINOR: mux: add a "max_streams" method. Add a new method to muxes, "max_streams", that returns the max number of streams the mux can handle. This will be used to know if a mux is in use or not. --- diff --git a/include/types/connection.h b/include/types/connection.h index 6d4680a6d9..cd9f1e7547 100644 --- a/include/types/connection.h +++ b/include/types/connection.h @@ -334,6 +334,7 @@ struct mux_ops { int (*subscribe)(struct conn_stream *cs, int event_type, void *param); /* Subscribe to events, such as "being able to send" */ int (*unsubscribe)(struct conn_stream *cs, int event_type, void *param); /* Unsubscribe to events */ int (*avail_streams)(struct connection *conn); /* Returns the number of streams still available for a connection */ + int (*max_streams)(struct connection *conn); /* Returns the max number of streams available for that connection. */ void (*destroy)(struct connection *conn); /* Let the mux know one of its users left, so it may have to disappear */ const struct cs_info *(*get_cs_info)(struct conn_stream *cs); /* Return info on the specified conn_stream or NULL if not defined */ unsigned int flags; /* some flags characterizing the mux's capabilities (MX_FL_*) */ @@ -443,6 +444,7 @@ struct connection { struct sockaddr_storage from; /* client address, or address to spoof when connecting to the server */ struct sockaddr_storage to; /* address reached by the client, or address to connect to */ } addr; /* addresses of the remote side, client for producer and server for consumer */ + struct timeval idle_tv; /* Time the connection was added to the idle list */ }; /* PROTO token registration */ diff --git a/src/mux_h1.c b/src/mux_h1.c index 74e1bb724a..4c5bae0fc7 100644 --- a/src/mux_h1.c +++ b/src/mux_h1.c @@ -206,6 +206,10 @@ static int h1_avail_streams(struct connection *conn) return h1c->h1s ? 0 : 1; } +static int h1_max_streams(struct connection *conn) +{ + return 1; +} /*****************************************************************/ /* functions below are dedicated to the mux setup and management */ @@ -1981,6 +1985,7 @@ const struct mux_ops mux_h1_ops = { .detach = h1_detach, .destroy = h1_destroy, .avail_streams = h1_avail_streams, + .max_streams = h1_max_streams, .rcv_buf = h1_rcv_buf, .snd_buf = h1_snd_buf, #if defined(CONFIG_HAP_LINUX_SPLICE) diff --git a/src/mux_h2.c b/src/mux_h2.c index ae872f1c68..8d0851cc74 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -347,9 +347,16 @@ static int h2_avail_streams(struct connection *conn) { struct h2c *h2c = conn->mux_ctx; + /* XXX Should use the negociated max concurrent stream nb instead of the conf value */ return (h2_settings_max_concurrent_streams - h2c->nb_streams); } +static int h2_max_streams(struct connection *conn) +{ + /* XXX Should use the negociated max concurrent stream nb instead of the conf value */ + return h2_settings_max_concurrent_streams; +} + /*****************************************************************/ /* functions below are dedicated to the mux setup and management */ @@ -4825,6 +4832,7 @@ static const struct mux_ops h2_ops = { .detach = h2_detach, .destroy = h2_destroy, .avail_streams = h2_avail_streams, + .max_streams = h2_max_streams, .shutr = h2_shutr, .shutw = h2_shutw, .show_fd = h2_show_fd, diff --git a/src/mux_pt.c b/src/mux_pt.c index 9dec132163..349e213929 100644 --- a/src/mux_pt.c +++ b/src/mux_pt.c @@ -198,6 +198,11 @@ static int mux_pt_avail_streams(struct connection *conn) return (ctx->cs == NULL ? 1 : 0); } +static int mux_pt_max_streams(struct connection *conn) +{ + return 1; +} + static void mux_pt_shutr(struct conn_stream *cs, enum cs_shr_mode mode) { if (cs->flags & CS_FL_SHR) @@ -311,6 +316,7 @@ const struct mux_ops mux_pt_ops = { .get_first_cs = mux_pt_get_first_cs, .detach = mux_pt_detach, .avail_streams = mux_pt_avail_streams, + .max_streams = mux_pt_max_streams, .destroy = mux_pt_destroy_meth, .shutr = mux_pt_shutr, .shutw = mux_pt_shutw,