package http2
import (
"errors"
"fmt"
)
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 ))
}
func (e ErrCode ) stringToken () string {
if s , ok := errCodeName [e ]; ok {
return s
}
return fmt .Sprintf ("ERR_UNKNOWN_%d" , uint32 (e ))
}
type ConnectionError ErrCode
func (e ConnectionError ) Error () string { return fmt .Sprintf ("connection error: %s" , ErrCode (e )) }
type StreamError struct {
StreamID uint32
Code ErrCode
Cause error
}
var errFromPeer = errors .New ("received from peer" )
func streamError(id uint32 , code ErrCode ) StreamError {
return StreamError {StreamID : id , Code : code }
}
func (e StreamError ) Error () string {
if e .Cause != nil {
return fmt .Sprintf ("stream error: stream ID %d; %v; %v" , e .StreamID , e .Code , e .Cause )
}
return fmt .Sprintf ("stream error: stream ID %d; %v" , e .StreamID , e .Code )
}
type goAwayFlowError struct {}
func (goAwayFlowError ) Error () string { return "connection exceeded flow control window size" }
type connError struct {
Code ErrCode
Reason string
}
func (e connError ) Error () string {
return fmt .Sprintf ("http2: connection error: %v: %v" , e .Code , e .Reason )
}
type pseudoHeaderError string
func (e pseudoHeaderError ) Error () string {
return fmt .Sprintf ("invalid pseudo-header %q" , string (e ))
}
type duplicatePseudoHeaderError string
func (e duplicatePseudoHeaderError ) Error () string {
return fmt .Sprintf ("duplicate pseudo-header %q" , string (e ))
}
type headerFieldNameError string
func (e headerFieldNameError ) Error () string {
return fmt .Sprintf ("invalid header field name %q" , string (e ))
}
type headerFieldValueError string
func (e headerFieldValueError ) Error () string {
return fmt .Sprintf ("invalid header field value for %q" , string (e ))
}
var (
errMixPseudoHeaderTypes = errors .New ("mix of request and response pseudo headers" )
errPseudoAfterRegular = errors .New ("pseudo header field after regular" )
)
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .