sshpoke/internal/server/driver/ssh/sshtun/packet.go

32 lines
615 B
Go

package sshtun
type handshakePerLineReader struct {
buf []byte
off int
cb func(line string)
}
func newHandshakePerLineReader(cb func(string)) func([]byte) {
if cb == nil {
return nil
}
lr := &handshakePerLineReader{cb: cb, buf: make([]byte, 1024)}
return lr.packet
}
func (h *handshakePerLineReader) packet(p []byte) {
for _, char := range p {
if (char == 10 || char == 13) && len(h.buf) > 0 {
h.cb(string(h.buf[:h.off]))
h.off = 0
}
if cap(h.buf) <= (h.off + 1) {
newBuf := make([]byte, cap(h.buf)+256)
copy(newBuf, h.buf)
h.buf = newBuf
}
h.buf[h.off] = char
h.off++
}
}