MCPcopy Create free account
hub / github.com/cloudfoundry/garden / streamProcess

Method streamProcess

client/connection/connection.go:208–293  ·  view source on GitHub ↗
(handle string, processIO garden.ProcessIO, hijackedConn net.Conn, hijackedResponseReader *bufio.Reader)

Source from the content-addressed store, hash-verified

206}
207
208func (c *connection) streamProcess(handle string, processIO garden.ProcessIO, hijackedConn net.Conn, hijackedResponseReader *bufio.Reader) (garden.Process, error) {
209 decoder := json.NewDecoder(hijackedResponseReader)
210
211 payload := &transport.ProcessPayload{}
212 if err := decoder.Decode(payload); err != nil {
213 return nil, err
214 }
215
216 processPipeline := &processStream{
217 processID: payload.ProcessID,
218 conn: hijackedConn,
219 }
220
221 hijack := func(streamType string) (net.Conn, io.Reader, error) {
222 params := rata.Params{
223 "handle": handle,
224 "pid": processPipeline.ProcessID(),
225 "streamid": payload.StreamID,
226 }
227
228 return c.hijacker.Hijack(
229 streamType,
230 nil,
231 params,
232 nil,
233 "application/json",
234 )
235 }
236
237 process := newProcess(payload.ProcessID, processPipeline)
238 streamHandler := newStreamHandler(c.log)
239 streamHandler.streamIn(processPipeline, processIO.Stdin)
240
241 var stdoutConn net.Conn
242 if processIO.Stdout != nil {
243 var (
244 stdout io.Reader
245 err error
246 )
247 stdoutConn, stdout, err = hijack(routes.Stdout)
248 if err != nil {
249 werr := fmt.Errorf("connection: failed to hijack stream %s: %s", routes.Stdout, err)
250 process.exited(0, werr)
251 err := hijackedConn.Close()
252 if err != nil {
253 c.log.Debug("failed-to-close-hijacked-connection", lager.Data{"error": err})
254 }
255 return process, nil
256 }
257 streamHandler.streamOut(processIO.Stdout, stdout)
258 }
259
260 var stderrConn net.Conn
261 if processIO.Stderr != nil {
262 var (
263 stderr io.Reader
264 err error
265 )

Callers 2

RunMethod · 0.95
AttachMethod · 0.95

Calls 10

ProcessIDMethod · 0.95
newProcessFunction · 0.85
newStreamHandlerFunction · 0.85
streamInMethod · 0.80
exitedMethod · 0.80
streamOutMethod · 0.80
streamErrMethod · 0.80
waitMethod · 0.80
HijackMethod · 0.65
CloseMethod · 0.45

Tested by

no test coverage detected