diff --git a/cmd/agent/agent.go b/cmd/agent/agent.go index ba81480..27a43b6 100755 --- a/cmd/agent/agent.go +++ b/cmd/agent/agent.go @@ -1,6 +1,7 @@ package main import ( + "bufio" "cidebug/pkg/iowrappers" "fmt" "github.com/gorilla/websocket" @@ -49,7 +50,7 @@ func setWinsize(f *os.File, w, h int) { uintptr(unsafe.Pointer(&struct{ h, w, x, y uint16 }{uint16(h), uint16(w), 0, 0}))) } -func mainSsh() { +func sshServer() *ssh.Server { ssh.Handle(func(s ssh.Session) { cmd := exec.Command("bash") ptyReq, winCh, isPty := s.Pty() @@ -75,33 +76,48 @@ func mainSsh() { } }) - log.Println("starting ssh tcpserver on port 2222...") + log.Println("starting ssh server") server := ssh.Server{ - Addr: ":2222", + //Addr: ":2222", PasswordHandler: passwordAuth, SubsystemHandlers: map[string]ssh.SubsystemHandler{ "sftp": SftpHandler, }, } + return &server +} - listener, err := net.Listen("tcp", ":2222") - if err != nil { - log.Fatal(err) +func echoServer(conn io.ReadWriter) { + io.Copy(conn, conn) +} + +func netCatServer(conn io.ReadWriter) { + stdio := bufio.NewReadWriter( + bufio.NewReaderSize(os.Stdin, 0), + bufio.NewWriterSize(os.Stdout, 0)) + iowrappers.SynchronizeStreams(conn, stdio) +} + +type AgentService interface { + Run(listener net.Listener) +} + +type ListenerServer func() *ssh.Server + +func (server ListenerServer) Run(listener net.Listener) { + server().Serve(listener) +} + +type ConnectionServer func(conn io.ReadWriter) + +func (server ConnectionServer) Run(listener net.Listener) { + for { + conn, err := listener.Accept() + if err != nil { + panic(err) + } + go echoServer(conn) } - - server.Serve(listener) - - //for { - // conn, err := listener.Accept() - // if err != nil { - // log.Println("Failed to accept connection:", err) - // continue - // } - // log.Println("Got connection") - // go server.HandleConn(conn) - //} - - //log.Fatal(server.ListenAndServe()) } func main() { @@ -121,24 +137,10 @@ func main() { log.Println("Connection established to rendez-vous server, waiting for debug sessions") - // Session is a listener - for { - conn, err := listener.Accept() - if err != nil { - panic(err) - } - go handleConnection(conn) - } + var service AgentService + service = ListenerServer(sshServer) + //service = ConnectionServer(echoServer) + //service := ConnectionServer(netCatServer) + service.Run(listener) } - -func handleConnection(conn io.ReadWriter) { - //stdio := bufio.NewReadWriter( - // bufio.NewReaderSize(os.Stdin, 0), - // bufio.NewWriterSize(os.Stdout, 0)) - - // echo server - io.Copy(conn, conn) - - //iowrappers.SynchronizeStreams(conn, stdio) -}