Net::SFTP::Attributes - File/directory attribute container


Net-SFTP documentation Contained in the Net-SFTP distribution.

Index


Code Index:

NAME

Top

Net::SFTP::Attributes - File/directory attribute container

SYNOPSIS

Top

    use Net::SFTP::Attributes;
    my $attrs = Net::SFTP::Attributes->new(Stat => [ stat "foo" ]);
    my $size = $attrs->size;

DESCRIPTION

Top

Net::SFTP::Attributes encapsulates file/directory attributes for Net::SFTP. It also provides serialization and deserialization methods to encode/decode attributes into Net::SFTP::Buffer objects.

USAGE

Top

Net::SFTP::Attributes->new( [ %args ] )

Constructs a new Net::SFTP::Attributes object and returns that object.

%args is optional; if not provided the object will be initialized with the default values. If provided, %args can contain:

* Stat

A reference to the return value of the built-in stat function. The values in the Net::SFTP::Attributes object will be initialized from the values in the stat array, and the flags will be set appropriately.

* Buffer

A Net::SFTP::Buffer object containing a serialized attribute object. The Net::SFTP::Attributes object will be initialized from the values in the serialized string, and flags will be set appropriately.

$attrs->as_buffer

Serializes the Attributes object $attrs into string form, using the flags in the object to determine what fields get placed in the buffer. Returns a Net::SFTP::Buffer object.

$attrs->flags( [ $value ] )

Get/set the value of the flags in $attrs.

$attrs->size( [ $value ] )

Get/set the value of the file size (in bytes) in $attrs.

$attrs->uid( [ $value ] )

Get/set the value of the UID in $attrs.

$attrs->gid( [ $value ] )

Get/set the value of the GID in $attrs.

$attrs->perm( [ $value ] )

Get/set the value of the permissions in $attrs.

$attrs->atime( [ $value ] )

Get/set the value of the last access time (atime) in $attrs.

$attrs->mtime( [ $value ] )

Get/set the value of the last modified time (mtime) in $attrs.

AUTHOR & COPYRIGHTS

Top

Please see the Net::SFTP manpage for author, copyright, and license information.


Net-SFTP documentation Contained in the Net-SFTP distribution.

# $Id: Attributes.pm,v 1.5 2001/05/16 01:38:01 btrott Exp $

package Net::SFTP::Attributes;
use strict;

use Net::SFTP::Constants qw( :att );
use Net::SFTP::Buffer;

use vars qw( @FIELDS );
@FIELDS = qw( flags size uid gid perm atime mtime );

for my $f (@FIELDS) {
    no strict 'refs';
    *$f = sub {
        my $a = shift;
        $a->{$f} = shift if @_;
        $a->{$f};
    };
}

sub new {
    my $class = shift;
    my $a = bless { }, $class;
    $a->init(@_);
}

sub init {
    my $a = shift;
    my %param = @_;
    for my $f (@FIELDS) {
        $a->{$f} = 0;
    }
    if (my $stat = $param{Stat}) {
        $a->{flags} |= SSH2_FILEXFER_ATTR_SIZE;
        $a->{size} = $stat->[7];
        $a->{flags} |= SSH2_FILEXFER_ATTR_UIDGID;
        $a->{uid} = $stat->[4];
        $a->{gid} = $stat->[5];
        $a->{flags} |= SSH2_FILEXFER_ATTR_PERMISSIONS;
        $a->{perm} = $stat->[2];
        $a->{flags} |= SSH2_FILEXFER_ATTR_ACMODTIME;
        $a->{atime} = $stat->[8];
        $a->{mtime} = $stat->[9];
    }
    elsif (my $buf = $param{Buffer}) {
        $a->{flags} = $buf->get_int32;
        if ($a->{flags} & SSH2_FILEXFER_ATTR_SIZE) {
            $a->{size} = $buf->get_int64;
        }
        if ($a->{flags} & SSH2_FILEXFER_ATTR_UIDGID) {
            $a->{uid} = $buf->get_int32;
            $a->{gid} = $buf->get_int32;
        }
        if ($a->{flags} & SSH2_FILEXFER_ATTR_PERMISSIONS) {
            $a->{perm} = $buf->get_int32;
        }
        if ($a->{flags} & SSH2_FILEXFER_ATTR_ACMODTIME) {
            $a->{atime} = $buf->get_int32;
            $a->{mtime} = $buf->get_int32;
        }
    }
    $a;
}

sub as_buffer {
    my $a = shift;
    my $buf = Net::SFTP::Buffer->new;
    $buf->put_int32($a->{flags});
    if ($a->{flags} & SSH2_FILEXFER_ATTR_SIZE) {
        $buf->put_int64(int $a->{size});
    }
    if ($a->{flags} & SSH2_FILEXFER_ATTR_UIDGID) {
        $buf->put_int32($a->{uid});
        $buf->put_int32($a->{gid});
    }
    if ($a->{flags} & SSH2_FILEXFER_ATTR_PERMISSIONS) {
        $buf->put_int32($a->{perm});
    }
    if ($a->{flags} & SSH2_FILEXFER_ATTR_ACMODTIME) {
        $buf->put_int32($a->{atime});
        $buf->put_int32($a->{mtime});
    }
    $buf;
}

1;
__END__