Fix duplicate node creation from pre-joined DisplayName
This commit is contained in:
19
dante.go
19
dante.go
@@ -99,22 +99,22 @@ func (n *Nodes) UpdateDanteTxChannels(name string, ip net.IP, channels string) {
|
|||||||
node.DanteTxChannels = channels
|
node.DanteTxChannels = channels
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *Nodes) GetDanteTxDeviceInGroup(groupIP net.IP) string {
|
func (n *Nodes) GetDanteTxDeviceInGroup(groupIP net.IP) *Node {
|
||||||
n.mu.RLock()
|
n.mu.RLock()
|
||||||
defer n.mu.RUnlock()
|
defer n.mu.RUnlock()
|
||||||
|
|
||||||
groupKey := groupIP.String()
|
groupKey := groupIP.String()
|
||||||
gm := n.multicastGroups[groupKey]
|
gm := n.multicastGroups[groupKey]
|
||||||
if gm == nil {
|
if gm == nil {
|
||||||
return ""
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, membership := range gm.Members {
|
for _, membership := range gm.Members {
|
||||||
if membership.Node != nil && membership.Node.DanteTxChannels != "" {
|
if membership.Node != nil && membership.Node.DanteTxChannels != "" {
|
||||||
return membership.Node.DisplayName()
|
return membership.Node
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ""
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var danteSeqID uint32
|
var danteSeqID uint32
|
||||||
@@ -881,14 +881,17 @@ func (t *Tendrils) probeDanteDeviceWithPort(ip net.IP, port int) {
|
|||||||
if needIGMPFallback {
|
if needIGMPFallback {
|
||||||
groups := t.nodes.GetDanteMulticastGroups(ip)
|
groups := t.nodes.GetDanteMulticastGroups(ip)
|
||||||
for _, groupIP := range groups {
|
for _, groupIP := range groups {
|
||||||
sourceName := t.nodes.GetDanteTxDeviceInGroup(groupIP)
|
sourceNode := t.nodes.GetDanteTxDeviceInGroup(groupIP)
|
||||||
if t.DebugDante {
|
if t.DebugDante {
|
||||||
|
sourceName := ""
|
||||||
|
if sourceNode != nil {
|
||||||
|
sourceName = sourceNode.DisplayName()
|
||||||
|
}
|
||||||
log.Printf("[dante] %s: multicast group %s -> tx device %q", ip, groupIP, sourceName)
|
log.Printf("[dante] %s: multicast group %s -> tx device %q", ip, groupIP, sourceName)
|
||||||
}
|
}
|
||||||
if sourceName == "" {
|
if sourceNode == nil {
|
||||||
sourceName = multicastGroupName(groupIP)
|
sourceNode = t.nodes.GetOrCreateByName(multicastGroupName(groupIP))
|
||||||
}
|
}
|
||||||
sourceNode := t.nodes.GetOrCreateByName(sourceName)
|
|
||||||
subscriberNode := t.nodes.GetOrCreateByName(info.Name)
|
subscriberNode := t.nodes.GetOrCreateByName(info.Name)
|
||||||
t.danteFlows.Update(sourceNode, subscriberNode, "", DanteFlowActive)
|
t.danteFlows.Update(sourceNode, subscriberNode, "", DanteFlowActive)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user