Use mDNS pinning

This commit is contained in:
Neil Alexander 2020-05-09 22:27:16 +01:00
parent bca716d0c5
commit cd93bf9e7b
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944

View file

@ -6,7 +6,9 @@ import (
"errors" "errors"
"fmt" "fmt"
"net" "net"
"net/url"
"regexp" "regexp"
"strings"
"time" "time"
"github.com/Arceliar/phony" "github.com/Arceliar/phony"
@ -344,10 +346,32 @@ func (s *mDNSServer) listen() {
if entry.AddrV6.Zone == "" { if entry.AddrV6.Zone == "" {
entry.AddrV6.Zone = s.intf.Name entry.AddrV6.Zone = s.intf.Name
} }
fields := parseTXTFields(entry.InfoFields)
addr := fmt.Sprintf("tcp://[%s]:%d", entry.AddrV6.IP, entry.Port) addr := fmt.Sprintf("tcp://[%s]:%d", entry.AddrV6.IP, entry.Port)
if err := s.mdns.core.CallPeer(addr, entry.AddrV6.Zone); err != nil { u, err := url.Parse(addr)
if err != nil {
continue
}
query := u.Query()
if curve, ok := fields["curve25519"]; ok {
query.Set("curve25519", curve)
}
if ed, ok := fields["ed25519"]; ok {
query.Set("ed25519", ed)
}
u.RawQuery = query.Encode()
if err := s.mdns.core.CallPeer(u.String(), entry.AddrV6.Zone); err != nil {
s.mdns.log.Warn("Failed to add peer from mDNS: ", err) s.mdns.log.Warn("Failed to add peer from mDNS: ", err)
} }
} }
} }
} }
func parseTXTFields(fields []string) map[string]string {
result := make(map[string]string)
for _, field := range fields {
pos := strings.Index(field, "=")
result[field[:pos]] = field[pos+1:]
}
return result
}