From ebdf1336a1d1dea9dc91b26f86c32652d5c198c3 Mon Sep 17 00:00:00 2001 From: Greg Date: Tue, 3 Jun 2025 00:15:08 +0200 Subject: [PATCH] new code for login --- TCPClient.go | 80 ++++++++++++++++++++++++++++++++++------------------ config.yml | 6 ++-- 2 files changed, 55 insertions(+), 31 deletions(-) diff --git a/TCPClient.go b/TCPClient.go index 624b660..61c5a37 100644 --- a/TCPClient.go +++ b/TCPClient.go @@ -18,6 +18,7 @@ type TCPClient struct { Password string Address string Port string + LoggedIn bool Timeout time.Duration LogWriter *bufio.Writer Reader *bufio.Reader @@ -55,6 +56,7 @@ func (c *TCPClient) setDefaultParams() { if c.LogWriter == nil { c.LogWriter = bufio.NewWriter(os.Stdout) } + c.LoggedIn = false } func (c *TCPClient) StartClient() { @@ -72,10 +74,10 @@ func (c *TCPClient) StartClient() { } Log.Infof("Connected to DX cluster %s:%s", c.Address, c.Port) - err = c.Conn.SetKeepAlive(true) - if err != nil { - Log.Error("Error while setting keep alive:", err) - } + // err = c.Conn.SetKeepAlive(true) + // if err != nil { + // Log.Error("Error while setting keep alive:", err) + // } c.Reader = bufio.NewReader(c.Conn) c.Writer = bufio.NewWriter(c.Conn) @@ -132,34 +134,56 @@ func (c *TCPClient) ReadLine() { for { - message, err := c.Reader.ReadString('\n') - message, _ = strings.CutSuffix(message, "\n") - message, _ = strings.CutSuffix(message, "\r") + // Need to check data with space first to find login and then use \n + if !c.LoggedIn { + message, err := c.Reader.ReadString(' ') + message, _ = strings.CutSuffix(message, "\n") + message, _ = strings.CutSuffix(message, "\r") - if err != nil { - Log.Errorf("Error reading message: %s", err) - c.Conn.Close() - c.StartClient() - } - - if strings.Contains(message, Cfg.Cluster.LoginPrompt) { - Log.Debug("Found login prompt...sending callsign") - c.Write([]byte(c.Login + "\r\n")) - c.SetFilters() - if Cfg.Cluster.Command != "" { - c.WriteString(Cfg.Cluster.Command + "\n\r") + if err != nil { + Log.Errorf("Error reading message: %s", err) + c.Conn.Close() + c.StartClient() + } + + if strings.Contains(message, Cfg.Cluster.LoginPrompt) { + Log.Debug("Found login prompt...sending callsign") + c.Write([]byte(c.Login + "\r\n")) + c.SetFilters() + if Cfg.Cluster.Command != "" { + c.WriteString(Cfg.Cluster.Command + "\n\r") + } + Log.Infof("Connected to cluster %s", Cfg.Cluster.Server) + Log.Info("Start receiving spots") + c.LoggedIn = true } - Log.Info("Start receiving spots") - } else if strings.Contains(message, "Error reading from server: read tcp") { - Log.Error("Disconnected from Telnet Server, reconnecting") - c.Close() - c.StartClient() - } else { - ProcessTelnetSpot(spotRe, message, c.SpotChanToFlex, c.SpotChanToHTTPServer, c.Countries) } - // Send the spot message to TCP server - c.MsgChan <- message + if c.LoggedIn { + message, err := c.Reader.ReadString('\n') + message, _ = strings.CutSuffix(message, "\n") + message, _ = strings.CutSuffix(message, "\r") + + if err != nil { + Log.Errorf("Error reading message: %s", err) + c.Conn.Close() + c.StartClient() + } + + if strings.Contains(message, "Error reading from server: read tcp") { + Log.Error("Disconnected from Telnet Server, reconnecting") + c.Close() + c.StartClient() + } else { + if c.LoggedIn && strings.Contains(message, "DX") { + ProcessTelnetSpot(spotRe, message, c.SpotChanToFlex, c.SpotChanToHTTPServer, c.Countries) + } + } + + // Send the spot message to TCP server + c.MsgChan <- message + + } } } diff --git a/config.yml b/config.yml index e6e566a..e674cd9 100644 --- a/config.yml +++ b/config.yml @@ -8,14 +8,14 @@ sqlite: sqlite_path: 'C:\Perso\Seafile\Radio\Logs\Log4OM\F4BPO.SQLite' # SQLite Db oath of Log4OM callsign: F4BPO # Log4OM Callsign used to check if you get spotted by someone cluster: - server: db0sue.de # dxc.k0xm.net - port: 8000 + server: dxc.sm7iun.se # dxc.k0xm.net + port: 23 login: f4bpo skimmer: true ft8: false ft4: false command: SET/NOFILTER - login_prompt: "login: " + login_prompt: "login:" flex: discovery: true # Radio must be on same LAN than the program ip: 10.10.10.120 # if discovery is true no need to put an IP