summaryrefslogtreecommitdiffstats
path: root/vendor/geoip2/geoip2/src/Util.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/geoip2/geoip2/src/Util.php')
-rw-r--r--vendor/geoip2/geoip2/src/Util.php37
1 files changed, 37 insertions, 0 deletions
diff --git a/vendor/geoip2/geoip2/src/Util.php b/vendor/geoip2/geoip2/src/Util.php
new file mode 100644
index 0000000..ac6d14c
--- /dev/null
+++ b/vendor/geoip2/geoip2/src/Util.php
@@ -0,0 +1,37 @@
+<?php
+
+namespace GeoIp2;
+
+class Util
+{
+ /**
+ * This returns the network in CIDR notation for the given IP and prefix
+ * length. This is for internal use only.
+ *
+ * @internal
+ * @ignore
+ *
+ * @param mixed $ipAddress
+ * @param mixed $prefixLen
+ */
+ public static function cidr($ipAddress, $prefixLen)
+ {
+ $ipBytes = inet_pton($ipAddress);
+ $networkBytes = str_repeat("\0", \strlen($ipBytes));
+
+ $curPrefix = $prefixLen;
+ for ($i = 0; $i < \strlen($ipBytes) && $curPrefix > 0; $i++) {
+ $b = $ipBytes[$i];
+ if ($curPrefix < 8) {
+ $shiftN = 8 - $curPrefix;
+ $b = \chr(0xFF & (\ord($b) >> $shiftN) << $shiftN);
+ }
+ $networkBytes[$i] = $b;
+ $curPrefix -= 8;
+ }
+
+ $network = inet_ntop($networkBytes);
+
+ return "$network/$prefixLen";
+ }
+}