diff options
author | obscuren <geffobscura@gmail.com> | 2014-12-05 23:27:48 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-12-05 23:27:48 +0800 |
commit | f06543fd066e11ac5c36f3eba4f1f82a7a1aefb8 (patch) | |
tree | ff9a9a91fd5322f09c600432a47000afb27738e6 /p2p/peer_error_handler.go | |
parent | 9925916851c00323336e213fc18c83da5fceee94 (diff) | |
parent | 195b2d2ebdfe1e794c096c9b6c9fe91e9df7af1d (diff) | |
download | dexon-f06543fd066e11ac5c36f3eba4f1f82a7a1aefb8.tar dexon-f06543fd066e11ac5c36f3eba4f1f82a7a1aefb8.tar.gz dexon-f06543fd066e11ac5c36f3eba4f1f82a7a1aefb8.tar.bz2 dexon-f06543fd066e11ac5c36f3eba4f1f82a7a1aefb8.tar.lz dexon-f06543fd066e11ac5c36f3eba4f1f82a7a1aefb8.tar.xz dexon-f06543fd066e11ac5c36f3eba4f1f82a7a1aefb8.tar.zst dexon-f06543fd066e11ac5c36f3eba4f1f82a7a1aefb8.zip |
Merge branch 'poc8' into develop
Diffstat (limited to 'p2p/peer_error_handler.go')
-rw-r--r-- | p2p/peer_error_handler.go | 101 |
1 files changed, 0 insertions, 101 deletions
diff --git a/p2p/peer_error_handler.go b/p2p/peer_error_handler.go deleted file mode 100644 index ca6cae4db..000000000 --- a/p2p/peer_error_handler.go +++ /dev/null @@ -1,101 +0,0 @@ -package p2p - -import ( - "net" -) - -const ( - severityThreshold = 10 -) - -type DisconnectRequest struct { - addr net.Addr - reason DiscReason -} - -type PeerErrorHandler struct { - quit chan chan bool - address net.Addr - peerDisconnect chan DisconnectRequest - severity int - peerErrorChan chan *PeerError - blacklist Blacklist -} - -func NewPeerErrorHandler(address net.Addr, peerDisconnect chan DisconnectRequest, peerErrorChan chan *PeerError, blacklist Blacklist) *PeerErrorHandler { - return &PeerErrorHandler{ - quit: make(chan chan bool), - address: address, - peerDisconnect: peerDisconnect, - peerErrorChan: peerErrorChan, - blacklist: blacklist, - } -} - -func (self *PeerErrorHandler) Start() { - go self.listen() -} - -func (self *PeerErrorHandler) Stop() { - q := make(chan bool) - self.quit <- q - <-q -} - -func (self *PeerErrorHandler) listen() { - for { - select { - case peerError, ok := <-self.peerErrorChan: - if ok { - logger.Debugf("error %v\n", peerError) - go self.handle(peerError) - } else { - return - } - case q := <-self.quit: - q <- true - return - } - } -} - -func (self *PeerErrorHandler) handle(peerError *PeerError) { - reason := DiscReason(' ') - switch peerError.Code { - case P2PVersionMismatch: - reason = DiscIncompatibleVersion - case PubkeyMissing, PubkeyInvalid: - reason = DiscInvalidIdentity - case PubkeyForbidden: - reason = DiscUselessPeer - case InvalidMsgCode, PacketTooShort, PayloadTooShort, MagicTokenMismatch, EmptyPayload, ProtocolBreach: - reason = DiscProtocolError - case PingTimeout: - reason = DiscReadTimeout - case WriteError, MiscError: - reason = DiscNetworkError - case InvalidGenesis, InvalidNetworkId, InvalidProtocolVersion: - reason = DiscSubprotocolError - default: - self.severity += self.getSeverity(peerError) - } - - if self.severity >= severityThreshold { - reason = DiscSubprotocolError - } - if reason != DiscReason(' ') { - self.peerDisconnect <- DisconnectRequest{ - addr: self.address, - reason: reason, - } - } -} - -func (self *PeerErrorHandler) getSeverity(peerError *PeerError) int { - switch peerError.Code { - case ReadError: - return 4 //tolerate 3 :) - default: - return 1 - } -} |