diff --git a/connection.go b/connection.go index a97935d3b..eda050f63 100644 --- a/connection.go +++ b/connection.go @@ -7,27 +7,27 @@ import ( ) type Connection struct { - SessionID string `json:"sessionId"` - SessionToken string `json:"sessionToken"` - RelaySAS string `json:"relaySas"` - RelayEndpoint string `json:"relayEndpoint"` + SessionID string + SessionToken string + RelaySAS string + RelayEndpoint string } func (r Connection) validate() error { if r.SessionID == "" { - return errors.New("connection sessionID is required") + return errors.New("connection SessionID is required") } if r.SessionToken == "" { - return errors.New("connection sessionToken is required") + return errors.New("connection SessionToken is required") } if r.RelaySAS == "" { - return errors.New("connection relaySas is required") + return errors.New("connection RelaySAS is required") } if r.RelayEndpoint == "" { - return errors.New("connection relayEndpoint is required") + return errors.New("connection RelayEndpoint is required") } return nil diff --git a/port_forwarder.go b/port_forwarder.go index 1227493b2..8d42f3c05 100644 --- a/port_forwarder.go +++ b/port_forwarder.go @@ -4,22 +4,24 @@ import ( "context" "fmt" "io" - "log" "net" "strconv" - - "golang.org/x/crypto/ssh" ) type PortForwarder struct { - client *Client - server *Server - port int - channels []ssh.Channel + client *Client + server *Server + port int + errCh chan error } func NewPortForwarder(client *Client, server *Server, port int) *PortForwarder { - return &PortForwarder{client, server, port, []ssh.Channel{}} + return &PortForwarder{ + client: client, + server: server, + port: port, + errCh: make(chan error), + } } func (l *PortForwarder) Start(ctx context.Context) error { @@ -37,22 +39,18 @@ func (l *PortForwarder) Start(ctx context.Context) error { go l.handleConnection(ctx, conn) } - // clean up after ourselves - return nil } func (l *PortForwarder) handleConnection(ctx context.Context, conn net.Conn) { channel, err := l.client.openStreamingChannel(ctx, l.server.streamName, l.server.streamCondition) if err != nil { - log.Println("errrr handle Connect") - log.Println(err) // TODO(josebalius) handle this somehow + l.errCh <- fmt.Errorf("error opening streaming channel for new connection: %v", err) + return } - l.channels = append(l.channels, channel) copyConn := func(writer io.Writer, reader io.Reader) { - _, err := io.Copy(writer, reader) - if err != nil { + if _, err := io.Copy(writer, reader); err != nil { channel.Close() conn.Close() }