Skip to content

Commit

Permalink
Add DialWithDebugOutput to log commands.
Browse files Browse the repository at this point in the history
  • Loading branch information
jlaffaye committed Apr 17, 2019
1 parent 75b9ebe commit 8b7b512
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 1 deletion.
21 changes: 21 additions & 0 deletions debug.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package ftp

import "io"

type debugWrapper struct {
conn io.ReadWriteCloser
io.Reader
io.Writer
}

func newDebugWrapper(conn io.ReadWriteCloser, w io.Writer) io.ReadWriteCloser {
return &debugWrapper{
Reader: io.TeeReader(conn, w),
Writer: io.MultiWriter(w, conn),
conn: conn,
}
}

func (w *debugWrapper) Close() error {
return w.conn.Close()
}
16 changes: 15 additions & 1 deletion ftp.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ type dialOptions struct {
conn net.Conn
disableEPSV bool
location *time.Location
debugOutput io.Writer
}

// Entry describes a file and is returned by List().
Expand Down Expand Up @@ -100,10 +101,15 @@ func DialWithOptions(addr string, options ...DialOption) (*ServerConn, error) {
// If we use the domain name, we might not resolve to the same IP.
remoteAddr := tconn.RemoteAddr().(*net.TCPAddr)

var sourceConn io.ReadWriteCloser = tconn
if do.debugOutput != nil {
sourceConn = newDebugWrapper(tconn, do.debugOutput)
}

c := &ServerConn{
options: do,
features: make(map[string]string),
conn: textproto.NewConn(tconn),
conn: textproto.NewConn(sourceConn),
host: remoteAddr.IP.String(),
}

Expand Down Expand Up @@ -178,6 +184,14 @@ func DialWithTLS(tlsConfig tls.Config) DialOption {
}}
}

// DialWithDebugOutput returns a DialOption that configures the ServerConn to write to the Writer
// everything it reads from the server
func DialWithDebugOutput(w io.Writer) DialOption {
return DialOption{func(do *dialOptions) {
do.debugOutput = w
}}
}

// Connect is an alias to Dial, for backward compatibility
func Connect(addr string) (*ServerConn, error) {
return Dial(addr)
Expand Down

0 comments on commit 8b7b512

Please sign in to comment.