@@ -11,7 +11,8 @@ import (
1111
1212// WebsocketServer implements a websocket-based connection to guacd.
1313type WebsocketServer struct {
14- connect func (* http.Request ) (Tunnel , error )
14+ connect func (* http.Request ) (Tunnel , error )
15+ connectWs func (* websocket.Conn , * http.Request ) (Tunnel , error )
1516
1617 // OnConnect is an optional callback called when a websocket connects.
1718 // Deprecated: use OnConnectWs
@@ -26,12 +27,20 @@ type WebsocketServer struct {
2627 OnDisconnectWs func (string , * websocket.Conn , * http.Request , Tunnel )
2728}
2829
30+ // NewWebsocketServer creates a new server with a simple connect method.
2931func NewWebsocketServer (connect func (* http.Request ) (Tunnel , error )) * WebsocketServer {
3032 return & WebsocketServer {
3133 connect : connect ,
3234 }
3335}
3436
37+ // NewWebsocketServerWs creates a new server with a connect method that takes a websocket.
38+ func NewWebsocketServerWs (connect func (* websocket.Conn , * http.Request ) (Tunnel , error )) * WebsocketServer {
39+ return & WebsocketServer {
40+ connectWs : connect ,
41+ }
42+ }
43+
3544const (
3645 websocketReadBufferSize = maxGuacMessage
3746 websocketWriteBufferSize = maxGuacMessage * 2
@@ -60,7 +69,13 @@ func (s *WebsocketServer) ServeHTTP(w http.ResponseWriter, r *http.Request) {
6069 }()
6170
6271 logrus .Debug ("Connecting to tunnel" )
63- tunnel , e := s .connect (r )
72+ var tunnel Tunnel
73+ var e error
74+ if s .connect != nil {
75+ tunnel , e = s .connect (r )
76+ } else {
77+ tunnel , e = s .connectWs (ws , r )
78+ }
6479 if e != nil {
6580 return
6681 }
0 commit comments