Skip to content

Commit 2c8f4ae

Browse files
committed
Refactor codes to remove redundancies
1 parent 5f97a8a commit 2c8f4ae

File tree

2 files changed

+25
-46
lines changed

2 files changed

+25
-46
lines changed

ip2proxy.erl

Lines changed: 24 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ getpackageversion() ->
5151
end.
5252

5353
getmoduleversion() ->
54-
"3.3.2".
54+
"3.3.3".
5555

5656
getdatabaseversion() ->
5757
case ets:info(mymeta) of
@@ -389,37 +389,49 @@ searchtree(S, Ipnum, Dbtype, Low, High, BaseAddr, Colsize, Iptype, Mode) ->
389389
end.
390390

391391
search4(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

408414
search6(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

425437
getall(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,

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ defmodule IP2ProxyErlang.MixProject do
44
def project() do
55
[
66
app: :ip2proxy_erlang,
7-
version: "3.3.2",
7+
version: "3.3.3",
88
elixir: "~> 1.0",
99
build_embedded: Mix.env == :prod,
1010
start_permanent: Mix.env == :prod,

0 commit comments

Comments
 (0)