Browse code

Set HTTP upgrade headers when hijacking connection

Signed-off-by: Jean-Tiare Le Bigot <jt@yadutaf.fr>

Jean-Tiare Le Bigot authored on 2014/12/13 21:00:59
Showing 2 changed files
... ...
@@ -135,6 +135,8 @@ func (cli *DockerCli) hijack(method, path string, setRawTerminal bool, in io.Rea
135 135
 	}
136 136
 	req.Header.Set("User-Agent", "Docker-Client/"+dockerversion.VERSION)
137 137
 	req.Header.Set("Content-Type", "plain/text")
138
+	req.Header.Set("Connection", "Upgrade")
139
+	req.Header.Set("Upgrade", "tcp")
138 140
 	req.Host = cli.addr
139 141
 
140 142
 	dial, err := cli.dial()
... ...
@@ -887,7 +887,7 @@ func postContainersAttach(eng *engine.Engine, version version.Version, w http.Re
887 887
 
888 888
 	var errStream io.Writer
889 889
 
890
-	fmt.Fprintf(outStream, "HTTP/1.1 200 OK\r\nContent-Type: application/vnd.docker.raw-stream\r\n\r\n")
890
+	fmt.Fprintf(outStream, "HTTP/1.1 101 UPGRADED\r\nContent-Type: application/vnd.docker.raw-stream\r\nConnection: Upgrade\r\nUpgrade: tcp\r\n\r\n")
891 891
 
892 892
 	if c.GetSubEnv("Config") != nil && !c.GetSubEnv("Config").GetBool("Tty") && version.GreaterThanOrEqualTo("1.6") {
893 893
 		errStream = stdcopy.NewStdWriter(outStream, stdcopy.Stderr)
... ...
@@ -1137,7 +1137,7 @@ func postContainerExecStart(eng *engine.Engine, version version.Version, w http.
1137 1137
 
1138 1138
 		var errStream io.Writer
1139 1139
 
1140
-		fmt.Fprintf(outStream, "HTTP/1.1 200 OK\r\nContent-Type: application/vnd.docker.raw-stream\r\n\r\n")
1140
+		fmt.Fprintf(outStream, "HTTP/1.1 101 UPGRADED\r\nContent-Type: application/vnd.docker.raw-stream\r\nConnection: Upgrade\r\nUpgrade: tcp\r\n\r\n")
1141 1141
 		if !job.GetenvBool("Tty") && version.GreaterThanOrEqualTo("1.6") {
1142 1142
 			errStream = stdcopy.NewStdWriter(outStream, stdcopy.Stderr)
1143 1143
 			outStream = stdcopy.NewStdWriter(outStream, stdcopy.Stdout)