forked from quic-go/quic-go
fix error code when there are no common version in version negotiation
This commit is contained in:
13
client.go
13
client.go
@@ -38,7 +38,6 @@ var errHostname = errors.New("Invalid hostname")
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
errCloseSessionForNewVersion = errors.New("closing session in order to recreate it with a new version")
|
errCloseSessionForNewVersion = errors.New("closing session in order to recreate it with a new version")
|
||||||
errInvalidVersionNegotiation = qerr.Error(qerr.InvalidVersionNegotiationPacket, "Server already supports client's version and should have accepted the connection.")
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewClient makes a new client
|
// NewClient makes a new client
|
||||||
@@ -153,11 +152,19 @@ func (c *Client) handlePacket(packet []byte) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if hdr.VersionFlag {
|
if hdr.VersionFlag {
|
||||||
// check if the server sent the offered version in supported versions
|
var hasCommonVersion bool // check if we're supporting any of the offered versions
|
||||||
for _, v := range hdr.SupportedVersions {
|
for _, v := range hdr.SupportedVersions {
|
||||||
|
// check if the server sent the offered version in supported versions
|
||||||
if v == c.version {
|
if v == c.version {
|
||||||
return errInvalidVersionNegotiation
|
return qerr.Error(qerr.InvalidVersionNegotiationPacket, "Server already supports client's version and should have accepted the connection.")
|
||||||
}
|
}
|
||||||
|
if v != protocol.VersionUnsupported {
|
||||||
|
hasCommonVersion = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !hasCommonVersion {
|
||||||
|
utils.Infof("No common version found.")
|
||||||
|
return qerr.InvalidVersion
|
||||||
}
|
}
|
||||||
|
|
||||||
ok, highestSupportedVersion := protocol.HighestSupportedVersion(hdr.SupportedVersions)
|
ok, highestSupportedVersion := protocol.HighestSupportedVersion(hdr.SupportedVersions)
|
||||||
|
|||||||
@@ -228,7 +228,7 @@ var _ = Describe("Client", func() {
|
|||||||
|
|
||||||
It("errors if no matching version is found", func() {
|
It("errors if no matching version is found", func() {
|
||||||
err := client.handlePacket(getVersionNegotiation([]protocol.VersionNumber{1}))
|
err := client.handlePacket(getVersionNegotiation([]protocol.VersionNumber{1}))
|
||||||
Expect(err).To(MatchError(qerr.VersionNegotiationMismatch))
|
Expect(err).To(MatchError(qerr.InvalidVersion))
|
||||||
})
|
})
|
||||||
|
|
||||||
It("ignores delayed version negotiation packets", func() {
|
It("ignores delayed version negotiation packets", func() {
|
||||||
@@ -244,7 +244,7 @@ var _ = Describe("Client", func() {
|
|||||||
|
|
||||||
It("errors if the server should have accepted the offered version", func() {
|
It("errors if the server should have accepted the offered version", func() {
|
||||||
err := client.handlePacket(getVersionNegotiation([]protocol.VersionNumber{client.version}))
|
err := client.handlePacket(getVersionNegotiation([]protocol.VersionNumber{client.version}))
|
||||||
Expect(err).To(MatchError(errInvalidVersionNegotiation))
|
Expect(err).To(MatchError(qerr.Error(qerr.InvalidVersionNegotiationPacket, "Server already supports client's version and should have accepted the connection.")))
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user