1package quic
2
3import (
4	"fmt"
5
6	"github.com/lucas-clemente/quic-go/internal/qerr"
7)
8
9type (
10	TransportError          = qerr.TransportError
11	ApplicationError        = qerr.ApplicationError
12	VersionNegotiationError = qerr.VersionNegotiationError
13	StatelessResetError     = qerr.StatelessResetError
14	IdleTimeoutError        = qerr.IdleTimeoutError
15	HandshakeTimeoutError   = qerr.HandshakeTimeoutError
16)
17
18type (
19	TransportErrorCode   = qerr.TransportErrorCode
20	ApplicationErrorCode = qerr.ApplicationErrorCode
21	StreamErrorCode      = qerr.StreamErrorCode
22)
23
24const (
25	NoError                   = qerr.NoError
26	InternalError             = qerr.InternalError
27	ConnectionRefused         = qerr.ConnectionRefused
28	FlowControlError          = qerr.FlowControlError
29	StreamLimitError          = qerr.StreamLimitError
30	StreamStateError          = qerr.StreamStateError
31	FinalSizeError            = qerr.FinalSizeError
32	FrameEncodingError        = qerr.FrameEncodingError
33	TransportParameterError   = qerr.TransportParameterError
34	ConnectionIDLimitError    = qerr.ConnectionIDLimitError
35	ProtocolViolation         = qerr.ProtocolViolation
36	InvalidToken              = qerr.InvalidToken
37	ApplicationErrorErrorCode = qerr.ApplicationErrorErrorCode
38	CryptoBufferExceeded      = qerr.CryptoBufferExceeded
39	KeyUpdateError            = qerr.KeyUpdateError
40	AEADLimitReached          = qerr.AEADLimitReached
41	NoViablePathError         = qerr.NoViablePathError
42)
43
44// A StreamError is used for Stream.CancelRead and Stream.CancelWrite.
45// It is also returned from Stream.Read and Stream.Write if the peer canceled reading or writing.
46type StreamError struct {
47	StreamID  StreamID
48	ErrorCode StreamErrorCode
49}
50
51func (e *StreamError) Is(target error) bool {
52	_, ok := target.(*StreamError)
53	return ok
54}
55
56func (e *StreamError) Error() string {
57	return fmt.Sprintf("stream %d canceled with error code %d", e.StreamID, e.ErrorCode)
58}
59