// Set the resource
$helperInstance->setSocketResource($socketResource);
- // Resolve any session ids; 0 = IP, 1 = Port
- $recipientData = explode(':', HubTools::resolveSessionId($packageData[NetworkPackage::PACKAGE_DATA_RECIPIENT]));
+ // @TODO The whole resolving part should be moved out and made more configurable
+ // Init recipient data
+ $recipientData = NULL;
+
+ // Try to solve the recipient
+ try {
+ // Resolve any session ids; 0 = IP, 1 = Port
+ $recipientData = explode(':', HubTools::resolveSessionId($packageData[NetworkPackage::PACKAGE_DATA_RECIPIENT]));
+ } catch (NoValidHostnameException $e) {
+ // Debug message
+ $helperInstance->debugOutput('CONNECTION: Failed to resolve ' . $packageData[NetworkPackage::PACKAGE_DATA_RECIPIENT] . ':' . $e->getMessage());
+
+ // Is the recipient equal as configured IP
+ if (substr($packageData[NetworkPackage::PACKAGE_DATA_RECIPIENT], 0, strlen($helperInstance->getConfigInstance()->getConfigEntry('external_ip'))) == $helperInstance->getConfigInstance()->getConfigEntry('external_ip')) {
+ // This connects to ship-simu.org and requests /ip.php which will return our external IP number
+ $recipientData[0] = ConsoleTools::determineExternalIp();
+
+ // Do we have hostname:ip match?
+ if (strpos($packageData[NetworkPackage::PACKAGE_DATA_RECIPIENT], ':') === false) {
+ // No hostname:ip!
+ $helperInstance->debugInstance($packageData[NetworkPackage::PACKAGE_DATA_RECIPIENT] . ' does not contain ":". Please fix this.');
+ } // END - if
+
+ // "explode" the hostname:ip, so index 1 will be the port number
+ $recipientArray = explode(':', $packageData[NetworkPackage::PACKAGE_DATA_RECIPIENT]);
+
+ // Add the port
+ $recipientData[1] = $recipientArray[1];
+ } else {
+ // It doesn't match, we need to take care of this later
+ $helperInstance->debugInstance($packageData[NetworkPackage::PACKAGE_DATA_RECIPIENT] . '!=' . $helperInstance->getConfigInstance()->getConfigEntry('external_ip'));
+ }
+ }
// Set ip/port
$helperInstance->setAddress($recipientData[0]);
/*
* The recipient list can be cleaned up here because the package which
- * shall be delivered has been added for all entries from the list.
+ * shall be delivered has already been added for all entries from the
+ * list.
*/
$discoveryInstance->clearRecipients();
}
private $serialNumber = 0x00000000;
/**
- * Length of largest possible serial number
+ * Maximum possible serial number
*/
- private $maxSerialLength = 8;
+ private $maxSerialNumber = 0;
/**
- * Maximum possible serial number
+ * Length of largest possible serial number
*/
- private $maxSerialNumber = 0;
+ const MAX_SERIAL_LENGTH = 8;
/**
* Seperator between chunk data, serial number and chunk hash
$this->chunkSize = $this->getConfigInstance()->getConfigEntry('package_chunk_size');
// - Maximum serial number
- $this->maxSerialNumber = $this->hex2dec(str_repeat('f', $this->maxSerialLength));
+ $this->maxSerialNumber = $this->hex2dec(str_repeat('f', self::MAX_SERIAL_LENGTH));
}
/**
// Is the array index there?
$isProcessed = (
- (isset($this->processedPackages[$index])) &&
+ (isset($this->processedPackages[$index]))
+ &&
($this->processedPackages[$index] === true)
);
// Length of sperators
(strlen(self::CHUNK_DATA_HASH_SEPERATOR) * 2) -
// Length of max serial number
- $this->maxSerialLength
+ self::MAX_SERIAL_LENGTH
);
// This should be larger than zero bytes
assert($this->serialNumber <= $this->maxSerialNumber);
// Encode the current serial number
- $encodedSerialNumber = $this->dec2Hex($this->serialNumber, $this->maxSerialLength);
+ $encodedSerialNumber = $this->dec2Hex($this->serialNumber, self::MAX_SERIAL_LENGTH);
// Count one up
$this->serialNumber++;