--- nfo/perl/libs/Data/Transfer/Sync/Compare/Checksum.pm 2004/05/06 12:53:07 1.4 +++ nfo/perl/libs/Data/Transfer/Sync/Compare/Checksum.pm 2004/05/11 19:43:02 1.5 @@ -1,4 +1,4 @@ -## $Id: Checksum.pm,v 1.4 2004/05/06 12:53:07 jonen Exp $ +## $Id: Checksum.pm,v 1.5 2004/05/11 19:43:02 joko Exp $ ## ## Copyright (c) 2002 Andreas Motl ## @@ -6,6 +6,9 @@ ## ## ---------------------------------------------------------------------------------------- ## $Log: Checksum.pm,v $ +## Revision 1.5 2004/05/11 19:43:02 joko +## don't use File::RsyncP::Digest on win32 +## ## Revision 1.4 2004/05/06 12:53:07 jonen ## + added use of File::RsycP::digest ## @@ -26,6 +29,7 @@ =head1 Todo o Data::Transfer::Sync::Compare::Slot using Compare::Struct + o Load checksum algorithm on demand, do some negotiation =cut @@ -36,13 +40,18 @@ use mixin::with qw( Data::Transfer::Sync ); - +use shortcuts qw( RUNNING_IN_HELL ); use Data::Dumper; # TODO: Load these appropriatly at runtime. use Digest::MD5 qw( md5 md5_hex md5_base64 ); use String::CRC32; -use File::RsyncP::Digest; + +# don't use File::RsyncP::Digest on win32 +# TODO: enhance here! (e.g. negotiate proper checksum-algorithm first, apply afterwards) +if (not RUNNING_IN_HELL()) { + eval "use File::RsyncP::Digest;"; +} # get logger instance my $logger = Log::Dispatch::Config->instance; @@ -78,17 +87,22 @@ # with small payloads already in ranges of hundreds of items/rows!!! # Try to avoid it or try to use it only for payloads greater than, hmmm, let's say 30 chars? # (we had about 15 chars average per item (row)) - # Possible (generic) solution: Just generate checksum, if length(checksum(payload)) < payload + # Possible (generic) solution: Just generate checksum, if length(checksum(payload)) < length(payload) #$self->{node}->{$descent}->{checksum} = DBI::hash($dump, 1); - # 3. good ol' crc32??? + # 3. good old crc32??? #$self->{node}->{$descent}->{checksum} = crc32($dump); # 4. File::RsyncP::Digest - Perl interface to rsync message digest algorithms + if (not RUNNING_IN_HELL()) { my $rsDigest = new File::RsyncP::Digest; $rsDigest->add($dump); my $digest = $rsDigest->digest(); $self->{node}->{$descent}->{checksum} = unpack("H*", $digest); + + } else { # fallback to Digest::MD5 on win32 + $self->{node}->{$descent}->{checksum} = md5_base64($dump) . '=='; + } # 5. some more modern Digest::SHA1 or similar?