a geicko-2 based round robin ranking system designed to test c++ battleship submissions
battleship.dunkirk.sh
1package sshfx
2
3import (
4 "fmt"
5)
6
7// PacketType defines the various SFTP packet types.
8type PacketType uint8
9
10// Request packet types.
11const (
12 // https://filezilla-project.org/specs/draft-ietf-secsh-filexfer-02.txt#section-3
13 PacketTypeInit = PacketType(iota + 1)
14 PacketTypeVersion
15 PacketTypeOpen
16 PacketTypeClose
17 PacketTypeRead
18 PacketTypeWrite
19 PacketTypeLStat
20 PacketTypeFStat
21 PacketTypeSetstat
22 PacketTypeFSetstat
23 PacketTypeOpenDir
24 PacketTypeReadDir
25 PacketTypeRemove
26 PacketTypeMkdir
27 PacketTypeRmdir
28 PacketTypeRealPath
29 PacketTypeStat
30 PacketTypeRename
31 PacketTypeReadLink
32 PacketTypeSymlink
33
34 // https://filezilla-project.org/specs/draft-ietf-secsh-filexfer-07.txt#section-3.3
35 PacketTypeV6Link
36
37 // https://filezilla-project.org/specs/draft-ietf-secsh-filexfer-08.txt#section-3.3
38 PacketTypeV6Block
39 PacketTypeV6Unblock
40)
41
42// Response packet types.
43const (
44 // https://filezilla-project.org/specs/draft-ietf-secsh-filexfer-02.txt#section-3
45 PacketTypeStatus = PacketType(iota + 101)
46 PacketTypeHandle
47 PacketTypeData
48 PacketTypeName
49 PacketTypeAttrs
50)
51
52// Extended packet types.
53const (
54 // https://filezilla-project.org/specs/draft-ietf-secsh-filexfer-02.txt#section-3
55 PacketTypeExtended = PacketType(iota + 200)
56 PacketTypeExtendedReply
57)
58
59func (f PacketType) String() string {
60 switch f {
61 case PacketTypeInit:
62 return "SSH_FXP_INIT"
63 case PacketTypeVersion:
64 return "SSH_FXP_VERSION"
65 case PacketTypeOpen:
66 return "SSH_FXP_OPEN"
67 case PacketTypeClose:
68 return "SSH_FXP_CLOSE"
69 case PacketTypeRead:
70 return "SSH_FXP_READ"
71 case PacketTypeWrite:
72 return "SSH_FXP_WRITE"
73 case PacketTypeLStat:
74 return "SSH_FXP_LSTAT"
75 case PacketTypeFStat:
76 return "SSH_FXP_FSTAT"
77 case PacketTypeSetstat:
78 return "SSH_FXP_SETSTAT"
79 case PacketTypeFSetstat:
80 return "SSH_FXP_FSETSTAT"
81 case PacketTypeOpenDir:
82 return "SSH_FXP_OPENDIR"
83 case PacketTypeReadDir:
84 return "SSH_FXP_READDIR"
85 case PacketTypeRemove:
86 return "SSH_FXP_REMOVE"
87 case PacketTypeMkdir:
88 return "SSH_FXP_MKDIR"
89 case PacketTypeRmdir:
90 return "SSH_FXP_RMDIR"
91 case PacketTypeRealPath:
92 return "SSH_FXP_REALPATH"
93 case PacketTypeStat:
94 return "SSH_FXP_STAT"
95 case PacketTypeRename:
96 return "SSH_FXP_RENAME"
97 case PacketTypeReadLink:
98 return "SSH_FXP_READLINK"
99 case PacketTypeSymlink:
100 return "SSH_FXP_SYMLINK"
101 case PacketTypeV6Link:
102 return "SSH_FXP_LINK"
103 case PacketTypeV6Block:
104 return "SSH_FXP_BLOCK"
105 case PacketTypeV6Unblock:
106 return "SSH_FXP_UNBLOCK"
107 case PacketTypeStatus:
108 return "SSH_FXP_STATUS"
109 case PacketTypeHandle:
110 return "SSH_FXP_HANDLE"
111 case PacketTypeData:
112 return "SSH_FXP_DATA"
113 case PacketTypeName:
114 return "SSH_FXP_NAME"
115 case PacketTypeAttrs:
116 return "SSH_FXP_ATTRS"
117 case PacketTypeExtended:
118 return "SSH_FXP_EXTENDED"
119 case PacketTypeExtendedReply:
120 return "SSH_FXP_EXTENDED_REPLY"
121 default:
122 return fmt.Sprintf("SSH_FXP_UNKNOWN(%d)", f)
123 }
124}
125
126func newPacketFromType(typ PacketType) (Packet, error) {
127 switch typ {
128 case PacketTypeOpen:
129 return new(OpenPacket), nil
130 case PacketTypeClose:
131 return new(ClosePacket), nil
132 case PacketTypeRead:
133 return new(ReadPacket), nil
134 case PacketTypeWrite:
135 return new(WritePacket), nil
136 case PacketTypeLStat:
137 return new(LStatPacket), nil
138 case PacketTypeFStat:
139 return new(FStatPacket), nil
140 case PacketTypeSetstat:
141 return new(SetstatPacket), nil
142 case PacketTypeFSetstat:
143 return new(FSetstatPacket), nil
144 case PacketTypeOpenDir:
145 return new(OpenDirPacket), nil
146 case PacketTypeReadDir:
147 return new(ReadDirPacket), nil
148 case PacketTypeRemove:
149 return new(RemovePacket), nil
150 case PacketTypeMkdir:
151 return new(MkdirPacket), nil
152 case PacketTypeRmdir:
153 return new(RmdirPacket), nil
154 case PacketTypeRealPath:
155 return new(RealPathPacket), nil
156 case PacketTypeStat:
157 return new(StatPacket), nil
158 case PacketTypeRename:
159 return new(RenamePacket), nil
160 case PacketTypeReadLink:
161 return new(ReadLinkPacket), nil
162 case PacketTypeSymlink:
163 return new(SymlinkPacket), nil
164 case PacketTypeExtended:
165 return new(ExtendedPacket), nil
166 default:
167 return nil, fmt.Errorf("unexpected request packet type: %v", typ)
168 }
169}