Files
tunnel-please/session/session.go
bagas e02b7ed937
All checks were successful
Docker Build and Push / build-and-push (push) Successful in 7m18s
feat: close connection if no tunneling request is specified
2025-10-20 12:28:52 +00:00

56 lines
1.1 KiB
Go

package session
import (
"net"
"sync"
"golang.org/x/crypto/ssh"
)
type TunnelType string
const (
HTTP TunnelType = "http"
TCP TunnelType = "tcp"
UDP TunnelType = "udp"
UNKNOWN TunnelType = "unknown"
)
type Session struct {
Connection *ssh.ServerConn
ConnChannel ssh.Channel
Listener net.Listener
TunnelType TunnelType
ForwardedPort uint16
Status SessionStatus
Slug string
ChannelChan chan ssh.NewChannel
Done chan bool
once sync.Once
}
func New(conn *ssh.ServerConn, forwardingReq <-chan *ssh.Request) *Session {
session := &Session{
Status: SETUP,
Slug: "",
ConnChannel: nil,
Connection: conn,
TunnelType: UNKNOWN,
ChannelChan: make(chan ssh.NewChannel),
Done: make(chan bool),
}
go func() {
for channel := range session.ChannelChan {
ch, reqs, _ := channel.Accept()
if session.ConnChannel == nil {
session.ConnChannel = ch
go session.HandleGlobalRequest(forwardingReq)
}
go session.HandleGlobalRequest(reqs)
}
}()
return session
}