# $Id: Constants.pm,v 1.5 2001/05/15 22:29:16 btrott Exp $ package Net::SFTP::Constants; use strict; use vars qw( %CONSTANTS ); %CONSTANTS = ( 'SSH2_FXP_INIT' => 1, 'SSH2_FXP_VERSION' => 2, 'SSH2_FXP_OPEN' => 3, 'SSH2_FXP_CLOSE' => 4, 'SSH2_FXP_READ' => 5, 'SSH2_FXP_WRITE' => 6, 'SSH2_FXP_LSTAT' => 7, 'SSH2_FXP_FSTAT' => 8, 'SSH2_FXP_SETSTAT' => 9, 'SSH2_FXP_FSETSTAT' => 10, 'SSH2_FXP_OPENDIR' => 11, 'SSH2_FXP_READDIR' => 12, 'SSH2_FXP_REMOVE' => 13, 'SSH2_FXP_MKDIR' => 14, 'SSH2_FXP_RMDIR' => 15, 'SSH2_FXP_REALPATH' => 16, 'SSH2_FXP_STAT' => 17, 'SSH2_FXP_RENAME' => 18, 'SSH2_FXP_STATUS' => 101, 'SSH2_FXP_HANDLE' => 102, 'SSH2_FXP_DATA' => 103, 'SSH2_FXP_NAME' => 104, 'SSH2_FXP_ATTRS' => 105, 'SSH2_FXF_READ' => 0x01, 'SSH2_FXF_WRITE' => 0x02, 'SSH2_FXF_APPEND' => 0x04, 'SSH2_FXF_CREAT' => 0x08, 'SSH2_FXF_TRUNC' => 0x10, 'SSH2_FXF_EXCL' => 0x20, 'SSH2_FX_OK' => 0, 'SSH2_FX_EOF' => 1, 'SSH2_FX_NO_SUCH_FILE' => 2, 'SSH2_FX_PERMISSION_DENIED' => 3, 'SSH2_FX_FAILURE' => 4, 'SSH2_FX_BAD_MESSAGE' => 5, 'SSH2_FX_NO_CONNECTION' => 6, 'SSH2_FX_CONNECTION_LOST' => 7, 'SSH2_FX_OP_UNSUPPORTED' => 8, 'SSH2_FILEXFER_ATTR_SIZE' => 0x01, 'SSH2_FILEXFER_ATTR_UIDGID' => 0x02, 'SSH2_FILEXFER_ATTR_PERMISSIONS' => 0x04, 'SSH2_FILEXFER_ATTR_ACMODTIME' => 0x08, 'SSH2_FILEXFER_ATTR_EXTENDED' => 0x80000000, 'SSH2_FILEXFER_VERSION' => 3, ); use vars qw( %TAGS ); my %RULES = ( '^SSH2_FXP' => 'fxp', '^SSH2_FXF' => 'flags', '^SSH2_FILEXFER_ATTR' => 'att', '^SSH2_FX_' => 'status', ); for my $re (keys %RULES) { @{ $TAGS{ $RULES{$re} } } = grep /$re/, keys %CONSTANTS; } sub import { my $class = shift; my @to_export; my @args = @_; for my $item (@args) { push @to_export, $item =~ s/^:// ? @{ $TAGS{$item} } : $item; } no strict 'refs'; my $pkg = caller; for my $con (@to_export) { warn __PACKAGE__, " does not export the constant '$con'" unless exists $CONSTANTS{$con}; *{"${pkg}::$con"} = sub () { $CONSTANTS{$con} } } } 1; __END__ =head1 NAME Net::SFTP::Constants - Exportable SFTP constants =head1 SYNOPSIS use Net::SFTP::Constants qw( :tag CONSTANT ); print "Constant value is ", CONSTANT; =head1 DESCRIPTION I provides a list of exportable SFTP constants: for SFTP messages and commands, for file-open flags, for status messages, etc. Constants can be exported individually, or in sets identified by tag names. I provides values for all of the constants listed in the SFTP protocol version 3 draft; the only thing to note is that the constants are listed with the prefix I instead of I. So, for example, to import the constant for the file-open command, you would write: use Net::SFTP::Constants qw( SSH2_FXP_OPEN ); =head1 TAGS As mentioned above, constants can either be imported individually or in sets grouped by tag names. The tag names are: =over 4 =item * fxp Imports all of the I constants: these are the constants used in the messaging protocol. =item * flags Imports all of the I constants: these are constants used as flags sent to the server when opening files. =item * att Imports all of the I constants: these are the constants used to construct the flag in the serialized attributes. The flag describes what types of file attributes are listed in the buffer. =item * status Imports all of the I constants: these are constants returned from a server I message and indicate the status of a particular operation. =back There is one constant that does not fit into any of the tag sets: I, which holds the value of the SFTP protocol implemented by I. =head1 AUTHOR & COPYRIGHTS Please see the Net::SFTP manpage for author, copyright, and license information. =cut