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
 | 
						|
}
 |