diff --git a/bzz/chunker.go b/bzz/chunker.go index 882a1beff1..7081cb3d1e 100644 --- a/bzz/chunker.go +++ b/bzz/chunker.go @@ -345,6 +345,10 @@ func (self *TreeChunker) join(depth int, treeSize int64, key Key, chunkC chan *C case <-chunk.C: // bells are ringing, data have been delivered } + // if data == nil { + // return + // } + // calculate depth and max treeSize var depth int var treeSize int64 = self.hashSize diff --git a/bzz/protocol.go b/bzz/protocol.go index eed20f370a..da79179dbd 100644 --- a/bzz/protocol.go +++ b/bzz/protocol.go @@ -224,25 +224,24 @@ func (self *bzzProtocol) handle() error { return nil } -func (self *bzzProtocol) statusMsg() p2p.Msg { - - return p2p.NewMsg(statusMsg, - uint32(Version), - uint32(NetworkId), - "honey", - []p2p.Cap{}, - strategy, - ) -} - -func (self *bzzProtocol) handleStatus() error { +func (self *bzzProtocol) handleStatus() (err error) { // send precanned status message - if err := self.rw.WriteMsg(self.statusMsg()); err != nil { + handshake := &statusMsgData{ + Version: uint64(Version), + ID: "honey", + NodeID: self.peer.OurPubkey(), + NetworkId: uint64(NetworkId), + Caps: []p2p.Cap{}, + } + + //if err := self.rw.WriteMsg(self.statusMsg()); err != nil { + if err = p2p.EncodeMsg(self.rw, statusMsg, handshake); err != nil { return err } // read and handle remote status - msg, err := self.rw.ReadMsg() + var msg p2p.Msg + msg, err = self.rw.ReadMsg() if err != nil { return err } @@ -270,13 +269,7 @@ func (self *bzzProtocol) handleStatus() error { self.peer.Infof("Peer is [bzz] capable (%d/%d)\n", status.Version, status.NetworkId) - req := &peersMsgData{ - // Peers: []*peerAddr{self.peer.Address()}, // not implemented in p2p, should be the same as node discovery cademlia - // Key: nil, - peer: peer{bzzProtocol: self, pubkey: status.NodeID}, - } - - self.hive.addPeers(req) + self.hive.addPeer(peer{bzzProtocol: self, pubkey: status.NodeID}) return nil } diff --git a/p2p/peer.go b/p2p/peer.go index 2380a3285b..273b1e9a41 100644 --- a/p2p/peer.go +++ b/p2p/peer.go @@ -55,7 +55,7 @@ type Peer struct { // Use them to display messages related to the peer. *logger.Logger - infolock sync.Mutex + infolock sync.RWMutex identity ClientIdentity caps []Cap listenAddr *peerAddr // what remote peer is listening on @@ -132,6 +132,12 @@ func newPeer(conn net.Conn, protocols []Protocol, dialAddr *peerAddr) *Peer { return p } +func (self *Peer) OurPubkey() (pubkey []byte) { + self.infolock.RLock() + defer self.infolock.RUnlock() + return self.ourID.Pubkey() +} + // Identity returns the client identity of the remote peer. The // identity can be nil if the peer has not yet completed the // handshake.