Compare commits
No commits in common. "b0c3eca177c9a7521991d92896776606ba754111" and "1ace4c95b52c822c4c21631700ea7f2f945095d3" have entirely different histories.
b0c3eca177
...
1ace4c95b5
5 changed files with 45 additions and 58 deletions
|
@ -40,27 +40,7 @@ class Subnet
|
||||||
throw new Exception("CIDR must be between 0 and 32.");
|
throw new Exception("CIDR must be between 0 and 32.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($cidr === 32) {
|
$hosts = (1 << (32 - $cidr)) - 2; // Excludes network and broadcast
|
||||||
return [
|
|
||||||
'network' => $ip,
|
|
||||||
'first' => $ip,
|
|
||||||
'last' => $ip,
|
|
||||||
'hosts' => 1,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($cidr === 31) {
|
|
||||||
$ipLong = ip2long($ip);
|
|
||||||
$network = $ipLong & (-1 << (32 - $cidr));
|
|
||||||
return [
|
|
||||||
'network' => long2ip($network),
|
|
||||||
'first' => long2ip($network),
|
|
||||||
'last' => long2ip($network + 1),
|
|
||||||
'hosts' => 2,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
$hosts = (1 << (32 - $cidr)) - 2;
|
|
||||||
$ipLong = ip2long($ip);
|
$ipLong = ip2long($ip);
|
||||||
$mask = -1 << (32 - $cidr);
|
$mask = -1 << (32 - $cidr);
|
||||||
$network = $ipLong & $mask;
|
$network = $ipLong & $mask;
|
||||||
|
@ -76,7 +56,6 @@ class Subnet
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculate IPv6
|
* Calculate IPv6
|
||||||
*
|
*
|
||||||
|
@ -91,50 +70,35 @@ class Subnet
|
||||||
throw new Exception("CIDR must be between 0 and 128.");
|
throw new Exception("CIDR must be between 0 and 128.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($cidr === 128) {
|
// Convert IP to binary representation
|
||||||
return [
|
$binaryIP = inet_pton($ip);
|
||||||
'network' => $ip,
|
if ($binaryIP === false) {
|
||||||
'first' => $ip,
|
throw new Exception("Failed to parse IPv6 address.");
|
||||||
'last' => $ip,
|
|
||||||
'hosts' => 1,
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($cidr === 127) {
|
// Calculate network address
|
||||||
$binaryIP = inet_pton($ip);
|
|
||||||
$network = substr($binaryIP, 0, intval($cidr / 8));
|
|
||||||
$firstHost = inet_ntop($network);
|
|
||||||
$lastHost = inet_ntop($binaryIP);
|
|
||||||
return [
|
|
||||||
'network' => $firstHost,
|
|
||||||
'first' => $firstHost,
|
|
||||||
'last' => $lastHost,
|
|
||||||
'hosts' => 2,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
// General case for other IPv6 subnets
|
|
||||||
$totalHosts = bcpow(2, 128 - $cidr); // Number of total IPs
|
|
||||||
$binaryIP = inet_pton($ip);
|
|
||||||
|
|
||||||
// Calculate the network address
|
|
||||||
$network = substr($binaryIP, 0, intval($cidr / 8));
|
$network = substr($binaryIP, 0, intval($cidr / 8));
|
||||||
$remainder = $cidr % 8;
|
$remainder = $cidr % 8;
|
||||||
|
|
||||||
if ($remainder > 0) {
|
if ($remainder > 0) {
|
||||||
$lastByte = ord($binaryIP[intval($cidr / 8)]) & (0xFF << (8 - $remainder));
|
$lastByte = ord($binaryIP[$cidr / 8]) & (0xFF << (8 - $remainder));
|
||||||
$network .= chr($lastByte);
|
$network .= chr($lastByte);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Pad the rest with zeros
|
||||||
$network = str_pad($network, 16, "\0");
|
$network = str_pad($network, 16, "\0");
|
||||||
|
|
||||||
|
// Calculate first and last addresses
|
||||||
$networkAddress = inet_ntop($network);
|
$networkAddress = inet_ntop($network);
|
||||||
|
$totalHosts = $cidr == 128 ? 1 : bcpow(2, 128 - $cidr);
|
||||||
|
$firstHost = ($cidr == 128) ? $networkAddress : inet_ntop($network);
|
||||||
|
$lastHost = inet_ntop(pack("H*", str_repeat("F", 32)));
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'network' => $networkAddress,
|
'network' => $networkAddress,
|
||||||
'first' => $cidr == 128 ? $networkAddress : inet_ntop($network),
|
'first' => $firstHost,
|
||||||
'last' => $cidr == 128 ? $networkAddress : inet_ntop($network), // Adjusted for simplicity
|
'last' => $lastHost,
|
||||||
'hosts' => $totalHosts,
|
'hosts' => $totalHosts,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -10,8 +10,7 @@
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=8.3.0",
|
"php": ">=8.3.0",
|
||||||
"filp/whoops": "^2.16",
|
"filp/whoops": "^2.16",
|
||||||
"vlucas/phpdotenv": "^5.6",
|
"vlucas/phpdotenv": "^5.6"
|
||||||
"ext-bcmath": "*"
|
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"symfony/var-dumper": "^7.1",
|
"symfony/var-dumper": "^7.1",
|
||||||
|
|
|
@ -15,11 +15,14 @@ class HtmlEngine extends Render
|
||||||
$basePath = $_SERVER['DOCUMENT_ROOT'];
|
$basePath = $_SERVER['DOCUMENT_ROOT'];
|
||||||
$viewsPath = app()->resourcePath('views/' . str_replace('.', '/', $this->view) . '.php');
|
$viewsPath = app()->resourcePath('views/' . str_replace('.', '/', $this->view) . '.php');
|
||||||
|
|
||||||
if (!file_exists($viewsPath)) {
|
if (file_exists($viewsPath)) {
|
||||||
throw new \Exception('View not found');
|
extract($this->data);
|
||||||
|
|
||||||
|
include $viewsPath;
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
extract($this->data);
|
throw new \Exception('View not found');
|
||||||
include $viewsPath;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -71,7 +71,6 @@ class RouteCollection
|
||||||
fn($key) => !is_numeric($key),
|
fn($key) => !is_numeric($key),
|
||||||
ARRAY_FILTER_USE_KEY
|
ARRAY_FILTER_USE_KEY
|
||||||
);
|
);
|
||||||
|
|
||||||
return $route;
|
return $route;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
22
src/Routing/Router.php
Normal file
22
src/Routing/Router.php
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Core\Routing;
|
||||||
|
|
||||||
|
use Core\Http\Request;
|
||||||
|
|
||||||
|
class Router
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Dispatch router and run application
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function dispatch(): void
|
||||||
|
{
|
||||||
|
// Create request
|
||||||
|
$request = new Request($_POST + $_FILES);
|
||||||
|
|
||||||
|
// Dispatch router
|
||||||
|
RouteDispatcher::dispatch($request, RouteCollection::retrieve());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue