mirror of https://gogs.blitter.com/RLabs/xs
No need for custom hkexsh.Copy()
This commit is contained in:
parent
c5498642fc
commit
70448dda08
39
hkexnet.go
39
hkexnet.go
|
@ -530,42 +530,3 @@ func (c *Conn) chaffHelper(szMax int) {
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
// hkexsh.Copy() is a modified version of io.Copy()
|
|
||||||
func Copy(dst io.Writer, src io.Reader) (written int64, err error) {
|
|
||||||
// If the reader has a WriteTo method, use it to do the copy.
|
|
||||||
// Avoids an allocation and a copy.
|
|
||||||
if wt, ok := src.(io.WriterTo); ok {
|
|
||||||
return wt.WriteTo(dst)
|
|
||||||
}
|
|
||||||
// Similarly, if the writer has a ReadFrom method, use it to do the copy.
|
|
||||||
if rt, ok := dst.(io.ReaderFrom); ok {
|
|
||||||
return rt.ReadFrom(src)
|
|
||||||
}
|
|
||||||
|
|
||||||
buf := make([]byte, 32*1024)
|
|
||||||
for {
|
|
||||||
nr, er := src.Read(buf)
|
|
||||||
if nr > 0 {
|
|
||||||
nw, ew := dst.Write(buf[0:nr])
|
|
||||||
if nw > 0 {
|
|
||||||
written += int64(nw)
|
|
||||||
}
|
|
||||||
if ew != nil {
|
|
||||||
err = ew
|
|
||||||
break
|
|
||||||
}
|
|
||||||
if nr != nw {
|
|
||||||
err = io.ErrShortWrite
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if er != nil {
|
|
||||||
if er != io.EOF {
|
|
||||||
err = er
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return written, err
|
|
||||||
}
|
|
||||||
|
|
|
@ -230,7 +230,7 @@ func main() {
|
||||||
//!_, outerr := io.Copy(conn, os.Stdin)
|
//!_, outerr := io.Copy(conn, os.Stdin)
|
||||||
conn.Chaff(true, 100, 500, 32) // enable client->server chaffing
|
conn.Chaff(true, 100, 500, 32) // enable client->server chaffing
|
||||||
_, outerr := func(conn *hkexsh.Conn, r io.Reader) (w int64, e error) {
|
_, outerr := func(conn *hkexsh.Conn, r io.Reader) (w int64, e error) {
|
||||||
return hkexsh.Copy(conn, r)
|
return io.Copy(conn, r)
|
||||||
}(conn, os.Stdin)
|
}(conn, os.Stdin)
|
||||||
|
|
||||||
if outerr != nil {
|
if outerr != nil {
|
||||||
|
|
|
@ -131,7 +131,7 @@ func runShellAs(who string, cmd string, interactive bool, conn hkexsh.Conn) (err
|
||||||
|
|
||||||
// Copy stdin to the pty.. (bgnd goroutine)
|
// Copy stdin to the pty.. (bgnd goroutine)
|
||||||
go func() {
|
go func() {
|
||||||
_, _ = hkexsh.Copy(ptmx, conn)
|
_, _ = io.Copy(ptmx, conn)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
// ..and the pty to stdout.
|
// ..and the pty to stdout.
|
||||||
|
@ -140,8 +140,7 @@ func runShellAs(who string, cmd string, interactive bool, conn hkexsh.Conn) (err
|
||||||
// --knowledge of another thread which would do chaffing.
|
// --knowledge of another thread which would do chaffing.
|
||||||
// --Modify pty somehow to slave the command through hkexsh.Copy() ?
|
// --Modify pty somehow to slave the command through hkexsh.Copy() ?
|
||||||
conn.Chaff(true, 100, 500, 32)
|
conn.Chaff(true, 100, 500, 32)
|
||||||
_, _ = hkexsh.Copy(conn, ptmx)
|
_, _ = io.Copy(conn, ptmx)
|
||||||
//_, _ = io.Copy(conn, ptmx)
|
|
||||||
|
|
||||||
//err = c.Run() // returns when c finishes.
|
//err = c.Run() // returns when c finishes.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue