From 9244cc9785ec423d7fcc83e742b86a7c3f65ed8b Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Sun, 5 Nov 2023 18:48:19 -0800 Subject: [PATCH] KeepAlive WIP. TODO: check exitStatus logic for shell 'exit' clean exit --- xs/xs.go | 3 ++- xsnet/consts.go | 4 +--- xsnet/net.go | 13 +++++++------ 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/xs/xs.go b/xs/xs.go index 9ff83f9..98cfb40 100755 --- a/xs/xs.go +++ b/xs/xs.go @@ -1005,7 +1005,7 @@ func main() { //nolint: funlen, gocyclo loginTimeout := time.AfterFunc(30*time.Second, func() { //nolint:gomnd restoreTermState(oldState) fmt.Printf(" .. [login timeout]\n") - exitWithStatus(xsnet.CSOLoginTimeout) + exitWithStatus(xsnet.CSELoginTimeout) }) if authCookie == "" { @@ -1152,5 +1152,6 @@ func exitWithStatus(status int) { } } + fmt.Printf("[exitStatus:%d]\n", status) os.Exit(status) } diff --git a/xsnet/consts.go b/xsnet/consts.go index a95691f..e6a47fb 100644 --- a/xsnet/consts.go +++ b/xsnet/consts.go @@ -53,6 +53,7 @@ const ( CSECipherAlgDenied // server rejected proposed Cipher alg CSEHMACAlgDenied // server rejected proposed HMAC alg CSEConnDead // connection keepalives expired + CSELoginTimeout ) // Extended (>255 UNIX exit status) codes @@ -68,9 +69,6 @@ const ( CSOExitStatus // Remote cmd exit status CSOChaff // Dummy packet, do not pass beyond decryption - // Client side errors - CSOLoginTimeout - // Tunnel setup/control/status CSOTunSetup // client -> server tunnel setup request (dstport) CSOTunSetupAck // server -> client tunnel setup ack diff --git a/xsnet/net.go b/xsnet/net.go index e811995..5f21b94 100644 --- a/xsnet/net.go +++ b/xsnet/net.go @@ -1196,7 +1196,7 @@ func (hl *HKExListener) Accept() (hc Conn, err error) { // packet processing. // // See go doc io.Reader -func (hc Conn) Read(b []byte) (n int, err error) { +func (hc *Conn) Read(b []byte) (n int, err error) { for { if hc.dBuf.Len() > 0 { break @@ -1214,7 +1214,8 @@ func (hc Conn) Read(b []byte) (n int, err error) { return 0, io.EOF } if strings.HasSuffix(err.Error(), "use of closed network connection") { - logger.LogDebug(fmt.Sprintln("[Client hung up]")) + logger.LogDebug(fmt.Sprintln("[Client hung up(1)]")) + //!rlm hc.SetStatus(CSENone) //FIXME: re-examine this (exit 9 w/o it - 2023-11-05) return 0, io.EOF } etxt := fmt.Sprintf("** Failed read:%s (%s) **", "ctrlStatOp", err) @@ -1237,7 +1238,7 @@ func (hc Conn) Read(b []byte) (n int, err error) { return 0, io.EOF } if strings.HasSuffix(err.Error(), "use of closed network connection") { - logger.LogDebug(fmt.Sprintln("[Client hung up]")) + logger.LogDebug(fmt.Sprintln("[Client hung up(2)]")) return 0, io.EOF } etxt := fmt.Sprintf("** Failed read:%s (%s) **", "HMAC", err) @@ -1253,7 +1254,7 @@ func (hc Conn) Read(b []byte) (n int, err error) { return 0, io.EOF } if strings.HasSuffix(err.Error(), "use of closed network connection") { - logger.LogDebug(fmt.Sprintln("[Client hung up]")) + logger.LogDebug(fmt.Sprintln("[Client hung up(3)]")) return 0, io.EOF } etxt := fmt.Sprintf("** Failed read:%s (%s) **", "payloadLen", err) @@ -1276,7 +1277,7 @@ func (hc Conn) Read(b []byte) (n int, err error) { return 0, io.EOF } if strings.HasSuffix(err.Error(), "use of closed network connection") { - logger.LogDebug(fmt.Sprintln("[Client hung up]")) + logger.LogDebug(fmt.Sprintln("[Client hung up(4)]")) return 0, io.EOF } etxt := fmt.Sprintf("** Failed read:%s (%s) **", "payloadBytes", err) @@ -1647,7 +1648,7 @@ func (hc *Conn) keepaliveHelper() { } time.Sleep(time.Duration(nextDuration) * time.Millisecond) hc.keepalive -= 1 - + logger.LogDebug(fmt.Sprintf("[keepAlive is now %d]\n", hc.keepalive)) //if rand.Intn(32) == 0 { // hc.keepalive = 0 //}