aboutsummaryrefslogtreecommitdiff
path: root/internal/encoding/ssh/filexfer/fxp.go
blob: 15caf6d28ae6d307263439584d17b3c2a3f59455 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package filexfer

import (
	"fmt"
)

// PacketType defines the various SFTP packet types.
type PacketType uint8

// Request packet types.
const (
	// https://tools.ietf.org/html/draft-ietf-secsh-filexfer-02#section-3
	PacketTypeInit = PacketType(iota + 1)
	PacketTypeVersion
	PacketTypeOpen
	PacketTypeClose
	PacketTypeRead
	PacketTypeWrite
	PacketTypeLStat
	PacketTypeFStat
	PacketTypeSetstat
	PacketTypeFSetstat
	PacketTypeOpenDir
	PacketTypeReadDir
	PacketTypeRemove
	PacketTypeMkdir
	PacketTypeRmdir
	PacketTypeRealPath
	PacketTypeStat
	PacketTypeRename
	PacketTypeReadLink
	PacketTypeSymlink

	// https://tools.ietf.org/html/draft-ietf-secsh-filexfer-07#section-3.3
	PacketTypeV6Link

	// https://tools.ietf.org/html/draft-ietf-secsh-filexfer-08#section-3.3
	PacketTypeV6Block
	PacketTypeV6Unblock
)

// Response packet types.
const (
	// https://tools.ietf.org/html/draft-ietf-secsh-filexfer-02#section-3
	PacketTypeStatus = PacketType(iota + 101)
	PacketTypeHandle
	PacketTypeData
	PacketTypeName
	PacketTypeAttrs
)

// Extended packet types.
const (
	// https://tools.ietf.org/html/draft-ietf-secsh-filexfer-02#section-3
	PacketTypeExtended = PacketType(iota + 200)
	PacketTypeExtendedReply
)

func (f PacketType) String() string {
	switch f {
	case PacketTypeInit:
		return "SSH_FXP_INIT"
	case PacketTypeVersion:
		return "SSH_FXP_VERSION"
	case PacketTypeOpen:
		return "SSH_FXP_OPEN"
	case PacketTypeClose:
		return "SSH_FXP_CLOSE"
	case PacketTypeRead:
		return "SSH_FXP_READ"
	case PacketTypeWrite:
		return "SSH_FXP_WRITE"
	case PacketTypeLStat:
		return "SSH_FXP_LSTAT"
	case PacketTypeFStat:
		return "SSH_FXP_FSTAT"
	case PacketTypeSetstat:
		return "SSH_FXP_SETSTAT"
	case PacketTypeFSetstat:
		return "SSH_FXP_FSETSTAT"
	case PacketTypeOpenDir:
		return "SSH_FXP_OPENDIR"
	case PacketTypeReadDir:
		return "SSH_FXP_READDIR"
	case PacketTypeRemove:
		return "SSH_FXP_REMOVE"
	case PacketTypeMkdir:
		return "SSH_FXP_MKDIR"
	case PacketTypeRmdir:
		return "SSH_FXP_RMDIR"
	case PacketTypeRealPath:
		return "SSH_FXP_REALPATH"
	case PacketTypeStat:
		return "SSH_FXP_STAT"
	case PacketTypeRename:
		return "SSH_FXP_RENAME"
	case PacketTypeReadLink:
		return "SSH_FXP_READLINK"
	case PacketTypeSymlink:
		return "SSH_FXP_SYMLINK"
	case PacketTypeV6Link:
		return "SSH_FXP_LINK"
	case PacketTypeV6Block:
		return "SSH_FXP_BLOCK"
	case PacketTypeV6Unblock:
		return "SSH_FXP_UNBLOCK"
	case PacketTypeStatus:
		return "SSH_FXP_STATUS"
	case PacketTypeHandle:
		return "SSH_FXP_HANDLE"
	case PacketTypeData:
		return "SSH_FXP_DATA"
	case PacketTypeName:
		return "SSH_FXP_NAME"
	case PacketTypeAttrs:
		return "SSH_FXP_ATTRS"
	case PacketTypeExtended:
		return "SSH_FXP_EXTENDED"
	case PacketTypeExtendedReply:
		return "SSH_FXP_EXTENDED_REPLY"
	default:
		return fmt.Sprintf("SSH_FXP_UNKNOWN(%d)", f)
	}
}