* @return $nodeData Node data array
*/
function findNodeLocalBySessionId ($sessionId);
+
+ /**
+ * Determines whether the given node data is already inserted in the DHT
+ *
+ * @param $nodeData An array with valid node data
+ * @return $isRegistered Whether the given node data is already inserted
+ */
+ function isNodeRegistered (array $nodeData);
+
+ /**
+ * Registers a node with given data in the DHT. If the node is already
+ * registered this method shall throw an exception.
+ *
+ * @param $nodeData An array with valid node data
+ * @return void
+ * @throws NodeAlreadyRegisteredException If the node is already registered
+ */
+ function registerNode (array $nodeData);
+
+ /**
+ * Updates a node's entry in the DHT with given data. This will enrich or
+ * just update already exsiting data. If the node is not found this method
+ * shall throw an exception.
+ *
+ * @param $nodeData An array with valid node data
+ * @return void
+ * @throws NodeDataMissingException If the node's data is missing
+ */
+ function updateNode (array $nodeData);
}
// [EOF]
// Get ip:port combination and "explode" it
$ipPort = $nodeInstance->getAddressPortArray();
- // Make sure both is valid
+ /*
+ * Make sure both is not 'invalid' which means that the resolver
+ * didn't work.
+ */
assert(($ipPort[0] !== 'invalid') && ($ipPort[1] !== 'invalid'));
// Add ip:port/node id as criteria
// Query database and get a result instance back
$resultInstance = $this->doSelectByCriteria($searchInstance);
- // Cache result of if there is an entry, next() will tell us if the next entry is valid
- $GLOBALS[__METHOD__] = $resultInstance->next();
+ // Cache result of if there is an entry, valid() will tell us if an entry is there
+ $GLOBALS[__METHOD__] = $resultInstance->valid();
} // END - if
// Return result
// Run the "UPDATE" query
$this->queryUpdateDataSet($dataSetInstance);
}
+
+ /**
+ * Determines whether the given node data is already inserted in the DHT
+ *
+ * @param $nodeData An array with valid node data
+ * @return $isRegistered Whether the given node data is already inserted
+ */
+ public function isNodeRegistered (array $nodeData) {
+ // Get search criteria
+ $searchInstance = ObjectFactory::createObjectByConfiguredName('search_criteria_class');
+
+ // Search for node id and limit it to one entry
+ $searchInstance->addCriteria(self::DB_COLUMN_NODE_ID, $nodeData[self::DB_COLUMN_NODE_ID]);
+ $searchInstance->setLimit(1);
+
+ // Query database and get a result instance back
+ $resultInstance = $this->doSelectByCriteria($searchInstance);
+
+ // Check if there is an entry
+ $isRegistered = $resultInstance->valid();
+
+ // Return registration status
+ return $isRegistered;
+ }
}
+ /**
+ * Registers a node with given data in the DHT. If the node is already
+ * registered this method shall throw an exception.
+ *
+ * @param $nodeData An array with valid node data
+ * @return void
+ * @throws NodeAlreadyRegisteredException If the node is already registered
+ */
+ public function registerNode (array $nodeData) {
+ $this->partialStub('nodeData=' . print_r($nodeData, TRUE));
+ }
+
+ /**
+ * Updates a node's entry in the DHT with given data. This will enrich or
+ * just update already exsiting data. If the node is not found this method
+ * shall throw an exception.
+ *
+ * @param $nodeData An array with valid node data
+ * @return void
+ * @throws NodeDataMissingException If the node's data is missing
+ */
+ public function updateNode (array $nodeData) {
+ $this->partialStub('nodeData=' . print_r($nodeData, TRUE));
+ }
+
// [EOF]
?>
*
* @param $dhtData A valid array with DHT-related data (e.g. node/peer data)
* @return void
- * @todo Does the data need to be enriched?
+ * @todo Does this data need to be enriched with more meta data?
*/
protected function insertDataIntoDht (array $dhtData) {
// Check if there is already an entry for given node_id
- if ($this->getWrapperInstance()->isNodeRegisteredByNodeId($dhtData[NodeDistributedHashTableDatabaseWrapper::DB_COLUMN_NODE_ID])) {
+ if ($this->getWrapperInstance()->isNodeRegistered($dhtData)) {
/*
* Update existing record. Please note that this step is not secure
* (e.g. DHT poisoning) it would be good to implement some checks if
* the both node owner trust each other (see sub-project 'DSHT').
*/
- $this->getWrapperInstance()->updateNodeEntry($dhtData);
+ $this->getWrapperInstance()->updateNode($dhtData);
} else {
/*
* Inserts given node data into the DHT. As above, this step does
* currently not perform any security checks.
*/
- $this->getWrapperInstance()->registerNodeByData($dhtData);
+ $this->getWrapperInstance()->registerNode($dhtData);
}
}
$resultInstance = $this->getWrapperInstance()->findNodeLocalBySessionId($sessionId);
// Is the next entry valid?
- if ($resultInstance->next()) {
+ if (($resultInstance->valid()) && ($resultInstance->next())) {
/*
* Then load the first entry (more entries are being ignored and
* should not happen).
$resultInstance = $this->getWrapperInstance()->doSelectByCriteria($searchInstance);
// Is there already an entry?
- if ($resultInstance->next()) {
+ if ($resultInstance->valid()) {
// Entry found, so update it
$this->getWrapperInstance()->updateNodeByMessageData($messageData, $handlerInstance, $searchInstance);
} elseif ($forceUpdate === FALSE) {