From: Roland Haeder Date: Fri, 16 May 2014 22:57:00 +0000 (+0200) Subject: Opps, had 2 Streamable interfaces ... X-Git-Url: https://git.mxchange.org/?p=core.git;a=commitdiff_plain;h=e66d3ca35c4e5dd92c7f2e966d1386e970127114 Opps, had 2 Streamable interfaces ... Signed-off-by: Roland Häder --- diff --git a/inc/classes/interfaces/streams/class_Stream.php b/inc/classes/interfaces/streams/class_Stream.php new file mode 100644 index 00000000..ba88ae88 --- /dev/null +++ b/inc/classes/interfaces/streams/class_Stream.php @@ -0,0 +1,35 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 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 . + */ +interface Stream extends FrameworkInterface { + /** + * Streams the data and maybe does something to it + * + * @param $data The data (string mostly) to "stream" + * @return $data The data (string mostly) to "stream" + */ + function streamData ($data); +} + +// [EOF] +?> diff --git a/inc/classes/interfaces/streams/class_Streamable.php b/inc/classes/interfaces/streams/class_Streamable.php deleted file mode 100644 index 46eac25c..00000000 --- a/inc/classes/interfaces/streams/class_Streamable.php +++ /dev/null @@ -1,35 +0,0 @@ - - * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 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 . - */ -interface Streamable extends FrameworkInterface { - /** - * Streams the data and maybe does something to it - * - * @param $data The data (string mostly) to "stream" - * @return $data The data (string mostly) to "stream" - */ - function streamData ($data); -} - -// [EOF] -?> diff --git a/inc/classes/interfaces/streams/crypto/class_EncryptableStream.php b/inc/classes/interfaces/streams/crypto/class_EncryptableStream.php index a908f9b2..9a7e94e2 100644 --- a/inc/classes/interfaces/streams/crypto/class_EncryptableStream.php +++ b/inc/classes/interfaces/streams/crypto/class_EncryptableStream.php @@ -21,7 +21,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -interface EncryptableStream extends Streamable { +interface EncryptableStream extends Stream { /** * Encrypt the string with fixed salt * diff --git a/inc/classes/interfaces/streams/input/class_InputStream.php b/inc/classes/interfaces/streams/input/class_InputStream.php new file mode 100644 index 00000000..149f63c2 --- /dev/null +++ b/inc/classes/interfaces/streams/input/class_InputStream.php @@ -0,0 +1,28 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 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 . + */ +interface InputStream extends Stream { +} + +// [EOF] +?> diff --git a/inc/classes/interfaces/streams/input/class_InputStreamable.php b/inc/classes/interfaces/streams/input/class_InputStreamable.php deleted file mode 100644 index 6e213e86..00000000 --- a/inc/classes/interfaces/streams/input/class_InputStreamable.php +++ /dev/null @@ -1,28 +0,0 @@ - - * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 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 . - */ -interface InputStreamable extends Streamable { -} - -// [EOF] -?> diff --git a/inc/classes/interfaces/streams/output/class_OutputStream.php b/inc/classes/interfaces/streams/output/class_OutputStream.php new file mode 100644 index 00000000..2d2dba57 --- /dev/null +++ b/inc/classes/interfaces/streams/output/class_OutputStream.php @@ -0,0 +1,28 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 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 . + */ +interface OutputStream extends Stream { +} + +// [EOF] +?> diff --git a/inc/classes/interfaces/streams/output/class_OutputStreamable.php b/inc/classes/interfaces/streams/output/class_OutputStreamable.php deleted file mode 100644 index 68382195..00000000 --- a/inc/classes/interfaces/streams/output/class_OutputStreamable.php +++ /dev/null @@ -1,28 +0,0 @@ - - * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 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 . - */ -interface OutputStreamable extends Streamable { -} - -// [EOF] -?> diff --git a/inc/classes/main/class_BaseFrameworkSystem.php b/inc/classes/main/class_BaseFrameworkSystem.php index abcefc8c..0bd39092 100644 --- a/inc/classes/main/class_BaseFrameworkSystem.php +++ b/inc/classes/main/class_BaseFrameworkSystem.php @@ -144,12 +144,12 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { private $sourceInstance = NULL; /** - * An instance of a InputStreamable class + * An instance of a InputStream class */ private $inputStreamInstance = NULL; /** - * An instance of a OutputStreamable class + * An instance of a OutputStream class */ private $outputStreamInstance = NULL; @@ -1090,40 +1090,40 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { } /** - * Getter for a InputStreamable instance + * Getter for a InputStream instance * - * @param $inputStreamInstance The InputStreamable instance + * @param $inputStreamInstance The InputStream instance */ protected final function getInputStreamInstance () { return $this->inputStreamInstance; } /** - * Setter for a InputStreamable instance + * Setter for a InputStream instance * - * @param $inputStreamInstance The InputStreamable instance + * @param $inputStreamInstance The InputStream instance * @return void */ - protected final function setInputStreamInstance (InputStreamable $inputStreamInstance) { + protected final function setInputStreamInstance (InputStream $inputStreamInstance) { $this->inputStreamInstance = $inputStreamInstance; } /** - * Getter for a OutputStreamable instance + * Getter for a OutputStream instance * - * @param $outputStreamInstance The OutputStreamable instance + * @param $outputStreamInstance The OutputStream instance */ protected final function getOutputStreamInstance () { return $this->outputStreamInstance; } /** - * Setter for a OutputStreamable instance + * Setter for a OutputStream instance * - * @param $outputStreamInstance The OutputStreamable instance + * @param $outputStreamInstance The OutputStream instance * @return void */ - protected final function setOutputStreamInstance (OutputStreamable $outputStreamInstance) { + protected final function setOutputStreamInstance (OutputStream $outputStreamInstance) { $this->outputStreamInstance = $outputStreamInstance; } diff --git a/inc/classes/main/file_directories/io_handler/.htaccess b/inc/classes/main/file_directories/io_handler/.htaccess deleted file mode 100644 index 3a428827..00000000 --- a/inc/classes/main/file_directories/io_handler/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Deny from all diff --git a/inc/classes/main/file_directories/io_handler/class_FileIoStream.php b/inc/classes/main/file_directories/io_handler/class_FileIoStream.php deleted file mode 100644 index 956ca34a..00000000 --- a/inc/classes/main/file_directories/io_handler/class_FileIoStream.php +++ /dev/null @@ -1,268 +0,0 @@ - - * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 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 . - */ -class FileIoStream extends BaseFrameworkSystem implements FileInputStreamer, FileOutputStreamer { - /** - * File header indicator - */ - const FILE_IO_FILE_HEADER_ID = '@head'; - - /** - * Data block indicator - */ - const FILE_IO_DATA_BLOCK_ID = '@data'; - - /** - * Separator #1 - */ - const FILE_IO_CHUNKER = ':'; - - /** - * Separator #2 - */ - const FILE_IO_SEPARATOR = '^'; - - /** - * Protected constructor - */ - protected function __construct () { - // Call parent constructor - parent::__construct(__CLASS__); - } - - /** - * Create a file IO stream. This is a class for performing all actions - * on files like creating, deleting and loading them. - * - * @return $ioInstance An instance of FileIoStream - */ - public static final function createFileIoStream () { - // Create new instance - $ioInstance = new FileIoStream(); - - // Return the instance - return $ioInstance; - } - - /** - * Saves data to a given local file and create missing directory structures - * - * @param $fileName The file name for the to be saved file - * @param $dataArray The data we shall store to the file - * @return void - * @see FileOutputStreamer - * @todo This method needs heavy rewrite - */ - public final function saveFile ($fileName, array $dataArray) { - // Try it five times - $dirName = ''; - $fileInstance = NULL; - - for ($idx = 0; $idx < 5; $idx++) { - // Get a file output pointer - try { - $fileInstance = ObjectFactory::createObjectByConfiguredName('file_raw_output_class', array($fileName)); - } catch (FileIoException $e) { - // Create missing directory - $dirName = dirname($fileName); - for ($idx2 = 0; $idx2 < (2 - $idx); $idx2++) { - $dirName = dirname($dirName); - } // END - for - - // Try to create it - @mkdir($dirName); - } - } // END - for - - // Write a header information for validation purposes - $fileInstance->writeToFile(sprintf('%s%s%s%s%s%s%s%s%s' . PHP_EOL, - self::FILE_IO_FILE_HEADER_ID, - self::FILE_IO_SEPARATOR, - $dataArray[0], - self::FILE_IO_CHUNKER, - time(), - self::FILE_IO_CHUNKER, - strlen($dataArray[1]), - self::FILE_IO_CHUNKER, - md5($dataArray[1]) - )); - - // Encode the (maybe) binary stream with Base64 - $b64Stream = base64_encode($dataArray[1]); - - // write the data line by line - $line = str_repeat(' ', 50); $idx = 0; - while (strlen($line) == 50) { - // Get 50 chars or less - $line = substr($b64Stream, $idx, 50); - - // Save it to the stream - $fileInstance->writeToFile(sprintf('%s%s%s%s%s' . PHP_EOL, - self::FILE_IO_DATA_BLOCK_ID, - self::FILE_IO_SEPARATOR, - $line, - self::FILE_IO_CHUNKER, - md5($line) - )); - - // Advance to the next 50-chars block - $idx += 50; - } // END - while - - // Close the file - $fileInstance->closeFile(); - } - - /** - * Reads from a local file - * - * @param $fqfn The full-qualified file-name which we shall load - * @return $array An array with the element 'header' and 'data' - * @see FileInputStreamer - */ - public final function loadFileContents ($fqfn) { - // Initialize some variables and arrays - $inputBuffer = ''; - $lastBuffer = ''; - $header = array(); - $data = array(); - $readData = ''; // This will contain our read data - - // Get a file input handler - $fileInstance = ObjectFactory::createObjectByConfiguredName('file_raw_input_class', array($fqfn)); - - // Read all it's contents (we very and transparently decompress it below) - while ($readRawLine = $fileInstance->readFromFile()) { - // Add the read line to the buffer - $inputBuffer .= $readRawLine; - - // Break infinite loop maybe caused by the input handler - if ($lastBuffer == $inputBuffer) { - break; - } // END - if - - // Remember last read line for avoiding possible infinite loops - $lastBuffer = $inputBuffer; - } // END - while - - // Close directory handle - $fileInstance->closeFile(); - - // Convert it into an array - $inputBuffer = explode(chr(10), $inputBuffer); - - // Now process the read lines and verify it's content - foreach ($inputBuffer as $rawLine) { - // Trim it a little but not the leading spaces/tab-stops - $rawLine = rtrim($rawLine); - - // Analyze this line - if (substr($rawLine, 0, 5) == self::FILE_IO_FILE_HEADER_ID) { - // Header found, so let's extract it - $header = explode(self::FILE_IO_SEPARATOR, $rawLine); - $header = trim($header[1]); - - // Now we must convert it again into an array - $header = explode(self::FILE_IO_CHUNKER, $header); - - // Is the header (maybe) valid? - if (count($header) != 4) { - // Throw an exception - throw new InvalidArrayCountException(array($this, 'header', count($header), 4), self::EXCEPTION_ARRAY_HAS_INVALID_COUNT); - } // END - if - } elseif (substr($rawLine, 0, 5) == self::FILE_IO_DATA_BLOCK_ID) { - // Is a data line! - $data = explode(self::FILE_IO_SEPARATOR, $rawLine); - $data = $data[1]; - - // First element is the data, second the MD5 checksum - $data = explode(self::FILE_IO_CHUNKER, $data); - - // Validate the read line - if (count($data) == 2) { - if (md5($data[0]) != $data[1]) { - // MD5 hash did not match! - throw new InvalidMD5ChecksumException(array($this, md5($data[0]), $data[1]), self::EXCEPTION_MD5_CHECKSUMS_MISMATCH); - } // END - if - } else { - // Invalid count! - throw new InvalidArrayCountException(array($this, 'data', count($data), 2), self::EXCEPTION_ARRAY_HAS_INVALID_COUNT); - } - - // Add this to the readData string - $readData .= $data[0]; - } else { - // Other raw lines than header/data tagged lines and re-add the new-line char - $readData .= $rawLine . PHP_EOL; - } - } // END - foreach - - // Was raw lines read and no header/data? - if ((!empty($readData)) && (count($header) == 0) && (count($data) == 0)) { - // Return raw lines back - return $readData; - } // END - if - - // Was a header found? - if (count($header) != 4) { - // Throw an exception - throw new InvalidArrayCountException(array($this, 'header', count($header), 4), self::EXCEPTION_ARRAY_HAS_INVALID_COUNT); - } // END - if - - // Decode all from Base64 - $readData = @base64_decode($readData); - - // Does the size match? - if (strlen($readData) != $header[2]) { - // Size did not match - throw new InvalidDataLengthException(array($this, strlen($readData), $header[2]), self::EXCEPTION_UNEXPECTED_STRING_SIZE); - } // END - if - - // Validate the decoded data with the final MD5 hash - if (md5($readData) != $header[3]) { - // MD5 hash did not match! - throw new InvalidMD5ChecksumException(array($this, md5($readData), $header[3]), self::EXCEPTION_MD5_CHECKSUMS_MISMATCH); - } // END - if - - // Return all in an array - return array( - 'header' => $header, - 'data' => $readData - ); - } - - /** - * Streams the data and maybe does something to it - * - * @param $data The data (string mostly) to "stream" - * @return $data The data (string mostly) to "stream" - * @throws UnsupportedOperationException If this method is called - */ - public function streamData ($data) { - self::createDebugInstance(__CLASS__)->debugOutput('Unhandled ' . strlen($data) . ' bytes in this stream.'); - throw new UnsupportedOperationException(array($this, __FUNCTION__), self::EXCEPTION_UNSPPORTED_OPERATION); - } -} - -// [EOF] -?> diff --git a/inc/classes/main/file_directories/io_stream/.htaccess b/inc/classes/main/file_directories/io_stream/.htaccess new file mode 100644 index 00000000..3a428827 --- /dev/null +++ b/inc/classes/main/file_directories/io_stream/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/inc/classes/main/file_directories/io_stream/class_FileIoStream.php b/inc/classes/main/file_directories/io_stream/class_FileIoStream.php new file mode 100644 index 00000000..956ca34a --- /dev/null +++ b/inc/classes/main/file_directories/io_stream/class_FileIoStream.php @@ -0,0 +1,268 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 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 . + */ +class FileIoStream extends BaseFrameworkSystem implements FileInputStreamer, FileOutputStreamer { + /** + * File header indicator + */ + const FILE_IO_FILE_HEADER_ID = '@head'; + + /** + * Data block indicator + */ + const FILE_IO_DATA_BLOCK_ID = '@data'; + + /** + * Separator #1 + */ + const FILE_IO_CHUNKER = ':'; + + /** + * Separator #2 + */ + const FILE_IO_SEPARATOR = '^'; + + /** + * Protected constructor + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + } + + /** + * Create a file IO stream. This is a class for performing all actions + * on files like creating, deleting and loading them. + * + * @return $ioInstance An instance of FileIoStream + */ + public static final function createFileIoStream () { + // Create new instance + $ioInstance = new FileIoStream(); + + // Return the instance + return $ioInstance; + } + + /** + * Saves data to a given local file and create missing directory structures + * + * @param $fileName The file name for the to be saved file + * @param $dataArray The data we shall store to the file + * @return void + * @see FileOutputStreamer + * @todo This method needs heavy rewrite + */ + public final function saveFile ($fileName, array $dataArray) { + // Try it five times + $dirName = ''; + $fileInstance = NULL; + + for ($idx = 0; $idx < 5; $idx++) { + // Get a file output pointer + try { + $fileInstance = ObjectFactory::createObjectByConfiguredName('file_raw_output_class', array($fileName)); + } catch (FileIoException $e) { + // Create missing directory + $dirName = dirname($fileName); + for ($idx2 = 0; $idx2 < (2 - $idx); $idx2++) { + $dirName = dirname($dirName); + } // END - for + + // Try to create it + @mkdir($dirName); + } + } // END - for + + // Write a header information for validation purposes + $fileInstance->writeToFile(sprintf('%s%s%s%s%s%s%s%s%s' . PHP_EOL, + self::FILE_IO_FILE_HEADER_ID, + self::FILE_IO_SEPARATOR, + $dataArray[0], + self::FILE_IO_CHUNKER, + time(), + self::FILE_IO_CHUNKER, + strlen($dataArray[1]), + self::FILE_IO_CHUNKER, + md5($dataArray[1]) + )); + + // Encode the (maybe) binary stream with Base64 + $b64Stream = base64_encode($dataArray[1]); + + // write the data line by line + $line = str_repeat(' ', 50); $idx = 0; + while (strlen($line) == 50) { + // Get 50 chars or less + $line = substr($b64Stream, $idx, 50); + + // Save it to the stream + $fileInstance->writeToFile(sprintf('%s%s%s%s%s' . PHP_EOL, + self::FILE_IO_DATA_BLOCK_ID, + self::FILE_IO_SEPARATOR, + $line, + self::FILE_IO_CHUNKER, + md5($line) + )); + + // Advance to the next 50-chars block + $idx += 50; + } // END - while + + // Close the file + $fileInstance->closeFile(); + } + + /** + * Reads from a local file + * + * @param $fqfn The full-qualified file-name which we shall load + * @return $array An array with the element 'header' and 'data' + * @see FileInputStreamer + */ + public final function loadFileContents ($fqfn) { + // Initialize some variables and arrays + $inputBuffer = ''; + $lastBuffer = ''; + $header = array(); + $data = array(); + $readData = ''; // This will contain our read data + + // Get a file input handler + $fileInstance = ObjectFactory::createObjectByConfiguredName('file_raw_input_class', array($fqfn)); + + // Read all it's contents (we very and transparently decompress it below) + while ($readRawLine = $fileInstance->readFromFile()) { + // Add the read line to the buffer + $inputBuffer .= $readRawLine; + + // Break infinite loop maybe caused by the input handler + if ($lastBuffer == $inputBuffer) { + break; + } // END - if + + // Remember last read line for avoiding possible infinite loops + $lastBuffer = $inputBuffer; + } // END - while + + // Close directory handle + $fileInstance->closeFile(); + + // Convert it into an array + $inputBuffer = explode(chr(10), $inputBuffer); + + // Now process the read lines and verify it's content + foreach ($inputBuffer as $rawLine) { + // Trim it a little but not the leading spaces/tab-stops + $rawLine = rtrim($rawLine); + + // Analyze this line + if (substr($rawLine, 0, 5) == self::FILE_IO_FILE_HEADER_ID) { + // Header found, so let's extract it + $header = explode(self::FILE_IO_SEPARATOR, $rawLine); + $header = trim($header[1]); + + // Now we must convert it again into an array + $header = explode(self::FILE_IO_CHUNKER, $header); + + // Is the header (maybe) valid? + if (count($header) != 4) { + // Throw an exception + throw new InvalidArrayCountException(array($this, 'header', count($header), 4), self::EXCEPTION_ARRAY_HAS_INVALID_COUNT); + } // END - if + } elseif (substr($rawLine, 0, 5) == self::FILE_IO_DATA_BLOCK_ID) { + // Is a data line! + $data = explode(self::FILE_IO_SEPARATOR, $rawLine); + $data = $data[1]; + + // First element is the data, second the MD5 checksum + $data = explode(self::FILE_IO_CHUNKER, $data); + + // Validate the read line + if (count($data) == 2) { + if (md5($data[0]) != $data[1]) { + // MD5 hash did not match! + throw new InvalidMD5ChecksumException(array($this, md5($data[0]), $data[1]), self::EXCEPTION_MD5_CHECKSUMS_MISMATCH); + } // END - if + } else { + // Invalid count! + throw new InvalidArrayCountException(array($this, 'data', count($data), 2), self::EXCEPTION_ARRAY_HAS_INVALID_COUNT); + } + + // Add this to the readData string + $readData .= $data[0]; + } else { + // Other raw lines than header/data tagged lines and re-add the new-line char + $readData .= $rawLine . PHP_EOL; + } + } // END - foreach + + // Was raw lines read and no header/data? + if ((!empty($readData)) && (count($header) == 0) && (count($data) == 0)) { + // Return raw lines back + return $readData; + } // END - if + + // Was a header found? + if (count($header) != 4) { + // Throw an exception + throw new InvalidArrayCountException(array($this, 'header', count($header), 4), self::EXCEPTION_ARRAY_HAS_INVALID_COUNT); + } // END - if + + // Decode all from Base64 + $readData = @base64_decode($readData); + + // Does the size match? + if (strlen($readData) != $header[2]) { + // Size did not match + throw new InvalidDataLengthException(array($this, strlen($readData), $header[2]), self::EXCEPTION_UNEXPECTED_STRING_SIZE); + } // END - if + + // Validate the decoded data with the final MD5 hash + if (md5($readData) != $header[3]) { + // MD5 hash did not match! + throw new InvalidMD5ChecksumException(array($this, md5($readData), $header[3]), self::EXCEPTION_MD5_CHECKSUMS_MISMATCH); + } // END - if + + // Return all in an array + return array( + 'header' => $header, + 'data' => $readData + ); + } + + /** + * Streams the data and maybe does something to it + * + * @param $data The data (string mostly) to "stream" + * @return $data The data (string mostly) to "stream" + * @throws UnsupportedOperationException If this method is called + */ + public function streamData ($data) { + self::createDebugInstance(__CLASS__)->debugOutput('Unhandled ' . strlen($data) . ' bytes in this stream.'); + throw new UnsupportedOperationException(array($this, __FUNCTION__), self::EXCEPTION_UNSPPORTED_OPERATION); + } +} + +// [EOF] +?> diff --git a/inc/classes/main/streams/class_ b/inc/classes/main/streams/class_ index 5cc8474d..d7e24e2d 100644 --- a/inc/classes/main/streams/class_ +++ b/inc/classes/main/streams/class_ @@ -21,7 +21,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -class ???Stream extends BaseStream implements Streamable { +class ???Stream extends BaseStream implements Stream { /** * Protected constructor * diff --git a/inc/classes/main/streams/input/class_ b/inc/classes/main/streams/input/class_ index 108f48f2..0bae09ff 100644 --- a/inc/classes/main/streams/input/class_ +++ b/inc/classes/main/streams/input/class_ @@ -21,7 +21,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -class ???InputStream extends BaseStream implements InputStreamable { +class ???InputStream extends BaseStream implements InputStream { /** * Protected constructor * diff --git a/inc/classes/main/streams/output/class_ b/inc/classes/main/streams/output/class_ index ce5dda25..10b3c722 100644 --- a/inc/classes/main/streams/output/class_ +++ b/inc/classes/main/streams/output/class_ @@ -21,7 +21,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -class ???OutputStream extends BaseStream implements OutputStreamable { +class ???OutputStream extends BaseStream implements OutputStream { /** * Protected constructor * diff --git a/inc/classes/middleware/io/class_FileIoHandler.php b/inc/classes/middleware/io/class_FileIoHandler.php index 8e5559b0..e7578348 100644 --- a/inc/classes/middleware/io/class_FileIoHandler.php +++ b/inc/classes/middleware/io/class_FileIoHandler.php @@ -119,8 +119,8 @@ class FileIoHandler extends BaseMiddleware implements IoHandler { * Saves streamed (that are mostly serialized objects) data to files or * external servers. * - * @param $fileName The local file's name including full path - * @param $dataArray Array containing the compressor's extension and streamed data + * @param $fileName The local file's name including full path + * @param $dataArray Array containing the compressor's extension and streamed data * @return void * @throws UnsupportedOperationException If this method is called */