Looking at Net::SMTP::Server::Client2, subclassing it is non-trivial because it uses a lexical dispatch table to invoke most of the methods you would want to override. As the dispatch table is built at compile time, overriding those methods in the usual way doesn't work.
Here's one way to do it, though I shall post a SoPW to see if anyone knows a better way.
The first thing you need is access to the dispatch table from within the subclass. To facilitate that, I added a class method to Client2.pm:
sub get_dispatch_table { \%_cmds; }
Then a simple subclass that overrides the HELO and HELP commands looks like this:
package Net::SMTP::Server::Client3; use base qw[ Net::SMTP::Server::Client2 ]; sub _hello { shift->okay( "Yeah! You want summat?" ); } sub _help { my $self = shift; $self->okay( "Jeez! There's only 10 commands of 4 letters each. Try to keep + up!" ); $self->SUPER::_help; } my $dispatch = Net::SMTP::Server::Client2::get_dispatch_table; $dispatch->{ HELO } = \&_hello; $dispatch->{ HELP } = \&_help; 1;
Not hugely elegant, but it requires the minimum change to Client2.
In reply to Re^5: Using Threads For Simple SMTP Relay Server
by BrowserUk
in thread Using Threads For Simple SMTP Relay Server
by lamberms
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |