From 71fe8dfd615ae2be8002eb0df12f7410c075c2f1 Mon Sep 17 00:00:00 2001 From: lyuxuan Date: Mon, 30 Apr 2018 11:16:00 -0700 Subject: [PATCH] http2Client: send reset stream when closing the stream on protocol error (#2030) --- transport/http2_client.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/transport/http2_client.go b/transport/http2_client.go index 8fa61bbb..a55c3c10 100644 --- a/transport/http2_client.go +++ b/transport/http2_client.go @@ -1022,8 +1022,7 @@ func (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) { atomic.StoreUint32(&s.bytesReceived, 1) var state decodeState if err := state.decodeResponseHeader(frame); err != nil { - // TODO(mmukhi, dfawley): Perhaps send a reset stream. - t.closeStream(s, err, false, http2.ErrCodeNo, nil, nil, false) + t.closeStream(s, err, true, http2.ErrCodeProtocol, nil, nil, false) // Something wrong. Stops reading even when there is remaining. return } @@ -1105,8 +1104,7 @@ func (t *http2Client) reader() { t.mu.Unlock() if s != nil { // use error detail to provide better err message - // TODO(mmukhi, dfawley): Perhaps send a RST_STREAM to the server. - t.closeStream(s, streamErrorf(http2ErrConvTab[se.Code], "%v", t.framer.fr.ErrorDetail()), false, http2.ErrCodeNo, nil, nil, false) + t.closeStream(s, streamErrorf(http2ErrConvTab[se.Code], "%v", t.framer.fr.ErrorDetail()), true, http2.ErrCodeProtocol, nil, nil, false) } continue } else {