fix http2 error handling

This commit is contained in:
Lucas Clemente
2016-04-29 11:53:15 +02:00
parent 5dddd9303f
commit 88a82be2fa

View File

@@ -97,26 +97,32 @@ func handleStream(session *quic.Session, headerStream utils.Stream) {
go func() {
for {
if err := handleRequest(session, headerStream, hpackDecoder, h2framer); err != nil {
fmt.Printf("error handling h2 request: %s\n", err.Error())
return
}
}
}()
}
func handleRequest(session *quic.Session, headerStream utils.Stream, hpackDecoder *hpack.Decoder, h2framer *http2.Framer) error {
h2frame, err := h2framer.ReadFrame()
if err != nil {
fmt.Printf("invalid http2 frame: %s\n", err.Error())
continue
return err
}
h2headersFrame := h2frame.(*http2.HeadersFrame)
if !h2headersFrame.HeadersEnded() {
fmt.Printf("http2 header continuation not implemented")
continue
return errors.New("http2 header continuation not implemented")
}
headers, err := hpackDecoder.DecodeFull(h2headersFrame.HeaderBlockFragment())
if err != nil {
fmt.Printf("invalid http2 headers encoding: %s\n", err.Error())
continue
return err
}
req, err := requestFromHeaders(headers)
if err != nil {
fmt.Printf("invalid http2 frame: %s\n", err.Error())
continue
return err
}
fmt.Printf("Request: %#v\n", req)
@@ -133,8 +139,8 @@ func handleStream(session *quic.Session, headerStream utils.Stream) {
responseWriter.dataStream.Close()
}
}()
}
}()
return nil
}
func requestFromHeaders(headers []hpack.HeaderField) (*http.Request, error) {