Introduce SortAddressHash function.
[people/stevee/guardian.git] / modules / Base.pm
index 0b785f1..41ac981 100644 (file)
@@ -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;