External discover
This commit is contained in:
commit
07ddf7e87b
74
cmd/discosrv/main.go
Normal file
74
cmd/discosrv/main.go
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"net"
|
||||||
|
"sync"
|
||||||
|
|
||||||
|
"github.com/calmh/syncthing/discover"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Node struct {
|
||||||
|
IP []byte
|
||||||
|
Port uint16
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
nodes = make(map[string]Node)
|
||||||
|
lock sync.Mutex
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
addr, _ := net.ResolveUDPAddr("udp", ":22025")
|
||||||
|
conn, err := net.ListenUDP("udp", addr)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var buf = make([]byte, 1024)
|
||||||
|
for {
|
||||||
|
n, addr, err := conn.ReadFromUDP(buf)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
pkt, err := discover.DecodePacket(buf[:n])
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Warning:", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
switch pkt.Magic {
|
||||||
|
case 0x20121025:
|
||||||
|
// Announcement
|
||||||
|
//lock.Lock()
|
||||||
|
ip := addr.IP.To4()
|
||||||
|
if ip == nil {
|
||||||
|
ip = addr.IP.To16()
|
||||||
|
}
|
||||||
|
node := Node{ip, uint16(pkt.Port)}
|
||||||
|
log.Println("<-", pkt.ID, node)
|
||||||
|
nodes[pkt.ID] = node
|
||||||
|
//lock.Unlock()
|
||||||
|
case 0x19760309:
|
||||||
|
// Query
|
||||||
|
//lock.Lock()
|
||||||
|
node, ok := nodes[pkt.ID]
|
||||||
|
//lock.Unlock()
|
||||||
|
if ok {
|
||||||
|
pkt := discover.Packet{
|
||||||
|
Magic: 0x20121025,
|
||||||
|
ID: pkt.ID,
|
||||||
|
Port: node.Port,
|
||||||
|
IP: node.IP,
|
||||||
|
}
|
||||||
|
_, _, err = conn.WriteMsgUDP(discover.EncodePacket(pkt), nil, addr)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Warning:", err)
|
||||||
|
} else {
|
||||||
|
log.Println("->", pkt.ID, node)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user