github.com/pkg/sftp@v1.13.6/internal/encoding/ssh/filexfer/fxp.go (about) 1 package sshfx 2 3 import ( 4 "fmt" 5 ) 6 7 // PacketType defines the various SFTP packet types. 8 type PacketType uint8 9 10 // Request packet types. 11 const ( 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. 43 const ( 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. 53 const ( 54 // https://filezilla-project.org/specs/draft-ietf-secsh-filexfer-02.txt#section-3 55 PacketTypeExtended = PacketType(iota + 200) 56 PacketTypeExtendedReply 57 ) 58 59 func (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 126 func 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 }