@@ -51,7 +51,7 @@ getpackageversion() ->
5151 end .
5252
5353getmoduleversion () ->
54- " 3.3.2 " .
54+ " 3.3.3 " .
5555
5656getdatabaseversion () ->
5757 case ets :info (mymeta ) of
@@ -389,37 +389,49 @@ searchtree(S, Ipnum, Dbtype, Low, High, BaseAddr, Colsize, Iptype, Mode) ->
389389 end .
390390
391391search4 (S , Ipnum , Dbtype , Low , High , Baseaddr , Indexbaseaddr , Colsize , Mode ) ->
392+ if
393+ Ipnum == 4294967295 ->
394+ Ipnum2 = Ipnum - 1 ;
395+ true ->
396+ Ipnum2 = Ipnum
397+ end ,
392398 if
393399 Indexbaseaddr > 0 ->
394- Indexpos = ((Ipnum bsr 16 ) bsl 3 ) + Indexbaseaddr ,
400+ Indexpos = ((Ipnum2 bsr 16 ) bsl 3 ) + Indexbaseaddr ,
395401 case file :pread (S , Indexpos - 1 , 8 ) of % 4 bytes for each IP From & IP To
396402 eof ->
397403 io :format (" Error: IP address not found.~n " , []),
398404 {}; % return empty
399405 {ok , R } ->
400406 Low2 = readuint32row (R , 0 ),
401407 High2 = readuint32row (R , 4 ),
402- searchtree (S , Ipnum , Dbtype , Low2 , High2 , Baseaddr , Colsize , ipv4 , Mode )
408+ searchtree (S , Ipnum2 , Dbtype , Low2 , High2 , Baseaddr , Colsize , ipv4 , Mode )
403409 end ;
404410 true ->
405- searchtree (S , Ipnum , Dbtype , Low , High , Baseaddr , Colsize , ipv4 , Mode )
411+ searchtree (S , Ipnum2 , Dbtype , Low , High , Baseaddr , Colsize , ipv4 , Mode )
406412 end .
407413
408414search6 (S , Ipnum , Dbtype , Low , High , Baseaddr , Indexbaseaddr , Colsize , Mode ) ->
415+ if
416+ Ipnum == 340282366920938463463374607431768211455 ->
417+ Ipnum2 = Ipnum - 1 ;
418+ true ->
419+ Ipnum2 = Ipnum
420+ end ,
409421 if
410422 Indexbaseaddr > 0 ->
411- Indexpos = ((Ipnum bsr 112 ) bsl 3 ) + Indexbaseaddr ,
423+ Indexpos = ((Ipnum2 bsr 112 ) bsl 3 ) + Indexbaseaddr ,
412424 case file :pread (S , Indexpos - 1 , 8 ) of % 4 bytes for each IP From & IP To
413425 eof ->
414426 io :format (" Error: IP address not found.~n " , []),
415427 {}; % return empty
416428 {ok , R } ->
417429 Low2 = readuint32row (R , 0 ),
418430 High2 = readuint32row (R , 4 ),
419- searchtree (S , Ipnum , Dbtype , Low2 , High2 , Baseaddr , Colsize , ipv6 , Mode )
431+ searchtree (S , Ipnum2 , Dbtype , Low2 , High2 , Baseaddr , Colsize , ipv6 , Mode )
420432 end ;
421433 true ->
422- searchtree (S , Ipnum , Dbtype , Low , High , Baseaddr , Colsize , ipv6 , Mode )
434+ searchtree (S , Ipnum2 , Dbtype , Low , High , Baseaddr , Colsize , ipv6 , Mode )
423435 end .
424436
425437getall (Ip ) ->
@@ -522,53 +534,20 @@ query(Ip, Mode) ->
522534 Result = case inet :parse_address (Ip ) of
523535 {ok , {X1 , X2 , X3 , X4 }} ->
524536 Ipnum = (X1 bsl 24 ) + (X2 bsl 16 ) + (X3 bsl 8 ) + (X4 ),
525- if
526- Ipnum == 4294967295 ->
527- Ipnum2 = Ipnum - 1 ;
528- true ->
529- Ipnum2 = Ipnum
530- end ,
531- search4 (S , Ipnum2 , Databasetype , 0 , Ipv4databasecount , Ipv4databaseaddr , Ipv4indexbaseaddr , Ipv4columnsize , Mode );
537+ search4 (S , Ipnum , Databasetype , 0 , Ipv4databasecount , Ipv4databaseaddr , Ipv4indexbaseaddr , Ipv4columnsize , Mode );
532538 {ok , {X1 , X2 , X3 , X4 , X5 , X6 , X7 , X8 }} ->
533539 Ipnum = (X1 bsl 112 ) + (X2 bsl 96 ) + (X3 bsl 80 ) + (X4 bsl 64 ) + (X5 bsl 48 ) + (X6 bsl 32 ) + (X7 bsl 16 ) + X8 ,
534540 if
535541 Ipnum >= Fromv4mapped andalso Ipnum =< Tov4mapped ->
536- Ipnum2 = Ipnum - Fromv4mapped ,
537- if
538- Ipnum2 == 4294967295 ->
539- Ipnum3 = Ipnum2 - 1 ;
540- true ->
541- Ipnum3 = Ipnum2
542- end ,
543- search4 (S , Ipnum3 , Databasetype , 0 , Ipv4databasecount , Ipv4databaseaddr , Ipv4indexbaseaddr , Ipv4columnsize , Mode );
542+ search4 (S , (Ipnum - Fromv4mapped ), Databasetype , 0 , Ipv4databasecount , Ipv4databaseaddr , Ipv4indexbaseaddr , Ipv4columnsize , Mode );
544543 Ipnum >= From6to4 andalso Ipnum =< To6to4 ->
545- Ipnum2 = (Ipnum bsr 80 ) band Last32bits ,
546- if
547- Ipnum2 == 4294967295 ->
548- Ipnum3 = Ipnum2 - 1 ;
549- true ->
550- Ipnum3 = Ipnum2
551- end ,
552- search4 (S , Ipnum3 , Databasetype , 0 , Ipv4databasecount , Ipv4databaseaddr , Ipv4indexbaseaddr , Ipv4columnsize , Mode );
544+ search4 (S , ((Ipnum bsr 80 ) band Last32bits ), Databasetype , 0 , Ipv4databasecount , Ipv4databaseaddr , Ipv4indexbaseaddr , Ipv4columnsize , Mode );
553545 Ipnum >= Fromteredo andalso Ipnum =< Toteredo ->
554- Ipnum2 = (bnot Ipnum ) band Last32bits ,
555- if
556- Ipnum2 == 4294967295 ->
557- Ipnum3 = Ipnum2 - 1 ;
558- true ->
559- Ipnum3 = Ipnum2
560- end ,
561- search4 (S , Ipnum3 , Databasetype , 0 , Ipv4databasecount , Ipv4databaseaddr , Ipv4indexbaseaddr , Ipv4columnsize , Mode );
546+ search4 (S , ((bnot Ipnum ) band Last32bits ), Databasetype , 0 , Ipv4databasecount , Ipv4databaseaddr , Ipv4indexbaseaddr , Ipv4columnsize , Mode );
562547 true ->
563548 if
564549 Ipv6databasecount > 0 ->
565- if
566- Ipnum == 340282366920938463463374607431768211455 ->
567- Ipnum2 = Ipnum - 1 ;
568- true ->
569- Ipnum2 = Ipnum
570- end ,
571- search6 (S , Ipnum2 , Databasetype , 0 , Ipv6databasecount , Ipv6databaseaddr , Ipv6indexbaseaddr , Ipv6columnsize , Mode );
550+ search6 (S , Ipnum , Databasetype , 0 , Ipv6databasecount , Ipv6databaseaddr , Ipv6indexbaseaddr , Ipv6columnsize , Mode );
572551 true ->
573552 # ip2proxyrecord {
574553 country_short = Z ,
0 commit comments