From adafd2d6021210af5fe80143a93e560c0aa68ab9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Wed, 30 Nov 2011 17:43:02 +0000 Subject: [PATCH] Private attribute converted to class constant (it will never change in run-time) --- .../tcp/class_TcpConnectionHelper.php | 35 +++++++++++++++++-- .../hub/main/package/class_NetworkPackage.php | 3 +- .../fragmenter/class_PackageFragmenter.php | 17 ++++----- 3 files changed, 44 insertions(+), 11 deletions(-) diff --git a/application/hub/main/helper/connection/tcp/class_TcpConnectionHelper.php b/application/hub/main/helper/connection/tcp/class_TcpConnectionHelper.php index 260bcdf8d..d945992fd 100644 --- a/application/hub/main/helper/connection/tcp/class_TcpConnectionHelper.php +++ b/application/hub/main/helper/connection/tcp/class_TcpConnectionHelper.php @@ -88,8 +88,39 @@ class TcpConnectionHelper extends BaseConnectionHelper implements ConnectionHelp // 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]); diff --git a/application/hub/main/package/class_NetworkPackage.php b/application/hub/main/package/class_NetworkPackage.php index 6d1be1ecb..5ec8f75d2 100644 --- a/application/hub/main/package/class_NetworkPackage.php +++ b/application/hub/main/package/class_NetworkPackage.php @@ -269,7 +269,8 @@ class NetworkPackage extends BaseFrameworkSystem implements Deliverable, Receiva /* * 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(); } diff --git a/application/hub/main/package/fragmenter/class_PackageFragmenter.php b/application/hub/main/package/fragmenter/class_PackageFragmenter.php index 453c0b148..d7481c245 100644 --- a/application/hub/main/package/fragmenter/class_PackageFragmenter.php +++ b/application/hub/main/package/fragmenter/class_PackageFragmenter.php @@ -62,14 +62,14 @@ class PackageFragmenter extends BaseFrameworkSystem implements Fragmentable, Reg 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 @@ -137,7 +137,7 @@ class PackageFragmenter extends BaseFrameworkSystem implements Fragmentable, Reg $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)); } /** @@ -176,7 +176,8 @@ class PackageFragmenter extends BaseFrameworkSystem implements Fragmentable, Reg // Is the array index there? $isProcessed = ( - (isset($this->processedPackages[$index])) && + (isset($this->processedPackages[$index])) + && ($this->processedPackages[$index] === true) ); @@ -255,7 +256,7 @@ class PackageFragmenter extends BaseFrameworkSystem implements Fragmentable, Reg // 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 @@ -289,7 +290,7 @@ class PackageFragmenter extends BaseFrameworkSystem implements Fragmentable, Reg 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++; -- 2.39.2