73 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package eth
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	ErrMsgTooLarge = iota
 | |
| 	ErrDecode
 | |
| 	ErrInvalidMsgCode
 | |
| 	ErrProtocolVersionMismatch
 | |
| 	ErrNetworkIdMismatch
 | |
| 	ErrGenesisBlockMismatch
 | |
| 	ErrNoStatusMsg
 | |
| 	ErrExtraStatusMsg
 | |
| 	ErrInvalidBlock
 | |
| 	ErrInvalidPoW
 | |
| 	ErrUnrequestedBlock
 | |
| 	ErrInsufficientChainInfo
 | |
| )
 | |
| 
 | |
| var errorToString = map[int]string{
 | |
| 	ErrMsgTooLarge:             "Message too long",
 | |
| 	ErrDecode:                  "Invalid message",
 | |
| 	ErrInvalidMsgCode:          "Invalid message code",
 | |
| 	ErrProtocolVersionMismatch: "Protocol version mismatch",
 | |
| 	ErrNetworkIdMismatch:       "NetworkId mismatch",
 | |
| 	ErrGenesisBlockMismatch:    "Genesis block mismatch",
 | |
| 	ErrNoStatusMsg:             "No status message",
 | |
| 	ErrExtraStatusMsg:          "Extra status message",
 | |
| 	ErrInvalidBlock:            "Invalid block",
 | |
| 	ErrInvalidPoW:              "Invalid PoW",
 | |
| 	ErrUnrequestedBlock:        "Unrequested block",
 | |
| 	ErrInsufficientChainInfo:   "Insufficient chain info",
 | |
| }
 | |
| 
 | |
| type protocolError struct {
 | |
| 	Code    int
 | |
| 	fatal   bool
 | |
| 	message string
 | |
| 	format  string
 | |
| 	params  []interface{}
 | |
| 	// size    int
 | |
| }
 | |
| 
 | |
| func newProtocolError(code int, format string, params ...interface{}) *protocolError {
 | |
| 	return &protocolError{Code: code, format: format, params: params}
 | |
| }
 | |
| 
 | |
| func ProtocolError(code int, format string, params ...interface{}) (err *protocolError) {
 | |
| 	err = newProtocolError(code, format, params...)
 | |
| 	// report(err)
 | |
| 	return
 | |
| }
 | |
| 
 | |
| func (self protocolError) Error() (message string) {
 | |
| 	if len(message) == 0 {
 | |
| 		var ok bool
 | |
| 		self.message, ok = errorToString[self.Code]
 | |
| 		if !ok {
 | |
| 			panic("invalid error code")
 | |
| 		}
 | |
| 		if self.format != "" {
 | |
| 			self.message += ": " + fmt.Sprintf(self.format, self.params...)
 | |
| 		}
 | |
| 	}
 | |
| 	return self.message
 | |
| }
 | |
| 
 | |
| func (self *protocolError) Fatal() bool {
 | |
| 	return self.fatal
 | |
| }
 |