MCPcopy Index your code
hub / github.com/nirui/sshwifty / handleStream

Method handleStream

application/command/handler.go:208–238  ·  view source on GitHub ↗

handleStream handles streams Params: - d: Stream ID Returns: - error

(h Header, d byte, l log.Logger)

Source from the content-addressed store, hash-verified

206// Returns:
207// - error
208func (e *Handler) handleStream(h Header, d byte, l log.Logger) error {
209 st, stErr := e.streams.get(d)
210
211 if stErr != nil {
212 return stErr
213 }
214
215 // WARNING: stream.Tick and it's underlaying commands MUST NOT write to
216 // client. This is because the client data writer maybe locked
217 // and only current routine (the same routine will be used to
218 // tick the stream) can unlock it.
219 // Calling write may dead lock the routine, with there is no way
220 // of recover.
221 if st.running() {
222 l.Debug("Ticking stream")
223
224 return st.tick(h, &e.receiver, e.rBuf[:])
225 }
226
227 l.Debug("Start stream %d", h.Data())
228
229 if e.senderPaused {
230 e.sender.lock.Unlock()
231 defer e.sender.lock.Lock()
232 }
233
234 return st.reinit(h, &e.receiver, streamHandlerSender{
235 handlerSender: &e.sender,
236 sendDelay: e.sendDelay,
237 }, l, e.commands, e.cfg, e.rBuf[:])
238}
239
240func (e *Handler) handleClose(h Header, d byte, l log.Logger) error {
241 st, stErr := e.streams.get(d)

Callers 1

HandleMethod · 0.95

Calls 6

reinitMethod · 0.80
DebugMethod · 0.65
getMethod · 0.45
runningMethod · 0.45
tickMethod · 0.45
DataMethod · 0.45

Tested by

no test coverage detected