package http2
import (
)
type ErrCode uint32
const (
ErrCodeNo ErrCode = 0x0
ErrCodeProtocol ErrCode = 0x1
ErrCodeInternal ErrCode = 0x2
ErrCodeFlowControl ErrCode = 0x3
ErrCodeSettingsTimeout ErrCode = 0x4
ErrCodeStreamClosed ErrCode = 0x5
ErrCodeFrameSize ErrCode = 0x6
ErrCodeRefusedStream ErrCode = 0x7
ErrCodeCancel ErrCode = 0x8
ErrCodeCompression ErrCode = 0x9
ErrCodeConnect ErrCode = 0xa
ErrCodeEnhanceYourCalm ErrCode = 0xb
ErrCodeInadequateSecurity ErrCode = 0xc
ErrCodeHTTP11Required ErrCode = 0xd
)
var errCodeName = map[ErrCode]string{
ErrCodeNo: "NO_ERROR",
ErrCodeProtocol: "PROTOCOL_ERROR",
ErrCodeInternal: "INTERNAL_ERROR",
ErrCodeFlowControl: "FLOW_CONTROL_ERROR",
ErrCodeSettingsTimeout: "SETTINGS_TIMEOUT",
ErrCodeStreamClosed: "STREAM_CLOSED",
ErrCodeFrameSize: "FRAME_SIZE_ERROR",
ErrCodeRefusedStream: "REFUSED_STREAM",
ErrCodeCancel: "CANCEL",
ErrCodeCompression: "COMPRESSION_ERROR",
ErrCodeConnect: "CONNECT_ERROR",
ErrCodeEnhanceYourCalm: "ENHANCE_YOUR_CALM",
ErrCodeInadequateSecurity: "INADEQUATE_SECURITY",
ErrCodeHTTP11Required: "HTTP_1_1_REQUIRED",
}
func ( ErrCode) () string {
if , := errCodeName[]; {
return
}
return fmt.Sprintf("unknown error code 0x%x", uint32())
}
func ( ErrCode) () string {
if , := errCodeName[]; {
return
}
return fmt.Sprintf("ERR_UNKNOWN_%d", uint32())
}
type ConnectionError ErrCode
func ( ConnectionError) () string { return fmt.Sprintf("connection error: %s", ErrCode()) }
type StreamError struct {
StreamID uint32
Code ErrCode
Cause error
}
var errFromPeer = errors.New("received from peer")
func ( uint32, ErrCode) StreamError {
return StreamError{StreamID: , Code: }
}
func ( StreamError) () string {
if .Cause != nil {
return fmt.Sprintf("stream error: stream ID %d; %v; %v", .StreamID, .Code, .Cause)
}
return fmt.Sprintf("stream error: stream ID %d; %v", .StreamID, .Code)
}
type goAwayFlowError struct{}
func (goAwayFlowError) () string { return "connection exceeded flow control window size" }
type connError struct {
Code ErrCode
Reason string
}
func ( connError) () string {
return fmt.Sprintf("http2: connection error: %v: %v", .Code, .Reason)
}
type pseudoHeaderError string
func ( pseudoHeaderError) () string {
return fmt.Sprintf("invalid pseudo-header %q", string())
}
type duplicatePseudoHeaderError string
func ( duplicatePseudoHeaderError) () string {
return fmt.Sprintf("duplicate pseudo-header %q", string())
}
type headerFieldNameError string
func ( headerFieldNameError) () string {
return fmt.Sprintf("invalid header field name %q", string())
}
type headerFieldValueError string
func ( headerFieldValueError) () string {
return fmt.Sprintf("invalid header field value for %q", string())
}
var (
errMixPseudoHeaderTypes = errors.New("mix of request and response pseudo headers")
errPseudoAfterRegular = errors.New("pseudo header field after regular")
)