mirror of https://github.com/bjdgyc/anylink.git
105 lines
3.1 KiB
Go
105 lines
3.1 KiB
Go
package protocol
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"net"
|
|
)
|
|
|
|
var (
|
|
errBufferTooSmall = &TemporaryError{Err: errors.New("buffer is too small")} //nolint:goerr113
|
|
errInvalidCipherSpec = &FatalError{Err: errors.New("cipher spec invalid")} //nolint:goerr113
|
|
)
|
|
|
|
// FatalError indicates that the DTLS connection is no longer available.
|
|
// It is mainly caused by wrong configuration of server or client.
|
|
type FatalError struct {
|
|
Err error
|
|
}
|
|
|
|
// InternalError indicates and internal error caused by the implementation, and the DTLS connection is no longer available.
|
|
// It is mainly caused by bugs or tried to use unimplemented features.
|
|
type InternalError struct {
|
|
Err error
|
|
}
|
|
|
|
// TemporaryError indicates that the DTLS connection is still available, but the request was failed temporary.
|
|
type TemporaryError struct {
|
|
Err error
|
|
}
|
|
|
|
// TimeoutError indicates that the request was timed out.
|
|
type TimeoutError struct {
|
|
Err error
|
|
}
|
|
|
|
// HandshakeError indicates that the handshake failed.
|
|
type HandshakeError struct {
|
|
Err error
|
|
}
|
|
|
|
// Timeout implements net.Error.Timeout()
|
|
func (*FatalError) Timeout() bool { return false }
|
|
|
|
// Temporary implements net.Error.Temporary()
|
|
func (*FatalError) Temporary() bool { return false }
|
|
|
|
// Unwrap implements Go1.13 error unwrapper.
|
|
func (e *FatalError) Unwrap() error { return e.Err }
|
|
|
|
func (e *FatalError) Error() string { return fmt.Sprintf("dtls fatal: %v", e.Err) }
|
|
|
|
// Timeout implements net.Error.Timeout()
|
|
func (*InternalError) Timeout() bool { return false }
|
|
|
|
// Temporary implements net.Error.Temporary()
|
|
func (*InternalError) Temporary() bool { return false }
|
|
|
|
// Unwrap implements Go1.13 error unwrapper.
|
|
func (e *InternalError) Unwrap() error { return e.Err }
|
|
|
|
func (e *InternalError) Error() string { return fmt.Sprintf("dtls internal: %v", e.Err) }
|
|
|
|
// Timeout implements net.Error.Timeout()
|
|
func (*TemporaryError) Timeout() bool { return false }
|
|
|
|
// Temporary implements net.Error.Temporary()
|
|
func (*TemporaryError) Temporary() bool { return true }
|
|
|
|
// Unwrap implements Go1.13 error unwrapper.
|
|
func (e *TemporaryError) Unwrap() error { return e.Err }
|
|
|
|
func (e *TemporaryError) Error() string { return fmt.Sprintf("dtls temporary: %v", e.Err) }
|
|
|
|
// Timeout implements net.Error.Timeout()
|
|
func (*TimeoutError) Timeout() bool { return true }
|
|
|
|
// Temporary implements net.Error.Temporary()
|
|
func (*TimeoutError) Temporary() bool { return true }
|
|
|
|
// Unwrap implements Go1.13 error unwrapper.
|
|
func (e *TimeoutError) Unwrap() error { return e.Err }
|
|
|
|
func (e *TimeoutError) Error() string { return fmt.Sprintf("dtls timeout: %v", e.Err) }
|
|
|
|
// Timeout implements net.Error.Timeout()
|
|
func (e *HandshakeError) Timeout() bool {
|
|
if netErr, ok := e.Err.(net.Error); ok {
|
|
return netErr.Timeout()
|
|
}
|
|
return false
|
|
}
|
|
|
|
// Temporary implements net.Error.Temporary()
|
|
func (e *HandshakeError) Temporary() bool {
|
|
if netErr, ok := e.Err.(net.Error); ok {
|
|
return netErr.Temporary()
|
|
}
|
|
return false
|
|
}
|
|
|
|
// Unwrap implements Go1.13 error unwrapper.
|
|
func (e *HandshakeError) Unwrap() error { return e.Err }
|
|
|
|
func (e *HandshakeError) Error() string { return fmt.Sprintf("handshake error: %v", e.Err) }
|