Files
golang.net/internal/http3/errors.go
Nicholas S. Husin eea413e294 internal/http3: use go1.25 synctest.Test instead of go1.24 synctest.Run
internal/http3 was written back in go1.24, and relies on synctest.Run
and goexperiment.synctest. This prevents us from running tests with
newer versions of Go.

This CL updates the existing build constraint and synctest usages to
go1.25 so we can still run tests using go1.25 and tip. Support for
running synctest with go1.24 is not kept, since go1.26 release (and
therefore x/net go.mod updating to go1.25) is expected soon.

Change-Id: Iebfa82ebd1da4a06ba613ce0f45051f4691037fc
Reviewed-on: https://go-review.googlesource.com/c/net/+/734940
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-by: Nicholas Husin <husin@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
2026-01-09 07:13:59 -08:00

103 lines
3.2 KiB
Go

// Copyright 2025 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package http3
import "fmt"
// http3Error is an HTTP/3 error code.
type http3Error int
const (
// https://www.rfc-editor.org/rfc/rfc9114.html#section-8.1
errH3NoError = http3Error(0x0100)
errH3GeneralProtocolError = http3Error(0x0101)
errH3InternalError = http3Error(0x0102)
errH3StreamCreationError = http3Error(0x0103)
errH3ClosedCriticalStream = http3Error(0x0104)
errH3FrameUnexpected = http3Error(0x0105)
errH3FrameError = http3Error(0x0106)
errH3ExcessiveLoad = http3Error(0x0107)
errH3IDError = http3Error(0x0108)
errH3SettingsError = http3Error(0x0109)
errH3MissingSettings = http3Error(0x010a)
errH3RequestRejected = http3Error(0x010b)
errH3RequestCancelled = http3Error(0x010c)
errH3RequestIncomplete = http3Error(0x010d)
errH3MessageError = http3Error(0x010e)
errH3ConnectError = http3Error(0x010f)
errH3VersionFallback = http3Error(0x0110)
// https://www.rfc-editor.org/rfc/rfc9204.html#section-8.3
errQPACKDecompressionFailed = http3Error(0x0200)
errQPACKEncoderStreamError = http3Error(0x0201)
errQPACKDecoderStreamError = http3Error(0x0202)
)
func (e http3Error) Error() string {
switch e {
case errH3NoError:
return "H3_NO_ERROR"
case errH3GeneralProtocolError:
return "H3_GENERAL_PROTOCOL_ERROR"
case errH3InternalError:
return "H3_INTERNAL_ERROR"
case errH3StreamCreationError:
return "H3_STREAM_CREATION_ERROR"
case errH3ClosedCriticalStream:
return "H3_CLOSED_CRITICAL_STREAM"
case errH3FrameUnexpected:
return "H3_FRAME_UNEXPECTED"
case errH3FrameError:
return "H3_FRAME_ERROR"
case errH3ExcessiveLoad:
return "H3_EXCESSIVE_LOAD"
case errH3IDError:
return "H3_ID_ERROR"
case errH3SettingsError:
return "H3_SETTINGS_ERROR"
case errH3MissingSettings:
return "H3_MISSING_SETTINGS"
case errH3RequestRejected:
return "H3_REQUEST_REJECTED"
case errH3RequestCancelled:
return "H3_REQUEST_CANCELLED"
case errH3RequestIncomplete:
return "H3_REQUEST_INCOMPLETE"
case errH3MessageError:
return "H3_MESSAGE_ERROR"
case errH3ConnectError:
return "H3_CONNECT_ERROR"
case errH3VersionFallback:
return "H3_VERSION_FALLBACK"
case errQPACKDecompressionFailed:
return "QPACK_DECOMPRESSION_FAILED"
case errQPACKEncoderStreamError:
return "QPACK_ENCODER_STREAM_ERROR"
case errQPACKDecoderStreamError:
return "QPACK_DECODER_STREAM_ERROR"
}
return fmt.Sprintf("H3_ERROR_%v", int(e))
}
// A streamError is an error which terminates a stream, but not the connection.
// https://www.rfc-editor.org/rfc/rfc9114.html#section-8-1
type streamError struct {
code http3Error
message string
}
func (e *streamError) Error() string { return e.message }
func (e *streamError) Unwrap() error { return e.code }
// A connectionError is an error which results in the entire connection closing.
// https://www.rfc-editor.org/rfc/rfc9114.html#section-8-2
type connectionError struct {
code http3Error
message string
}
func (e *connectionError) Error() string { return e.message }
func (e *connectionError) Unwrap() error { return e.code }