|
|
|
@ -169,7 +169,7 @@ func (bp *baseProtocol) handle(rw MsgReadWriter) error { |
|
|
|
|
case pongMsg: |
|
|
|
|
|
|
|
|
|
case getPeersMsg: |
|
|
|
|
peers := bp.peer.PeerList() |
|
|
|
|
peers := bp.peerList() |
|
|
|
|
// this is dangerous. the spec says that we should _delay_
|
|
|
|
|
// sending the response if no new information is available.
|
|
|
|
|
// this means that would need to send a response later when
|
|
|
|
@ -264,3 +264,25 @@ func (bp *baseProtocol) handshakeMsg() Msg { |
|
|
|
|
bp.peer.ourID.Pubkey()[1:], |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (bp *baseProtocol) peerList() []interface{} { |
|
|
|
|
peers := bp.peer.otherPeers() |
|
|
|
|
ds := make([]interface{}, 0, len(peers)) |
|
|
|
|
for _, p := range peers { |
|
|
|
|
p.infolock.Lock() |
|
|
|
|
addr := p.listenAddr |
|
|
|
|
p.infolock.Unlock() |
|
|
|
|
// filter out this peer and peers that are not listening or
|
|
|
|
|
// have not completed the handshake.
|
|
|
|
|
// TODO: track previously sent peers and exclude them as well.
|
|
|
|
|
if p == bp.peer || addr == nil { |
|
|
|
|
continue |
|
|
|
|
} |
|
|
|
|
ds = append(ds, addr) |
|
|
|
|
} |
|
|
|
|
ourAddr := bp.peer.ourListenAddr |
|
|
|
|
if ourAddr != nil && !ourAddr.IP.IsLoopback() && !ourAddr.IP.IsUnspecified() { |
|
|
|
|
ds = append(ds, ourAddr) |
|
|
|
|
} |
|
|
|
|
return ds |
|
|
|
|
} |
|
|
|
|