zcash: support alternative ports and clarify APIs
This commit is contained in:
parent
7716305c89
commit
7d12f5e57d
|
@ -111,6 +111,11 @@ func newSeederPeerConfig(magic network.Network, template *peer.Config) (*peer.Co
|
|||
return &newPeerConfig, nil
|
||||
}
|
||||
|
||||
// GetNetworkDefaultPort returns the default port of the network this seeder is configured for.
|
||||
func (s *Seeder) GetNetworkDefaultPort() string {
|
||||
return s.config.ChainParams.DefaultPort
|
||||
}
|
||||
|
||||
func (s *Seeder) onVerAck(p *peer.Peer, msg *wire.MsgVerAck) {
|
||||
// Check if we're expecting to hear from this peer
|
||||
_, ok := s.pendingPeers.Load(p.Addr())
|
||||
|
@ -136,10 +141,15 @@ func (s *Seeder) onVerAck(p *peer.Peer, msg *wire.MsgVerAck) {
|
|||
}
|
||||
|
||||
// ConnectToPeer attempts to connect to a peer on the default port at the
|
||||
// specified address. It returns either a live peer connection or an error.
|
||||
func (s *Seeder) ConnectToPeer(addr string) error {
|
||||
connectionString := net.JoinHostPort(addr, s.config.ChainParams.DefaultPort)
|
||||
// specified address. It returns an error if it can't complete handshake with
|
||||
// the peer. Otherwise it returns nil and adds the peer to the list of live
|
||||
// connections and known-good addresses.
|
||||
func (s *Seeder) ConnectOnDefaultPort(addr string) error {
|
||||
return s.Connect(addr, s.config.ChainParams.DefaultPort)
|
||||
}
|
||||
|
||||
func (s *Seeder) Connect(addr, port string) error {
|
||||
connectionString := net.JoinHostPort(addr, port)
|
||||
p, err := peer.NewOutboundPeer(s.config, connectionString)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "constructing outbound peer")
|
||||
|
@ -178,9 +188,10 @@ func (s *Seeder) ConnectToPeer(addr string) error {
|
|||
panic("This should be unreachable")
|
||||
}
|
||||
|
||||
// GetPeer returns a live peer identified by "host:port" string, or an error if
|
||||
// we aren't connected to that peer.
|
||||
func (s *Seeder) GetPeer(addr string) (*peer.Peer, error) {
|
||||
lookupKey := net.JoinHostPort(addr, s.config.ChainParams.DefaultPort)
|
||||
p, ok := s.livePeers.Load(lookupKey)
|
||||
p, ok := s.livePeers.Load(addr)
|
||||
|
||||
if ok {
|
||||
return p.(*peer.Peer), nil
|
||||
|
@ -189,9 +200,10 @@ func (s *Seeder) GetPeer(addr string) (*peer.Peer, error) {
|
|||
return nil, ErrNoSuchPeer
|
||||
}
|
||||
|
||||
// DisconnectPeer disconnects from a live peer identified by "host:port"
|
||||
// string. It returns an error if we aren't connected to that peer.
|
||||
func (s *Seeder) DisconnectPeer(addr string) error {
|
||||
lookupKey := net.JoinHostPort(addr, s.config.ChainParams.DefaultPort)
|
||||
p, ok := s.livePeers.Load(lookupKey)
|
||||
p, ok := s.livePeers.Load(addr)
|
||||
|
||||
if !ok {
|
||||
return ErrNoSuchPeer
|
||||
|
@ -202,11 +214,12 @@ func (s *Seeder) DisconnectPeer(addr string) error {
|
|||
v := p.(*peer.Peer)
|
||||
v.Disconnect()
|
||||
v.WaitForDisconnect()
|
||||
s.livePeers.Delete(lookupKey)
|
||||
s.livePeers.Delete(addr)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// DisconnectAllPeers terminates the connections to all live and pending peers.
|
||||
func (s *Seeder) DisconnectAllPeers() {
|
||||
s.pendingPeers.Range(func(key, value interface{}) bool {
|
||||
p, ok := value.(*peer.Peer)
|
||||
|
|
|
@ -74,27 +74,27 @@ func TestOutboundPeerSync(t *testing.T) {
|
|||
return
|
||||
}
|
||||
|
||||
err = regSeeder.ConnectToPeer("127.0.0.1")
|
||||
err = regSeeder.ConnectOnDefaultPort("127.0.0.1")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
// Can we address that peer if we want to?
|
||||
p, err := regSeeder.GetPeer("127.0.0.1")
|
||||
p, err := regSeeder.GetPeer("127.0.0.1:18344")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
if p.Connected() {
|
||||
regSeeder.DisconnectPeer("127.0.0.1")
|
||||
regSeeder.DisconnectPeer("127.0.0.1:18344")
|
||||
} else {
|
||||
t.Error("Peer never connected")
|
||||
}
|
||||
|
||||
// Can we STILL address a flushed peer?
|
||||
p, err = regSeeder.GetPeer("127.0.0.1")
|
||||
p, err = regSeeder.GetPeer("127.0.0.1:18344")
|
||||
if err != ErrNoSuchPeer {
|
||||
t.Error("Peer should have been cleared on disconnect")
|
||||
}
|
||||
|
@ -110,7 +110,7 @@ func TestOutboundPeerAsync(t *testing.T) {
|
|||
for i := 0; i < 4; i++ {
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
err := regSeeder.ConnectToPeer("127.0.0.1")
|
||||
err := regSeeder.ConnectOnDefaultPort("127.0.0.1")
|
||||
if err != nil && err != ErrRepeatConnection {
|
||||
t.Error(err)
|
||||
}
|
||||
|
@ -121,7 +121,7 @@ func TestOutboundPeerAsync(t *testing.T) {
|
|||
wg.Wait()
|
||||
|
||||
// Can we address that peer if we want to?
|
||||
p, err := regSeeder.GetPeer("127.0.0.1")
|
||||
p, err := regSeeder.GetPeer("127.0.0.1:18344")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
|
@ -129,7 +129,7 @@ func TestOutboundPeerAsync(t *testing.T) {
|
|||
|
||||
if p.Connected() {
|
||||
// Shouldn't try to connect to a live peer again
|
||||
err := regSeeder.ConnectToPeer("127.0.0.1")
|
||||
err := regSeeder.ConnectOnDefaultPort("127.0.0.1")
|
||||
if err != ErrRepeatConnection {
|
||||
t.Error("should have caught repeat connection attempt")
|
||||
}
|
||||
|
@ -147,7 +147,7 @@ func TestRequestAddresses(t *testing.T) {
|
|||
return
|
||||
}
|
||||
|
||||
err = regSeeder.ConnectToPeer("127.0.0.1")
|
||||
err = regSeeder.ConnectOnDefaultPort("127.0.0.1")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
|
|
Loading…
Reference in New Issue