mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-06 01:07:41 +08:00
relay fix
This commit is contained in:
@@ -214,7 +214,7 @@ func createHostRelay(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
relay.HostID = params["hostid"]
|
relay.HostID = params["hostid"]
|
||||||
relayHost, relayedHosts, err := logic.CreateHostRelay(relay)
|
relayHost, _, err := logic.CreateHostRelay(relay)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Log(0, r.Header.Get("user"),
|
logger.Log(0, r.Header.Get("user"),
|
||||||
fmt.Sprintf("failed to create relay on host [%s]: %v", relay.HostID, err))
|
fmt.Sprintf("failed to create relay on host [%s]: %v", relay.HostID, err))
|
||||||
@@ -223,18 +223,24 @@ func createHostRelay(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
logger.Log(1, r.Header.Get("user"), "created relay on host", relay.HostID)
|
logger.Log(1, r.Header.Get("user"), "created relay on host", relay.HostID)
|
||||||
for _, relayedHost := range relayedHosts {
|
// for _, relayedHost := range relayedHosts {
|
||||||
|
|
||||||
err = mq.PublishSingleHostUpdate(&relayedHost)
|
// err = mq.PublishSingleHostUpdate(&relayedHost)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
logger.Log(1, "error sending update to relayed host ", relayedHost.ID.String(), ": ", err.Error())
|
// logger.Log(1, "error sending update to relayed host ", relayedHost.ID.String(), ": ", err.Error())
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// // publish host update for relayhost
|
||||||
|
// err = mq.PublishSingleHostUpdate(relayHost)
|
||||||
|
// if err != nil {
|
||||||
|
// logger.Log(1, "error sending update to relay host ", relayHost.ID.String(), ": ", err.Error())
|
||||||
|
// }
|
||||||
|
go func() {
|
||||||
|
if err := mq.PublishPeerUpdate("", false); err != nil {
|
||||||
|
logger.Log(0, "fail to publish peer update: ", err.Error())
|
||||||
}
|
}
|
||||||
}
|
}()
|
||||||
// publish host update for relayhost
|
|
||||||
err = mq.PublishSingleHostUpdate(relayHost)
|
|
||||||
if err != nil {
|
|
||||||
logger.Log(1, "error sending update to relay host ", relayHost.ID.String(), ": ", err.Error())
|
|
||||||
}
|
|
||||||
apiHostData := relayHost.ConvertNMHostToAPI()
|
apiHostData := relayHost.ConvertNMHostToAPI()
|
||||||
w.WriteHeader(http.StatusOK)
|
w.WriteHeader(http.StatusOK)
|
||||||
json.NewEncoder(w).Encode(apiHostData)
|
json.NewEncoder(w).Encode(apiHostData)
|
||||||
@@ -255,23 +261,28 @@ func deleteHostRelay(w http.ResponseWriter, r *http.Request) {
|
|||||||
w.Header().Set("Content-Type", "application/json")
|
w.Header().Set("Content-Type", "application/json")
|
||||||
var params = mux.Vars(r)
|
var params = mux.Vars(r)
|
||||||
hostid := params["hostid"]
|
hostid := params["hostid"]
|
||||||
relayHost, relayedHosts, err := logic.DeleteHostRelay(hostid)
|
relayHost, _, err := logic.DeleteHostRelay(hostid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Log(0, r.Header.Get("user"), "error decoding request body: ", err.Error())
|
logger.Log(0, r.Header.Get("user"), "error decoding request body: ", err.Error())
|
||||||
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
logger.Log(1, r.Header.Get("user"), "deleted relay host", hostid)
|
logger.Log(1, r.Header.Get("user"), "deleted relay host", hostid)
|
||||||
for _, relayedHost := range relayedHosts {
|
// for _, relayedHost := range relayedHosts {
|
||||||
err = mq.PublishSingleHostUpdate(&relayedHost)
|
// err = mq.PublishSingleHostUpdate(&relayedHost)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
logger.Log(1, "error sending update to relayed host ", relayedHost.ID.String(), ": ", err.Error())
|
// logger.Log(1, "error sending update to relayed host ", relayedHost.ID.String(), ": ", err.Error())
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// err = mq.PublishSingleHostUpdate(relayHost)
|
||||||
|
// if err != nil {
|
||||||
|
// logger.Log(1, "error sending update to relayed host ", relayHost.ID.String(), ": ", err.Error())
|
||||||
|
// }
|
||||||
|
go func() {
|
||||||
|
if err := mq.PublishPeerUpdate("", false); err != nil {
|
||||||
|
logger.Log(0, "fail to publish peer update: ", err.Error())
|
||||||
}
|
}
|
||||||
}
|
}()
|
||||||
err = mq.PublishSingleHostUpdate(relayHost)
|
|
||||||
if err != nil {
|
|
||||||
logger.Log(1, "error sending update to relayed host ", relayHost.ID.String(), ": ", err.Error())
|
|
||||||
}
|
|
||||||
apiHostData := relayHost.ConvertNMHostToAPI()
|
apiHostData := relayHost.ConvertNMHostToAPI()
|
||||||
w.WriteHeader(http.StatusOK)
|
w.WriteHeader(http.StatusOK)
|
||||||
json.NewEncoder(w).Encode(apiHostData)
|
json.NewEncoder(w).Encode(apiHostData)
|
||||||
|
@@ -201,7 +201,16 @@ func GetProxyUpdateForHost(host *models.Host) (proxy_models.ProxyManagerPayload,
|
|||||||
if host.IsRelayed {
|
if host.IsRelayed {
|
||||||
relayHost, err := GetHost(host.RelayedBy)
|
relayHost, err := GetHost(host.RelayedBy)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
relayEndpoint, err := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", relayHost.EndpointIP, host.LocalListenPort))
|
listenPort := relayHost.LocalListenPort
|
||||||
|
if relayHost.ProxyEnabled {
|
||||||
|
listenPort = relayHost.ProxyListenPort
|
||||||
|
if listenPort == 0 {
|
||||||
|
listenPort = proxy_models.NmProxyPort
|
||||||
|
}
|
||||||
|
} else if listenPort == 0 {
|
||||||
|
listenPort = relayHost.ListenPort
|
||||||
|
}
|
||||||
|
relayEndpoint, err := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", relayHost.EndpointIP, listenPort))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Log(1, "failed to resolve relay node endpoint: ", err.Error())
|
logger.Log(1, "failed to resolve relay node endpoint: ", err.Error())
|
||||||
}
|
}
|
||||||
@@ -218,9 +227,18 @@ func GetProxyUpdateForHost(host *models.Host) (proxy_models.ProxyManagerPayload,
|
|||||||
for _, relayedHost := range relayedHosts {
|
for _, relayedHost := range relayedHosts {
|
||||||
payload, err := GetPeerUpdateForHost(&relayedHost)
|
payload, err := GetPeerUpdateForHost(&relayedHost)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
relayedEndpoint, udpErr := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", relayedHost.EndpointIP, host.LocalListenPort))
|
listenPort := relayedHost.LocalListenPort
|
||||||
|
if relayedHost.ProxyEnabled {
|
||||||
|
listenPort = relayedHost.ProxyListenPort
|
||||||
|
if listenPort == 0 {
|
||||||
|
listenPort = proxy_models.NmProxyPort
|
||||||
|
}
|
||||||
|
} else if listenPort == 0 {
|
||||||
|
listenPort = relayedHost.ListenPort
|
||||||
|
}
|
||||||
|
relayedEndpoint, udpErr := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", relayedHost.EndpointIP, listenPort))
|
||||||
if udpErr == nil {
|
if udpErr == nil {
|
||||||
relayPeersMap[host.PublicKey.String()] = proxy_models.RelayedConf{
|
relayPeersMap[relayedHost.PublicKey.String()] = proxy_models.RelayedConf{
|
||||||
RelayedPeerEndpoint: relayedEndpoint,
|
RelayedPeerEndpoint: relayedEndpoint,
|
||||||
RelayedPeerPubKey: relayedHost.PublicKey.String(),
|
RelayedPeerPubKey: relayedHost.PublicKey.String(),
|
||||||
Peers: payload.Peers,
|
Peers: payload.Peers,
|
||||||
@@ -263,37 +281,42 @@ func GetProxyUpdateForHost(host *models.Host) (proxy_models.ProxyManagerPayload,
|
|||||||
} else if listenPort == 0 {
|
} else if listenPort == 0 {
|
||||||
listenPort = peerHost.ListenPort
|
listenPort = peerHost.ListenPort
|
||||||
}
|
}
|
||||||
if _, ok := peerConfMap[peerHost.PublicKey.String()]; !ok {
|
var currPeerConf proxy_models.PeerConf
|
||||||
peerConfMap[peerHost.PublicKey.String()] = proxy_models.PeerConf{
|
var found bool
|
||||||
|
if currPeerConf, found = peerConfMap[peerHost.PublicKey.String()]; !found {
|
||||||
|
currPeerConf = proxy_models.PeerConf{
|
||||||
Proxy: proxyStatus,
|
Proxy: proxyStatus,
|
||||||
PublicListenPort: int32(listenPort),
|
PublicListenPort: int32(listenPort),
|
||||||
NetworkInfo: make(map[string]proxy_models.NetworkInfo),
|
NetworkInfo: make(map[string]proxy_models.NetworkInfo),
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
peerConfMap[peerHost.PublicKey.String()].NetworkInfo[peer.Network] = proxy_models.NetworkInfo{
|
currPeerConf.NetworkInfo[peer.Network] = proxy_models.NetworkInfo{
|
||||||
Address: net.ParseIP(peer.PrimaryAddress()),
|
Address: net.ParseIP(peer.PrimaryAddress()),
|
||||||
}
|
}
|
||||||
|
|
||||||
if peerHost.IsRelayed {
|
if peerHost.IsRelayed && peerHost.RelayedBy != host.ID.String() {
|
||||||
relayHost, err := GetHost(peerHost.RelayedBy)
|
relayHost, err := GetHost(peerHost.RelayedBy)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
relayTo, err := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", relayHost.EndpointIP, relayHost.LocalListenPort))
|
listenPort := peerHost.LocalListenPort
|
||||||
if err == nil {
|
if proxyStatus {
|
||||||
peerConfMap[peerHost.PublicKey.String()] = proxy_models.PeerConf{
|
listenPort = peerHost.ProxyListenPort
|
||||||
IsRelayed: true,
|
if listenPort == 0 {
|
||||||
RelayedTo: relayTo,
|
listenPort = proxy_models.NmProxyPort
|
||||||
Address: net.ParseIP(peer.PrimaryAddress()),
|
|
||||||
Proxy: proxyStatus,
|
|
||||||
PublicListenPort: int32(listenPort),
|
|
||||||
}
|
}
|
||||||
|
} else if listenPort == 0 {
|
||||||
|
listenPort = peerHost.ListenPort
|
||||||
|
}
|
||||||
|
relayTo, err := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", relayHost.EndpointIP, listenPort))
|
||||||
|
if err == nil {
|
||||||
|
currPeerConf.IsRelayed = true
|
||||||
|
currPeerConf.RelayedTo = relayTo
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
peerConfMap[peerHost.PublicKey.String()] = currPeerConf
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//proxyPayload.WgAddr = addr.String()
|
//proxyPayload.WgAddr = addr.String()
|
||||||
|
Reference in New Issue
Block a user