ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/myhttpd/netgeo.pl
(Generate patch)

Comparing Coro/myhttpd/netgeo.pl (file contents):
Revision 1.4 by root, Tue Aug 28 02:30:49 2001 UTC vs.
Revision 1.6 by root, Thu Aug 30 03:35:56 2001 UTC

6use Fcntl; 6use Fcntl;
7 7
8use Coro; 8use Coro;
9use Coro::Event; 9use Coro::Event;
10use Coro::Semaphore; 10use Coro::Semaphore;
11use Coro::SemaphoreSet;
11use Coro::Socket; 12use Coro::Socket;
12 13
13$Event::DIED = sub { 14$Event::DIED = sub {
14 Event::verbose_exception_handler(@_); 15 Event::verbose_exception_handler(@_);
15 #Event::unloop_all(); 16 #Event::unloop_all();
218 219
219$WHOIS{ARIN} = new Whois::ARIN ARIN => "whois.arin.net", maxjobs => 12; 220$WHOIS{ARIN} = new Whois::ARIN ARIN => "whois.arin.net", maxjobs => 12;
220$WHOIS{RIPE} = new Whois::RIPE RIPE => "whois.ripe.net", maxjobs => 20; 221$WHOIS{RIPE} = new Whois::RIPE RIPE => "whois.ripe.net", maxjobs => 20;
221$WHOIS{APNIC} = new Whois::RIPE APNIC => "whois.apnic.net", maxjobs => 20; 222$WHOIS{APNIC} = new Whois::RIPE APNIC => "whois.apnic.net", maxjobs => 20;
222 223
224$whoislock = new Coro::SemaphoreSet;
225
223sub ip_request { 226sub ip_request {
224 my $ip = $_[0]; 227 my $ip = $_[0];
228
229 my $guard = $whoislock->guard($ip);
225 230
226 my $c = $iprange->db_cursor; 231 my $c = $iprange->db_cursor;
227 my $v; 232 my $v;
228 233
229 if (!$c->c_get((inet_aton $ip), $v, DB_SET_RANGE)) { 234 if (!$c->c_get((inet_aton $ip), $v, DB_SET_RANGE)) {
230 my ($ip0, $ip1, $whois) = split /\x0/, $v; 235 my ($ip0, $ip1, $whois) = split /\x0/, $v;
231 my $_ip = ip2int $ip; 236 my $_ip = ip2int $ip;
232 print "looked for $_ip, found $ip0, $ip1 ", length($v),"\n";
233 if ($ip0 <= $_ip && $_ip <= $ip1) { 237 if ($ip0 <= $_ip && $_ip <= $ip1) {
234 return $whois; 238 return $whois;
235 } 239 }
236 } 240 }
237 241
238 print "looked for $ip, ONLY found $v->[0], $v->[1]\n";
239
240 my ($arin, $ripe, $apnic); 242 my ($arin, $ripe, $apnic);
241 243
242 $whois = $WHOIS{APNIC}->ip_request($ip) 244 $whois = $WHOIS{APNIC}->ip_request($ip)
243 || $WHOIS{RIPE} ->ip_request($ip) 245 || $WHOIS{RIPE} ->ip_request($ip)
244 || $WHOIS{ARIN} ->ip_request($ip); 246 || $WHOIS{ARIN} ->ip_request($ip);
256 $_ip = $_ip & 0xffffff00; 258 $_ip = $_ip & 0xffffff00;
257 $_ip0 = $_ip if $_ip0 < $_ip; 259 $_ip0 = $_ip if $_ip0 < $_ip;
258 $_ip1 = $_ip + 255 if $_ip1 > $_ip + 255; 260 $_ip1 = $_ip + 255 if $_ip1 > $_ip + 255;
259 } 261 }
260 262
261 print "setting entry ($_ip0, $_ip, $_ip1)\n";
262 $iprange->db_put((pack "N", $_ip1), (join "\x0", $_ip0, $_ip1, $whois)); 263 $iprange->db_put((pack "N", $_ip1), (join "\x0", $_ip0, $_ip1, $whois));
263 (tied %whois)->db_sync; 264 (tied %whois)->db_sync;
264 $iprange->db_sync; 265 $iprange->db_sync;
265 266
266 $whois; 267 $whois;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines