mirror of
https://github.com/octoleo/syncthing.git
synced 2024-10-10 06:57:56 +00:00
Fix discosrv build, build as part of all (fixes #257)
This commit is contained in:
parent
0c642ec7cf
commit
2e1c33206f
2
.gitignore
vendored
2
.gitignore
vendored
@ -6,3 +6,5 @@ stcli.exe
|
|||||||
*.zip
|
*.zip
|
||||||
*.asc
|
*.asc
|
||||||
*.sublime*
|
*.sublime*
|
||||||
|
discosrv
|
||||||
|
stpidx
|
||||||
|
4
build.sh
4
build.sh
@ -112,6 +112,10 @@ case "$1" in
|
|||||||
test || exit 1
|
test || exit 1
|
||||||
assets
|
assets
|
||||||
|
|
||||||
|
godep go build ./discover/cmd/discosrv
|
||||||
|
godep go build ./cmd/stpidx
|
||||||
|
godep go build ./cmd/stcli
|
||||||
|
|
||||||
for os in darwin-amd64 linux-386 linux-amd64 freebsd-amd64 windows-amd64 windows-386 ; do
|
for os in darwin-amd64 linux-386 linux-amd64 freebsd-amd64 windows-amd64 windows-386 ; do
|
||||||
export GOOS=${os%-*}
|
export GOOS=${os%-*}
|
||||||
export GOARCH=${os#*-}
|
export GOARCH=${os#*-}
|
||||||
|
@ -5,6 +5,7 @@ import (
|
|||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"log"
|
"log"
|
||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
@ -16,18 +17,18 @@ import (
|
|||||||
"github.com/juju/ratelimit"
|
"github.com/juju/ratelimit"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Node struct {
|
type node struct {
|
||||||
Addresses []Address
|
addresses []address
|
||||||
Updated time.Time
|
updated time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
type Address struct {
|
type address struct {
|
||||||
IP []byte
|
ip []byte
|
||||||
Port uint16
|
port uint16
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
nodes = make(map[string]Node)
|
nodes = make(map[string]node)
|
||||||
lock sync.Mutex
|
lock sync.Mutex
|
||||||
queries = 0
|
queries = 0
|
||||||
announces = 0
|
announces = 0
|
||||||
@ -134,7 +135,7 @@ func limit(addr *net.UDPAddr) bool {
|
|||||||
func handleAnnounceV2(addr *net.UDPAddr, buf []byte) {
|
func handleAnnounceV2(addr *net.UDPAddr, buf []byte) {
|
||||||
var pkt discover.AnnounceV2
|
var pkt discover.AnnounceV2
|
||||||
err := pkt.UnmarshalXDR(buf)
|
err := pkt.UnmarshalXDR(buf)
|
||||||
if err != nil {
|
if err != nil && err != io.EOF {
|
||||||
log.Println("AnnounceV2 Unmarshal:", err)
|
log.Println("AnnounceV2 Unmarshal:", err)
|
||||||
log.Println(hex.Dump(buf))
|
log.Println(hex.Dump(buf))
|
||||||
return
|
return
|
||||||
@ -152,25 +153,25 @@ func handleAnnounceV2(addr *net.UDPAddr, buf []byte) {
|
|||||||
ip = addr.IP.To16()
|
ip = addr.IP.To16()
|
||||||
}
|
}
|
||||||
|
|
||||||
var addrs []Address
|
var addrs []address
|
||||||
for _, addr := range pkt.Addresses {
|
for _, addr := range pkt.This.Addresses {
|
||||||
tip := addr.IP
|
tip := addr.IP
|
||||||
if len(tip) == 0 {
|
if len(tip) == 0 {
|
||||||
tip = ip
|
tip = ip
|
||||||
}
|
}
|
||||||
addrs = append(addrs, Address{
|
addrs = append(addrs, address{
|
||||||
IP: tip,
|
ip: tip,
|
||||||
Port: addr.Port,
|
port: addr.Port,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
node := Node{
|
node := node{
|
||||||
Addresses: addrs,
|
addresses: addrs,
|
||||||
Updated: time.Now(),
|
updated: time.Now(),
|
||||||
}
|
}
|
||||||
|
|
||||||
lock.Lock()
|
lock.Lock()
|
||||||
nodes[pkt.NodeID] = node
|
nodes[pkt.This.ID] = node
|
||||||
lock.Unlock()
|
lock.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,19 +192,21 @@ func handleQueryV2(conn *net.UDPConn, addr *net.UDPAddr, buf []byte) {
|
|||||||
queries++
|
queries++
|
||||||
lock.Unlock()
|
lock.Unlock()
|
||||||
|
|
||||||
if ok && len(node.Addresses) > 0 {
|
if ok && len(node.addresses) > 0 {
|
||||||
pkt := discover.AnnounceV2{
|
ann := discover.AnnounceV2{
|
||||||
Magic: discover.AnnouncementMagicV2,
|
Magic: discover.AnnouncementMagicV2,
|
||||||
NodeID: pkt.NodeID,
|
This: discover.Node{
|
||||||
|
ID: pkt.NodeID,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
for _, addr := range node.Addresses {
|
for _, addr := range node.addresses {
|
||||||
pkt.Addresses = append(pkt.Addresses, discover.Address{IP: addr.IP, Port: addr.Port})
|
ann.This.Addresses = append(ann.This.Addresses, discover.Address{IP: addr.ip, Port: addr.port})
|
||||||
}
|
}
|
||||||
if debug {
|
if debug {
|
||||||
log.Printf("-> %v %#v", addr, pkt)
|
log.Printf("-> %v %#v", addr, pkt)
|
||||||
}
|
}
|
||||||
|
|
||||||
tb := pkt.MarshalXDR()
|
tb := ann.MarshalXDR()
|
||||||
_, _, err = conn.WriteMsgUDP(tb, nil, addr)
|
_, _, err = conn.WriteMsgUDP(tb, nil, addr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("QueryV2 response write:", err)
|
log.Println("QueryV2 response write:", err)
|
||||||
@ -235,7 +238,7 @@ func logStats(file string, intv int) {
|
|||||||
|
|
||||||
var deleted = 0
|
var deleted = 0
|
||||||
for id, node := range nodes {
|
for id, node := range nodes {
|
||||||
if time.Since(node.Updated) > 60*time.Minute {
|
if time.Since(node.updated) > 60*time.Minute {
|
||||||
delete(nodes, id)
|
delete(nodes, id)
|
||||||
deleted++
|
deleted++
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user