Skip to content
Snippets Groups Projects

Add docker support for terminal

Merged Steve Xuereb requested to merge 3-proxy-docker-connection into master
All threads resolved!
Files
6
@@ -5,32 +5,31 @@ import (
"io"
)
type DockerProxy struct {
type EncodedProxy struct {
StopCh chan error
}
// stoppers is the number of goroutines that may attempt to call Stop()
func NewDockerProxy(stoppers int) *DockerProxy {
return &DockerProxy{
func NewEncodedProxy(stoppers int) *EncodedProxy {
return &EncodedProxy{
StopCh: make(chan error, stoppers+2), // each proxy() call is a stopper
}
}
func (p *DockerProxy) GetStopCh() chan error {
func (p *EncodedProxy) GetStopCh() chan error {
return p.StopCh
}
func (p *DockerProxy) Serve(client, docker io.ReadWriter, toAddr, fromAddr string) error {
go p.proxy(client, docker, toAddr, fromAddr)
go p.proxy(docker, client, toAddr, fromAddr)
func (p *EncodedProxy) Serve(client io.ReadWriter, server io.ReadWriter) error {
go p.proxy(client, server)
go p.proxy(server, client)
err := <-p.StopCh
return err
}
func (p *DockerProxy) proxy(to, from io.ReadWriter, toAddr, fromAddr string) {
func (p *EncodedProxy) proxy(to, from io.ReadWriter) {
_, err := io.Copy(to, from)
if err != nil {
p.StopCh <- fmt.Errorf("failed to pipe to %s from %s: %s", toAddr, fromAddr, err)
p.StopCh <- fmt.Errorf("failed to pipe stream: %v", err)
}
}
Loading