peer_error.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package p2p
  2. import (
  3. "fmt"
  4. )
  5. type ErrorCode int
  6. const errorChanCapacity = 10
  7. const (
  8. PacketTooShort = iota
  9. PayloadTooShort
  10. MagicTokenMismatch
  11. EmptyPayload
  12. ReadError
  13. WriteError
  14. MiscError
  15. InvalidMsgCode
  16. InvalidMsg
  17. P2PVersionMismatch
  18. PubkeyMissing
  19. PubkeyInvalid
  20. PubkeyForbidden
  21. ProtocolBreach
  22. PortMismatch
  23. PingTimeout
  24. InvalidGenesis
  25. InvalidNetworkId
  26. InvalidProtocolVersion
  27. )
  28. var errorToString = map[ErrorCode]string{
  29. PacketTooShort: "Packet too short",
  30. PayloadTooShort: "Payload too short",
  31. MagicTokenMismatch: "Magic token mismatch",
  32. EmptyPayload: "Empty payload",
  33. ReadError: "Read error",
  34. WriteError: "Write error",
  35. MiscError: "Misc error",
  36. InvalidMsgCode: "Invalid message code",
  37. InvalidMsg: "Invalid message",
  38. P2PVersionMismatch: "P2P Version Mismatch",
  39. PubkeyMissing: "Public key missing",
  40. PubkeyInvalid: "Public key invalid",
  41. PubkeyForbidden: "Public key forbidden",
  42. ProtocolBreach: "Protocol Breach",
  43. PortMismatch: "Port mismatch",
  44. PingTimeout: "Ping timeout",
  45. InvalidGenesis: "Invalid genesis block",
  46. InvalidNetworkId: "Invalid network id",
  47. InvalidProtocolVersion: "Invalid protocol version",
  48. }
  49. type PeerError struct {
  50. Code ErrorCode
  51. message string
  52. }
  53. func NewPeerError(code ErrorCode, format string, v ...interface{}) *PeerError {
  54. desc, ok := errorToString[code]
  55. if !ok {
  56. panic("invalid error code")
  57. }
  58. format = desc + ": " + format
  59. message := fmt.Sprintf(format, v...)
  60. return &PeerError{code, message}
  61. }
  62. func (self *PeerError) Error() string {
  63. return self.message
  64. }
  65. func NewPeerErrorChannel() chan *PeerError {
  66. return make(chan *PeerError, errorChanCapacity)
  67. }