Kaynağa Gözat

send relay del update for iot client

Abhishek Kondur 2 yıl önce
ebeveyn
işleme
9fa60f3853
2 değiştirilmiş dosya ile 33 ekleme ve 19 silme
  1. 9 0
      ee/ee_controllers/relay.go
  2. 24 19
      logic/peers.go

+ 9 - 0
ee/ee_controllers/relay.go

@@ -1,6 +1,7 @@
 package ee_controllers
 
 import (
+	"context"
 	"encoding/json"
 	"fmt"
 	"net/http"
@@ -87,6 +88,14 @@ func deleteRelay(w http.ResponseWriter, r *http.Request) {
 				logger.Log(1, "relayed node update ", relayedNode.ID.String(), "on network", relayedNode.Network, ": ", err.Error())
 
 			}
+			h, err := logic.GetHost(relayedNode.HostID.String())
+			if err == nil {
+				if h.OS == models.OS_Types.IoT {
+					if err = mq.PublishSingleHostPeerUpdate(context.Background(), h, &node, nil); err != nil {
+						logger.Log(1, "failed to publish peer update to host", h.ID.String(), ": ", err.Error())
+					}
+				}
+			}
 		}
 		mq.PublishPeerUpdate()
 	}()

+ 24 - 19
logic/peers.go

@@ -149,30 +149,35 @@ func GetPeerUpdateForHost(ctx context.Context, network string, host *models.Host
 					PublicKey:                   relayHost.PublicKey,
 					PersistentKeepaliveInterval: &relayNode.PersistentKeepalive,
 					ReplaceAllowedIPs:           true,
-					AllowedIPs:                  GetAllowedIPs(&node, &relayNode, nil),
 				}
-				uselocal := false
-				if host.EndpointIP.String() == relayHost.EndpointIP.String() {
-					// peer is on same network
-					// set to localaddress
-					uselocal = true
-					if node.LocalAddress.IP == nil {
-						// use public endpint
-						uselocal = false
+				if deletedNode != nil && deletedNode.ID.String() == relayNode.ID.String() {
+					relayPeer.Remove = true
+				} else {
+					relayPeer.AllowedIPs = GetAllowedIPs(&node, &relayNode, nil)
+					uselocal := false
+					if host.EndpointIP.String() == relayHost.EndpointIP.String() {
+						// peer is on same network
+						// set to localaddress
+						uselocal = true
+						if node.LocalAddress.IP == nil {
+							// use public endpint
+							uselocal = false
+						}
+						if node.LocalAddress.String() == relayNode.LocalAddress.String() {
+							uselocal = false
+						}
 					}
-					if node.LocalAddress.String() == relayNode.LocalAddress.String() {
-						uselocal = false
+					relayPeer.Endpoint = &net.UDPAddr{
+						IP:   relayHost.EndpointIP,
+						Port: getPeerWgListenPort(relayHost),
 					}
-				}
-				relayPeer.Endpoint = &net.UDPAddr{
-					IP:   relayHost.EndpointIP,
-					Port: getPeerWgListenPort(relayHost),
-				}
 
-				if uselocal {
-					relayPeer.Endpoint.IP = relayNode.LocalAddress.IP
-					relayPeer.Endpoint.Port = relayHost.ListenPort
+					if uselocal {
+						relayPeer.Endpoint.IP = relayNode.LocalAddress.IP
+						relayPeer.Endpoint.Port = relayHost.ListenPort
+					}
 				}
+
 				hostPeerUpdate.Peers = append(hostPeerUpdate.Peers, relayPeer)
 			}
 			continue