Fix discosrv build, build as part of all (fixes #257)

This commit is contained in:
Jakob Borg 2014-05-22 08:46:19 +02:00
parent 0c642ec7cf
commit 2e1c33206f
3 changed files with 34 additions and 25 deletions

2
.gitignore vendored
View File

@ -6,3 +6,5 @@ stcli.exe
*.zip *.zip
*.asc *.asc
*.sublime* *.sublime*
discosrv
stpidx

View File

@ -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#*-}

View File

@ -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++
} }