|
1 | 1 | var http = require('http'),
|
2 | 2 | https = require('https'),
|
3 |
| - util = require('util'), |
4 | 3 | common = require('../common'),
|
5 | 4 | passes = exports;
|
6 | 5 |
|
@@ -114,24 +113,27 @@ var passes = exports;
|
114 | 113 |
|
115 | 114 | if (proxyHead && proxyHead.length) proxySocket.unshift(proxyHead);
|
116 | 115 |
|
117 |
| - var writeHead = [ |
118 |
| - 'HTTP/1.1 101 Switching Protocols' |
119 |
| - ]; |
120 |
| - |
121 |
| - for(var i in proxyRes.headers) { |
122 |
| - if (util.isArray(proxyRes.headers[i])) { |
123 |
| - var a = proxyRes.headers[i]; |
124 |
| - var len = a.length; |
125 |
| - |
126 |
| - for (var x = 0; x < len; x++) { |
127 |
| - writeHead.push(i + ": " + a[x]); |
128 |
| - } |
129 |
| - } else { |
130 |
| - writeHead.push(i + ": " + proxyRes.headers[i]); |
131 |
| - } |
132 |
| - } |
| 116 | + // |
| 117 | + // Remark: Handle writing the headers to the socket when switching protocols |
| 118 | + // Also handles when a header is an array |
| 119 | + // |
| 120 | + socket.write( |
| 121 | + Object.keys(proxyRes.headers).reduce(function (head, key) { |
| 122 | + var value = proxyRes.headers[key]; |
| 123 | + |
| 124 | + if (!Array.isArray(value)) { |
| 125 | + head.push(key + ': ' + value); |
| 126 | + return head; |
| 127 | + } |
| 128 | + |
| 129 | + for (var i = 0; i < value.length; i++) { |
| 130 | + head.push(key + ': ' + value[i]); |
| 131 | + } |
| 132 | + return head; |
| 133 | + }, ['HTTP/1.1 101 Switching Protocols']) |
| 134 | + .join('\r\n') + '\r\n\r\n' |
| 135 | + ); |
133 | 136 |
|
134 |
| - socket.write(writeHead.join('\r\n') + '\r\n\r\n'); |
135 | 137 | proxySocket.pipe(socket).pipe(proxySocket);
|
136 | 138 |
|
137 | 139 | server.emit('open', proxySocket);
|
|
0 commit comments