/[cvs]/nfo/perl/libs/Data/Transfer/Sync/Compare/Checksum.pm
ViewVC logotype

Contents of /nfo/perl/libs/Data/Transfer/Sync/Compare/Checksum.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (show annotations)
Tue Feb 11 09:53:07 2003 UTC (21 years, 6 months ago) by joko
Branch: MAIN
Changes since 1.1: +7 -3 lines
+ metadata-structure-change, fixed some code here

1 ## $Id: Checksum.pm,v 1.1 2003/02/09 05:10:13 joko Exp $
2 ##
3 ## Copyright (c) 2002 Andreas Motl <andreas.motl@ilo.de>
4 ##
5 ## See COPYRIGHT section in pod text below for usage and distribution rights.
6 ##
7 ## ----------------------------------------------------------------------------------------
8 ## $Log: Checksum.pm,v $
9 ## Revision 1.1 2003/02/09 05:10:13 joko
10 ## + initial commit
11 ##
12 ## ----------------------------------------------------------------------------------------
13
14
15 package Data::Transfer::Sync::Compare::Checksum;
16
17 use strict;
18 use warnings;
19
20 use mixin::with qw( Data::Transfer::Sync );
21
22
23 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - main
24
25 use Data::Dumper;
26 use Digest::MD5 qw(md5 md5_hex md5_base64);
27
28
29 # get logger instance
30 my $logger = Log::Dispatch::Config->instance;
31
32
33 sub _calcChecksum {
34
35 my $self = shift;
36 my $descent = shift;
37 my $specifier = shift;
38
39 # calculate checksum for current object
40 my $ident = $self->{node}->{$descent}->{ident};
41
42 # build dump of this node
43 my $payload = $self->{node}->{$descent}->{payload};
44 #my $dump = $ident . "\n" . $item->quickdump();
45 #my $dump = $ident . "\n" . Dumper($item);
46 my $dump = $ident . "\n" . $self->_dumpCompact($payload);
47
48 # TODO: $logger->dump( ... );
49 #$logger->debug( __PACKAGE__ . ": " . $dump );
50 #$logger->dump( __PACKAGE__ . ": " . $dump );
51
52 # calculate checksum from dump
53 # note: the 32-bit integer hash from DBI seems
54 # to generate duplicates with small payloads already in ranges of hundreds of items/rows!!!
55 # try to avoid to use it or try to use it only for payloads greater than, hmmm, let's say 30 chars?
56 # (we had about 15 chars average per item (row))
57
58 # md5-based fingerprint, base64 encoded (from Digest::MD5)
59 $self->{node}->{$descent}->{checksum} = md5_base64($dump) . '==';
60 # 32-bit integer "hash" value (maybe faster?) (from DBI)
61 #$self->{node}->{$descent}->{checksum} = DBI::hash($dump, 1);
62
63 # signal good
64 return 1;
65
66 }
67
68
69 sub _readChecksum {
70 my $self = shift;
71
72 my $descent = shift;
73
74 # signal checksum bad
75 if (!$self->{node}->{$descent}) {
76 return;
77 }
78
79 # trace
80 #print "desc: $descent", "\n";
81 #print Dumper($self);
82 #print Dumper($self->{meta}->{$descent});
83 #exit;
84
85 # get checksum for current entry
86 # TODO: don't have the checksum column/property hardcoded as "cs" here, make this configurable somehow
87 if ($self->{meta}->{$descent}->{isChecksumAuthority}) {
88 $self->_calcChecksum($descent);
89 } else {
90 $self->{node}->{$descent}->{checksum} = $self->{node}->{$descent}->{payload}->{cs};
91 }
92
93 # signal checksum good
94 return 1;
95
96 }
97
98
99 1;

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed