--- /dev/null
+Deny from all
--- /dev/null
+<?php
+/**
+ * An interface for CSV file input operations.
+ *
+ * @author Roland Haeder <webmaster@shipsimu.org>
+ * @version 0.0.0
+ * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2014 Core Developer Team
+ * @license GNU GPL 3.0 or any newer version
+ * @link http://www.shipsimu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+interface CsvInputStreamer extends FileInputStreamer {
+}
+
+// [EOF]
+?>
--- /dev/null
+
+ // First get a socket
+ // @TODO Add some DNS caching here
+
+ // Open connection
+ if ($helperInstance->isProxyUsed() === TRUE) {
+ // Resolve hostname into IP address
+ $ip = $helperInstance->resolveIpAddress($helperInstance->getConfigInstance()->getConfigEntry('proxy_host'));
+
+ // Connect to host through proxy connection
+ $socketResource = fsockopen($ip, $helperInstance->getConfigInstance()->getConfigEntry('proxy_port'), $errorNo, $errorStr, 30);
+ } else {
+ // Connect to host directly
+ $socketResource = fsockopen('188.138.90.169', 80, $errorNo, $errorStr, 30);
+ }
+
+ // Check if there was an error else
+ if ($errorNo > 0) {
+ // Then throw again
+ throw new InvalidSocketException(array($helperInstance, $socketResource, $errorNo, $errorStr), BaseListener::EXCEPTION_INVALID_SOCKET);
+ } // END - if
--- /dev/null
+
+ /**
+ * 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.shipsimu.org which
+ * should default to 188.138.90.169 and requesting /ip.php which does only
+ * return the content of $_SERVER['REMOTE_ADDR']. Of course, this method
+ * requires a working Internet connection.
+ *
+ * This method is taken from a user comment on php.net and heavily rewritten.
+ * Compare to following link:
+ * http://de.php.net/manual/en/function.socket-create.php#49368
+ *
+ * @return $externalAddress The determined external IP address
+ * @todo Make IP, host name, port and script name configurable
+ */
+ public static function determineExternalIp () {
+ // Get helper instance
+ $helperInstance = new ConsoleTools();
+
+ // First get a socket
+ // @TODO Add some DNS caching here
+
+ // Open connection
+ if ($helperInstance->isProxyUsed() === TRUE) {
+ // Resolve hostname into IP address
+ $ip = $helperInstance->resolveIpAddress($helperInstance->getConfigInstance()->getConfigEntry('proxy_host'));
+
+ // Connect to host through proxy connection
+ $socketResource = fsockopen($ip, $helperInstance->getConfigInstance()->getConfigEntry('proxy_port'), $errorNo, $errorStr, 30);
+ } else {
+ // Connect to host directly
+ $socketResource = fsockopen('188.138.90.169', 80, $errorNo, $errorStr, 30);
+ }
+
+ // Check if there was an error else
+ if ($errorNo > 0) {
+ // Then throw again
+ throw new InvalidSocketException(array($helperInstance, $socketResource, $errorNo, $errorStr), BaseListener::EXCEPTION_INVALID_SOCKET);
+ } // END - if
+
+ // Prepare the GET request
+ $request = 'GET ' . ($helperInstance->isProxyUsed() === TRUE ? 'http://shipsimu.org' : '') . '/ip.php HTTP/1.0' . self::HTTP_EOL;
+ $request .= 'Host: shipsimu.org' . self::HTTP_EOL;
+ $request .= 'User-Agent: ' . $this->getUserAgent() . self::HTTP_EOL;
+ $request .= 'Connection: close' . self::HTTP_EOL;
+
+ // Do we use proxy?
+ if ($helperInstance->isProxyUsed() === TRUE) {
+ // CONNECT method?
+ if ($helperInstance->getConfigInstance()->getConfigEntry('proxy_connect_method') == 'Y') {
+ // Setup proxy tunnel
+ $response = $helperInstance->setupProxyTunnel('shipsimu.org', 80, $socketResource);
+
+ // If the response is invalid, abort
+ if ((count($response) == 3) && (empty($response[0])) && (empty($response[1])) && (empty($response[2]))) {
+ // Invalid response!
+ $helperInstance->debugBackTrace('Proxy tunnel not working: response=' . print_r($response, TRUE));
+ } // END - if
+ } else {
+ // Add header for proxy
+ $request .= 'Proxy-Connection: Keep-Alive' . self::HTTP_EOL;
+ }
+ } // END - if
+
+ // Add last HTTP_EOL
+ $request .= self::HTTP_EOL;
+
+ // Send it to the socket
+ fwrite($socketResource, $request);
+
+ // Init IP (this will always be the last line)
+ $externalAddress = 'invalid';
+
+ // And read the reply
+ while (!feof($socketResource)) {
+ // Get line
+ $externalAddress = trim(fgets($socketResource, 128));
+
+ // Detect HTTP response
+ if ((substr($externalAddress, 0, 7) == 'HTTP/1.') && (substr($externalAddress, -6, 6) != '200 OK')) {
+ // Stop processing
+ break;
+ } // END - if
+ } // END - while
+
+ // Close socket
+ fclose($socketResource);
+
+
+ // Debug message
+ /* DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('CONSOLE-TOOLS[' . __METHOD__ . ':' . __LINE__ . ']: Resolved external address: ' . $externalAddress);
+
+ // Return determined external IP
+ return $externalAddress;
+ }
--- /dev/null
+Deny from all
--- /dev/null
+<?php
+/**
+ * A CSV file class
+ *
+ * @author Roland Haeder <webmaster@ship-simu.org>
+ * @version 0.0.0
+ * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2014 Core Developer Team
+ * @license GNU GPL 3.0 or any newer version
+ * @link http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class CsvFile extends BaseTextFile implements CsvInputStreamer {
+ /**
+ * Protected constructor
+ *
+ * @return void
+ */
+ protected function __construct () {
+ // Call parent constructor
+ parent::__construct(__CLASS__);
+ }
+
+ /**
+ * Creates an instance of this File class and prepares it for usage
+ *
+ * @param $fileName Name of the index file
+ * @return $fileInstance An instance of this File class
+ */
+ public final static function createCsvFile ($fileName) {
+ // Get a new instance
+ $fileInstance = new CsvFile();
+
+ // Init this abstract file
+ $fileInstance->initFile($fileName);
+
+ // Return the prepared instance
+ return $fileInstance;
+ }
+}
+
+// [EOF]
+?>
// CFG: FILE-INPUT-OUTPUT-CLASS
$cfg->setConfigEntry('file_raw_input_output_class', 'FrameworkFileInputOutputPointer');
+// CFG: CSV-FILE-CLASS
+$cfg->setConfigEntry('csv_file_class', 'CsvFile');
+
// CFG: FILE-ITERATOR-CLASS
$cfg->setConfigEntry('file_iterator_class', 'FileIterator');