X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/a6216dd89252fa01dc176f98f1e4ecfd3f637566..45ca5d60383cbe270624c713b916da29af7ba88f:/hotline/server.go?ds=inline diff --git a/hotline/server.go b/hotline/server.go index f2a69ad..448aab1 100644 --- a/hotline/server.go +++ b/hotline/server.go @@ -92,12 +92,6 @@ type PrivateChat struct { } func (s *Server) ListenAndServe(ctx context.Context, cancelRoot context.CancelFunc) error { - s.Logger.Info("Hotline server started", - "version", VERSION, - "API port", fmt.Sprintf("%s:%v", s.NetInterface, s.Port), - "Transfer port", fmt.Sprintf("%s:%v", s.NetInterface, s.Port+1), - ) - var wg sync.WaitGroup wg.Add(1) @@ -152,24 +146,19 @@ func (s *Server) ServeFileTransfers(ctx context.Context, ln net.Listener) error func (s *Server) sendTransaction(t Transaction) error { clientID, err := byteToInt(*t.clientID) if err != nil { - return err + return fmt.Errorf("invalid client ID: %v", err) } s.mux.Lock() - client := s.Clients[uint16(clientID)] + client, ok := s.Clients[uint16(clientID)] s.mux.Unlock() - if client == nil { + if !ok || client == nil { return fmt.Errorf("invalid client id %v", *t.clientID) } - b, err := t.MarshalBinary() - if err != nil { - return err - } - - _, err = client.Connection.Write(b) + _, err = io.Copy(client.Connection, &t) if err != nil { - return err + return fmt.Errorf("failed to send transaction to client %v: %v", clientID, err) } return nil @@ -257,7 +246,7 @@ func NewServer(configDir, netInterface string, netPort int, logger *slog.Logger, _ = server.loadBanList(filepath.Join(configDir, "Banlist.yaml")) if err := server.loadThreadedNews(filepath.Join(configDir, "ThreadedNews.yaml")); err != nil { - return nil, err + return nil, fmt.Errorf("error loading threaded news: %w", err) } if err := server.loadConfig(filepath.Join(configDir, "config.yaml")); err != nil { @@ -620,12 +609,7 @@ func (s *Server) handleNewConnection(ctx context.Context, rwc io.ReadWriteCloser NewField(FieldChatOptions, []byte{0, 0}), ) - b, err := t.MarshalBinary() - if err != nil { - return err - } - - _, err = rwc.Write(b) + _, err := io.Copy(rwc, t) if err != nil { return err } @@ -642,12 +626,8 @@ func (s *Server) handleNewConnection(ctx context.Context, rwc io.ReadWriteCloser 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) + _, err := io.Copy(rwc, t) if err != nil { return err } @@ -677,13 +657,11 @@ func (s *Server) handleNewConnection(ctx context.Context, rwc io.ReadWriteCloser // If authentication fails, send error reply and close connection if !c.Authenticate(login, encodedPassword) { t := c.NewErrReply(&clientLogin, "Incorrect login.") - b, err := t.MarshalBinary() + + _, err := io.Copy(rwc, &t) if err != nil { return err } - if _, err := rwc.Write(b); err != nil { - return err - } c.logger.Info("Login failed", "clientVersion", fmt.Sprintf("%x", c.Version)) @@ -734,7 +712,7 @@ func (s *Server) handleNewConnection(ctx context.Context, rwc io.ReadWriteCloser if len(c.UserName) != 0 { // Add the client username to the logger. For 1.5+ clients, we don't have this information yet as it comes as // part of TranAgreed - c.logger = c.logger.With("name", string(c.UserName)) + c.logger = c.logger.With("Name", string(c.UserName)) c.logger.Info("Login successful", "clientVersion", "Not sent (probably 1.2.3)") @@ -838,7 +816,7 @@ func (s *Server) handleFileTransfer(ctx context.Context, rwc io.ReadWriter) erro rLogger := s.Logger.With( "remoteAddr", ctx.Value(contextKeyReq).(requestCtx).remoteAddr, "login", fileTransfer.ClientConn.Account.Login, - "name", string(fileTransfer.ClientConn.UserName), + "Name", string(fileTransfer.ClientConn.UserName), ) fullPath, err := readPath(s.Config.FileRoot, fileTransfer.FilePath, fileTransfer.FileName)