Current Path : /home/tools/awstats/plugins/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : /home/tools/awstats/plugins/geoip.pm |
#!/usr/bin/perl #----------------------------------------------------------------------------- # GeoIp AWStats plugin # This plugin allow you to get AWStats country report with countries detected # from a Geographical database (GeoIP internal database) instead of domain # hostname suffix. #----------------------------------------------------------------------------- # Perl Required Modules: Geo::IP or Geo::IP::PurePerl #----------------------------------------------------------------------------- # $Revision: 1.11 $ - $Author: eldy $ - $Date: 2003/07/26 15:32:31 $ # <----- # ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES use vars qw/ $type /; $type='geoip'; if (!eval ('require "Geo/IP.pm";')) { $type='geoippureperl'; if (!eval ('require "Geo/IP/PurePerl.pm";')) { return $@?"Error: $@":"Error: Need Perl module Geo::IP or Geo::IP::PurePerl"; } } # -----> use strict;no strict "refs"; #----------------------------------------------------------------------------- # PLUGIN VARIABLES #----------------------------------------------------------------------------- # <----- # ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN # AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE. my $PluginNeedAWStatsVersion="5.4"; my $PluginHooksFunctions="GetCountryCodeByAddr GetCountryCodeByName"; # -----> # <----- # IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. use vars qw/ %TmpDomainLookup $gi /; # -----> #----------------------------------------------------------------------------- # PLUGIN FUNCTION: Init_pluginname #----------------------------------------------------------------------------- sub Init_geoip { my $InitParams=shift; my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); # <----- # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS debug(" InitParams=$InitParams",1); my $mode=$InitParams; if ($type eq 'geoippureperl') { if ($mode eq '' || $mode eq 'GEOIP_MEMORY_CACHE') { $mode=Geo::IP::PurePerl::GEOIP_MEMORY_CACHE(); } else { $mode=Geo::IP::PurePerl::GEOIP_STANDARD(); } } else { if ($mode eq '' || $mode eq 'GEOIP_MEMORY_CACHE') { $mode=Geo::IP::GEOIP_MEMORY_CACHE(); } else { $mode=Geo::IP::GEOIP_STANDARD(); } } %TmpDomainLookup=(); debug(" GeoIP working in mode $type $mode",1); if ($type eq 'geoippureperl') { $gi = Geo::IP::PurePerl->new($mode); } else { $gi = Geo::IP->new($mode); } # -----> return ($checkversion?$checkversion:"$PluginHooksFunctions"); } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: GetCountryCodeByName_pluginname # UNIQUE: YES (Only one plugin using this function can be loaded) # GetCountryCodeByName is called to translate a host name into a country name. #----------------------------------------------------------------------------- sub GetCountryCodeByName_geoip { # <----- my $res=$TmpDomainLookup{$_[0]}||''; if (! $res) { $res=lc($gi->country_code_by_name($_[0])); $TmpDomainLookup{$_[0]}=$res; if ($Debug) { debug(" GetCountryCodeByName for $_[0]: [$res]",5); } } elsif ($Debug) { debug(" GetCountryCodeByName for $_[0]: Already resolved to $res",5); } return $res; # -----> } #----------------------------------------------------------------------------- # PLUGIN FUNCTION: GetCountryCodeByAddr_pluginname # UNIQUE: YES (Only one plugin using this function can be loaded) # GetCountryCodeByAddr is called to translate an ip into a country name. #----------------------------------------------------------------------------- sub GetCountryCodeByAddr_geoip { # <----- my $res=$TmpDomainLookup{$_[0]}||''; if (! $res) { $res=lc($gi->country_code_by_addr($_[0])); $TmpDomainLookup{$_[0]}=$res; if ($Debug) { debug(" GetCountryCodeByAddr for $_[0]: $res",5); } } elsif ($Debug) { debug(" GetCountryCodeByAddr for $_[0]: Already resolved to $res",5); } return $res; # -----> } 1; # Do not remove this line