2016-01-01 13:42:52 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
class Node {
|
2016-03-13 19:16:51 +01:00
|
|
|
|
2016-01-01 13:42:52 +01:00
|
|
|
private $Callsign;
|
|
|
|
|
private $IP;
|
|
|
|
|
private $LinkedModule;
|
|
|
|
|
private $Protocol;
|
|
|
|
|
private $ConnectTime;
|
|
|
|
|
private $LastHeardTime;
|
|
|
|
|
private $Suffix;
|
2016-03-01 09:28:55 +01:00
|
|
|
private $Prefix;
|
2017-01-24 08:45:11 +01:00
|
|
|
private $RandomID;
|
2016-03-13 19:16:51 +01:00
|
|
|
|
2017-01-24 08:45:11 +01:00
|
|
|
public function __construct($Callsign, $IP, $LinkedModule, $Protocol, $ConnectTime, $LastHeardTime, $RandomID) {
|
2016-03-13 19:16:51 +01:00
|
|
|
|
2025-10-14 15:15:20 +02:00
|
|
|
// Validate and sanitize IP
|
|
|
|
|
$IP = trim($IP);
|
|
|
|
|
$this->IP = filter_var($IP, FILTER_VALIDATE_IP) ? $IP : '0.0.0.0';
|
2016-03-13 19:16:51 +01:00
|
|
|
|
2025-10-14 15:15:20 +02:00
|
|
|
// Validate protocol
|
|
|
|
|
$Protocol = trim($Protocol);
|
2025-10-14 16:07:13 +02:00
|
|
|
$allowed_protocols = ['DPlus', 'DExtra', 'DCS', 'DMR', 'YSF', 'DEXTRA', 'DPLUS', 'DMRMmdvm'];
|
2025-10-14 15:15:20 +02:00
|
|
|
$this->Protocol = in_array($Protocol, $allowed_protocols, true) ? $Protocol : 'Unknown';
|
|
|
|
|
|
|
|
|
|
$this->ConnectTime = ParseTime($ConnectTime);
|
|
|
|
|
$this->LastHeardTime = ParseTime($LastHeardTime);
|
|
|
|
|
|
|
|
|
|
// Sanitize callsign (remove excessive spaces, validate format)
|
|
|
|
|
$Callsign = trim(preg_replace('/\s+/', ' ', $Callsign));
|
|
|
|
|
|
|
|
|
|
$this->FullCallsign = str_replace(" ", "-", $Callsign);
|
|
|
|
|
|
|
|
|
|
if (strpos($Callsign, " ") !== false) {
|
|
|
|
|
$this->Callsign = trim(substr($Callsign, 0, strpos($Callsign, " ")));
|
|
|
|
|
$this->Suffix = trim(substr($Callsign, strpos($Callsign, " ")));
|
|
|
|
|
$this->Prefix = strtoupper(trim(substr($Callsign, 0, 3)));
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
$this->Callsign = trim($Callsign);
|
|
|
|
|
$this->Suffix = "";
|
|
|
|
|
$this->Prefix = "";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Validate callsign format (basic check)
|
|
|
|
|
if (!preg_match('/^[A-Z0-9]{1,10}$/i', $this->Callsign)) {
|
2025-10-14 15:35:59 +02:00
|
|
|
$this->Callsign = 'INVALID';
|
2025-10-14 15:15:20 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Validate LinkedModule (single letter A-Z)
|
|
|
|
|
$LinkedModule = trim(strtoupper($LinkedModule));
|
|
|
|
|
$this->LinkedModule = preg_match('/^[A-Z]$/', $LinkedModule) ? $LinkedModule : '';
|
|
|
|
|
|
|
|
|
|
$this->RandomID = $RandomID;
|
2016-01-01 13:42:52 +01:00
|
|
|
}
|
|
|
|
|
|
2016-03-13 19:16:51 +01:00
|
|
|
public function GetFullCallsign() { return $this->FullCallsign; }
|
2016-01-01 13:42:52 +01:00
|
|
|
public function GetCallsign() { return $this->Callsign; }
|
|
|
|
|
public function GetIP() { return $this->IP; }
|
|
|
|
|
public function GetLinkedModule() { return $this->LinkedModule; }
|
|
|
|
|
public function GetProtocol() { return $this->Protocol; }
|
|
|
|
|
public function GetConnectTime() { return $this->ConnectTime; }
|
|
|
|
|
public function GetLastHeardTime() { return $this->LastHeardTime; }
|
|
|
|
|
public function GetSuffix() { return $this->Suffix; }
|
2016-03-01 09:28:55 +01:00
|
|
|
public function GetPrefix() { return $this->Prefix; }
|
2017-01-24 08:45:11 +01:00
|
|
|
public function GetRandomID() { return $this->RandomID; }
|
|
|
|
|
|
2016-01-01 13:42:52 +01:00
|
|
|
}
|
|
|
|
|
|
2016-03-13 19:16:51 +01:00
|
|
|
?>
|