diff options
author | Peter Palfrader <peter@palfrader.org> | 2002-06-05 04:05:40 +0000 |
---|---|---|
committer | Peter Palfrader <peter@palfrader.org> | 2002-06-05 04:05:40 +0000 |
commit | ecd052098413f87701ba00e28f88563248a177f6 (patch) | |
tree | 0b31ba6942617df44e2745014b291df97625021c /Echolot/Conf.pm |
Initial Import
Diffstat (limited to 'Echolot/Conf.pm')
-rw-r--r-- | Echolot/Conf.pm | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/Echolot/Conf.pm b/Echolot/Conf.pm new file mode 100644 index 0000000..b19b25c --- /dev/null +++ b/Echolot/Conf.pm @@ -0,0 +1,84 @@ +package Echolot::Conf; + +# (c) 2002 Peter Palfrader <peter@palfrader.org> +# $Id: Conf.pm,v 1.1 2002/06/05 04:05:40 weasel Exp $ +# + +=pod + +=head1 Name + +Echolot::Conf - remailer Configuration/Capabilities + +=head1 DESCRIPTION + +This package provides functions for requesting, parsing, and analyzing +remailer-conf and remailer-key replies. + +=cut + +use strict; +use warnings; +use Carp qw{cluck}; + + +sub send_requests() { + Echolot::Globals::get()->{'storage'}->delay_commit(); + for my $remailer (Echolot::Globals::get()->{'storage'}->get_addresses()) { + next unless ($remailer->{'status'} eq 'active'); + for my $type (qw{conf key help stats}) { + Echolot::Tools::send_message( + 'To' => $remailer->{'address'}, + 'Subject' => 'remailer-'.$type, + 'Token' => $type.'.'.$remailer->{'id'}) + }; + Echolot::Globals::get()->{'storage'}->decrease_ttl($remailer->{'address'}); + }; + Echolot::Globals::get()->{'storage'}->enable_commit(); +}; + +sub remailer_conf($$$) { + my ($conf, $token, $time) = @_; + + my ($id) = $token =~ /^conf\.(\d+)$/; + cluck("Could not find id in token '$token'"), return 0 unless defined $id; + my ($remailer_type) = ($conf =~ /^\s*Remailer-Type:\s* (.*?) \s*$/imx); + cluck("No remailer type found in remailer_conf from '$token'"), return 0 unless defined $remailer_type; + my ($remailer_caps) = ($conf =~ /^\s*( \$remailer{".*"} \s*=\s* "<.*@.*>.*"; )\s*$/imx); + cluck("No remailer caps found in remailer_conf from '$token'"), return 0 unless defined $remailer_caps; + my ($remailer_nick, $remailer_address) = ($remailer_caps =~ /^\s* \$remailer{"(.*)"} \s*=\s* "<(.*@.*)>.*"; \s*$/ix); + cluck("No remailer nick found in remailer_caps from '$token': '$remailer_caps'"), return 0 unless defined $remailer_nick; + cluck("No remailer address found in remailer_caps from '$token': '$remailer_caps'"), return 0 unless defined $remailer_address; + + + my $remailer = Echolot::Globals::get()->{'storage'}->get_address_by_id($id); + if ($remailer->{'address'} ne $remailer_address) { + # Address mismatch -> Ignore reply and add $remailer_address to prospective addresses + cluck("Remailer address mismatch $remailer->{'address'} vs $remailer_address. Adding latter to prospective remailers."); + Echolot::Globals::get()->{'storage'}->add_prospective_address($remailer_address, 'conf-reply'); + } else { + Echolot::Globals::get()->{'storage'}->restore_ttl( $remailer->{'address'} ); + Echolot::Globals::get()->{'storage'}->set_caps($remailer_type, $remailer_caps, $remailer_nick, $remailer_address, $time); + } +}; + +sub remailer_key($$$) { + my ($conf, $token, $time) = @_; + + print "Remailer key\n"; +}; + +sub remailer_stats($$$) { + my ($conf, $token, $time) = @_; + + #print "Remailer stats\n"; +}; + +sub remailer_help($$$) { + my ($conf, $token, $time) = @_; + + #print "Remailer help\n"; +}; + +1; +# vim: set ts=4 shiftwidth=4: |