| # Mail::SpamAssassin::Reporter - report a message as spam | 
 |  | 
 | # <@LICENSE> | 
 | # Licensed to the Apache Software Foundation (ASF) under one or more | 
 | # contributor license agreements.  See the NOTICE file distributed with | 
 | # this work for additional information regarding copyright ownership. | 
 | # The ASF licenses this file to you under the Apache License, Version 2.0 | 
 | # (the "License"); you may not use this file except in compliance with | 
 | # the License.  You may obtain a copy of the License at: | 
 | #  | 
 | #     http://www.apache.org/licenses/LICENSE-2.0 | 
 | #  | 
 | # Unless required by applicable law or agreed to in writing, software | 
 | # distributed under the License is distributed on an "AS IS" BASIS, | 
 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 | # See the License for the specific language governing permissions and | 
 | # limitations under the License. | 
 | # </@LICENSE> | 
 |  | 
 | package Mail::SpamAssassin::Reporter; | 
 |  | 
 | use strict; | 
 | use warnings; | 
 | use bytes; | 
 | use POSIX ":sys_wait_h"; | 
 | use Mail::SpamAssassin::Logger; | 
 |  | 
 | use vars qw{ | 
 |   @ISA $VERSION | 
 | }; | 
 |  | 
 | @ISA = qw(); | 
 | $VERSION = 'bogus';	# avoid CPAN.pm picking up razor ver | 
 |  | 
 | ########################################################################### | 
 |  | 
 | sub new { | 
 |   my $class = shift; | 
 |   $class = ref($class) || $class; | 
 |   my ($main, $msg, $options) = @_; | 
 |  | 
 |   my $self = { | 
 |     'main'		=> $main, | 
 |     'msg'		=> $msg, | 
 |     'options'		=> $options, | 
 |     'conf'		=> $main->{conf}, | 
 |   }; | 
 |  | 
 |   bless($self, $class); | 
 |   my $permsgstatus = | 
 |         Mail::SpamAssassin::PerMsgStatus->new($self->{main}, $msg); | 
 |   $msg->extract_message_metadata ($permsgstatus); | 
 |   $permsgstatus->finish(); | 
 |   $self; | 
 | } | 
 |  | 
 | ########################################################################### | 
 |  | 
 | sub report { | 
 |   my ($self) = @_; | 
 |   $self->{report_return} = 0; | 
 |   $self->{report_available} = 0; | 
 |  | 
 |   my $text = $self->{main}->remove_spamassassin_markup($self->{msg}); | 
 |  | 
 |   $self->{main}->call_plugins("plugin_report", { report => $self, text => \$text, msg => $self->{msg} }); | 
 |  | 
 |   $self->delete_fulltext_tmpfile(); | 
 |  | 
 |   if ($self->{report_available} == 0) { | 
 |     warn "reporter: no reporting methods available, so couldn't report\n"; | 
 |   } | 
 |  | 
 |   return $self->{report_return}; | 
 | } | 
 |  | 
 | ########################################################################### | 
 |  | 
 | sub revoke { | 
 |   my ($self) = @_; | 
 |   $self->{revoke_return} = 0; | 
 |   $self->{revoke_available} = 0; | 
 |  | 
 |   my $text = $self->{main}->remove_spamassassin_markup($self->{msg}); | 
 |  | 
 |   $self->{main}->call_plugins("plugin_revoke", { revoke => $self, text => \$text, msg => $self->{msg} }); | 
 |  | 
 |   if ($self->{revoke_available} == 0) { | 
 |     warn "reporter: no revoke methods available, so couldn't revoke\n"; | 
 |   } | 
 |  | 
 |   return $self->{revoke_return}; | 
 | } | 
 |  | 
 | ########################################################################### | 
 | # non-public methods. | 
 |  | 
 | # Close an fh piped to a process, possibly exiting if the process | 
 | # returned nonzero.  thanks to nix /at/ esperi.demon.co.uk for this. | 
 | sub close_pipe_fh { | 
 |   my ($self, $fh) = @_; | 
 |  | 
 |   return if close ($fh); | 
 |  | 
 |   my $exitstatus = $?; | 
 |   dbg("reporter: raw exit code: $exitstatus"); | 
 |  | 
 |   if (WIFEXITED ($exitstatus) && (WEXITSTATUS ($exitstatus))) { | 
 |     die "reporter: exited with non-zero exit code " . WEXITSTATUS($exitstatus) . "\n"; | 
 |   } | 
 |  | 
 |   if (WIFSIGNALED ($exitstatus)) { | 
 |     die "reporter: exited due to signal " . WTERMSIG($exitstatus) . "\n"; | 
 |   } | 
 | } | 
 |  | 
 | ########################################################################### | 
 |  | 
 | sub create_fulltext_tmpfile { | 
 |   Mail::SpamAssassin::PerMsgStatus::create_fulltext_tmpfile(@_); | 
 | } | 
 | sub delete_fulltext_tmpfile { | 
 |   Mail::SpamAssassin::PerMsgStatus::delete_fulltext_tmpfile(@_); | 
 | } | 
 |  | 
 | sub enter_helper_run_mode { | 
 |   Mail::SpamAssassin::PerMsgStatus::enter_helper_run_mode(@_); | 
 | } | 
 | sub leave_helper_run_mode { | 
 |   Mail::SpamAssassin::PerMsgStatus::leave_helper_run_mode(@_); | 
 | } | 
 |  | 
 | 1; |