From 23a351da5a45914bfeec612838531ca1b515df45 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Sat, 22 May 2010 17:49:17 +0000 Subject: [PATCH] Added getAddressPort() method to ease comparison with 'recipient' field --- .../hub/interfaces/nodes/class_NodeHelper.php | 8 +++++ application/hub/main/handler/class_ | 3 ++ .../hub/main/handler/class_BaseHandler.php | 24 +++++++++++++ application/hub/main/handler/network/class_ | 3 ++ .../class_BaseNetworkPackageHandler.php | 35 ++++++++++++++----- .../tcp/class_TcpNetworkPackageHandler.php | 8 ++++- .../udp/class_UdpNetworkPackageHandler.php | 3 ++ .../main/handler/tasks/class_TaskHandler.php | 3 ++ .../hub/main/nodes/class_BaseHubNode.php | 17 +++++++++ 9 files changed, 95 insertions(+), 9 deletions(-) diff --git a/application/hub/interfaces/nodes/class_NodeHelper.php b/application/hub/interfaces/nodes/class_NodeHelper.php index 6b9f7b913..f023f6e32 100644 --- a/application/hub/interfaces/nodes/class_NodeHelper.php +++ b/application/hub/interfaces/nodes/class_NodeHelper.php @@ -114,6 +114,14 @@ interface NodeHelper extends FrameworkInterface { * @return void */ function doSelfConnection (Taskable $taskInstance); + + /** + * "Getter for address:port combination + * + * @param $handlerInstance A valid Networkable instance + * @return $addressPort A address:port combination for this node + */ + function getAddressPort (Networkable $handlerInstance); } // [EOF] diff --git a/application/hub/main/handler/class_ b/application/hub/main/handler/class_ index bb33e383a..47907fa8b 100644 --- a/application/hub/main/handler/class_ +++ b/application/hub/main/handler/class_ @@ -30,6 +30,9 @@ class ???Handler extends BaseHandler { protected function __construct () { // Call parent constructor parent::__construct(__CLASS__); + + // Set handler name + $this->setHandlerName('!!!'); } /** diff --git a/application/hub/main/handler/class_BaseHandler.php b/application/hub/main/handler/class_BaseHandler.php index 7c02b75e5..053bf6d2a 100644 --- a/application/hub/main/handler/class_BaseHandler.php +++ b/application/hub/main/handler/class_BaseHandler.php @@ -22,6 +22,11 @@ * along with this program. If not, see . */ class BaseHandler extends BaseHubSystem { + /** + * Handler name + */ + private $handlerName = 'invalid'; + /** * Protected constructor * @@ -32,6 +37,25 @@ class BaseHandler extends BaseHubSystem { // Call parent constructor parent::__construct($className); } + + /** + * Getter for handler name + * + * @return $handlerName Name of this handler + */ + public final function getHandlerName () { + return $this->handlerName; + } + + /** + * Setter for handler name + * + * @param $handlerName Name of this handler + * @return void + */ + protected final function setHandlerName ($handlerName) { + $this->handlerName = $handlerName; + } } // [EOF] diff --git a/application/hub/main/handler/network/class_ b/application/hub/main/handler/network/class_ index 4f7c32141..07ba117ae 100644 --- a/application/hub/main/handler/network/class_ +++ b/application/hub/main/handler/network/class_ @@ -30,6 +30,9 @@ class ???NetworkPackageHandler extends BaseNetworkPackageHandler implements Netw protected function __construct () { // Call parent constructor parent::__construct(__CLASS__); + + // Set handler name + $this->setHandlerName('!!!'); } /** diff --git a/application/hub/main/handler/network/class_BaseNetworkPackageHandler.php b/application/hub/main/handler/network/class_BaseNetworkPackageHandler.php index 5416504df..723fb7ff1 100644 --- a/application/hub/main/handler/network/class_BaseNetworkPackageHandler.php +++ b/application/hub/main/handler/network/class_BaseNetworkPackageHandler.php @@ -23,14 +23,15 @@ */ class BaseNetworkPackageHandler extends BaseHandler { // Error codes - const SOCKET_ERROR_UNKNOWN = 'unknown_error'; - const SOCKET_ERROR_TRANSPORT_ENDPOINT = 'transport_endpoint'; - const SOCKET_ERROR_UNHANDLED = 'unhandled_package'; - const SOCKET_ERROR_EMPTY_DATA = 'empty_data'; - const PACKAGE_ERROR_INVALID_DATA = 'invalid_data'; - const PACKAGE_ERROR_INCOMPLETE_DATA = 'incomplete_data'; - const PACKAGE_ERROR_INVALID_CONTENT = 'invalid_content'; - const PACKAGE_LEVEL_CHECK_OKAY = 'checked_package'; + const SOCKET_ERROR_UNKNOWN = 'unknown_error'; + const SOCKET_ERROR_TRANSPORT_ENDPOINT = 'transport_endpoint'; + const SOCKET_ERROR_UNHANDLED = 'unhandled_package'; + const SOCKET_ERROR_EMPTY_DATA = 'empty_data'; + const PACKAGE_ERROR_INVALID_DATA = 'invalid_data'; + const PACKAGE_ERROR_INCOMPLETE_DATA = 'incomplete_data'; + const PACKAGE_ERROR_INVALID_CONTENT = 'invalid_content'; + const PACKAGE_ERROR_RECIPIENT_MISMATCH = 'recipient_error'; + const PACKAGE_LEVEL_CHECK_OKAY = 'checked_package'; /** * Error code from socket @@ -48,6 +49,24 @@ class BaseNetworkPackageHandler extends BaseHandler { parent::__construct($className); } + /** + * Checks wether the 'recipient' field matches our own address:port + * combination. + * + * @param $packageData Raw package data + * @return $matches Wether it matches + */ + protected function ifRecipientMatchesOwnAddress (array $packageData) { + // Construct own address first, + $ownAddress = Registry::getRegistry()->getInstance('node')->getAddressPort($this); + + // Does it match? + $matches = ($ownAddress === $packageData[1]); + + // Return result + return $matches; + } + /** * Setter for error code * diff --git a/application/hub/main/handler/network/tcp/class_TcpNetworkPackageHandler.php b/application/hub/main/handler/network/tcp/class_TcpNetworkPackageHandler.php index 2d634cc3a..e24fbeb55 100644 --- a/application/hub/main/handler/network/tcp/class_TcpNetworkPackageHandler.php +++ b/application/hub/main/handler/network/tcp/class_TcpNetworkPackageHandler.php @@ -30,12 +30,15 @@ class TcpNetworkPackageHandler extends BaseNetworkPackageHandler implements Netw protected function __construct () { // Call parent constructor parent::__construct(__CLASS__); + + // Set handler name + $this->setHandlerName('tcp'); } /** * Creates an instance of this class * - * @return $handlerInstance An instance of a Networkable class + * @return $handlerInstance An instance of a Networkable class */ public final static function createTcpNetworkPackageHandler () { // Get new instance @@ -71,6 +74,9 @@ class TcpNetworkPackageHandler extends BaseNetworkPackageHandler implements Netw } elseif (count(explode(NetworkPackage::PACKAGE_MASK_SEPERATOR, $packageData[2])) < 2) { // Not entougth fields in content $this->setErrorCode(self::PACKAGE_ERROR_INVALID_CONTENT); + } elseif (!$this->ifRecipientMatchesOwnAddress($packageData)) { + // Field 'recipient' doesn't match our address, this must always be the case + $this->setErrorCode(self::PACKAGE_ERROR_RECIPIENT_MISMATCH); } else { // This check went fine... $isValid = true; diff --git a/application/hub/main/handler/network/udp/class_UdpNetworkPackageHandler.php b/application/hub/main/handler/network/udp/class_UdpNetworkPackageHandler.php index edf93218d..477414a09 100644 --- a/application/hub/main/handler/network/udp/class_UdpNetworkPackageHandler.php +++ b/application/hub/main/handler/network/udp/class_UdpNetworkPackageHandler.php @@ -30,6 +30,9 @@ class UdpNetworkPackageHandler extends BaseNetworkPackageHandler implements Netw protected function __construct () { // Call parent constructor parent::__construct(__CLASS__); + + // Set handler name + $this->setHandlerName('udp'); } /** diff --git a/application/hub/main/handler/tasks/class_TaskHandler.php b/application/hub/main/handler/tasks/class_TaskHandler.php index f96df781e..044dc3c91 100644 --- a/application/hub/main/handler/tasks/class_TaskHandler.php +++ b/application/hub/main/handler/tasks/class_TaskHandler.php @@ -39,6 +39,9 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { // Call parent constructor parent::__construct(__CLASS__); + // Set handler name + $this->setHandlerName('task'); + // Init the task list $this->setListInstance(ObjectFactory::createObjectByConfiguredName('task_list_class')); diff --git a/application/hub/main/nodes/class_BaseHubNode.php b/application/hub/main/nodes/class_BaseHubNode.php index f27af3018..e28e339b0 100644 --- a/application/hub/main/nodes/class_BaseHubNode.php +++ b/application/hub/main/nodes/class_BaseHubNode.php @@ -649,6 +649,23 @@ class BaseHubNode extends BaseHubSystem implements Updateable { public final function enableIsActive ($isActive = true) { $this->isActive = (bool) $isActive; } + + /** + * "Getter for address:port combination + * + * @param $handlerInstance A valid Networkable instance + * @return $addressPort A address:port combination for this node + */ + public final function getAddressPort (Networkable $handlerInstance) { + // Construct config entry + $configEntry = 'node_' . $handlerInstance->getHandlerName() . '_listen_port'; + + // Get IP and port + $addressPort = $this->getConfigInstance()->detectServerAddress() . ':' . $this->getConfigInstance()->getConfigEntry($configEntry); + + // Return it + return $addressPort; + } } // [EOF] -- 2.39.5