// managedConnectNewPeer connects to peers >= v1.0.0. The peer is added as a // node and a peer. The peer is only added if a nil error is returned. func (g *Gateway) managedConnectNewPeer(conn net.Conn, remoteVersion string, remoteAddr modules.NetAddress) error { g.mu.RLock() port := g.port g.mu.RUnlock() // Send our dialable address to the peer so they can dial us back should we // disconnect. err := connectPortHandshake(conn, port) if err != nil { return err } // Attempt to add the peer to the node list. If the add is successful and // the address is a local address, mark the peer as a local peer. local := false err = g.managedAddUntrustedNode(remoteAddr) if err != nil && remoteAddr.IsLocal() { local = true } g.mu.Lock() defer g.mu.Unlock() g.addPeer(&peer{ Peer: modules.Peer{ Inbound: false, Local: local, NetAddress: remoteAddr, Version: remoteVersion, }, sess: muxado.Client(conn), }) return nil }
// managedConnectOldPeer connects to peers < v1.0.0. The peer is added as a // node and a peer. The peer is only added if a nil error is returned. func (g *Gateway) managedConnectOldPeer(conn net.Conn, remoteVersion string, remoteAddr modules.NetAddress) error { // Attempt to add the peer to the node list. If the add is successful and // the address is a local address, mark the peer as a local peer. local := false err := g.managedAddUntrustedNode(remoteAddr) if err != nil && remoteAddr.IsLocal() { local = true } g.mu.Lock() defer g.mu.Unlock() g.addPeer(&peer{ Peer: modules.Peer{ Inbound: false, Local: local, NetAddress: remoteAddr, Version: remoteVersion, }, sess: muxado.Client(conn), }) return nil }