]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: mux-h2: add functions to convert an h2c/h2s state to a string
authorWilly Tarreau <w@1wt.eu>
Fri, 30 Aug 2019 05:07:08 +0000 (07:07 +0200)
committerWilly Tarreau <w@1wt.eu>
Fri, 30 Aug 2019 05:10:46 +0000 (07:10 +0200)
We need this all the time in traces, let's have it now. For the sake
of compact outputs, the strings are all 3-chars long. The "show fd"
output was improved to make use of this.

src/mux_h2.c

index 9b7b2f5c273bb3313e85f596964420bc8e7c4b05..7680ffa5aebb637068e78da259fc7e3d7ff50c10 100644 (file)
@@ -445,6 +445,38 @@ static struct task *h2_deferred_shut(struct task *t, void *ctx, unsigned short s
 static struct h2s *h2c_bck_stream_new(struct h2c *h2c, struct conn_stream *cs, struct session *sess);
 static void h2s_alert(struct h2s *h2s);
 
+/* returns a h2c state as an abbreviated 3-letter string, or "???" if unknown */
+static inline const char *h2c_st_to_str(enum h2_cs st)
+{
+       switch (st) {
+       case H2_CS_PREFACE:   return "PRF";
+       case H2_CS_SETTINGS1: return "STG";
+       case H2_CS_FRAME_H:   return "FRH";
+       case H2_CS_FRAME_P:   return "FRP";
+       case H2_CS_FRAME_A:   return "FRA";
+       case H2_CS_FRAME_E:   return "FRE";
+       case H2_CS_ERROR:     return "ERR";
+       case H2_CS_ERROR2:    return "ER2";
+       default:              return "???";
+       }
+}
+
+/* returns a h2s state as an abbreviated 3-letter string, or "???" if unknown */
+static inline const char *h2s_st_to_str(enum h2_ss st)
+{
+       switch (st) {
+       case H2_SS_IDLE:   return "IDL"; // idle
+       case H2_SS_RLOC:   return "RSL"; // reserved local
+       case H2_SS_RREM:   return "RSR"; // reserved remote
+       case H2_SS_OPEN:   return "OPN"; // open
+       case H2_SS_HREM:   return "HCR"; // half-closed remote
+       case H2_SS_HLOC:   return "HCL"; // half-closed local
+       case H2_SS_ERROR : return "ERR"; // error
+       case H2_SS_CLOSED: return "CLO"; // closed
+       default:           return "???";
+       }
+}
+
 /* the H2 traces always expect that arg1, if non-null, is of type connection
  * (from which we can derive h2c), that arg2, if non-null, is of type h2s, and
  * that arg3, if non-null, is either of type htx for tx headers, or of type
@@ -5680,11 +5712,11 @@ static void h2_show_fd(struct buffer *msg, struct connection *conn)
 
        hmbuf = br_head(h2c->mbuf);
        tmbuf = br_tail(h2c->mbuf);
-       chunk_appendf(msg, " h2c.st0=%d .err=%d .maxid=%d .lastid=%d .flg=0x%04x"
+       chunk_appendf(msg, " h2c.st0=%s .err=%d .maxid=%d .lastid=%d .flg=0x%04x"
                      " .nbst=%u .nbcs=%u .fctl_cnt=%d .send_cnt=%d .tree_cnt=%d"
                      " .orph_cnt=%d .sub=%d .dsi=%d .dbuf=%u@%p+%u/%u .msi=%d"
                      " .mbuf=[%u..%u|%u],h=[%u@%p+%u/%u],t=[%u@%p+%u/%u]",
-                     h2c->st0, h2c->errcode, h2c->max_id, h2c->last_sid, h2c->flags,
+                     h2c_st_to_str(h2c->st0), h2c->errcode, h2c->max_id, h2c->last_sid, h2c->flags,
                      h2c->nb_streams, h2c->nb_cs, fctl_cnt, send_cnt, tree_cnt, orph_cnt,
                      h2c->wait_event.events, h2c->dsi,
                      (unsigned int)b_data(&h2c->dbuf), b_orig(&h2c->dbuf),
@@ -5697,8 +5729,8 @@ static void h2_show_fd(struct buffer *msg, struct connection *conn)
                      (unsigned int)b_head_ofs(tmbuf), (unsigned int)b_size(tmbuf));
 
        if (h2s) {
-               chunk_appendf(msg, " last_h2s=%p .id=%d .flg=0x%04x .rxbuf=%u@%p+%u/%u .cs=%p",
-                             h2s, h2s->id, h2s->flags,
+               chunk_appendf(msg, " last_h2s=%p .id=%d .st=%s.flg=0x%04x .rxbuf=%u@%p+%u/%u .cs=%p",
+                             h2s, h2s->id, h2s_st_to_str(h2s->st), h2s->flags,
                              (unsigned int)b_data(&h2s->rxbuf), b_orig(&h2s->rxbuf),
                              (unsigned int)b_head_ofs(&h2s->rxbuf), (unsigned int)b_size(&h2s->rxbuf),
                              h2s->cs);