db/cruncher_units/.htaccess svneol=native#text/plain
db/news/.htaccess -text svneol=unset#text/plain
db/node_data/.htaccess -text svneol=unset#text/plain
+db/node_dht/.htaccess -text svneol=unset#text/plain
db/node_states/.htaccess -text svneol=unset#text/plain
db/peer_states/.htaccess -text svneol=unset#text/plain
docs/AUTHORS.txt svneol=native#text/plain
// CFG: NODE-LISTEN-ADDR
$cfg->setConfigEntry('node_listen_addr', '0.0.0.0');
-// CFG: NODE-TCP-LISTEN-PORT
-$cfg->setConfigEntry('node_tcp_listen_port', 9060);
-
-// CFG: NODE-UDP-LISTEN-PORT
-$cfg->setConfigEntry('node_udp_listen_port', 9060);
+// CFG: NODE-LISTEN-PORT
+$cfg->setConfigEntry('node_listen_port', 9060);
// CFG: NODE-DEFAULT-MODE (can be 'regular', 'list', 'master' or 'boot', default is 'regular')
$cfg->setConfigEntry('node_default_mode', 'regular');
// CFG: NODE-LISTEN-ADDR
$cfg->setConfigEntry('node_listen_addr', '0.0.0.0');
-// CFG: NODE-TCP-LISTEN-PORT
-$cfg->setConfigEntry('node_tcp_listen_port', 9060);
-
-// CFG: NODE-UDP-LISTEN-PORT
-$cfg->setConfigEntry('node_udp_listen_port', 9060);
+// CFG: NODE-LISTEN-PORT
+$cfg->setConfigEntry('node_listen_port', 9060);
// CFG: NODE-DEFAULT-MODE (can be 'regular', 'list', 'master' or 'boot', default is 'regular')
$cfg->setConfigEntry('node_default_mode', 'regular');
$messageArray[2][XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID],
$messageArray[2][XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_EXTERNAL_IP],
$messageArray[2][XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_INTERNAL_IP],
- $messageArray[2][XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_TCP_PORT],
- $messageArray[2][XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_UDP_PORT],
+ $messageArray[2][XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_LISTEN_PORT],
$messageArray[2][XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_NODE_STATUS],
$messageArray[2][XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_NODE_MODE]
);
$messageArray[2][XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID],
$messageArray[2][XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_EXTERNAL_IP],
$messageArray[2][XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_INTERNAL_IP],
- $messageArray[2][XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_TCP_PORT],
- $messageArray[2][XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_UDP_PORT],
+ $messageArray[2][XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_LISTEN_PORT],
$messageArray[2][XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_NODE_STATUS]
);
$messageArray[1][XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID],
$messageArray[1][XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_EXTERNAL_IP],
$messageArray[1][XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_INTERNAL_IP],
- $messageArray[1][XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_TCP_PORT],
- $messageArray[1][XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_UDP_PORT],
+ $messageArray[1][XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_LISTEN_PORT],
$messageArray[1][XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_NODE_STATUS]
);
/**
* "Getter for address:port combination
*
- * @param $handlerInstance An instance of a Networkable class
- * @return $addressPort A address:port combination for this node
+ * @return $addressPort A address:port combination for this node
*/
- function getAddressPort (Networkable $handlerInstance);
+ function getAddressPort ();
/**
* Adds hub data elements to a given dataset instance
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
interface NodeDhtWrapper extends DatabaseWrapper {
+ /**
+ * Checks whether the local (*this*) node is registered in the DHT by
+ * checking if the external ip/port is found.
+ *
+ * @return $isRegistered Whether *this* node is registered in the DHT
+ */
+ function isLocalNodeRegistered ();
+
+ /**
+ * Updates local (*this*) node data in DHT, this is but not limited to the
+ * session id, ip number (and/or hostname) and port number.
+ *
+ * @return void
+ */
+ function updateLocalNode();
+
+ /**
+ * Registeres the local (*this*) node with its data in the DHT.
+ *
+ * @return void
+ */
+ function registerLocalNode();
}
// [EOF]
// Constants for database table names
const DB_TABLE_NODE_DHT = 'node_dht';
+ // Constants for database column names
+ const DB_COLUMN_SESSION_ID = 'session_id';
+ const DB_COLUMN_IP_PORT = 'ip_port';
+
/**
* Protected constructor
*
// Return the instance
return $wrapperInstance;
}
+
+ /**
+ * Checks whether the local (*this*) node is registered in the DHT by
+ * checking if the external ip/port is found.
+ *
+ * @return $isRegistered Whether *this* node is registered in the DHT
+ */
+ public function isLocalNodeRegistered () {
+ // Get node instance
+ $nodeInstance = Registry::getRegistry()->getInstance('node');
+
+ // Get a dataset instance
+ $searchInstance = ObjectFactory::createObjectByConfiguredName('search_criteria_class');
+
+ // Add ip:port as criteria
+ $searchInstance->addCriteria(self::DB_COLUMN_IP_PORT, $nodeInstance->getAddressPort());
+ $searchInstance->setLimit(1);
+
+ // Query database and get a result instance back
+ $resultInstance = $this->doSelectByCriteria($searchInstance);
+
+ // Is there an entry?
+ $isRegistered = $resultInstance->next();
+
+ // Return result
+ return $isRegistered;
+ }
+
+ /**
+ * Updates local (*this*) node data in DHT, this is but not limited to the
+ * session id, ip number (and/or hostname) and port number.
+ *
+ * @return void
+ */
+ public function updateLocalNode () {
+ $this->partialStub('Not implemented yet.');
+ }
+
+ /**
+ * Registeres the local (*this*) node with its data in the DHT.
+ *
+ * @return void
+ */
+ public function registerLocalNode () {
+ $this->partialStub('Not implemented yet.');
+ }
}
// [EOF]
// Debug message
//* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE-WRAPPER: ' . __FUNCTION__ . ' called with packageData()=' . count($packageData) . ' - ENTERED!');
- // Is always new peer by default
- $isNewPeer = true;
-
// Is the package valid?
if (!isset($packageData[NetworkPackage::PACKAGE_DATA_SENDER])) {
// Invalid package found, please report this
}
/**
- * Initializes the distributable hash table (DHT)
+ * Initializes the distributed hash table (DHT)
*
* @return void
* @todo Please implement this method
*/
public function initDht () {
- $this->partialStub('Please implement this method.');
+ // Is the local node registered?
+ if ($this->getWrapperInstance()->isLocalNodeRegistered()) {
+ // Then only update session id
+ $this->getWrapperInstance()->updateLocalNode();
+ } else {
+ // No, so register it
+ $this->getWrapperInstance()->registerLocalNode();
+ }
}
}
// The target 'self' is always the external IP address!
case NetworkPackage::NETWORK_TARGET_SELF:
// Determine own port
- $port = $this->getConfigInstance()->getConfigEntry('node_' . $this->determineProtocolByPackageData($packageData) . '_listen_port');
+ $port = $this->getConfigInstance()->getConfigEntry('node_listen_port');
// Determine IP or 'external_ip' if set
$ip = HubTools::determineOwnExternalIp();
$recipient = explode(':', $decodedData[NetworkPackage::PACKAGE_DATA_RECIPIENT]);
// Is the 'recipient' field same as this peer's IP?
- if ((($recipient[0] == HubTools::determineOwnExternalIp()) && ($recipient[1] == $this->getConfigInstance()->getConfigEntry('node_tcp_listen_port'))) || ($recipient[0] == $this->getConfigInstance()->getServerAddress())) {
+ if ((($recipient[0] == HubTools::determineOwnExternalIp()) && ($recipient[1] == $this->getConfigInstance()->getConfigEntry('node_listen_port'))) || ($recipient[0] == $this->getConfigInstance()->getServerAddress())) {
/*
- * Is same as own external IP+TCP port or internal IP, don't do anything here so other
+ * Is same as own external IP + TCP/UDP listen port or internal IP, don't do anything here so other
* classes found an empty recipient list for internal (own) handling
* of the original content.
*/
XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_INTERNAL_IP => '',
XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_NODE_STATUS => '',
XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID => '',
- XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_TCP_PORT => 9060,
- XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_UDP_PORT => 9060,
+ XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_LISTEN_PORT => 9060,
BaseXmlAnswerTemplateEngine::ANSWER_STATUS => '',
);
}
XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_NODE_STATUS => '',
XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_NODE_MODE => '',
XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID => '',
- XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_TCP_PORT => 9060,
- XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_UDP_PORT => 9060
+ XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_LISTEN_PORT => 9060,
);
}
// Lookup external session id/external IP/port
$searchInstance->addCriteria('node_session_id' , $messageData[XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID]);
$searchInstance->addCriteria('node_external_ip', $messageData[XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_EXTERNAL_IP]);
- $searchInstance->addCriteria('node_tcp_port' , $messageData[XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_TCP_PORT]);
+ $searchInstance->addCriteria('node_listen_port', $messageData[XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_LISTEN_PORT]);
// Only one entry is fine
$searchInstance->setLimit(1);
XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_NODE_STATUS,
XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_NODE_MODE,
XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID,
- XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_TCP_PORT,
- XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_UDP_PORT
+ XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_LISTEN_PORT,
);
// Init message-data->configuration translation array
XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_INTERNAL_IP => 'internal_ip',
XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_NODE_STATUS => 'node_status',
XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID => 'session_id',
- XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_TCP_PORT => 'node_tcp_listen_port',
- XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_UDP_PORT => 'node_udp_listen_port'
+ XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_LISTEN_PORT => 'node_listen_port',
);
// Init array
$this->searchData = array(
XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID,
XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_EXTERNAL_IP,
- XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_TCP_PORT
+ XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_LISTEN_PORT
);
}
XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_INTERNAL_IP,
XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_NODE_STATUS,
XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID,
- XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_TCP_PORT,
- XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_UDP_PORT,
+ XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_LISTEN_PORT,
BaseXmlAnswerTemplateEngine::ANSWER_STATUS,
);
XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_INTERNAL_IP => 'internal_ip',
XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_NODE_STATUS => 'node_status',
XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID => 'session_id',
- XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_TCP_PORT => 'node_tcp_listen_port',
- XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_UDP_PORT => 'node_udp_listen_port'
+ XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_LISTEN_PORT => 'node_listen_port',
);
// Init array
$this->searchData = array(
XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID,
XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_EXTERNAL_IP,
- XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_TCP_PORT
+ XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_LISTEN_PORT
);
}
Xml???TemplateEngine::!!!_DATA_EXTERNAL_IP,
Xml???TemplateEngine::!!!_DATA_NODE_STATUS,
Xml???TemplateEngine::!!!_DATA_SESSION_ID,
- Xml???TemplateEngine::!!!_DATA_TCP_PORT,
- Xml???TemplateEngine::!!!_DATA_UDP_PORT
+ Xml???TemplateEngine::!!!_DATA_LISTEN_PORT,
);
}
*
* - session-id (for finding the node's record together with below data)
* - external-ip (hostname or IP number)
- * - tcp-port (TCP port for inbound connections)
+ * - listen-port (TCP/UDP listen port for inbound connections)
*
* @param $messageArray An array with all minimum message data
* @return void
// Debug message
/* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('MESSAGE-HANDLER: messageData=' . print_r($messageData, true));
- // Search for the node's session id and external IP/hostname + TCP port
+ // Search for the node's session id and external IP/hostname + TCP/UDP listen port
foreach ($this->searchData as $key) {
// Debug message
/* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('MESSAGE-HANDLER: messageData[' . $key . ']=' . $messageData[$key]);
*/
protected function ifRecipientMatchesOwnAddress (array $packageData) {
// Construct own address first
- $ownAddress = Registry::getRegistry()->getInstance('node')->getAddressPort($this);
+ $ownAddress = Registry::getRegistry()->getInstance('node')->getAddressPort();
// Does it match?
$matches = ($ownAddress === $packageData[NetworkPackage::PACKAGE_DATA_RECIPIENT]);
// Now check if the IP address matches one of the bootstrap nodes
if ($this->ifAddressMatchesBootstrappingNodes($this->getConfigInstance()->detectServerAddress())) {
// Get our port from configuration
- $ourPort = $this->getConfigInstance()->getConfigEntry('node_tcp_listen_port');
+ $ourPort = $this->getConfigInstance()->getConfigEntry('node_listen_port');
// Extract port
$bootPort = substr($this->getBootIpPort(), -strlen($ourPort), strlen($ourPort));
* All nodes can now use the same configuration entry because it can be
* customized in config-local.php.
*/
- $listenerInstance->setListenPortByConfiguration('node_tcp_listen_port');
+ $listenerInstance->setListenPortByConfiguration('node_listen_port');
// Initialize the listener
$listenerInstance->initListener();
* All nodes can now use the same configuration entry because it can be
* customized in config-local.php.
*/
- $listenerInstance->setListenPortByConfiguration('node_udp_listen_port');
+ $listenerInstance->setListenPortByConfiguration('node_listen_port');
// Initialize the listener
$listenerInstance->initListener();
/**
* "Getter" for address:port combination
*
- * @param $handlerInstance An instance of a Networkable class
- * @return $addressPort A address:port combination for this node
+ * @return $addressPort A address:port combination for this node
*/
- public final function getAddressPort (Networkable $handlerInstance) {
- // Construct config entry
- $configEntry = 'node_' . $handlerInstance->getHandlerName() . '_listen_port';
-
+ public final function getAddressPort () {
// Get IP and port
- $addressPort = $this->getConfigInstance()->detectServerAddress() . ':' . $this->getConfigInstance()->getConfigEntry($configEntry);
+ $addressPort = $this->getConfigInstance()->detectServerAddress() . ':' . $this->getConfigInstance()->getConfigEntry('node_listen_port');
// Return it
return $addressPort;
const ANNOUNCEMENT_DATA_NODE_MODE = 'node-mode';
const ANNOUNCEMENT_DATA_EXTERNAL_IP = 'external-ip';
const ANNOUNCEMENT_DATA_INTERNAL_IP = 'internal-ip';
- const ANNOUNCEMENT_DATA_TCP_PORT = 'tcp-port';
- const ANNOUNCEMENT_DATA_UDP_PORT = 'udp-port';
+ const ANNOUNCEMENT_DATA_LISTEN_PORT = 'listen-port';
/**
* Protected constructor
'listener',
self::ANNOUNCEMENT_DATA_NODE_STATUS,
self::ANNOUNCEMENT_DATA_NODE_MODE,
- self::ANNOUNCEMENT_DATA_TCP_PORT,
- self::ANNOUNCEMENT_DATA_UDP_PORT,
+ self::ANNOUNCEMENT_DATA_LISTEN_PORT,
self::ANNOUNCEMENT_DATA_SESSION_ID,
self::ANNOUNCEMENT_DATA_EXTERNAL_IP,
self::ANNOUNCEMENT_DATA_INTERNAL_IP,
}
/**
- * Starts the TCP port
+ * Starts the TCP/UDP listen port
*
* @return void
*/
- protected function startTcpPort () {
+ protected function startListenPort () {
// Push the node name on the stacker
- $this->getStackerInstance()->pushNamed('node_announcement', self::ANNOUNCEMENT_DATA_TCP_PORT);
- }
-
- /**
- * Starts the UDP port
- *
- * @return void
- */
- protected function startUdpPort () {
- // Push the node name on the stacker
- $this->getStackerInstance()->pushNamed('node_announcement', self::ANNOUNCEMENT_DATA_UDP_PORT);
+ $this->getStackerInstance()->pushNamed('node_announcement', self::ANNOUNCEMENT_DATA_LISTEN_PORT);
}
/**
}
/**
- * Finishes the UDP port
- *
- * @return void
- */
- protected function finishUdpPort () {
- // Pop the last entry
- $this->getStackerInstance()->popNamed('node_announcement');
- }
-
- /**
- * Finishes the TCP port
+ * Finishes the TCP/UDP listen port
*
* @return void
*/
- protected function finishTcpPort () {
+ protected function finishListenPort () {
// Pop the last entry
$this->getStackerInstance()->popNamed('node_announcement');
}
const ANNOUNCEMENT_DATA_NODE_STATUS = 'my-status';
const ANNOUNCEMENT_DATA_EXTERNAL_IP = 'my-external-ip';
const ANNOUNCEMENT_DATA_INTERNAL_IP = 'my-internal-ip';
- const ANNOUNCEMENT_DATA_TCP_PORT = 'my-tcp-port';
- const ANNOUNCEMENT_DATA_UDP_PORT = 'my-udp-port';
+ const ANNOUNCEMENT_DATA_LISTEN_PORT = 'my-listen-port';
/**
* Protected constructor
// Data from *this* node
self::ANNOUNCEMENT_DATA_EXTERNAL_IP,
self::ANNOUNCEMENT_DATA_INTERNAL_IP,
- self::ANNOUNCEMENT_DATA_TCP_PORT,
- self::ANNOUNCEMENT_DATA_UDP_PORT,
+ self::ANNOUNCEMENT_DATA_LISTEN_PORT,
self::ANNOUNCEMENT_DATA_NODE_STATUS,
self::ANNOUNCEMENT_DATA_SESSION_ID,
// Data from other node
*
* @return void
*/
- protected function startMyTcpPort () {
+ protected function startMyListenPort () {
// Push the node name on the stacker
- $this->getStackerInstance()->pushNamed('node_announcement_answer', self::ANNOUNCEMENT_DATA_TCP_PORT);
- }
-
- /**
- * Starts the my-udp-port
- *
- * @return void
- */
- protected function startMyUdpPort () {
- // Push the node name on the stacker
- $this->getStackerInstance()->pushNamed('node_announcement_answer', self::ANNOUNCEMENT_DATA_UDP_PORT);
+ $this->getStackerInstance()->pushNamed('node_announcement_answer', self::ANNOUNCEMENT_DATA_LISTEN_PORT);
}
/**
$this->getStackerInstance()->popNamed('node_announcement_answer');
}
- /**
- * Finishes the my-udp-port
- *
- * @return void
- */
- protected function finishMyUdpPort () {
- // Pop the last entry
- $this->getStackerInstance()->popNamed('node_announcement_answer');
- }
-
/**
* Finishes the my-tcp-port
*
* @return void
*/
- protected function finishMyTcpPort () {
+ protected function finishMyListenPort () {
// Pop the last entry
$this->getStackerInstance()->popNamed('node_announcement_answer');
}
// Is the session id the same?
if ($nodeInstance->getSessionId() == $sessionId) {
// Then get the ip:port from it, assume TCP by default
- $recipient = self::determineOwnExternalIp() . ':' . $nodeInstance->getConfigInstance()->getConfigEntry('node_' . strtolower($protocol) . '_listen_port');
+ $recipient = self::determineOwnExternalIp() . ':' . $nodeInstance->getConfigInstance()->getConfigEntry('node_listen_port');
} // END - if
} // END - if
<!-- Private internal IP address //-->
<internal-ip>{?internal_ip?}</internal-ip>
<!-- Listener ports for both connections //-->
- <tcp-port>{?node_tcp_listen_port?}</tcp-port>
- <udp-port>{?node_udp_listen_port?}</udp-port>
+ <listen-port>{?node_listen_port?}</listen-port>
</listener>
</announcement-data>
</announcement>
//-->
<my-internal-ip>{?my_internal_ip?}</my-internal-ip>
<!--
- This node's TCP port
+ This node's TCP/UDP listen port
//-->
- <my-tcp-port>{?my_tcp_port?}</my-tcp-port>
- <!--
- This node's UDP port
- //-->
- <my-udp-port>{?my_udp_port?}</my-udp-port>
+ <my-listen-port>{?my_listen_port?}</my-listen-port>
<!--
This node's session id
//-->
--- /dev/null
+Deny from all