From: Christopher Faulet Date: Tue, 18 Jan 2022 09:43:02 +0000 (+0100) Subject: MINOR: conn-stream: Add flags to set the type of the endpoint X-Git-Tag: v2.6-dev6~108 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=81a40f630e2c9a48484ff62a3e91676ecc59f0e7;p=thirdparty%2Fhaproxy.git MINOR: conn-stream: Add flags to set the type of the endpoint This patch is mandatory to invert the endpoint and the context in the conn-stream. There is no common type (at least for now) for the entity representing a mux (h1s, h2s...), thus we must set its type when the endpoint is attached to a conn-stream. There is 2 types for the conn-stream endpoints: the mux (CS_FL_ENDP_MUX) and the applet (CS_FL_ENDP_APP). --- diff --git a/dev/flags/flags.c b/dev/flags/flags.c index 126e9a0220..48d9a86861 100644 --- a/dev/flags/flags.c +++ b/dev/flags/flags.c @@ -184,6 +184,8 @@ void show_cs_flags(unsigned int f) printf("0\n"); return; } + SHOW_FLAG(f, CS_FL_ENDP_APP); + SHOW_FLAG(f, CS_FL_ENDP_MUX); SHOW_FLAG(f, CS_FL_WEBSOCKET); SHOW_FLAG(f, CS_FL_NOT_FIRST); SHOW_FLAG(f, CS_FL_KILL_CONN); diff --git a/include/haproxy/conn_stream-t.h b/include/haproxy/conn_stream-t.h index 580d104bbb..eee431890a 100644 --- a/include/haproxy/conn_stream-t.h +++ b/include/haproxy/conn_stream-t.h @@ -57,6 +57,9 @@ enum { /* flags set by the mux relayed to the stream */ CS_FL_WEBSOCKET = 0x00200000, /* websocket stream */ + + CS_FL_ENDP_MUX = 0x00400000, /* Endpoint is a mux */ + CS_FL_ENDP_APP = 0x00800000, /* Endpoint is an applet */ }; /* cs_shutr() modes */ diff --git a/include/haproxy/conn_stream.h b/include/haproxy/conn_stream.h index e69f9c1701..6304c1bf04 100644 --- a/include/haproxy/conn_stream.h +++ b/include/haproxy/conn_stream.h @@ -65,7 +65,7 @@ static inline struct connection *__cs_conn(const struct conn_stream *cs) } static inline struct connection *cs_conn(const struct conn_stream *cs) { - if (obj_type(cs->end) == OBJ_TYPE_CONN) + if (cs->flags & CS_FL_ENDP_MUX) return __cs_conn(cs); return NULL; } @@ -90,7 +90,7 @@ static inline struct appctx *__cs_appctx(const struct conn_stream *cs) } static inline struct appctx *cs_appctx(const struct conn_stream *cs) { - if (obj_type(cs->end) == OBJ_TYPE_APPCTX) + if (cs->flags & CS_FL_ENDP_APP) return __cs_appctx(cs); return NULL; } diff --git a/src/conn_stream.c b/src/conn_stream.c index 86db303612..d2fd729087 100644 --- a/src/conn_stream.c +++ b/src/conn_stream.c @@ -60,6 +60,7 @@ void cs_attach_endp(struct conn_stream *cs, enum obj_type *endp, void *ctx) } else if (cs_check(cs)) cs->data_cb = &check_conn_cb; + cs->flags |= CS_FL_ENDP_MUX; } else if ((appctx = objt_appctx(endp)) != NULL) { appctx->owner = cs; @@ -67,6 +68,7 @@ void cs_attach_endp(struct conn_stream *cs, enum obj_type *endp, void *ctx) cs->si->ops = &si_applet_ops; cs->data_cb = NULL; } + cs->flags |= CS_FL_ENDP_APP; } }