*
* @param $hostname Host name we shall resolve
* @return $ip IP address resolved from host name
+ * @todo We should connect this to a caching class to cache DNS requests
*/
protected function resolveIpAddress ($hostname) {
// Debug message
$ip = '0.0.0.0';
// Resolve it
+ // @TODO Here should the cacher be implemented
$ipResolved = gethostbyname($hostname);
// Was it fine?
$this->__toString(),
$ip
));
- } // END - if
+ } else {
+ // Problem while resolving IP address
+ $this->debugOutput(sprintf("[%s:] Problem resolving IP address for host <span class=\"data\">%s</span>. Please check your /etc/hosts file.",
+ $this->__toString(),
+ $hostname
+ ));
+ }
// Return resolved IP
return $ip;
}
/**
- * Aquires the IP address of this host by reading the /etc/hostname file and solving it
+ * Aquires the IP address of this host by reading the /etc/hostname file
+ * and solving it. It is now stored in configuration
*
- * @return $ip The resolved IP address
+ * @return void
*/
public static function acquireSelfIPAddress () {
// Local IP by default
));
}
- // Return the IP address
- return $ip;
+ // Set it in configuration
+ FrameworkConfiguration::getInstance()->setServerAddress($ip);
+ }
+
+ /**
+ * Determines own remote IP address (e.g. can be used to probe if we are
+ * reachable from outside by determining external IP and then connect to it.
+ * This is accomblished by connecting to the IP of www.ship-simu.org which
+ * should default to 217.172.186.31.
+ *
+ * This method is taken and lightly rewritten from a user comment on php.net:
+ * http://de.php.net/manual/en/function.socket-create.php#49368
+ *
+ * @param $dest IP destination we should connect to
+ * @param $port Port destination we should connect to
+ * @return $externalAddress The determined external IP address
+ * @throws InvalidSocketException If socket initialization wents wrong
+ */
+ public function determineExternalIp ($dest = '217.172.186.31', $port = 80) {
+ // First get a socket
+ $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
+ if (!is_resource($socket)) {
+ // Throw InvalidSocketException
+ throw new InvalidSocketException (array($this, gettype($socket), 0, 'unknown'));
+ } // END - if
+
+ // Connect to the destination
+ socket_connect($socket, $dest, $port);
+
+ // Get the socket address (our external IP) and port (ignored)
+ socket_getsockname($socket, $externalAddress, $ourPort);
+
+ // Close the socket
+ socket_close($socket);
+
+ // Return determined external IP
+ return $externalAddress;
}
}