Index: trunk/PS-IPP-PSFTP/lib/PS/IPP/PSFTP.pm
===================================================================
--- trunk/PS-IPP-PSFTP/lib/PS/IPP/PSFTP.pm	(revision 5283)
+++ trunk/PS-IPP-PSFTP/lib/PS/IPP/PSFTP.pm	(revision 5300)
@@ -1,5 +1,5 @@
 # Copyright (C) 2005  Joshua Hoblitt
 #
-# $Id: PSFTP.pm,v 1.6 2005-10-12 02:58:03 jhoblitt Exp $
+# $Id: PSFTP.pm,v 1.7 2005-10-12 22:45:38 jhoblitt Exp $
 
 package PS::IPP::PSFTP;
@@ -13,6 +13,9 @@
 use Carp qw( carp );
 use Data::Validate::URI qw( is_uri );
+use Digest::MD5::File qw( file_md5_hex );
+use File::stat;
 use LWP::UserAgent;
 use Params::Validate qw( validate SCALAR );
+use POSIX;
 use PS::IPP::PSFTP::Parser;
 
@@ -72,9 +75,9 @@
     my %p = validate(@_,
         {
-            id => {
+            id          => {
                 type        => SCALAR,
                 regex       => qr/\S+/, # string with atleast 1 non WS char
             },
-            discarded => {
+            discarded   => {
                 type        => SCALAR,
                 callbacks   => {
@@ -103,4 +106,53 @@
 }
 
+sub get_file
+{
+    my $self = shift;
+
+    my %p = validate(@_,
+        {
+            record      => {
+                isa         => 'PS::IPP::PSFTP::Record',
+            },
+            filename    => {
+                type        => SCALAR,
+                regex       => qr/\S+/, # string with atleast 1 non WS char
+                callbacks   => {
+                    'write access' => sub {
+                        POSIX::access($_[0], &POSIX::W_OK);
+                    },
+                },
+            },
+        },
+    );
+
+    my $ua = LWP::UserAgent->new;
+    my $request = HTTP::Request->new(GET => $p{record}->url);
+    my $response = $ua->request($request, $p{filename});
+
+    if (! $response->is_success) {
+        carp $response->status_line;
+        return undef;
+    }
+
+    my $size = stat($p{filename})->size;
+    if (! $p{record}->size == $size) {
+        carp "id: ", $p{record}->id,
+             " - expected size: ", $p{record}->size,
+             " got: ", $size;
+        return undef;
+    }
+
+    my $md5 = file_md5_hex($p{filename});
+    if (! $p{record}->md5 eq $md5) {
+        carp "id: ", $p{record}->id, 
+             " - expected md5: ", $p{record}->md5,
+             " got: ", $md5;
+        return undef;
+    }
+
+    return 1;
+}
+
 1;
 
