| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- // Copyright 2014 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 http2
- import "fmt"
- // An ErrCode is an unsigned 32-bit error code as defined in the HTTP/2 spec.
- 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 (e ErrCode) String() string {
- if s, ok := errCodeName[e]; ok {
- return s
- }
- return fmt.Sprintf("unknown error code 0x%x", uint32(e))
- }
- // ConnectionError is an error that results in the termination of the
- // entire connection.
- type ConnectionError ErrCode
- func (e ConnectionError) Error() string { return fmt.Sprintf("connection error: %s", ErrCode(e)) }
- // StreamError is an error that only affects one stream within an
- // HTTP/2 connection.
- type StreamError struct {
- StreamID uint32
- Code ErrCode
- }
- func (e StreamError) Error() string {
- return fmt.Sprintf("stream error: stream ID %d; %v", e.StreamID, e.Code)
- }
- // 6.9.1 The Flow Control Window
- // "If a sender receives a WINDOW_UPDATE that causes a flow control
- // window to exceed this maximum it MUST terminate either the stream
- // or the connection, as appropriate. For streams, [...]; for the
- // connection, a GOAWAY frame with a FLOW_CONTROL_ERROR code."
- type goAwayFlowError struct{}
- func (goAwayFlowError) Error() string { return "connection exceeded flow control window size" }
|