udp: Rotate connection ID generation IVs every hour

This commit is contained in:
Justin Li
2015-02-20 15:38:27 -05:00
parent afb22c3df6
commit 4c3cd6cc0a
4 changed files with 102 additions and 33 deletions

View File

@@ -19,10 +19,10 @@ import (
// Server represents a UDP torrent tracker.
type Server struct {
config *config.Config
tracker *tracker.Tracker
done bool
config *config.Config
tracker *tracker.Tracker
connIDGen *ConnectionIDGenerator
done bool
}
func (s *Server) serve() error {
@@ -66,7 +66,7 @@ func (s *Server) serve() error {
if glog.V(2) {
duration := time.Since(start)
glog.Infof("[UDP - %9s] %s", duration, action)
glog.Infof("[UDP - %9s] %s %s", duration, action, addr)
}
}()
}
@@ -78,6 +78,13 @@ func (s *Server) serve() error {
func (s *Server) Serve() {
glog.V(0).Info("Starting UDP on ", s.config.UDPListenAddr)
go func() {
// Generate a new IV every hour.
for range time.Tick(time.Hour) {
s.connIDGen.NewIV()
}
}()
if err := s.serve(); err != nil {
glog.Errorf("Failed to run UDP server: %s", err.Error())
} else {
@@ -92,8 +99,14 @@ func (s *Server) Stop() {
// NewServer returns a new UDP server for a given configuration and tracker.
func NewServer(cfg *config.Config, tkr *tracker.Tracker) *Server {
gen := &ConnectionIDGenerator{}
if err := gen.Init(); err != nil {
panic(err)
}
return &Server{
config: cfg,
tracker: tkr,
config: cfg,
tracker: tkr,
connIDGen: gen,
}
}