diff --git a/logic/peers.go b/logic/peers.go index e01cef48..e2eb5064 100644 --- a/logic/peers.go +++ b/logic/peers.go @@ -15,6 +15,7 @@ import ( ) // GetHubPeer - in HubAndSpoke networks, if not the hub, return the hub +/* func GetHubPeer(networkName string) []models.Node { var hubpeer = make([]models.Node, 0) servernodes, err := GetNetworkNodes(networkName) @@ -28,9 +29,10 @@ func GetHubPeer(networkName string) []models.Node { } return hubpeer } +*/ // GetNodePeers - fetches peers for a given node -func GetNodePeers(networkName string, excludeRelayed bool) ([]models.Node, error) { +func GetNodePeers(networkName string, excludeRelayed bool, isP2S bool) ([]models.Node, error) { var peers []models.Node var networkNodes, egressNetworkNodes, err = getNetworkEgressAndNodes(networkName) if err != nil { @@ -76,7 +78,9 @@ func GetNodePeers(networkName string, excludeRelayed bool) ([]models.Node, error } } } - peers = append(peers, peer) + if !isP2S || peer.IsHub == "yes" { + peers = append(peers, peer) + } } } @@ -87,20 +91,22 @@ func GetNodePeers(networkName string, excludeRelayed bool) ([]models.Node, error func GetPeersList(refnode *models.Node) ([]models.Node, error) { var peers []models.Node var err error + var isP2S bool var networkName = refnode.Network var excludeRelayed = refnode.IsRelay != "yes" var relayedNodeAddr string if refnode.IsRelayed == "yes" { relayedNodeAddr = refnode.Address } + network, err := GetNetwork(networkName) if err != nil { return peers, err } else if network.IsPointToSite == "yes" && refnode.IsHub != "yes" { - return GetHubPeer(networkName), nil + isP2S = true } if relayedNodeAddr == "" { - peers, err = GetNodePeers(networkName, excludeRelayed) + peers, err = GetNodePeers(networkName, excludeRelayed, isP2S) } else { var relayNode models.Node relayNode, err = GetNodeRelay(networkName, relayedNodeAddr) @@ -120,7 +126,7 @@ func GetPeersList(refnode *models.Node) ([]models.Node, error) { } else { peerNode.AllowedIPs = append(peerNode.AllowedIPs, peerNode.RelayAddrs...) } - nodepeers, err := GetNodePeers(networkName, false) + nodepeers, err := GetNodePeers(networkName, false, isP2S) if err == nil && peerNode.UDPHolePunch == "yes" { for _, nodepeer := range nodepeers { if nodepeer.Address == peerNode.Address { @@ -129,8 +135,9 @@ func GetPeersList(refnode *models.Node) ([]models.Node, error) { } } } - - peers = append(peers, peerNode) + if !isP2S || peerNode.IsHub == "yes" { + peers = append(peers, peerNode) + } } } return peers, err diff --git a/logic/util.go b/logic/util.go index 513a109b..07ee61ed 100644 --- a/logic/util.go +++ b/logic/util.go @@ -187,6 +187,7 @@ func setPeerInfo(node *models.Node) models.Node { peer.UDPHolePunch = node.UDPHolePunch peer.Address = node.Address peer.Address6 = node.Address6 + peer.IsHub = node.IsHub peer.EgressGatewayRanges = node.EgressGatewayRanges peer.IsEgressGateway = node.IsEgressGateway peer.IngressGatewayRange = node.IngressGatewayRange