X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/2f8472fa4149074981f30b5bd181851768eab637..e9c043c0361e0e56e9b9adfea894c7834a99bade:/hotline/server.go?ds=sidebyside diff --git a/hotline/server.go b/hotline/server.go index 3e4ba2f..9e5f498 100644 --- a/hotline/server.go +++ b/hotline/server.go @@ -567,32 +567,55 @@ func (s *Server) handleNewConnection(ctx context.Context, rwc io.ReadWriteCloser return err } - c := s.NewClientConn(rwc, remoteAddr) - // check if remoteAddr is present in the ban list if banUntil, ok := s.banList[strings.Split(remoteAddr, ":")[0]]; ok { // permaban if banUntil == nil { - s.outbox <- *NewTransaction( + t := NewTransaction( tranServerMsg, - c.ID, + &[]byte{0, 0}, NewField(fieldData, []byte("You are permanently banned on this server")), NewField(fieldChatOptions, []byte{0, 0}), ) + + b, err := t.MarshalBinary() + if err != nil { + return err + } + + _, err = rwc.Write(b) + if err != nil { + return err + } + time.Sleep(1 * time.Second) return nil - } else if time.Now().Before(*banUntil) { - s.outbox <- *NewTransaction( + } + + // temporary ban + if time.Now().Before(*banUntil) { + t := NewTransaction( tranServerMsg, - c.ID, + &[]byte{0, 0}, NewField(fieldData, []byte("You are temporarily banned on this server")), NewField(fieldChatOptions, []byte{0, 0}), ) + b, err := t.MarshalBinary() + if err != nil { + return err + } + + _, err = rwc.Write(b) + if err != nil { + return err + } + time.Sleep(1 * time.Second) return nil } - } + + c := s.NewClientConn(rwc, remoteAddr) defer c.Disconnect() encodedLogin := clientLogin.GetField(fieldUserLogin).Data