cmd: support logging reads & writes from sshbytestream to a file.

This commit is contained in:
Christian Schwarz
2017-05-12 21:11:09 +02:00
parent 74719ad846
commit 6f84bf665d
3 changed files with 49 additions and 2 deletions

View File

@ -2,8 +2,48 @@ package util
import (
"io"
"os"
)
type ReadWriteCloserLogger struct {
RWC io.ReadWriteCloser
ReadFile *os.File
WriteFile *os.File
}
func NewReadWriteCloserLogger(rwc io.ReadWriteCloser, readlog, writelog string) (l *ReadWriteCloserLogger, err error) {
l = &ReadWriteCloserLogger{
RWC: rwc,
}
flags := os.O_CREATE | os.O_WRONLY
if l.ReadFile, err = os.OpenFile(readlog, flags, 0600); err != nil {
return
}
if l.WriteFile, err = os.OpenFile(writelog, flags, 0600); err != nil {
return
}
return
}
func (c *ReadWriteCloserLogger) Read(buf []byte) (n int, err error) {
n, err = c.RWC.Read(buf)
if _, writeErr := c.ReadFile.Write(buf[0:n]); writeErr != nil {
panic(writeErr)
}
return
}
func (c *ReadWriteCloserLogger) Write(buf []byte) (n int, err error) {
n, err = c.RWC.Write(buf)
if _, writeErr := c.WriteFile.Write(buf[0:n]); writeErr != nil {
panic(writeErr)
}
return
}
func (c *ReadWriteCloserLogger) Close() error {
return c.RWC.Close()
}
type ChainedReader struct {
Readers []io.Reader
curReader int