From: Roland Häder <roland@mxchange.org>
Date: Mon, 30 Mar 2009 05:36:24 +0000 (+0000)
Subject: Mode-validation and IP detection added, mode classes added
X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=0fcae44c67a36cb2708ea18d22a56b7200a5574c;p=hub.git

Mode-validation and IP detection added, mode classes added
---

diff --git a/.gitattributes b/.gitattributes
index b58ad545d..8d83ab097 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -19,10 +19,13 @@ application/hub/main/database/wrapper/.htaccess -text
 application/hub/main/database/wrapper/class_NodeInformationDatabaseWrapper.php -text
 application/hub/main/nodes/.htaccess -text
 application/hub/main/nodes/boot/.htaccess -text
+application/hub/main/nodes/boot/class_HubBootNode.php -text
 application/hub/main/nodes/class_ -text
 application/hub/main/nodes/class_BaseHubNode.php -text
 application/hub/main/nodes/list/.htaccess -text
+application/hub/main/nodes/list/class_BootListNode.php -text
 application/hub/main/nodes/master/.htaccess -text
+application/hub/main/nodes/master/class_HubMasterNode.php -text
 application/hub/main/nodes/regular/.htaccess -text
 application/hub/main/nodes/regular/class_HubRegularNode.php -text
 application/hub/starter.php -text
diff --git a/application/hub/class_ApplicationHelper.php b/application/hub/class_ApplicationHelper.php
index 7dc7f51d3..e7f2bdfef 100644
--- a/application/hub/class_ApplicationHelper.php
+++ b/application/hub/class_ApplicationHelper.php
@@ -22,7 +22,7 @@
  *
  * @author		Roland Haeder <webmaster@ship-simu.org>
  * @version		0.0
- * @copyright	Copyright(c) 2007 - 2009 Roland Haeder, this is free software
+ * @copyright	Copyright(c) 2007 - 2008 Roland Haeder, 2009 Hub Developer Team
  * @license		GNU GPL 3.0 or any newer version
  *
  * This program is free software: you can redistribute it and/or modify
@@ -38,7 +38,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-class ApplicationHelper extends BaseFrameworkSystem implements ManageableApplication {
+class ApplicationHelper extends BaseFrameworkSystem implements ManageableApplication, Registerable {
 	/**
 	 * The version number of this application
 	 */
@@ -173,7 +173,17 @@ class ApplicationHelper extends BaseFrameworkSystem implements ManageableApplica
 		$className = 'Hub' . $this->convertToClassName($nodeMode) . 'Node';
 
 		// And try to instance it
-		$nodeInstance = ObjectFactory::createObjectByName($className);
+		try {
+			// Get an instance
+			$nodeInstance = ObjectFactory::createObjectByName($className, array($requestInstance));
+
+			// Set the app instance
+			$nodeInstance->setApplicationInstance($this);
+		} catch (ClassNotFoundException $e) {
+			// This means, the node mode is invalid!
+			// @TODO Can we rewrite this to app_die() ?
+			die('Node mode ' . $nodeMode . ' is invalid.' . "\n");
+		}
 
 		// --------------------- Hub-id aquirement phase ---------------------
 		// Aquire a hub-id. This step generates on first launch anew one and
diff --git a/application/hub/config.php b/application/hub/config.php
index c589259df..eb2da9ef9 100644
--- a/application/hub/config.php
+++ b/application/hub/config.php
@@ -4,7 +4,7 @@
  *
  * @author		Roland Haeder <webmaster@ship-simu.org>
  * @version		0.0
- * @copyright	Copyright(c) 2007 - 2009 Roland Haeder, this is free software
+ * @copyright	Copyright(c) 2007 - 2008 Roland Haeder, 2009 Hub Developer Team
  * @license		GNU GPL 3.0 or any newer version
  *
  * This program is free software: you can redistribute it and/or modify
diff --git a/application/hub/debug.php b/application/hub/debug.php
index 2bf14db6b..47325711b 100644
--- a/application/hub/debug.php
+++ b/application/hub/debug.php
@@ -4,7 +4,7 @@
  *
  * @author		Roland Haeder <webmaster@ship-simu.org>
  * @version		0.0
- * @copyright	Copyright(c) 2007 - 2009 Roland Haeder, this is free software
+ * @copyright	Copyright(c) 2007 - 2008 Roland Haeder, 2009 Hub Developer Team
  * @license		GNU GPL 3.0 or any newer version
  *
  * This program is free software: you can redistribute it and/or modify
diff --git a/application/hub/exceptions.php b/application/hub/exceptions.php
index c8fcdcb27..b30c9b5ee 100644
--- a/application/hub/exceptions.php
+++ b/application/hub/exceptions.php
@@ -5,7 +5,7 @@
  *
  * @author		Roland Haeder <webmaster@ship-simu.org>
  * @version		0.0
- * @copyright	Copyright(c) 2007 - 2009 Roland Haeder, this is free software
+ * @copyright	Copyright(c) 2007 - 2008 Roland Haeder, 2009 Hub Developer Team
  * @license		GNU GPL 3.0 or any newer version
  *
  * This program is free software: you can redistribute it and/or modify
diff --git a/application/hub/init.php b/application/hub/init.php
index 312d5aa40..10980a4fc 100644
--- a/application/hub/init.php
+++ b/application/hub/init.php
@@ -15,7 +15,7 @@
  *
  * @author		Roland Haeder <webmaster@ship-simu.org>
  * @version		0.0
- * @copyright	Copyright(c) 2007 - 2009 Roland Haeder, this is free software
+ * @copyright	Copyright(c) 2007 - 2008 Roland Haeder, 2009 Hub Developer Team
  * @license		GNU GPL 3.0 or any newer version
  *
  * This program is free software: you can redistribute it and/or modify
diff --git a/application/hub/interfaces/nodes/class_NodeHelper.php b/application/hub/interfaces/nodes/class_NodeHelper.php
index 75b45ee90..140f53a6e 100644
--- a/application/hub/interfaces/nodes/class_NodeHelper.php
+++ b/application/hub/interfaces/nodes/class_NodeHelper.php
@@ -4,7 +4,7 @@
  *
  * @author		Roland Haeder <webmaster@ship-simu.org>
  * @version		0.0.0
- * @copyright	Copyright (c) 2007, 2008 Roland Haeder, 2009 Core Developer Team
+ * @copyright	Copyright (c) 2007, 2008 Roland Haeder, 2009 Hub Developer Team
  * @license		GNU GPL 3.0 or any newer version
  * @link		http://www.ship-simu.org
  * @todo		We need to find a better name for this interface
diff --git a/application/hub/loader.php b/application/hub/loader.php
index e2d153d88..b03ebb36b 100644
--- a/application/hub/loader.php
+++ b/application/hub/loader.php
@@ -4,7 +4,7 @@
  *
  * @author		Roland Haeder <webmaster@ship-simu.org>
  * @version		0.0
- * @copyright	Copyright(c) 2007 - 2009 Roland Haeder, this is free software
+ * @copyright	Copyright(c) 2007 - 2008 Roland Haeder, 2009 Hub Developer Team
  * @license		GNU GPL 3.0 or any newer version
  *
  * This program is free software: you can redistribute it and/or modify
diff --git a/application/hub/main/database/wrapper/class_NodeInformationDatabaseWrapper.php b/application/hub/main/database/wrapper/class_NodeInformationDatabaseWrapper.php
index 7dccdef85..a9d279de7 100644
--- a/application/hub/main/database/wrapper/class_NodeInformationDatabaseWrapper.php
+++ b/application/hub/main/database/wrapper/class_NodeInformationDatabaseWrapper.php
@@ -4,7 +4,7 @@
  *
  * @author		Roland Haeder <webmaster@ship-simu.org>
  * @version		0.0.0
- * @copyright	Copyright (c) 2007, 2008 Roland Haeder, 2009 Core Developer Team
+ * @copyright	Copyright (c) 2007, 2008 Roland Haeder, 2009 Hub Developer Team
  * @license		GNU GPL 3.0 or any newer version
  * @link		http://www.ship-simu.org
  *
diff --git a/application/hub/main/nodes/boot/class_HubBootNode.php b/application/hub/main/nodes/boot/class_HubBootNode.php
new file mode 100644
index 000000000..e24aec2a5
--- /dev/null
+++ b/application/hub/main/nodes/boot/class_HubBootNode.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * A hub-node class for the 'Boot' mode
+ *
+ * @author		Roland Haeder <webmaster@ship-simu.org>
+ * @version		0.0.0
+ * @copyright	Copyright (c) 2007, 2008 Roland Haeder, 2009 Hub Developer Team
+ * @license		GNU GPL 3.0 or any newer version
+ * @link		http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class HubBootNode extends BaseHubNode implements NodeHelper {
+	/**
+	 * Protected constructor
+	 *
+	 * @return	void
+	 */
+	protected function __construct () {
+		// Call parent constructor
+		parent::__construct(__CLASS__);
+	}
+
+	/**
+	 * Creates an instance of this hub-node class
+	 *
+	 * @param	$requestInstance	An instance of a Requestable class
+	 * @return	$nodeInstance		An instance of this hub-node class
+	 */
+	public final static function createHubBootNode (Requestable $requestInstance) {
+		// Get a new instance
+		$nodeInstance = new HubBootNode();
+
+		// Set the request instance
+		$nodeInstance->setRequestInstance($requestInstance);
+
+		// Return the instance
+		return $nodeInstance;
+	}
+
+	/**
+	 * Method to "bootstrap" the node. This step does also apply provided
+	 * command-line arguments stored in the request instance. The regular node
+	 * should communicate with the bootstrap-nodes at this point.
+	 *
+	 * @param	$requestInstance	An instance of a Requestable class
+	 * @return	void
+	 */
+	public function doBootstrapping (Requestable $requestInstance) {
+		// Call generic (parent) bootstrapping method
+		parent::doGenericBootstrapping();
+		$this->partialStub("Please implement this method.");
+	}
+}
+
+// [EOF]
+?>
diff --git a/application/hub/main/nodes/class_ b/application/hub/main/nodes/class_
index 90a948450..17cb01b59 100644
--- a/application/hub/main/nodes/class_
+++ b/application/hub/main/nodes/class_
@@ -4,7 +4,7 @@
  *
  * @author		Roland Haeder <webmaster@ship-simu.org>
  * @version		0.0.0
- * @copyright	Copyright (c) 2007, 2008 Roland Haeder, 2009 Core Developer Team
+ * @copyright	Copyright (c) 2007, 2008 Roland Haeder, 2009 Hub Developer Team
  * @license		GNU GPL 3.0 or any newer version
  * @link		http://www.ship-simu.org
  *
@@ -35,12 +35,16 @@ class Hub???Node extends BaseHubNode implements NodeHelper {
 	/**
 	 * Creates an instance of this hub-node class
 	 *
-	 * @return	$nodeInstance	An instance of this hub-node class
+	 * @param	$requestInstance	An instance of a Requestable class
+	 * @return	$nodeInstance		An instance of this hub-node class
 	 */
-	public final static function createHub???Node () {
+	public final static function createHub???Node (Requestable $requestInstance) {
 		// Get a new instance
 		$nodeInstance = new Hub???Node();
 
+		// Set the request instance
+		$nodeInstance->setRequestInstance($requestInstance);
+
 		// Return the instance
 		return $nodeInstance;
 	}
@@ -54,19 +58,9 @@ class Hub???Node extends BaseHubNode implements NodeHelper {
 	 * @return	void
 	 */
 	public function doBootstrapping (Requestable $requestInstance) {
-		$this->partialStub();
-	}
-
-	/**
-	 * Method to aquire a hub-id. On first run this generates a new one
-	 * based on many pseudo-random data. On any later run, unless the id
-	 * got not removed from database, it will be restored from the database.
-	 *
-	 * @param	$requestInstance	An instance of a Requestable class
-	 * @return	void
-	 */
-	public function aquireHubId (Requestable $requestInstance) {
-		$this->partialStub();
+		// Call generic (parent) bootstrapping method
+		parent::doGenericBootstrapping();
+		$this->partialStub("Please implement this method.");
 	}
 }
 
diff --git a/application/hub/main/nodes/class_BaseHubNode.php b/application/hub/main/nodes/class_BaseHubNode.php
index c000f64d7..61028b328 100644
--- a/application/hub/main/nodes/class_BaseHubNode.php
+++ b/application/hub/main/nodes/class_BaseHubNode.php
@@ -4,7 +4,7 @@
  *
  * @author		Roland Haeder <webmaster@ship-simu.org>
  * @version		0.0.0
- * @copyright	Copyright (c) 2007, 2008 Roland Haeder, 2009 Core Developer Team
+ * @copyright	Copyright (c) 2007, 2008 Roland Haeder, 2009 Hub Developer Team
  * @license		GNU GPL 3.0 or any newer version
  * @link		http://www.ship-simu.org
  *
@@ -25,7 +25,12 @@ class BaseHubNode extends BaseFrameworkSystem implements Updateable {
 	/**
 	 * Node id
 	 */
-	private $nodeId = "";
+	private $nodeId = '';
+
+	/**
+	 * IP/port number of bootstrapping node
+	 */
+	private $bootIpPort = '';
 
 	/**
 	 * Protected constructor
@@ -62,7 +67,106 @@ class BaseHubNode extends BaseFrameworkSystem implements Updateable {
 	}
 
 	/**
-	 * Method to aquire a hub-id. On first run this generates a new one
+	 * Checks wether the given IP address matches one of the bootstrapping nodes
+	 *
+	 * @param	$remoteAddr		IP address to checkout against our bootstrapping list
+	 * @return	$isFound		Wether the IP is found
+	 */
+	private function ifAddressMatchesBootstrappingNodes ($remoteAddr) {
+		// By default nothing is found
+		$isFound = false;
+
+		// Run through all configured IPs
+		foreach (explode(',', $this->getConfigInstance()->readConfig('hub_bootstrap_nodes')) as $ipPort) {
+			// Does it match?
+			if (substr($ipPort, 0, strlen($remoteAddr)) == $remoteAddr) {
+				// Found it!
+				$isFound = true;
+
+				// Remember the port number
+				$this->bootIpPort = $ipPort;
+
+				// Output message
+				$this->getDebugInstance()->output(__FUNCTION__.': IP matches remote address ' . $ipPort . '.');
+
+				// Stop further searching
+				break;
+			} elseif (substr($ipPort, 0, strlen($this->getConfigInstance()->readConfig('node_listen_addr'))) == $this->getConfigInstance()->readConfig('node_listen_addr')) {
+				// IP matches listen address. At this point we really don't care
+				// if we can also listen on that address!
+				$isFound = true;
+
+				// Remember the port number
+				$this->bootIpPort = $ipPort;
+
+				// Output message
+				$this->getDebugInstance()->output(__FUNCTION__.': IP matches listen address ' . $ipPort . '.');
+
+				// Stop further searching
+				break;
+			}
+		} // END - foreach
+
+		// Return the result
+		return $isFound;
+	}
+
+	/**
+	 * Outputs the console teaser. This should only be executed on startup or
+	 * full restarts. This method generates some space around the teaser.
+	 *
+	 * @return	void
+	 */
+	private function outputConsoleTeaser () {
+		// Get the app instance (for shortening our code)
+		$app = $this->getApplicationInstance();
+
+		// Output all lines
+		$this->getDebugInstance()->output(' ');
+		$this->getDebugInstance()->output($app->getAppName() . ' v' . $app->getAppVersion() . ' - ' . $this->getRequestInstance()->getRequestElement('mode') . ' mode active');
+		$this->getDebugInstance()->output('Copyright(c) 2007 - 2008 Roland Haeder, 2009 Hub Developer Team');
+		$this->getDebugInstance()->output(' ');
+		$this->getDebugInstance()->output('This program comes with ABSOLUTELY NO WARRANTY; for details see docs/COPYING.');
+		$this->getDebugInstance()->output('This is free software, and you are welcome to redistribute it under certain');
+		$this->getDebugInstance()->output('conditions; see docs/COPYING for details.');
+		$this->getDebugInstance()->output(' ');
+	}
+
+	/**
+	 * Do generic things for bootup phase. This can be e.g. checking if the
+	 * right node mode is selected for this hub's IP number.
+	 *
+	 * @todo	This method is maybe not yet finished.
+	 * @return	void
+	 */
+	protected function doGenericBootstrapping () {
+		// Now check if the IP address matches one of the bootstrap nodes
+		if ($this->ifAddressMatchesBootstrappingNodes($_SERVER['REMOTE_ADDR'])) {
+			// Get our port
+			$ourPort = $this->getConfigInstance()->readConfig('node_listen_port');
+
+			// Is the port the same?
+			if (substr($this->bootIpPort, -strlen($ourPort), strlen($ourPort)) == $ourPort) {
+				// It is the same!
+				$this->getDebugInstance()->output(__FUNCTION__.': IP/port matches bootstrapping node ' . $this->bootIpPort . '.');
+
+				// Now, does the mode match (should be 'boot'!)
+				if ($this->getRequestInstance()->getRequestElement('mode') == 'boot') {
+					// Output debug message
+					$this->getDebugInstance()->output(__FUNCTION__.': Our node is a valid boot-strapping node.');
+				} else {
+					// Output warning
+					$this->getDebugInstance()->output(__FUNCTION__.': WARNING! Mismatching mode ' . $this->getRequestInstance()->getRequestElement('mode') . '!=boot detected.');
+				}
+			} // END - if
+		} // END - if
+
+		// Finally output our teaser. This should be the last line!
+		$this->outputConsoleTeaser();
+	}
+
+	/**
+	 * Generic method to aquire a hub-id. On first run this generates a new one
 	 * based on many pseudo-random data. On any later run, unless the id
 	 * got not removed from database, it will be restored from the database.
 	 *
@@ -116,7 +220,7 @@ class BaseHubNode extends BaseFrameworkSystem implements Updateable {
 	}
 
 	/**
-	 * Adds registration elements to a given dataset instance
+	 * Adds hub data elements to a given dataset instance
 	 *
 	 * @param	$criteriaInstance	An instance of a storeable criteria
 	 * @param	$requestInstance	An instance of a Requestable class
diff --git a/application/hub/main/nodes/list/class_BootListNode.php b/application/hub/main/nodes/list/class_BootListNode.php
new file mode 100644
index 000000000..86987565d
--- /dev/null
+++ b/application/hub/main/nodes/list/class_BootListNode.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * A hub-node class for the 'List' mode
+ *
+ * @author		Roland Haeder <webmaster@ship-simu.org>
+ * @version		0.0.0
+ * @copyright	Copyright (c) 2007, 2008 Roland Haeder, 2009 Hub Developer Team
+ * @license		GNU GPL 3.0 or any newer version
+ * @link		http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class HubListNode extends BaseHubNode implements NodeHelper {
+	/**
+	 * Protected constructor
+	 *
+	 * @return	void
+	 */
+	protected function __construct () {
+		// Call parent constructor
+		parent::__construct(__CLASS__);
+	}
+
+	/**
+	 * Creates an instance of this hub-node class
+	 *
+	 * @param	$requestInstance	An instance of a Requestable class
+	 * @return	$nodeInstance		An instance of this hub-node class
+	 */
+	public final static function createHubListNode (Requestable $requestInstance) {
+		// Get a new instance
+		$nodeInstance = new HubListNode();
+
+		// Set the request instance
+		$nodeInstance->setRequestInstance($requestInstance);
+
+		// Return the instance
+		return $nodeInstance;
+	}
+
+	/**
+	 * Method to "bootstrap" the node. This step does also apply provided
+	 * command-line arguments stored in the request instance. The regular node
+	 * should communicate with the bootstrap-nodes at this point.
+	 *
+	 * @param	$requestInstance	An instance of a Requestable class
+	 * @return	void
+	 */
+	public function doBootstrapping (Requestable $requestInstance) {
+		// Call generic (parent) bootstrapping method
+		parent::doGenericBootstrapping();
+		$this->partialStub("Please implement this method.");
+	}
+}
+
+// [EOF]
+?>
diff --git a/application/hub/main/nodes/master/class_HubMasterNode.php b/application/hub/main/nodes/master/class_HubMasterNode.php
new file mode 100644
index 000000000..e2e2a1f2f
--- /dev/null
+++ b/application/hub/main/nodes/master/class_HubMasterNode.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * A hub-node class for the 'Master' mode
+ *
+ * @author		Roland Haeder <webmaster@ship-simu.org>
+ * @version		0.0.0
+ * @copyright	Copyright (c) 2007, 2008 Roland Haeder, 2009 Hub Developer Team
+ * @license		GNU GPL 3.0 or any newer version
+ * @link		http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class HubMasterNode extends BaseHubNode implements NodeHelper {
+	/**
+	 * Protected constructor
+	 *
+	 * @return	void
+	 */
+	protected function __construct () {
+		// Call parent constructor
+		parent::__construct(__CLASS__);
+	}
+
+	/**
+	 * Creates an instance of this hub-node class
+	 *
+	 * @param	$requestInstance	An instance of a Requestable class
+	 * @return	$nodeInstance		An instance of this hub-node class
+	 */
+	public final static function createHubMasterNode (Requestable $requestInstance) {
+		// Get a new instance
+		$nodeInstance = new HubMasterNode();
+
+		// Set the request instance
+		$nodeInstance->setRequestInstance($requestInstance);
+
+		// Return the instance
+		return $nodeInstance;
+	}
+
+	/**
+	 * Method to "bootstrap" the node. This step does also apply provided
+	 * command-line arguments stored in the request instance. The regular node
+	 * should communicate with the bootstrap-nodes at this point.
+	 *
+	 * @param	$requestInstance	An instance of a Requestable class
+	 * @return	void
+	 */
+	public function doBootstrapping (Requestable $requestInstance) {
+		// Call generic (parent) bootstrapping method
+		parent::doGenericBootstrapping();
+		$this->partialStub("Please implement this method.");
+	}
+}
+
+// [EOF]
+?>
diff --git a/application/hub/main/nodes/regular/class_HubRegularNode.php b/application/hub/main/nodes/regular/class_HubRegularNode.php
index 39903a5a5..dd9105121 100644
--- a/application/hub/main/nodes/regular/class_HubRegularNode.php
+++ b/application/hub/main/nodes/regular/class_HubRegularNode.php
@@ -4,7 +4,7 @@
  *
  * @author		Roland Haeder <webmaster@ship-simu.org>
  * @version		0.0.0
- * @copyright	Copyright (c) 2007, 2008 Roland Haeder, 2009 Core Developer Team
+ * @copyright	Copyright (c) 2007, 2008 Roland Haeder, 2009 Hub Developer Team
  * @license		GNU GPL 3.0 or any newer version
  * @link		http://www.ship-simu.org
  *
@@ -35,12 +35,16 @@ class HubRegularNode extends BaseHubNode implements NodeHelper {
 	/**
 	 * Creates an instance of this hub-node class
 	 *
-	 * @return	$nodeInstance	An instance of this hub-node class
+	 * @param	$requestInstance	An instance of a Requestable class
+	 * @return	$nodeInstance		An instance of this hub-node class
 	 */
-	public final static function createHubRegularNode () {
+	public final static function createHubRegularNode (Requestable $requestInstance) {
 		// Get a new instance
 		$nodeInstance = new HubRegularNode();
 
+		// Set the request instance
+		$nodeInstance->setRequestInstance($requestInstance);
+
 		// Return the instance
 		return $nodeInstance;
 	}
@@ -54,7 +58,9 @@ class HubRegularNode extends BaseHubNode implements NodeHelper {
 	 * @return	void
 	 */
 	public function doBootstrapping (Requestable $requestInstance) {
-		$this->partialStub();
+		// Call generic (parent) bootstrapping method
+		parent::doGenericBootstrapping();
+		$this->partialStub("Please implement this method.");
 	}
 }