mirror of
https://github.com/yggdrasil-network/yggdrasil-go.git
synced 2025-04-30 07:05:06 +03:00
Use mDNS pinning
This commit is contained in:
parent
bca716d0c5
commit
cd93bf9e7b
1 changed files with 25 additions and 1 deletions
|
@ -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
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue