- package p2p
-
- import (
- "fmt"
- "net"
-
- "github.com/tendermint/tendermint/types"
- )
-
- // ErrFilterTimeout indicates that a filter operation timed out.
- type ErrFilterTimeout struct{}
-
- func (e ErrFilterTimeout) Error() string {
- return "filter timed out"
- }
-
- // ErrRejected indicates that a Peer was rejected carrying additional
- // information as to the reason.
- type ErrRejected struct {
- addr NodeAddress
- conn net.Conn
- err error
- id types.NodeID
- isAuthFailure bool
- isDuplicate bool
- isFiltered bool
- isIncompatible bool
- isNodeInfoInvalid bool
- isSelf bool
- }
-
- // Addr returns the NetAddress for the rejected Peer.
- func (e ErrRejected) Addr() NodeAddress {
- return e.addr
- }
-
- func (e ErrRejected) Error() string {
- if e.isAuthFailure {
- return fmt.Sprintf("auth failure: %s", e.err)
- }
-
- if e.isDuplicate {
- if e.conn != nil {
- return fmt.Sprintf(
- "duplicate CONN<%s>",
- e.conn.RemoteAddr().String(),
- )
- }
- if e.id != "" {
- return fmt.Sprintf("duplicate ID<%v>", e.id)
- }
- }
-
- if e.isFiltered {
- if e.conn != nil {
- return fmt.Sprintf(
- "filtered CONN<%s>: %s",
- e.conn.RemoteAddr().String(),
- e.err,
- )
- }
-
- if e.id != "" {
- return fmt.Sprintf("filtered ID<%v>: %s", e.id, e.err)
- }
- }
-
- if e.isIncompatible {
- return fmt.Sprintf("incompatible: %s", e.err)
- }
-
- if e.isNodeInfoInvalid {
- return fmt.Sprintf("invalid NodeInfo: %s", e.err)
- }
-
- if e.isSelf {
- return fmt.Sprintf("self ID<%v>", e.id)
- }
-
- return fmt.Sprintf("%s", e.err)
- }
-
- // IsAuthFailure when Peer authentication was unsuccessful.
- func (e ErrRejected) IsAuthFailure() bool { return e.isAuthFailure }
-
- // IsDuplicate when Peer ID or IP are present already.
- func (e ErrRejected) IsDuplicate() bool { return e.isDuplicate }
-
- // IsFiltered when Peer ID or IP was filtered.
- func (e ErrRejected) IsFiltered() bool { return e.isFiltered }
-
- // IsIncompatible when Peer NodeInfo is not compatible with our own.
- func (e ErrRejected) IsIncompatible() bool { return e.isIncompatible }
-
- // IsNodeInfoInvalid when the sent NodeInfo is not valid.
- func (e ErrRejected) IsNodeInfoInvalid() bool { return e.isNodeInfoInvalid }
-
- // IsSelf when Peer is our own node.
- func (e ErrRejected) IsSelf() bool { return e.isSelf }
-
- // ErrSwitchDuplicatePeerID to be raised when a peer is connecting with a known
- // ID.
- type ErrSwitchDuplicatePeerID struct {
- ID types.NodeID
- }
-
- func (e ErrSwitchDuplicatePeerID) Error() string {
- return fmt.Sprintf("duplicate peer ID %v", e.ID)
- }
-
- // ErrSwitchDuplicatePeerIP to be raised whena a peer is connecting with a known
- // IP.
- type ErrSwitchDuplicatePeerIP struct {
- IP net.IP
- }
-
- func (e ErrSwitchDuplicatePeerIP) Error() string {
- return fmt.Sprintf("duplicate peer IP %v", e.IP.String())
- }
-
- // ErrSwitchConnectToSelf to be raised when trying to connect to itself.
- type ErrSwitchConnectToSelf struct {
- Addr *NodeAddress
- }
-
- func (e ErrSwitchConnectToSelf) Error() string {
- return fmt.Sprintf("connect to self: %s", e.Addr)
- }
-
- type ErrSwitchAuthenticationFailure struct {
- Dialed *NodeAddress
- Got types.NodeID
- }
-
- func (e ErrSwitchAuthenticationFailure) Error() string {
- return fmt.Sprintf(
- "failed to authenticate peer. Dialed %v, but got peer with ID %s",
- e.Dialed,
- e.Got,
- )
- }
-
- // ErrTransportClosed is raised when the Transport has been closed.
- type ErrTransportClosed struct{}
-
- func (e ErrTransportClosed) Error() string {
- return "transport has been closed"
- }
-
- //-------------------------------------------------------------------
-
- type ErrNetAddressNoID struct {
- Addr string
- }
-
- func (e ErrNetAddressNoID) Error() string {
- return fmt.Sprintf("address (%s) does not contain ID", e.Addr)
- }
-
- type ErrNetAddressInvalid struct {
- Addr string
- Err error
- }
-
- func (e ErrNetAddressInvalid) Error() string {
- return fmt.Sprintf("invalid address (%s): %v", e.Addr, e.Err)
- }
-
- // ErrCurrentlyDialingOrExistingAddress indicates that we're currently
- // dialing this address or it belongs to an existing peer.
- type ErrCurrentlyDialingOrExistingAddress struct {
- Addr string
- }
-
- func (e ErrCurrentlyDialingOrExistingAddress) Error() string {
- return fmt.Sprintf("connection with %s has been established or dialed", e.Addr)
- }
|