forked from quic-go/quic-go
simplify stream handling in the http3.Server
This commit is contained in:
@@ -276,7 +276,7 @@ func (s *Server) handleRequest(sess quic.Session, str quic.Stream, decoder *qpac
|
|||||||
handler = http.DefaultServeMux
|
handler = http.DefaultServeMux
|
||||||
}
|
}
|
||||||
|
|
||||||
var panicked, readEOF bool
|
var panicked bool
|
||||||
func() {
|
func() {
|
||||||
defer func() {
|
defer func() {
|
||||||
if p := recover(); p != nil {
|
if p := recover(); p != nil {
|
||||||
@@ -289,10 +289,6 @@ func (s *Server) handleRequest(sess quic.Session, str quic.Stream, decoder *qpac
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
handler.ServeHTTP(responseWriter, req)
|
handler.ServeHTTP(responseWriter, req)
|
||||||
// read the eof
|
|
||||||
if _, err = str.Read([]byte{0}); err == io.EOF {
|
|
||||||
readEOF = true
|
|
||||||
}
|
|
||||||
}()
|
}()
|
||||||
|
|
||||||
if panicked {
|
if panicked {
|
||||||
@@ -301,9 +297,8 @@ func (s *Server) handleRequest(sess quic.Session, str quic.Stream, decoder *qpac
|
|||||||
responseWriter.WriteHeader(200)
|
responseWriter.WriteHeader(200)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !readEOF {
|
// If the EOF was read by the handler, CancelRead() is a no-op.
|
||||||
str.CancelRead(quic.ErrorCode(errorEarlyResponse))
|
str.CancelRead(quic.ErrorCode(errorEarlyResponse))
|
||||||
}
|
|
||||||
return requestError{}
|
return requestError{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -122,6 +122,7 @@ var _ = Describe("Server", func() {
|
|||||||
str.EXPECT().Write(gomock.Any()).DoAndReturn(func(p []byte) (int, error) {
|
str.EXPECT().Write(gomock.Any()).DoAndReturn(func(p []byte) (int, error) {
|
||||||
return len(p), nil
|
return len(p), nil
|
||||||
}).AnyTimes()
|
}).AnyTimes()
|
||||||
|
str.EXPECT().CancelRead(gomock.Any())
|
||||||
|
|
||||||
Expect(s.handleRequest(sess, str, qpackDecoder, nil)).To(Equal(requestError{}))
|
Expect(s.handleRequest(sess, str, qpackDecoder, nil)).To(Equal(requestError{}))
|
||||||
var req *http.Request
|
var req *http.Request
|
||||||
@@ -140,6 +141,7 @@ var _ = Describe("Server", func() {
|
|||||||
str.EXPECT().Write(gomock.Any()).DoAndReturn(func(p []byte) (int, error) {
|
str.EXPECT().Write(gomock.Any()).DoAndReturn(func(p []byte) (int, error) {
|
||||||
return responseBuf.Write(p)
|
return responseBuf.Write(p)
|
||||||
}).AnyTimes()
|
}).AnyTimes()
|
||||||
|
str.EXPECT().CancelRead(gomock.Any())
|
||||||
|
|
||||||
serr := s.handleRequest(sess, str, qpackDecoder, nil)
|
serr := s.handleRequest(sess, str, qpackDecoder, nil)
|
||||||
Expect(serr.err).ToNot(HaveOccurred())
|
Expect(serr.err).ToNot(HaveOccurred())
|
||||||
|
|||||||
Reference in New Issue
Block a user