summaryrefslogtreecommitdiffstats
path: root/lib/ASM/Event.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ASM/Event.pm')
-rw-r--r--lib/ASM/Event.pm35
1 files changed, 29 insertions, 6 deletions
diff --git a/lib/ASM/Event.pm b/lib/ASM/Event.pm
index 5137d29..90ba542 100644
--- a/lib/ASM/Event.pm
+++ b/lib/ASM/Event.pm
@@ -9,6 +9,7 @@ use POSIX qw(strftime);
use Regexp::Wildcards;
use HTTP::Request;
use Array::Utils qw(:all);
+use Net::DNS::Async;
no if $] >= 5.017011, warnings => 'experimental::smartmatch';
sub new
@@ -16,6 +17,7 @@ sub new
my $module = shift;
my ($conn, $inspector) = @_;
my $self = {};
+ $self->{DNS} = Net::DNS::Async->new(QueueSize => 5000, Retries => 3);
$self->{CONN} = $conn;
$self->{INSPECTOR} = $inspector;
ASM::Util->dprint('Installing handler routines...', 'startup');
@@ -772,9 +774,19 @@ sub on_banlist
}
$::sc{$chan}{bans}{$ban} = { bannedBy => $banner, bannedOn => $bantime };
if ($ban =~ /^\*\!\*\@(.*)$/) {
- # ASM::Util->dprint("banlist hostname $ban $1", 'sync');
- my $ip = ASM::Util->getHostIP($1);
- $::sc{$chan}{ipbans}{$ip} = { bannedBy => $banner, bannedOn => $bantime } if defined($ip);
+ my $host = $1;
+ my $ip = ASM::Util->getHostIPFast($host);
+ if (defined($ip)) {
+ $::sc{$chan}{ipbans}{$ip} = { bannedBy => $banner, bannedOn => $bantime };
+ } elsif ( $host =~ /^(([a-z0-9]([a-z0-9\-]*[a-z0-9])?\.)*([a-z0-9]([a-z0-9\-]*[a-z0-9])?\.?))$/i) {
+ ASM::Util->dprint("banlist hostname $chan $host", 'dns');
+ $::event->{DNS}->add(
+ sub {
+ my ($packet) = @_;
+ $ip = ASM::Util->stripResp($packet);
+ $::sc{$chan}{ipbans}{$ip} = { bannedBy => $banner, bannedOn => $bantime } if defined($ip);
+ }, $host, 'A');
+ }
}
}
@@ -794,9 +806,19 @@ sub on_quietlist
}
$::sc{$chan}{quiets}{$ban} = { bannedBy => $banner, bannedOn => $bantime };
if ($ban =~ /^\*\!\*\@(.*)$/) {
- # ASM::Util->dprint("quietlist hostname $ban $1", 'sync');
- my $ip = ASM::Util->getHostIP($1);
- $::sc{$chan}{ipquiets}{$ip} = { bannedBy => $banner, bannedOn => $bantime } if defined($ip);
+ my $host = $1;
+ my $ip = ASM::Util->getHostIPFast($host);
+ if (defined($ip)) {
+ $::sc{$chan}{ipquiets}{$ip} = { bannedBy => $banner, bannedOn => $bantime };
+ } elsif ( $host =~ /^(([a-z0-9]([a-z0-9\-]*[a-z0-9])?\.)*([a-z0-9]([a-z0-9\-]*[a-z0-9])?\.?))$/i) {
+ ASM::Util->dprint("quietlist hostname $chan $host", 'dns');
+ $::event->{DNS}->add(
+ sub {
+ my ($packet) = @_;
+ $ip = ASM::Util->stripResp($packet);
+ $::sc{$chan}{ipquiets}{$ip} = { bannedBy => $banner, bannedOn => $bantime } if defined($ip);
+ }, $host, 'A');
+ }
}
}
@@ -964,6 +986,7 @@ sub on_quietlistend
} else {
$rx = sprintf("%.2fKB", $conn->{_rx}/1024);
}
+ $::event->{DNS}->await();
$conn->privmsg($::settings->{masterchan}, "Finished syncing after " . (time - $::starttime) . " seconds. " .
"I'm tracking " . (scalar (keys %::sn)) . " nicks" .
" across " . (scalar (keys %::sc)) . " tracked channels." .