.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "Mail::Milter::Wrapper 3pm" .TH Mail::Milter::Wrapper 3pm "2023-01-22" "perl v5.36.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Mail::Milter::Wrapper \- Perl extension for wrappering milter objects .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& use Mail::Milter::Wrapper; \& \& my $milter = ...; \& my $wrapper = new Mail::Milter::Wrapper($milter, \e&foo); \& \& use Sendmail::Milter; \& ... \& Sendmail::Milter::register(\*(Aqfoo\*(Aq, $wrapper, SMFI_CURR_ACTS); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" Mail::Milter::Wrapper wraps another milter, allowing for interception of the passed arguments and/or return code of the contained milter. .SH "METHODS" .IX Header "METHODS" .IP "new(\s-1MILTER,\s0 CODEREF[, \s-1CALLBACK ...\s0])" 4 .IX Item "new(MILTER, CODEREF[, CALLBACK ...])" Creates a Mail::Milter::Wrapper object. .Sp \&\s-1MILTER\s0 is the milter to wrap, which may be a plain hash reference or an instance of a hashref object such as \f(CW\*(C`Mail::Milter::Object\*(C'\fR. \s-1CODEREF\s0 is the wrapper subroutine. CALLBACKs, if specified, are named callbacks which are needed by the wrapper, even if the contained milter does not use them. .Sp The wrapper subroutine will be called with the following arguments, in this order: .Sp .Vb 4 \& * reference to the wrapper \& * name of callback \& * subroutine reference to call into the wrapped milter \& * arguments for the callback (>= 0) .Ve .Sp This subroutine should \s-1ALWAYS\s0 pass the \*(L"close\*(R" callback through to the contained milter. Failure to do so may corrupt the contained milter's state information and cause memory leaks. .Sp As an example, a simple subroutine which just passes the callback through might be written as: .Sp .Vb 4 \& sub callback_wrapper { \& shift; # don\*(Aqt need $this \& my $cbname = shift; \& my $callback_sub = shift; \& \& &$callback_sub(@_); \& } .Ve .SH "AUTHOR" .IX Header "AUTHOR" Todd Vierling, .SH "SEE ALSO" .IX Header "SEE ALSO" Mail::Milter, Sendmail::Milter