|
@@ -2,41 +2,19 @@ package client
|
|
|
|
|
|
import (
|
|
import (
|
|
"io"
|
|
"io"
|
|
- "os"
|
|
|
|
|
|
|
|
"github.com/Sirupsen/logrus"
|
|
"github.com/Sirupsen/logrus"
|
|
"github.com/docker/docker/pkg/stdcopy"
|
|
"github.com/docker/docker/pkg/stdcopy"
|
|
- "github.com/docker/docker/pkg/term"
|
|
|
|
"github.com/docker/engine-api/types"
|
|
"github.com/docker/engine-api/types"
|
|
)
|
|
)
|
|
|
|
|
|
-func (cli *DockerCli) holdHijackedConnection(setRawTerminal bool, inputStream io.ReadCloser, outputStream, errorStream io.Writer, resp types.HijackedResponse) error {
|
|
|
|
- var (
|
|
|
|
- err error
|
|
|
|
- oldState *term.State
|
|
|
|
- )
|
|
|
|
- if inputStream != nil && setRawTerminal && cli.isTerminalIn && os.Getenv("NORAW") == "" {
|
|
|
|
- oldState, err = term.SetRawTerminal(cli.inFd)
|
|
|
|
- if err != nil {
|
|
|
|
- return err
|
|
|
|
- }
|
|
|
|
- defer term.RestoreTerminal(cli.inFd, oldState)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+func (cli *DockerCli) holdHijackedConnection(tty bool, inputStream io.ReadCloser, outputStream, errorStream io.Writer, resp types.HijackedResponse) error {
|
|
|
|
+ var err error
|
|
receiveStdout := make(chan error, 1)
|
|
receiveStdout := make(chan error, 1)
|
|
if outputStream != nil || errorStream != nil {
|
|
if outputStream != nil || errorStream != nil {
|
|
go func() {
|
|
go func() {
|
|
- defer func() {
|
|
|
|
- if inputStream != nil {
|
|
|
|
- if setRawTerminal && cli.isTerminalIn {
|
|
|
|
- term.RestoreTerminal(cli.inFd, oldState)
|
|
|
|
- }
|
|
|
|
- inputStream.Close()
|
|
|
|
- }
|
|
|
|
- }()
|
|
|
|
-
|
|
|
|
// When TTY is ON, use regular copy
|
|
// When TTY is ON, use regular copy
|
|
- if setRawTerminal && outputStream != nil {
|
|
|
|
|
|
+ if tty && outputStream != nil {
|
|
_, err = io.Copy(outputStream, resp.Reader)
|
|
_, err = io.Copy(outputStream, resp.Reader)
|
|
} else {
|
|
} else {
|
|
_, err = stdcopy.StdCopy(outputStream, errorStream, resp.Reader)
|
|
_, err = stdcopy.StdCopy(outputStream, errorStream, resp.Reader)
|