Disconnection reasons

This commit is contained in:
obscuren 2014-02-02 20:00:09 +01:00
parent f4a96ca588
commit aa9341570b
1 changed files with 38 additions and 13 deletions

51
peer.go
View File

@ -17,27 +17,53 @@ const (
outputBufferSize = 50
)
// Peer capabillities
type DiscReason byte
const (
DiscReRequested = 0x00
DiscReTcpSysErr = 0x01
DiscBadProto = 0x02
DiscBadPeer = 0x03
DiscTooManyPeers = 0x04
)
var discReasonToString = []string{
"Disconnect requested",
"Disconnect TCP sys error",
"Disconnect Bad protocol",
"Disconnect Useless peer",
"Disconnect Too many peers",
}
func (d DiscReason) String() string {
if len(discReasonToString) > int(d) {
return "Unknown"
}
return discReasonToString[d]
}
// Peer capabilities
type Caps byte
const (
CapDiscoveryTy = 0x01
CapTxTy = 0x02
CapChainTy = 0x04
CapPeerDiscTy = 0x01
CapTxTy = 0x02
CapChainTy = 0x04
CapDefault = CapChainTy | CapTxTy | CapDiscoveryTy
CapDefault = CapChainTy | CapTxTy | CapPeerDiscTy
)
var capsToString = map[Caps]string{
CapDiscoveryTy: "Peer discovery",
CapTxTy: "Transaction relaying",
CapChainTy: "Block chain relaying",
CapPeerDiscTy: "Peer discovery",
CapTxTy: "Transaction relaying",
CapChainTy: "Block chain relaying",
}
func (c Caps) String() string {
var caps []string
if c&CapDiscoveryTy > 0 {
caps = append(caps, capsToString[CapDiscoveryTy])
if c&CapPeerDiscTy > 0 {
caps = append(caps, capsToString[CapPeerDiscTy])
}
if c&CapChainTy > 0 {
caps = append(caps, capsToString[CapChainTy])
@ -175,7 +201,7 @@ out:
// Service timer takes care of peer broadcasting, transaction
// posting or block posting
case <-serviceTimer.C:
if p.caps&CapDiscoveryTy > 0 {
if p.caps&CapPeerDiscTy > 0 {
msg := p.peersMessage()
p.ethereum.BroadcastMsg(msg)
}
@ -220,6 +246,7 @@ out:
p.QueueMessage(ethwire.NewMessage(ethwire.MsgGetPeersTy, ""))
case ethwire.MsgDiscTy:
p.Stop()
log.Println("Disconnect peer:", DiscReason(msg.Data.Get(0).AsUint()))
case ethwire.MsgPingTy:
// Respond back with pong
p.QueueMessage(ethwire.NewMessage(ethwire.MsgPongTy, ""))
@ -381,8 +408,6 @@ func (p *Peer) Stop() {
p.writeMessage(ethwire.NewMessage(ethwire.MsgDiscTy, ""))
p.conn.Close()
}
log.Println("Peer shutdown")
}
func (p *Peer) pushHandshake() error {