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) } }