Quick dirty peer update

This commit is contained in:
obscuren 2014-10-17 17:11:34 +02:00
parent df2b70853f
commit d7736a7bbb
2 changed files with 24 additions and 16 deletions

30
peer.go
View File

@ -24,9 +24,9 @@ const (
// The size of the output buffer for writing messages // The size of the output buffer for writing messages
outputBufferSize = 50 outputBufferSize = 50
// Current protocol version // Current protocol version
ProtocolVersion = 34 ProtocolVersion = 35
// Current P2P version // Current P2P version
P2PVersion = 0 P2PVersion = 2
// Ethereum network version // Ethereum network version
NetVersion = 0 NetVersion = 0
// Interval for ping/pong message // Interval for ping/pong message
@ -434,7 +434,7 @@ func (p *Peer) HandleInbound() {
} }
case ethwire.MsgGetPeersTy: case ethwire.MsgGetPeersTy:
// Peer asked for list of connected peers // Peer asked for list of connected peers
p.pushPeers() //p.pushPeers()
case ethwire.MsgPeersTy: case ethwire.MsgPeersTy:
// Received a list of peers (probably because MsgGetPeersTy was send) // Received a list of peers (probably because MsgGetPeersTy was send)
data := msg.Data data := msg.Data
@ -672,7 +672,7 @@ func (p *Peer) pushPeers() {
func (self *Peer) pushStatus() { func (self *Peer) pushStatus() {
msg := ethwire.NewMessage(ethwire.MsgStatusTy, []interface{}{ msg := ethwire.NewMessage(ethwire.MsgStatusTy, []interface{}{
uint32(ProtocolVersion), //uint32(ProtocolVersion),
uint32(NetVersion), uint32(NetVersion),
self.ethereum.BlockChain().TD, self.ethereum.BlockChain().TD,
self.ethereum.BlockChain().CurrentBlock.Hash(), self.ethereum.BlockChain().CurrentBlock.Hash(),
@ -686,11 +686,11 @@ func (self *Peer) handleStatus(msg *ethwire.Msg) {
c := msg.Data c := msg.Data
var ( var (
protoVersion = c.Get(0).Uint() //protoVersion = c.Get(0).Uint()
netVersion = c.Get(1).Uint() netVersion = c.Get(0).Uint()
td = c.Get(2).BigInt() td = c.Get(1).BigInt()
bestHash = c.Get(3).Bytes() bestHash = c.Get(2).Bytes()
genesis = c.Get(4).Bytes() genesis = c.Get(3).Bytes()
) )
if bytes.Compare(self.ethereum.BlockChain().Genesis().Hash(), genesis) != 0 { if bytes.Compare(self.ethereum.BlockChain().Genesis().Hash(), genesis) != 0 {
@ -703,10 +703,12 @@ func (self *Peer) handleStatus(msg *ethwire.Msg) {
return return
} }
/*
if protoVersion != ProtocolVersion { if protoVersion != ProtocolVersion {
ethlogger.Warnf("Invalid protocol version %d. Disabling [eth]\n", protoVersion) ethlogger.Warnf("Invalid protocol version %d. Disabling [eth]\n", protoVersion)
return return
} }
*/
// Get the td and last hash // Get the td and last hash
self.td = td self.td = td
@ -719,14 +721,14 @@ func (self *Peer) handleStatus(msg *ethwire.Msg) {
// fetch hashes from highest TD node. // fetch hashes from highest TD node.
self.FetchHashes() self.FetchHashes()
ethlogger.Infof("Peer is [eth] capable. (TD = %v ~ %x) %d / %d", self.td, self.bestHash, protoVersion, netVersion) ethlogger.Infof("Peer is [eth] capable. (TD = %v ~ %x)", self.td, self.bestHash)
} }
func (p *Peer) pushHandshake() error { func (p *Peer) pushHandshake() error {
pubkey := p.ethereum.KeyManager().PublicKey() pubkey := p.ethereum.KeyManager().PublicKey()
msg := ethwire.NewMessage(ethwire.MsgHandshakeTy, []interface{}{ msg := ethwire.NewMessage(ethwire.MsgHandshakeTy, []interface{}{
P2PVersion, []byte(p.version), []interface{}{"eth"}, p.port, pubkey[1:], P2PVersion, []byte(p.version), []interface{}{"eth", ProtocolVersion}, p.port, pubkey[1:],
}) })
p.QueueMessage(msg) p.QueueMessage(msg)
@ -811,6 +813,12 @@ func (p *Peer) handleHandshake(msg *ethwire.Msg) {
cap := capsIt.Value().Str() cap := capsIt.Value().Str()
switch cap { switch cap {
case "eth": case "eth":
capsIt.Next()
version := capsIt.Value().Uint()
if version != ProtocolVersion {
ethlogger.Warnf("Invalid protocol version %d. Disabling [eth]\n", version)
continue
}
p.pushStatus() p.pushStatus()
} }

View File

@ -12,7 +12,7 @@ var Logger ethlog.LogSystem
var Log = ethlog.NewLogger("TEST") var Log = ethlog.NewLogger("TEST")
func init() { func init() {
Logger = ethlog.NewStdLogSystem(os.Stdout, log.LstdFlags, ethlog.LogLevel(0)) Logger = ethlog.NewStdLogSystem(os.Stdout, log.LstdFlags, ethlog.LogLevel(3))
ethlog.AddLogSystem(Logger) ethlog.AddLogSystem(Logger)
ethutil.ReadConfig(".ethtest", "/tmp/ethtest", "") ethutil.ReadConfig(".ethtest", "/tmp/ethtest", "")