diff --git a/dev/flags/flags.c b/dev/flags/flags.c index 126e9a022..48d9a8686 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 580d104bb..eee431890 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 e69f9c170..6304c1bf0 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 86db30361..d2fd72908 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; } }