Browse Source

fix host update broadcast

Abhishek Kondur 2 năm trước cách đây
mục cha
commit
d38d61e219
3 tập tin đã thay đổi với 15 bổ sung13 xóa
  1. 6 3
      logic/peers.go
  2. 0 1
      mq/handlers.go
  3. 9 9
      mq/publishers.go

+ 6 - 3
logic/peers.go

@@ -29,8 +29,9 @@ func NodePeersInfo(client *models.Client) (models.NodePeersInfo, error) {
 		if peer.ID == client.Node.ID {
 			continue
 		}
-		if peer.Action == models.NODE_DELETE || peer.PendingDelete || !peer.Connected ||
-			!nodeacls.AreNodesAllowed(nodeacls.NetworkID(peer.Network), nodeacls.NodeID(client.Node.ID.String()), nodeacls.NodeID(peer.ID.String())) {
+		if (client.Node.IsRelayed && client.Node.RelayedBy != peer.ID.String()) ||
+			(peer.IsRelayed && peer.RelayedBy != client.Node.ID.String()) ||
+			ShouldRemovePeer(client.Node, peer) {
 			continue
 		}
 		peerHost, err := GetHost(peer.HostID.String())
@@ -138,7 +139,9 @@ func GetPeerUpdateForHost(host *models.Host) (models.HostPeerUpdate, error) {
 				PersistentKeepaliveInterval: &peer.PersistentKeepalive,
 				ReplaceAllowedIPs:           true,
 			}
-			if (node.IsRelayed && node.RelayedBy != peer.ID.String()) || (peer.IsRelayed && peer.RelayedBy != node.ID.String()) || ShouldRemovePeer(node, peer) {
+			if (node.IsRelayed && node.RelayedBy != peer.ID.String()) ||
+				(peer.IsRelayed && peer.RelayedBy != node.ID.String()) ||
+				ShouldRemovePeer(node, peer) {
 				// if node is relayed and peer is not the relay, set remove to true
 				peerConfig.Remove = true
 				hostPeerUpdate.Peers = append(hostPeerUpdate.Peers, peerConfig)

+ 0 - 1
mq/handlers.go

@@ -191,7 +191,6 @@ func UpdateHost(client mqtt.Client, msg mqtt.Message) {
 	}
 
 	if sendPeerUpdate {
-		logger.Log(0, "Sending Host Update.......")
 		go BroadcastHostUpdate(currentHost, removeHost)
 	}
 	// if servercfg.Is_EE && ifaceDelta {

+ 9 - 9
mq/publishers.go

@@ -14,8 +14,8 @@ import (
 	"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
 )
 
-// PublishSingleHostPeerUpdate --- determines and publishes a peer update to one host
-func PublishSingleHostPeerUpdate(host *models.Host) error {
+// PublishHostPeerUpdate --- determines and publishes a peer update to one host
+func PublishHostPeerUpdate(host *models.Host) error {
 
 	peerUpdate, err := logic.GetPeerUpdateForHost(host)
 	if err != nil {
@@ -174,8 +174,8 @@ func BroadcastHostUpdate(host *models.Host, remove bool) error {
 					IP:   host.EndpointIP,
 					Port: logic.GetPeerListenPort(host),
 				},
-				UpdateOnly: true,
-				Remove:     remove,
+				ReplaceAllowedIPs: true,
+				Remove:            remove,
 			},
 		},
 	}
@@ -183,14 +183,14 @@ func BroadcastHostUpdate(host *models.Host, remove bool) error {
 		p.Action = models.RemovePeer
 	}
 	peerHosts := logic.GetRelatedHosts(host.ID.String())
-	data, err := json.Marshal(p)
-	if err != nil {
-		return err
-	}
 	for _, peerHost := range peerHosts {
 		if !remove {
 			p.Peers[0].AllowedIPs = logic.GetAllowedIPs(models.Client{Host: peerHost}, models.Client{Host: *host})
 		}
+		data, err := json.Marshal(p)
+		if err != nil {
+			return err
+		}
 		publish(&peerHost, fmt.Sprintf("peer/host/%s/%s", peerHost.ID.String(), servercfg.GetServer()), data)
 	}
 	return nil
@@ -729,7 +729,7 @@ func sendPeers() {
 		for _, host := range hosts {
 			host := host
 			logger.Log(2, "sending scheduled peer update (5 min)")
-			if err = PublishSingleHostPeerUpdate(&host); err != nil {
+			if err = PublishHostPeerUpdate(&host); err != nil {
 				logger.Log(1, "error publishing peer updates for host: ", host.ID.String(), " Err: ", err.Error())
 			}
 		}