X-Git-Url: http://git.ipfire.org/?p=people%2Fstevee%2Fguardian.git;a=blobdiff_plain;f=modules%2FBase.pm;h=41ac981f9eb41786fba4430392cef8eac851a4f1;hp=0b785f173a5e1772b58d56bfd999e00380ae943f;hb=fa67ac02c9f665d835346d14c05d1aa0b8ab2d64;hpb=67af4d57daf101486d513271bef96bd832398246 diff --git a/modules/Base.pm b/modules/Base.pm index 0b785f1..41ac981 100644 --- a/modules/Base.pm +++ b/modules/Base.pm @@ -217,4 +217,34 @@ sub GetFileposition ($) { return $position; } +# +## The SortAddressHash function. +# +# This function requires a reference to an hash containing +# IP-addresses, will sort them into a nice looking order +# and return the soreted result as an array. +# +sub SortAddressHash (\%) { + # Dereference the given hash reference and store it + # in a new temporary hash. + my %addresshash = %{ $_[0] }; + + # Loop through the entire hash keys. + foreach my $address (keys(%addresshash)) { + # Convert the address or subnet into binary format. + my @bin_address = &IPOrNet2Int($address); + + # Only store the first result if there are multiple + # one in case of a given subnet. + $addresshash{$address} = $bin_address[0]; + } + + # Sort the addresshash by the binary addresses + # of the stored addresses and save them is an array. + my @sorted_addresses = sort { $addresshash{$a} <=> $addresshash{$b} } keys %addresshash; + + # Return the sorted address array. + return @sorted_addresses; +} + 1;