| 
									
										
										
										
											2014-12-05 21:14:55 +00:00
										 |  |  | package eth | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"fmt" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	ErrMsgTooLarge = iota | 
					
						
							|  |  |  | 	ErrDecode | 
					
						
							|  |  |  | 	ErrInvalidMsgCode | 
					
						
							|  |  |  | 	ErrProtocolVersionMismatch | 
					
						
							|  |  |  | 	ErrNetworkIdMismatch | 
					
						
							|  |  |  | 	ErrGenesisBlockMismatch | 
					
						
							|  |  |  | 	ErrNoStatusMsg | 
					
						
							|  |  |  | 	ErrExtraStatusMsg | 
					
						
							|  |  |  | 	ErrInvalidBlock | 
					
						
							| 
									
										
										
										
											2014-12-14 18:07:05 +00:00
										 |  |  | 	ErrInvalidPoW | 
					
						
							|  |  |  | 	ErrUnrequestedBlock | 
					
						
							| 
									
										
										
										
											2015-01-09 06:03:32 +00:00
										 |  |  | 	ErrInsufficientChainInfo | 
					
						
							| 
									
										
										
										
											2014-12-05 21:14:55 +00:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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", | 
					
						
							| 
									
										
										
										
											2014-12-14 18:07:05 +00:00
										 |  |  | 	ErrInvalidPoW:              "Invalid PoW", | 
					
						
							|  |  |  | 	ErrUnrequestedBlock:        "Unrequested block", | 
					
						
							| 
									
										
										
										
											2015-01-09 06:03:32 +00:00
										 |  |  | 	ErrInsufficientChainInfo:   "Insufficient chain info", | 
					
						
							| 
									
										
										
										
											2014-12-05 21:14:55 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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) { | 
					
						
							| 
									
										
										
										
											2015-01-05 17:10:42 +01:00
										 |  |  | 	if len(message) == 0 { | 
					
						
							|  |  |  | 		var ok bool | 
					
						
							|  |  |  | 		self.message, ok = errorToString[self.Code] | 
					
						
							| 
									
										
										
										
											2014-12-05 21:14:55 +00:00
										 |  |  | 		if !ok { | 
					
						
							|  |  |  | 			panic("invalid error code") | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if self.format != "" { | 
					
						
							| 
									
										
										
										
											2015-01-05 17:10:42 +01:00
										 |  |  | 			self.message += ": " + fmt.Sprintf(self.format, self.params...) | 
					
						
							| 
									
										
										
										
											2014-12-05 21:14:55 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-01-05 17:10:42 +01:00
										 |  |  | 	return self.message | 
					
						
							| 
									
										
										
										
											2014-12-05 21:14:55 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (self *protocolError) Fatal() bool { | 
					
						
							|  |  |  | 	return self.fatal | 
					
						
							|  |  |  | } |