new code for login

This commit is contained in:
Gregory Salaun 2025-06-03 00:15:08 +02:00
parent db41a32a5b
commit ebdf1336a1
2 changed files with 55 additions and 31 deletions

View File

@ -18,6 +18,7 @@ type TCPClient struct {
Password string Password string
Address string Address string
Port string Port string
LoggedIn bool
Timeout time.Duration Timeout time.Duration
LogWriter *bufio.Writer LogWriter *bufio.Writer
Reader *bufio.Reader Reader *bufio.Reader
@ -55,6 +56,7 @@ func (c *TCPClient) setDefaultParams() {
if c.LogWriter == nil { if c.LogWriter == nil {
c.LogWriter = bufio.NewWriter(os.Stdout) c.LogWriter = bufio.NewWriter(os.Stdout)
} }
c.LoggedIn = false
} }
func (c *TCPClient) StartClient() { func (c *TCPClient) StartClient() {
@ -72,10 +74,10 @@ func (c *TCPClient) StartClient() {
} }
Log.Infof("Connected to DX cluster %s:%s", c.Address, c.Port) Log.Infof("Connected to DX cluster %s:%s", c.Address, c.Port)
err = c.Conn.SetKeepAlive(true) // err = c.Conn.SetKeepAlive(true)
if err != nil { // if err != nil {
Log.Error("Error while setting keep alive:", err) // Log.Error("Error while setting keep alive:", err)
} // }
c.Reader = bufio.NewReader(c.Conn) c.Reader = bufio.NewReader(c.Conn)
c.Writer = bufio.NewWriter(c.Conn) c.Writer = bufio.NewWriter(c.Conn)
@ -132,34 +134,56 @@ func (c *TCPClient) ReadLine() {
for { for {
message, err := c.Reader.ReadString('\n') // Need to check data with space first to find login and then use \n
message, _ = strings.CutSuffix(message, "\n") if !c.LoggedIn {
message, _ = strings.CutSuffix(message, "\r") message, err := c.Reader.ReadString(' ')
message, _ = strings.CutSuffix(message, "\n")
message, _ = strings.CutSuffix(message, "\r")
if err != nil { if err != nil {
Log.Errorf("Error reading message: %s", err) Log.Errorf("Error reading message: %s", err)
c.Conn.Close() c.Conn.Close()
c.StartClient() c.StartClient()
} }
if strings.Contains(message, Cfg.Cluster.LoginPrompt) { if strings.Contains(message, Cfg.Cluster.LoginPrompt) {
Log.Debug("Found login prompt...sending callsign") Log.Debug("Found login prompt...sending callsign")
c.Write([]byte(c.Login + "\r\n")) c.Write([]byte(c.Login + "\r\n"))
c.SetFilters() c.SetFilters()
if Cfg.Cluster.Command != "" { if Cfg.Cluster.Command != "" {
c.WriteString(Cfg.Cluster.Command + "\n\r") 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 if c.LoggedIn {
c.MsgChan <- message 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
}
} }
} }

View File

@ -8,14 +8,14 @@ sqlite:
sqlite_path: 'C:\Perso\Seafile\Radio\Logs\Log4OM\F4BPO.SQLite' # SQLite Db oath of Log4OM 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 callsign: F4BPO # Log4OM Callsign used to check if you get spotted by someone
cluster: cluster:
server: db0sue.de # dxc.k0xm.net server: dxc.sm7iun.se # dxc.k0xm.net
port: 8000 port: 23
login: f4bpo login: f4bpo
skimmer: true skimmer: true
ft8: false ft8: false
ft4: false ft4: false
command: SET/NOFILTER command: SET/NOFILTER
login_prompt: "login: " login_prompt: "login:"
flex: flex:
discovery: true # Radio must be on same LAN than the program 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 ip: 10.10.10.120 # if discovery is true no need to put an IP