fix application bug

This commit is contained in:
Jeff
2019-05-13 11:19:18 +08:00
committed by zryfish
parent 996d6fe4c5
commit 5462f51e65
717 changed files with 87703 additions and 53426 deletions

View File

@@ -16,8 +16,8 @@ import (
quic "github.com/lucas-clemente/quic-go"
"github.com/lucas-clemente/quic-go/internal/protocol"
"github.com/lucas-clemente/quic-go/internal/qerr"
"github.com/lucas-clemente/quic-go/internal/utils"
"github.com/lucas-clemente/quic-go/qerr"
)
type roundTripperOpts struct {
@@ -52,10 +52,7 @@ type client struct {
var _ http.RoundTripper = &client{}
var defaultQuicConfig = &quic.Config{
RequestConnectionIDOmission: true,
KeepAlive: true,
}
var defaultQuicConfig = &quic.Config{KeepAlive: true}
// newClient creates a new client
func newClient(
@@ -94,7 +91,7 @@ func (c *client) dial() error {
}
// once the version has been negotiated, open the header stream
c.headerStream, err = c.session.OpenStream()
c.headerStream, err = c.session.OpenStreamSync()
if err != nil {
return err
}
@@ -111,10 +108,10 @@ func (c *client) handleHeaderStream() {
for err == nil {
err = c.readResponse(h2framer, decoder)
}
if quicErr, ok := err.(*qerr.QuicError); !ok || quicErr.ErrorCode != qerr.PeerGoingAway {
if quicErr, ok := err.(*qerr.QuicError); !ok || quicErr.ErrorCode != qerr.NoError {
c.logger.Debugf("Error handling header stream: %s", err)
}
c.headerErr = qerr.Error(qerr.InvalidHeadersStreamData, err.Error())
c.headerErr = qerr.Error(qerr.InternalError, err.Error())
// stop all running request
close(c.headerErrored)
}
@@ -244,7 +241,7 @@ func (c *client) RoundTrip(req *http.Request) (*http.Response, error) {
if streamEnded || isHead {
res.Body = noBody
} else {
res.Body = dataStream
res.Body = &responseBody{dataStream}
if requestedGzip && res.Header.Get("Content-Encoding") == "gzip" {
res.Header.Del("Content-Encoding")
res.Header.Del("Content-Length")

View File

@@ -0,0 +1,18 @@
package h2quic
import (
"io"
quic "github.com/lucas-clemente/quic-go"
)
type responseBody struct {
quic.Stream
}
var _ io.ReadCloser = &responseBody{}
func (rb *responseBody) Close() error {
rb.Stream.CancelRead(0)
return nil
}

View File

@@ -14,8 +14,8 @@ import (
quic "github.com/lucas-clemente/quic-go"
"github.com/lucas-clemente/quic-go/internal/protocol"
"github.com/lucas-clemente/quic-go/internal/qerr"
"github.com/lucas-clemente/quic-go/internal/utils"
"github.com/lucas-clemente/quic-go/qerr"
"golang.org/x/net/http2"
"golang.org/x/net/http2/hpack"
)
@@ -127,7 +127,7 @@ func (s *Server) serveImpl(tlsConfig *tls.Config, conn net.PacketConn) error {
func (s *Server) handleHeaderStream(session streamCreator) {
stream, err := session.AcceptStream()
if err != nil {
session.CloseWithError(quic.ErrorCode(qerr.InvalidHeadersStreamData), err)
session.CloseWithError(quic.ErrorCode(qerr.InternalError), err)
return
}
@@ -154,7 +154,7 @@ func (s *Server) handleHeaderStream(session streamCreator) {
func (s *Server) handleRequest(session streamCreator, headerStream quic.Stream, headerStreamMutex *sync.Mutex, hpackDecoder *hpack.Decoder, h2framer *http2.Framer) error {
h2frame, err := h2framer.ReadFrame()
if err != nil {
return qerr.Error(qerr.HeadersStreamDataDecompressFailure, "cannot read frame")
return qerr.Error(qerr.InternalError, "cannot read frame")
}
var h2headersFrame *http2.HeadersFrame
switch f := h2frame.(type) {
@@ -165,7 +165,7 @@ func (s *Server) handleRequest(session streamCreator, headerStream quic.Stream,
case *http2.HeadersFrame:
h2headersFrame = f
default:
return qerr.Error(qerr.InvalidHeadersStreamData, "expected a header frame")
return qerr.Error(qerr.ProtocolViolation, "expected a header frame")
}
if !h2headersFrame.HeadersEnded() {