diff options
-rw-r--r-- | ethereum.go | 12 | ||||
-rw-r--r-- | peer.go | 28 |
2 files changed, 34 insertions, 6 deletions
diff --git a/ethereum.go b/ethereum.go index 74e47d7bf..ac11903c0 100644 --- a/ethereum.go +++ b/ethereum.go @@ -152,12 +152,14 @@ func (s *Ethereum) Start() { if ethutil.Config.Debug { log.Println("Connection listening disabled. Acting as client") - err = s.ConnectToPeer("localhost:12345") - if err != nil { - log.Println("Error starting ethereum", err) + /* + err = s.ConnectToPeer("localhost:12345") + if err != nil { + log.Println("Error starting ethereum", err) - s.Stop() - } + s.Stop() + } + */ } else { log.Fatal(err) } @@ -68,9 +68,12 @@ func NewOutboundPeer(addr string, ethereum *Ethereum) *Peer { // Set up the connection in another goroutine so we don't block the main thread go func() { - conn, err := net.Dial("tcp", addr) + conn, err := net.DialTimeout("tcp", addr, 30*time.Second) + if err != nil { + log.Println("Connection to peer failed", err) p.Stop() + return } p.conn = conn @@ -211,7 +214,30 @@ out: p.requestedPeerList = false } case ethwire.MsgGetChainTy: + blocksFound := 0 + l := msg.Data.Length() + // Check each SHA block hash from the message and determine whether + // the SHA is in the database + for i := 0; i < l; i++ { + if p.ethereum.BlockManager.BlockChain().HasBlock(msg.Data.Get(i).AsString()) { + blocksFound++ + // TODO send reply + } + } + + // If no blocks are found we send back a reply with msg not in chain + // and the last hash from get chain + if blocksFound == 0 { + lastHash := msg.Data.Get(l - 1) + p.QueueMessage(ethwire.NewMessage(ethwire.MsgNotInChainTy, lastHash)) + } + case ethwire.MsgNotInChainTy: + log.Println("Not in chain, not yet implemented") + // TODO + // Unofficial but fun nonetheless + case ethwire.MsgTalkTy: + log.Printf("%v says: %s\n", p.conn.RemoteAddr(), msg.Data.Get(0).AsString()) } } |