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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (hide 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 joko 1.2 ## $Id: Checksum.pm,v 1.1 2003/02/09 05:10:13 joko Exp $
2 joko 1.1 ##
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 joko 1.2 ## $Log: Checksum.pm,v $
9     ## Revision 1.1 2003/02/09 05:10:13 joko
10     ## + initial commit
11     ##
12 joko 1.1 ## ----------------------------------------------------------------------------------------
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 joko 1.2 #print Dumper($self->{meta}->{$descent});
83 joko 1.1 #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 joko 1.2 if ($self->{meta}->{$descent}->{isChecksumAuthority}) {
88 joko 1.1 $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