: db-path ( -- path ) "IpToCountry.csv" temp-file ;
-CONSTANT: db-url "http://software77.net/cgi-bin/ip-country/geo-ip.pl?action=download"
+CONSTANT: db-url "http://software77.net/geo-ip/?DL=1"
: download-db ( -- path )
db-path dup exists? [
: filter-overlaps ( alist -- alist' )
2 clump
[ first2 [ first second ] [ first first ] bi* < ] filter
- [ first ] map ;
+ keys ;
MEMO: ip-intervals ( -- interval-map )
ip-db [ [ [ from>> ] [ to>> ] bi 2array ] keep ] { } map>assoc
M: string lookup-ip
"." split [ string>number ] map
- { HEX: 1000000 HEX: 10000 HEX: 100 HEX: 1 } v.
+ { 0x1000000 0x10000 0x100 0x1 } v.
lookup-ip ;
M: integer lookup-ip ip-intervals interval-at ;