package main import ( "log" "net" "net/http" "github.com/gorilla/websocket" ) type ServerHandler struct { ProxyToHost string upgrader websocket.Upgrader } func NewServerHandler(proxyToHost string) *ServerHandler { return &ServerHandler{ ProxyToHost: proxyToHost, upgrader: websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, }, } } func (h *ServerHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { log.Println("Got new HTTP connection") wsconn, err := h.upgrader.Upgrade(w, r, nil) if err != nil { log.Printf("error: ServeHTTP: %s", err) return } defer wsconn.Close() proxyconn, err := net.Dial("tcp", h.ProxyToHost) if err != nil { log.Printf("error: ServeHTTP: %s", err) return } defer proxyconn.Close() log.Println("Connected to SSH server") serviceBoth(wsconn, proxyconn) }