From bbc58ccbd1d627d5e6c08a95c55e0c006f379829 Mon Sep 17 00:00:00 2001 From: Christine Dodrill Date: Sat, 29 Aug 2015 09:28:20 -0700 Subject: [PATCH] DRY server link creation, don't crash on Juped server squit Closes #44 --- bot/basehandlers.go | 42 +++++++++++++++++++++++------------------- bot/server.go | 18 ++++++++++++++++++ 2 files changed, 41 insertions(+), 19 deletions(-) diff --git a/bot/basehandlers.go b/bot/basehandlers.go index 528552e..6453320 100644 --- a/bot/basehandlers.go +++ b/bot/basehandlers.go @@ -2,6 +2,7 @@ package tetra import ( "fmt" + "log" "os" "strconv" "strings" @@ -558,22 +559,7 @@ func handleSID(line *r1459.RawLine) { Log.Panic("No server by ID " + line.Source + ", desync") } - server := &Server{ - Name: line.Args[0], - Gecos: line.Args[3], - Sid: line.Args[2], - Links: []*Server{parent}, - Counter: metrics.NewGauge(), - } - - var err error - server.Hops, err = strconv.Atoi(line.Args[1]) - if err != nil { - return - } - - parent.Links = append(parent.Links, server) - + server := NewServer(parent, line.Args[0], line.Args[3], line.Args[2], line.Args[1]) Servers[server.Sid] = server metrics.Register(server.Name+"_clients", server.Counter) @@ -587,10 +573,28 @@ func handlePASS(line *r1459.RawLine) { func handleSERVER(line *r1459.RawLine) { // <<< SERVER fluttershy.yolo-swag.com 1 :shadowircd test server - Uplink.Name = line.Args[0] - Uplink.Gecos = line.Args[2] + if line.Source == "" { + Uplink.Name = line.Args[0] + Uplink.Gecos = line.Args[2] + + metrics.Register(Uplink.Name+"_clients", Uplink.Counter) + return + } + + // :services.int SERVER foo.bar 3 :(H) [Xena] test + var parent *Server + + for _, server := range Servers { + if server.Name == line.Source { + parent = server + } + } + + if parent == nil { + log.Fatalf("Unknown server %s, desync", line.Source) + } - metrics.Register(Uplink.Name+"_clients", Uplink.Counter) + Servers[line.Source] = NewServer(parent, line.Args[0], line.Args[2], line.Args[0], line.Args[1]) } func handleWHOIS(line *r1459.RawLine) { diff --git a/bot/server.go b/bot/server.go index c3e2fce..e77b0ca 100644 --- a/bot/server.go +++ b/bot/server.go @@ -1,6 +1,8 @@ package tetra import ( + "strconv" + "github.com/rcrowley/go-metrics" ) @@ -25,3 +27,19 @@ func (s *Server) AddClient() { func (s *Server) DelClient() { s.Count-- } + +// NewServer allocates a new server struct, fitting it into the network. +func NewServer(parent *Server, name, gecos, id, hops string) *Server { + s := &Server{ + Sid: id, + Name: name, + Gecos: gecos, + Links: []*Server{parent}, + Counter: metrics.NewGauge(), + } + + s.Hops, _ = strconv.Atoi(hops) + parent.Links = append(parent.Links, s) + + return s +}