*
* @author Roland Haeder <webmaster@ship-simu.org>
* @version 0.0.0
- * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2011 Hub Developer Team
+ * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2012 Hub Developer Team
* @license GNU GPL 3.0 or any newer version
* @link http://www.ship-simu.org
*
*/
class BaseHubSystem extends BaseFrameworkSystem {
// Exception codes
- const EXCEPTION_UNSUPPORTED_ERROR_HANDLER = 0x900;
- const EXCEPTION_CHUNK_ALREADY_ASSEMBLED = 0x901;
+ const EXCEPTION_UNSUPPORTED_ERROR_HANDLER = 0x900;
+ const EXCEPTION_CHUNK_ALREADY_ASSEMBLED = 0x901;
+ const EXCEPTION_ANNOUNCEMENT_NOT_ACCEPTED = 0x902;
+ const EXCEPTION_INVALID_CONNECTION_TYPE = 0x903;
+ const EXCEPTION_ANNOUNCEMENT_NOT_ATTEMPTED = 0x904;
+ const EXCEPTION_BASE64_ENCODING_NOT_MODULO_4 = 0x905;
+ const EXCEPTION_NODE_SESSION_ID_NOT_VERIFYING = 0x906;
+ const EXCEPTION_REQUEST_NOT_ACCEPTED = 0x907;
+
+ // Message status codes
+ const MESSAGE_STATUS_CODE_OKAY = 'OKAY';
/**
* Separator for all bootstrap node entries
/**
* Setter for listener pool instance
*
- * @param $listenerPoolInstance Our new listener pool instance
+ * @param $listenerPoolInstance The new listener pool instance
* @return void
*/
protected final function setListenerPoolInstance (PoolableListener $listenerPoolInstance) {
/**
* Setter for node id
*
- * @param $nodeId Our new node id
+ * @param $nodeId The new node id
* @return void
*/
- private final function setNodeId ($nodeId) {
+ protected final function setNodeId ($nodeId) {
// Set it config now
$this->getConfigInstance()->setConfigEntry('node_id', (string) $nodeId);
}
*
* @return $nodeId Current node id
*/
- private final function getNodeId () {
+ public final function getNodeId () {
// Get it from config
return $this->getConfigInstance()->getConfigEntry('node_id');
}
+ /**
+ * Setter for private key
+ *
+ * @param $privateKey The new private key
+ * @return void
+ */
+ protected final function setPrivateKey ($privateKey) {
+ // Set it config now
+ $this->getConfigInstance()->setConfigEntry('private_key', (string) $privateKey);
+ }
+
+ /**
+ * Getter for private key
+ *
+ * @return $privateKey Current private key
+ */
+ public final function getPrivateKey () {
+ // Get it from config
+ return $this->getConfigInstance()->getConfigEntry('private_key');
+ }
+
+ /**
+ * Setter for private key hash
+ *
+ * @param $privateKeyHash The new private key hash
+ * @return void
+ */
+ protected final function setPrivateKeyHash ($privateKeyHash) {
+ // Set it config now
+ $this->getConfigInstance()->setConfigEntry('private_key_hash', (string) $privateKeyHash);
+ }
+
+ /**
+ * Getter for private key hash
+ *
+ * @return $privateKeyHash Current private key hash
+ */
+ public final function getPrivateKeyHash () {
+ // Get it from config
+ return $this->getConfigInstance()->getConfigEntry('private_key_hash');
+ }
+
/**
* Setter for session id
*
- * @param $sessionId Our new session id
+ * @param $sessionId The new session id
* @return void
*/
- private final function setSessionId ($sessionId) {
+ protected final function setSessionId ($sessionId) {
$this->getConfigInstance()->setConfigEntry('session_id', (string) $sessionId);
}
* but assumes valid data in array $recipientData, except that
* count($recipientData) is always 2.
*
+ * @param $method Value of __METHOD__ from calling method
+ * @param $line Value of __LINE__ from calling method
* @param $socketResource A valid socket resource
* @param $recipientData An array with two elements: 0=IP number, 1=port number
* @return void
* @throws InvalidSocketException If $socketResource is no socket resource
* @throws NoSocketErrorDetectedException If socket_last_error() gives zero back
*/
- protected final function handleSocketError ($socketResource, array $recipientData) {
+ protected final function handleSocketError ($method, $line, $socketResource, array $recipientData) {
// This method handles only socket resources
if (!is_resource($socketResource)) {
// No resource, abort here
$handlerName = $this->getSocketErrorHandlerFromCode($errorCode);
// Call-back the error handler method
- call_user_func(array($this, $handlerName), $socketResource);
+ call_user_func_array(array($this, $handlerName), array($socketResource, $recipientData));
// Finally clear the error because it has been handled
socket_clear_error($socketResource);
$chunkSplits = explode(PackageFragmenter::CHUNK_DATA_HASH_SEPARATOR, $chunks[count($chunks) - 1]);
// Make sure chunks with only 3 elements are parsed (for details see ChunkHandler)
- //* NOISY-DEBUG: */ $this->debugOutput('eopChunk=' . $chunks[count($chunks) - 1] . ',chunkSplits=' . print_r($chunkSplits,true));
+ //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('eopChunk=' . $chunks[count($chunks) - 1] . ',chunkSplits=' . print_r($chunkSplits, true));
assert(count($chunkSplits) == 3);
// Validate final chunk
default: // Everything else <> 0
// Unhandled error code detected, so first debug it because we may want to handle it like the others
- $this->debugOutput('[' . __METHOD__ . ':' . __LINE__ . '] UNKNOWN ERROR CODE = ' . $errorCode . ', MESSAGE = ' . socket_strerror($errorCode));
+ self::createDebugInstance(__CLASS__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . '] UNKNOWN ERROR CODE = ' . $errorCode . ', MESSAGE = ' . socket_strerror($errorCode));
// Change it only in this class
$errorName = BaseRawDataHandler::SOCKET_ERROR_UNKNOWN;
*/
public function shutdownSocket ($socketResource) {
// Debug message
- $this->debugOutput('HUB-SYSTEM: Shutting down socket resource ' . $socketResource . ' with state ' . $this->getPrintableState() . ' ...');
+ self::createDebugInstance(__CLASS__)->debugOutput('HUB-SYSTEM: Shutting down socket resource ' . $socketResource . ' with state ' . $this->getPrintableState() . ' ...');
// Set socket resource
$this->setSocketResource($socketResource);
$visitorInstance = ObjectFactory::createObjectByConfiguredName('shutdown_socket_visitor_class');
// Debug output
- $this->debugOutput('HUB-SYSTEM:' . $this->__toString() . ': visitorInstance=' . $visitorInstance->__toString());
+ self::createDebugInstance(__CLASS__)->debugOutput('HUB-SYSTEM:' . $this->__toString() . ': visitorInstance=' . $visitorInstance->__toString());
// Call the visitor
$this->accept($visitorInstance);
*/
public function halfShutdownSocket ($socketResource) {
// Debug message
- $this->debugOutput('HUB-SYSTEM: Half-shutting down socket resource ' . $socketResource . ' with state ' . $this->getPrintableState() . ' ...');
+ self::createDebugInstance(__CLASS__)->debugOutput('HUB-SYSTEM: Half-shutting down socket resource ' . $socketResource . ' with state ' . $this->getPrintableState() . ' ...');
// Set socket resource
$this->setSocketResource($socketResource);
$visitorInstance = ObjectFactory::createObjectByConfiguredName('half_shutdown_socket_visitor_class');
// Debug output
- $this->debugOutput('HUB-SYSTEM:' . $this->__toString() . ': visitorInstance=' . $visitorInstance->__toString());
+ self::createDebugInstance(__CLASS__)->debugOutput('HUB-SYSTEM:' . $this->__toString() . ': visitorInstance=' . $visitorInstance->__toString());
// Call the visitor
$this->accept($visitorInstance);