Instead of opening the database again for each lookup,
we will read it into memory on first use and every lookup
after that will be coming from cache.
Reviewed-by: Peter Müller <peter.mueller@link38.eu>
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
use Locale::Codes::Country;
use Locale::Codes::Country;
+my $database;
+
+sub lookup($) {
+ my $address = shift;
+
+ # Load the database into memory if not already done
+ if (!$database) {
+ $database = Geo::IP::PurePerl->new(GEOIP_MEMORY_CACHE);
+ }
+
+ # Return the name of the country
+ return $database->country_code_by_name($address);
+}
+
# Function to get the flag icon for a specified country code.
sub get_flag_icon($) {
my ($input) = @_;
# Function to get the flag icon for a specified country code.
sub get_flag_icon($) {
my ($input) = @_;
$lines++;
# Convert country code into upper case.
$lines++;
# Convert country code into upper case.
- my $country_uc = uc($country);
+ $country = uc($country);
# Get flag icon for of the country.
my $flag_icon = &GeoIP::get_flag_icon($country);
# Get flag icon for of the country.
my $flag_icon = &GeoIP::get_flag_icon($country);
my $name = &GeoIP::get_full_country_name($country);
if ($lines % 2) {
my $name = &GeoIP::get_full_country_name($country);
if ($lines % 2) {
- print "<td $col><a id='$country'><img src='$flag_icon' alt='$country_uc' title='$country_uc'/></a></td>";
- print "<td $col>$country_uc</td>";
+ print "<td $col><a id='$country'><img src='$flag_icon' alt='$country' title='$country'/></a></td>";
+ print "<td $col>$country</td>";
print "<td $col>$name</td></tr>\n";
} else {
$lines2++;
print "<td $col>$name</td></tr>\n";
} else {
$lines2++;
$col="style='background-color:${Header::table1colour};'";
}
print "<tr>";
$col="style='background-color:${Header::table1colour};'";
}
print "<tr>";
- print "<td $col><a id='$country'><img src='$flag_icon' alt='$country_uc' title='$country_uc'/></a></td>";
- print "<td $col>$country_uc</td>";
+ print "<td $col><a id='$country'><img src='$flag_icon' alt='$country' title='$country'/></a></td>";
+ print "<td $col>$country</td>";
print "<td $col>$name</td>";
print "<td $col> </td>";
print "<td $col>$name</td>";
print "<td $col> </td>";
use Getopt::Std;
# enable only the following on debugging purpose
use Getopt::Std;
# enable only the following on debugging purpose
$srcport=$1 if $packet =~ /SPT=(\d+)/;
$dstport=$1 if $packet =~ /DPT=(\d+)/;
$srcport=$1 if $packet =~ /SPT=(\d+)/;
$dstport=$1 if $packet =~ /DPT=(\d+)/;
- my $gi = Geo::IP::PurePerl->new();
- my $ccode = $gi->country_code_by_name($srcaddr);
- my $fcode = lc($ccode);
+ my $ccode = &GeoIP::lookup($srcaddr);
my $servi = uc(getservbyport($srcport, lc($proto)));
if ($servi ne '' && $srcport < 1024) {
my $servi = uc(getservbyport($srcport, lc($proto)));
if ($servi ne '' && $srcport < 1024) {
END
;
# Get flag icon for of the country.
END
;
# Get flag icon for of the country.
- my $flag_icon = &GeoIP::get_flag_icon($fcode);
+ my $flag_icon = &GeoIP::get_flag_icon($ccode);
- print "<td align='center' $col><a href='../country.cgi#$fcode'><img src='$flag_icon' border='0' align='absmiddle' alt='$ccode'></a></td>";
+ print "<td align='center' $col><a href='../country.cgi#$ccode'><img src='$flag_icon' border='0' align='absmiddle' alt='$ccode'></a></td>";
} else {
print "<td align='center' $col></td>";
}
} else {
print "<td align='center' $col></td>";
}
# and Michael Tremer (www.ipfire.org)
use strict;
# and Michael Tremer (www.ipfire.org)
use strict;
use Getopt::Std;
# enable only the following on debugging purpose
use Getopt::Std;
# enable only the following on debugging purpose
my $red_interface = &General::get_red_interface();
my $linesjc = 0;
my %tabjc;
my $red_interface = &General::get_red_interface();
my $linesjc = 0;
my %tabjc;
-my $gi = Geo::IP::PurePerl->new();
if ($pienumber == -1 || $pienumber > $lines || $sortcolumn == 2) { $pienumber = $lines; };
$lines = 0;
if ($pienumber == -1 || $pienumber > $lines || $sortcolumn == 2) { $pienumber = $lines; };
$lines = 0;
# Traffic from red
if($srcaddr ne '') {
# srcaddr is set
# Traffic from red
if($srcaddr ne '') {
# srcaddr is set
- my $ccode = $gi->country_code_by_name($srcaddr);
+ my $ccode = &GeoIP::lookup($srcaddr);
if ($ccode eq '') {
$ccode = 'unknown';
}
if ($ccode eq '') {
$ccode = 'unknown';
}
# and Michael Tremer (www.ipfire.org)
use strict;
# and Michael Tremer (www.ipfire.org)
use strict;
use Getopt::Std;
# enable only the following on debugging purpose
use Getopt::Std;
# enable only the following on debugging purpose
$col="bgcolor='$color{\"color$colorIndex\"}'";
print "<tr>";
$col="bgcolor='$color{\"color$colorIndex\"}'";
print "<tr>";
- my $gi = Geo::IP::PurePerl->new();
- my $ccode = $gi->country_code_by_name($key[$s]);
- my $fcode = lc($ccode);
+ my $ccode = &GeoIP::lookup($key[$s]);
$color++;
print "<td align='center' $col><form method='post' action='showrequestfromip.dat'><input type='hidden' name='MONTH' value='$cgiparams{'MONTH'}'> <input type='hidden' name='DAY' value='$cgiparams{'DAY'}'> <input type='hidden' name='ip' value='$key[$s]'> <input type='submit' value='$Lang::tr{'details'}'></form></td>";
$color++;
print "<td align='center' $col><form method='post' action='showrequestfromip.dat'><input type='hidden' name='MONTH' value='$cgiparams{'MONTH'}'> <input type='hidden' name='DAY' value='$cgiparams{'DAY'}'> <input type='hidden' name='ip' value='$key[$s]'> <input type='submit' value='$Lang::tr{'details'}'></form></td>";
my $flag_icon = &GeoIP::get_flag_icon($ccode);
if ( $flag_icon ) {
my $flag_icon = &GeoIP::get_flag_icon($ccode);
if ( $flag_icon ) {
- print "<td align='center' $col><a href='/cgi-bin/country.cgi#$fcode'><img src='$flag_icon' border='0' align='absmiddle' alt='$ccode' title='$ccode'></a></td>";
+ print "<td align='center' $col><a href='/cgi-bin/country.cgi#$ccode'><img src='$flag_icon' border='0' align='absmiddle' alt='$ccode' title='$ccode'></a></td>";
} else {
print "<td align='center' $col></td>";
}
} else {
print "<td align='center' $col></td>";
}
#use CGI::Carp 'fatalsToBrowser';
#use strict;
#use CGI::Carp 'fatalsToBrowser';
#use strict;
require '/var/ipfire/general-functions.pl';
require '/var/ipfire/general-functions.pl';
+require "${General::swroot}/geoip-functions.pl";
require "${General::swroot}/lang.pl";
require "${General::swroot}/header.pl";
require "${General::swroot}/lang.pl";
require "${General::swroot}/header.pl";
my $lines = 0;
my @log=();
my $country = $cgiparams{country};
my $lines = 0;
my @log=();
my $country = $cgiparams{country};
-my $gi = Geo::IP::PurePerl->new();
}
elsif($srcaddr ne '') {
# or srcaddr matches country code
}
elsif($srcaddr ne '') {
# or srcaddr matches country code
- my $ccode = $gi->country_code_by_name($srcaddr);
+ my $ccode = &GeoIP::lookup($srcaddr);
if($ccode eq uc($country)){
$log[$lines] = $_;
$lines++;
if($ccode eq uc($country)){
$log[$lines] = $_;
$lines++;