MCPcopy
hub / github.com/nirui/sshwifty / handleControl

Method handleControl

application/command/handler.go:150–199  ·  view source on GitHub ↗

handleControl handles Control request Params: - d: length of the control message Returns: - error

(d byte, l log.Logger)

Source from the content-addressed store, hash-verified

148// Returns:
149// - error
150func (e *Handler) handleControl(d byte, l log.Logger) error {
151 buf := e.rBuf[1:]
152
153 if len(buf) < int(d) {
154 return ErrHandlerControlMessageTooLong
155 }
156
157 rLen, rErr := io.ReadFull(&e.receiver, buf[:d])
158
159 if rErr != nil {
160 return rErr
161 }
162
163 if rLen <= 0 {
164 return ErrHandlerInvalidControlMessage
165 }
166
167 switch buf[0] {
168 case HeaderControlEcho:
169 hd := HeaderControl
170 hd.Set(d)
171
172 e.rBuf[0] = byte(hd)
173 e.rBuf[1] = HeaderControlEcho
174
175 var wErr error
176
177 if !e.senderPaused {
178 _, wErr = e.sender.Write(e.rBuf[:rLen+1])
179 } else {
180 _, wErr = e.sender.writer.Write(e.rBuf[:rLen+1])
181 }
182
183 return wErr
184
185 case HeaderControlPauseStream:
186 if !e.senderPaused {
187 e.sender.lock.Lock()
188 e.senderPaused = true
189 }
190
191 case HeaderControlResumeStream:
192 if e.senderPaused {
193 e.sender.lock.Unlock()
194 e.senderPaused = false
195 }
196 }
197
198 return nil
199}
200
201// handleStream handles streams
202//

Callers 1

HandleMethod · 0.95

Calls 2

WriteMethod · 0.65
SetMethod · 0.45

Tested by

no test coverage detected