encoding: prefer ReadDir-style names
diff --git a/encoding/ssh/filexfer/fxp.go b/encoding/ssh/filexfer/fxp.go
index 84016d2..15caf6d 100644
--- a/encoding/ssh/filexfer/fxp.go
+++ b/encoding/ssh/filexfer/fxp.go
@@ -16,19 +16,19 @@
 	PacketTypeClose
 	PacketTypeRead
 	PacketTypeWrite
-	PacketTypeLstat
-	PacketTypeFstat
+	PacketTypeLStat
+	PacketTypeFStat
 	PacketTypeSetstat
-	PacketTypeFsetstat
-	PacketTypeOpendir
-	PacketTypeReaddir
+	PacketTypeFSetstat
+	PacketTypeOpenDir
+	PacketTypeReadDir
 	PacketTypeRemove
 	PacketTypeMkdir
 	PacketTypeRmdir
-	PacketTypeRealpath
+	PacketTypeRealPath
 	PacketTypeStat
 	PacketTypeRename
-	PacketTypeReadlink
+	PacketTypeReadLink
 	PacketTypeSymlink
 
 	// https://tools.ietf.org/html/draft-ietf-secsh-filexfer-07#section-3.3
@@ -70,17 +70,17 @@
 		return "SSH_FXP_READ"
 	case PacketTypeWrite:
 		return "SSH_FXP_WRITE"
-	case PacketTypeLstat:
+	case PacketTypeLStat:
 		return "SSH_FXP_LSTAT"
-	case PacketTypeFstat:
+	case PacketTypeFStat:
 		return "SSH_FXP_FSTAT"
 	case PacketTypeSetstat:
 		return "SSH_FXP_SETSTAT"
-	case PacketTypeFsetstat:
+	case PacketTypeFSetstat:
 		return "SSH_FXP_FSETSTAT"
-	case PacketTypeOpendir:
+	case PacketTypeOpenDir:
 		return "SSH_FXP_OPENDIR"
-	case PacketTypeReaddir:
+	case PacketTypeReadDir:
 		return "SSH_FXP_READDIR"
 	case PacketTypeRemove:
 		return "SSH_FXP_REMOVE"
@@ -88,13 +88,13 @@
 		return "SSH_FXP_MKDIR"
 	case PacketTypeRmdir:
 		return "SSH_FXP_RMDIR"
-	case PacketTypeRealpath:
+	case PacketTypeRealPath:
 		return "SSH_FXP_REALPATH"
 	case PacketTypeStat:
 		return "SSH_FXP_STAT"
 	case PacketTypeRename:
 		return "SSH_FXP_RENAME"
-	case PacketTypeReadlink:
+	case PacketTypeReadLink:
 		return "SSH_FXP_READLINK"
 	case PacketTypeSymlink:
 		return "SSH_FXP_SYMLINK"
diff --git a/encoding/ssh/filexfer/handle_packets.go b/encoding/ssh/filexfer/handle_packets.go
index 4ee4b11..4841bce 100644
--- a/encoding/ssh/filexfer/handle_packets.go
+++ b/encoding/ssh/filexfer/handle_packets.go
@@ -104,16 +104,16 @@
 	return nil
 }
 
-// FstatPacket defines the SSH_FXP_FSTAT packet.
-type FstatPacket struct {
+// FStatPacket defines the SSH_FXP_FSTAT packet.
+type FStatPacket struct {
 	Handle string
 }
 
 // MarshalPacket returns p as a two-part binary encoding of p.
-func (p *FstatPacket) MarshalPacket(reqid uint32) (header, payload []byte, err error) {
+func (p *FStatPacket) MarshalPacket(reqid uint32) (header, payload []byte, err error) {
 	size := 4 + len(p.Handle) // string(handle)
 
-	b := NewMarshalBuffer(PacketTypeFstat, reqid, size)
+	b := NewMarshalBuffer(PacketTypeFStat, reqid, size)
 
 	b.AppendString(p.Handle)
 
@@ -122,7 +122,7 @@
 
 // UnmarshalPacketBody unmarshals the packet body from the given Buffer.
 // It is assumed that the uint32(request-id) has already been consumed.
-func (p *FstatPacket) UnmarshalPacketBody(buf *Buffer) (err error) {
+func (p *FStatPacket) UnmarshalPacketBody(buf *Buffer) (err error) {
 	if p.Handle, err = buf.ConsumeString(); err != nil {
 		return err
 	}
@@ -130,17 +130,17 @@
 	return nil
 }
 
-// FsetstatPacket defines the SSH_FXP_FSETSTAT packet.
-type FsetstatPacket struct {
+// FSetstatPacket defines the SSH_FXP_FSETSTAT packet.
+type FSetstatPacket struct {
 	Handle string
 	Attrs  Attributes
 }
 
 // MarshalPacket returns p as a two-part binary encoding of p.
-func (p *FsetstatPacket) MarshalPacket(reqid uint32) (header, payload []byte, err error) {
+func (p *FSetstatPacket) MarshalPacket(reqid uint32) (header, payload []byte, err error) {
 	size := 4 + len(p.Handle) + p.Attrs.Len() // string(handle) + ATTRS(attrs)
 
-	b := NewMarshalBuffer(PacketTypeFsetstat, reqid, size)
+	b := NewMarshalBuffer(PacketTypeFSetstat, reqid, size)
 
 	b.AppendString(p.Handle)
 
@@ -151,7 +151,7 @@
 
 // UnmarshalPacketBody unmarshals the packet body from the given Buffer.
 // It is assumed that the uint32(request-id) has already been consumed.
-func (p *FsetstatPacket) UnmarshalPacketBody(buf *Buffer) (err error) {
+func (p *FSetstatPacket) UnmarshalPacketBody(buf *Buffer) (err error) {
 	if p.Handle, err = buf.ConsumeString(); err != nil {
 		return err
 	}
@@ -159,16 +159,16 @@
 	return p.Attrs.UnmarshalFrom(buf)
 }
 
-// ReaddirPacket defines the SSH_FXP_READDIR packet.
-type ReaddirPacket struct {
+// ReadDirPacket defines the SSH_FXP_READDIR packet.
+type ReadDirPacket struct {
 	Handle string
 }
 
 // MarshalPacket returns p as a two-part binary encoding of p.
-func (p *ReaddirPacket) MarshalPacket(reqid uint32) (header, payload []byte, err error) {
+func (p *ReadDirPacket) MarshalPacket(reqid uint32) (header, payload []byte, err error) {
 	size := 4 + len(p.Handle) // string(handle)
 
-	b := NewMarshalBuffer(PacketTypeReaddir, reqid, size)
+	b := NewMarshalBuffer(PacketTypeReadDir, reqid, size)
 
 	b.AppendString(p.Handle)
 
@@ -177,7 +177,7 @@
 
 // UnmarshalPacketBody unmarshals the packet body from the given Buffer.
 // It is assumed that the uint32(request-id) has already been consumed.
-func (p *ReaddirPacket) UnmarshalPacketBody(buf *Buffer) (err error) {
+func (p *ReadDirPacket) UnmarshalPacketBody(buf *Buffer) (err error) {
 	if p.Handle, err = buf.ConsumeString(); err != nil {
 		return err
 	}
diff --git a/encoding/ssh/filexfer/handle_packets_test.go b/encoding/ssh/filexfer/handle_packets_test.go
index e1096dc..b8599ad 100644
--- a/encoding/ssh/filexfer/handle_packets_test.go
+++ b/encoding/ssh/filexfer/handle_packets_test.go
@@ -154,15 +154,15 @@
 	}
 }
 
-var _ Packet = &FstatPacket{}
+var _ Packet = &FStatPacket{}
 
-func TestFstatPacket(t *testing.T) {
+func TestFStatPacket(t *testing.T) {
 	const (
 		id     = 42
 		handle = "somehandle"
 	)
 
-	p := &FstatPacket{
+	p := &FStatPacket{
 		Handle: "somehandle",
 	}
 
@@ -182,7 +182,7 @@
 		t.Fatalf("Marshal() = %X, but wanted %X", data, want)
 	}
 
-	*p = FstatPacket{}
+	*p = FStatPacket{}
 
 	// UnmarshalPacketBody assumes the (length, type, request-id) have already been consumed.
 	if err := p.UnmarshalPacketBody(NewBuffer(data[9:])); err != nil {
@@ -194,16 +194,16 @@
 	}
 }
 
-var _ Packet = &FsetstatPacket{}
+var _ Packet = &FSetstatPacket{}
 
-func TestFsetstatPacket(t *testing.T) {
+func TestFSetstatPacket(t *testing.T) {
 	const (
 		id     = 42
 		handle = "somehandle"
 		perms  = 0x87654321
 	)
 
-	p := &FsetstatPacket{
+	p := &FSetstatPacket{
 		Handle: "somehandle",
 		Attrs: Attributes{
 			Flags:       AttrPermissions,
@@ -229,7 +229,7 @@
 		t.Fatalf("Marshal() = %X, but wanted %X", data, want)
 	}
 
-	*p = FsetstatPacket{}
+	*p = FSetstatPacket{}
 
 	// UnmarshalPacketBody assumes the (length, type, request-id) have already been consumed.
 	if err := p.UnmarshalPacketBody(NewBuffer(data[9:])); err != nil {
@@ -241,15 +241,15 @@
 	}
 }
 
-var _ Packet = &ReaddirPacket{}
+var _ Packet = &ReadDirPacket{}
 
-func TestReaddirPacket(t *testing.T) {
+func TestReadDirPacket(t *testing.T) {
 	const (
 		id     = 42
 		handle = "somehandle"
 	)
 
-	p := &ReaddirPacket{
+	p := &ReadDirPacket{
 		Handle: "somehandle",
 	}
 
@@ -269,7 +269,7 @@
 		t.Fatalf("Marshal() = %X, but wanted %X", data, want)
 	}
 
-	*p = ReaddirPacket{}
+	*p = ReadDirPacket{}
 
 	// UnmarshalPacketBody assumes the (length, type, request-id) have already been consumed.
 	if err := p.UnmarshalPacketBody(NewBuffer(data[9:])); err != nil {
diff --git a/encoding/ssh/filexfer/open_packets.go b/encoding/ssh/filexfer/open_packets.go
index 988cd0b..4284d0f 100644
--- a/encoding/ssh/filexfer/open_packets.go
+++ b/encoding/ssh/filexfer/open_packets.go
@@ -46,16 +46,16 @@
 	return p.Attrs.UnmarshalFrom(buf)
 }
 
-// OpendirPacket defines the SSH_FXP_OPENDIR packet.
-type OpendirPacket struct {
+// OpenDirPacket defines the SSH_FXP_OPENDIR packet.
+type OpenDirPacket struct {
 	Path string
 }
 
 // MarshalPacket returns p as a two-part binary encoding of p.
-func (p *OpendirPacket) MarshalPacket(reqid uint32) (header, payload []byte, err error) {
+func (p *OpenDirPacket) MarshalPacket(reqid uint32) (header, payload []byte, err error) {
 	size := 4 + len(p.Path) // string(path)
 
-	b := NewMarshalBuffer(PacketTypeOpendir, reqid, size)
+	b := NewMarshalBuffer(PacketTypeOpenDir, reqid, size)
 
 	b.AppendString(p.Path)
 
@@ -64,7 +64,7 @@
 
 // UnmarshalPacketBody unmarshals the packet body from the given Buffer.
 // It is assumed that the uint32(request-id) has already been consumed.
-func (p *OpendirPacket) UnmarshalPacketBody(buf *Buffer) (err error) {
+func (p *OpenDirPacket) UnmarshalPacketBody(buf *Buffer) (err error) {
 	if p.Path, err = buf.ConsumeString(); err != nil {
 		return err
 	}
diff --git a/encoding/ssh/filexfer/open_packets_test.go b/encoding/ssh/filexfer/open_packets_test.go
index 2762f87..f4b0a44 100644
--- a/encoding/ssh/filexfer/open_packets_test.go
+++ b/encoding/ssh/filexfer/open_packets_test.go
@@ -66,15 +66,15 @@
 	}
 }
 
-var _ Packet = &OpendirPacket{}
+var _ Packet = &OpenDirPacket{}
 
-func TestOpendirPacket(t *testing.T) {
+func TestOpenDirPacket(t *testing.T) {
 	const (
 		id   = 42
 		path = "/foo"
 	)
 
-	p := &OpendirPacket{
+	p := &OpenDirPacket{
 		Path: path,
 	}
 
@@ -94,7 +94,7 @@
 		t.Fatalf("Marshal() = %X, but wanted %X", data, want)
 	}
 
-	*p = OpendirPacket{}
+	*p = OpenDirPacket{}
 
 	// UnmarshalPacketBody assumes the (length, type, request-id) have already been consumed.
 	if err := p.UnmarshalPacketBody(NewBuffer(data[9:])); err != nil {
diff --git a/encoding/ssh/filexfer/packets.go b/encoding/ssh/filexfer/packets.go
index 28b3a11..e32f1c4 100644
--- a/encoding/ssh/filexfer/packets.go
+++ b/encoding/ssh/filexfer/packets.go
@@ -16,32 +16,32 @@
 		return new(ReadPacket), nil
 	case PacketTypeWrite:
 		return new(WritePacket), nil
-	case PacketTypeLstat:
-		return new(LstatPacket), nil
-	case PacketTypeFstat:
-		return new(FstatPacket), nil
+	case PacketTypeLStat:
+		return new(LStatPacket), nil
+	case PacketTypeFStat:
+		return new(FStatPacket), nil
 	case PacketTypeSetstat:
 		return new(SetstatPacket), nil
-	case PacketTypeFsetstat:
-		return new(FsetstatPacket), nil
-	case PacketTypeOpendir:
-		return new(OpendirPacket), nil
-	case PacketTypeReaddir:
-		return new(ReaddirPacket), nil
+	case PacketTypeFSetstat:
+		return new(FSetstatPacket), nil
+	case PacketTypeOpenDir:
+		return new(OpenDirPacket), nil
+	case PacketTypeReadDir:
+		return new(ReadDirPacket), nil
 	case PacketTypeRemove:
 		return new(RemovePacket), nil
 	case PacketTypeMkdir:
 		return new(MkdirPacket), nil
 	case PacketTypeRmdir:
 		return new(RmdirPacket), nil
-	case PacketTypeRealpath:
-		return new(RealpathPacket), nil
+	case PacketTypeRealPath:
+		return new(RealPathPacket), nil
 	case PacketTypeStat:
 		return new(StatPacket), nil
 	case PacketTypeRename:
 		return new(RenamePacket), nil
-	case PacketTypeReadlink:
-		return new(ReadlinkPacket), nil
+	case PacketTypeReadLink:
+		return new(ReadLinkPacket), nil
 	case PacketTypeSymlink:
 		return new(SymlinkPacket), nil
 	case PacketTypeExtended:
diff --git a/encoding/ssh/filexfer/path_packets.go b/encoding/ssh/filexfer/path_packets.go
index a814b2f..45ec5a5 100644
--- a/encoding/ssh/filexfer/path_packets.go
+++ b/encoding/ssh/filexfer/path_packets.go
@@ -1,15 +1,15 @@
 package filexfer
 
-// LstatPacket defines the SSH_FXP_LSTAT packet.
-type LstatPacket struct {
+// LStatPacket defines the SSH_FXP_LSTAT packet.
+type LStatPacket struct {
 	Path string
 }
 
 // MarshalPacket returns p as a two-part binary encoding of p.
-func (p *LstatPacket) MarshalPacket(reqid uint32) (header, payload []byte, err error) {
+func (p *LStatPacket) MarshalPacket(reqid uint32) (header, payload []byte, err error) {
 	size := 4 + len(p.Path) // string(path)
 
-	b := NewMarshalBuffer(PacketTypeLstat, reqid, size)
+	b := NewMarshalBuffer(PacketTypeLStat, reqid, size)
 
 	b.AppendString(p.Path)
 
@@ -18,7 +18,7 @@
 
 // UnmarshalPacketBody unmarshals the packet body from the given Buffer.
 // It is assumed that the uint32(request-id) has already been consumed.
-func (p *LstatPacket) UnmarshalPacketBody(buf *Buffer) (err error) {
+func (p *LStatPacket) UnmarshalPacketBody(buf *Buffer) (err error) {
 	if p.Path, err = buf.ConsumeString(); err != nil {
 		return err
 	}
@@ -136,16 +136,16 @@
 	return nil
 }
 
-// RealpathPacket defines the SSH_FXP_REALPATH packet.
-type RealpathPacket struct {
+// RealPathPacket defines the SSH_FXP_REALPATH packet.
+type RealPathPacket struct {
 	Path string
 }
 
 // MarshalPacket returns p as a two-part binary encoding of p.
-func (p *RealpathPacket) MarshalPacket(reqid uint32) (header, payload []byte, err error) {
+func (p *RealPathPacket) MarshalPacket(reqid uint32) (header, payload []byte, err error) {
 	size := 4 + len(p.Path) // string(path)
 
-	b := NewMarshalBuffer(PacketTypeRealpath, reqid, size)
+	b := NewMarshalBuffer(PacketTypeRealPath, reqid, size)
 
 	b.AppendString(p.Path)
 
@@ -154,7 +154,7 @@
 
 // UnmarshalPacketBody unmarshals the packet body from the given Buffer.
 // It is assumed that the uint32(request-id) has already been consumed.
-func (p *RealpathPacket) UnmarshalPacketBody(buf *Buffer) (err error) {
+func (p *RealPathPacket) UnmarshalPacketBody(buf *Buffer) (err error) {
 	if p.Path, err = buf.ConsumeString(); err != nil {
 		return err
 	}
@@ -221,16 +221,16 @@
 	return nil
 }
 
-// ReadlinkPacket defines the SSH_FXP_READLINK packet.
-type ReadlinkPacket struct {
+// ReadLinkPacket defines the SSH_FXP_READLINK packet.
+type ReadLinkPacket struct {
 	Path string
 }
 
 // MarshalPacket returns p as a two-part binary encoding of p.
-func (p *ReadlinkPacket) MarshalPacket(reqid uint32) (header, payload []byte, err error) {
+func (p *ReadLinkPacket) MarshalPacket(reqid uint32) (header, payload []byte, err error) {
 	size := 4 + len(p.Path) // string(path)
 
-	b := NewMarshalBuffer(PacketTypeReadlink, reqid, size)
+	b := NewMarshalBuffer(PacketTypeReadLink, reqid, size)
 
 	b.AppendString(p.Path)
 
@@ -239,7 +239,7 @@
 
 // UnmarshalPacketBody unmarshals the packet body from the given Buffer.
 // It is assumed that the uint32(request-id) has already been consumed.
-func (p *ReadlinkPacket) UnmarshalPacketBody(buf *Buffer) (err error) {
+func (p *ReadLinkPacket) UnmarshalPacketBody(buf *Buffer) (err error) {
 	if p.Path, err = buf.ConsumeString(); err != nil {
 		return err
 	}
diff --git a/encoding/ssh/filexfer/path_packets_test.go b/encoding/ssh/filexfer/path_packets_test.go
index c981b75..aba3200 100644
--- a/encoding/ssh/filexfer/path_packets_test.go
+++ b/encoding/ssh/filexfer/path_packets_test.go
@@ -5,15 +5,15 @@
 	"testing"
 )
 
-var _ Packet = &LstatPacket{}
+var _ Packet = &LStatPacket{}
 
-func TestLstatPacket(t *testing.T) {
+func TestLStatPacket(t *testing.T) {
 	const (
 		id   = 42
 		path = "/foo"
 	)
 
-	p := &LstatPacket{
+	p := &LStatPacket{
 		Path: path,
 	}
 
@@ -33,7 +33,7 @@
 		t.Fatalf("Marshal() = %X, but wanted %X", data, want)
 	}
 
-	*p = LstatPacket{}
+	*p = LStatPacket{}
 
 	// UnmarshalPacketBody assumes the (length, type, request-id) have already been consumed.
 	if err := p.UnmarshalPacketBody(NewBuffer(data[9:])); err != nil {
@@ -235,15 +235,15 @@
 	}
 }
 
-var _ Packet = &RealpathPacket{}
+var _ Packet = &RealPathPacket{}
 
-func TestRealpathPacket(t *testing.T) {
+func TestRealPathPacket(t *testing.T) {
 	const (
 		id   = 42
 		path = "/foo"
 	)
 
-	p := &RealpathPacket{
+	p := &RealPathPacket{
 		Path: path,
 	}
 
@@ -263,7 +263,7 @@
 		t.Fatalf("Marshal() = %X, but wanted %X", data, want)
 	}
 
-	*p = RealpathPacket{}
+	*p = RealPathPacket{}
 
 	// UnmarshalPacketBody assumes the (length, type, request-id) have already been consumed.
 	if err := p.UnmarshalPacketBody(NewBuffer(data[9:])); err != nil {
@@ -362,15 +362,15 @@
 	}
 }
 
-var _ Packet = &ReadlinkPacket{}
+var _ Packet = &ReadLinkPacket{}
 
-func TestReadlinkPacket(t *testing.T) {
+func TestReadLinkPacket(t *testing.T) {
 	const (
 		id   = 42
 		path = "/foo"
 	)
 
-	p := &ReadlinkPacket{
+	p := &ReadLinkPacket{
 		Path: path,
 	}
 
@@ -390,7 +390,7 @@
 		t.Fatalf("Marshal() = %X, but wanted %X", data, want)
 	}
 
-	*p = ReadlinkPacket{}
+	*p = ReadLinkPacket{}
 
 	// UnmarshalPacketBody assumes the (length, type, request-id) have already been consumed.
 	if err := p.UnmarshalPacketBody(NewBuffer(data[9:])); err != nil {