socket_clear_error($socketResource);
}
+ /**
+ * Checks whether the final (last) chunk is valid
+ *
+ * @param $chunks An array with chunks and (hopefully) a valid final chunk
+ * @return $isValid Whether the final (last) chunk is valid
+ */
+ protected function isValidFinalChunk (array $chunks) {
+ // Default is all fine
+ $isValid = true;
+
+ // Validate final chunk
+ if (substr($chunks[count($chunks) - 1], 0, strlen(PackageFragmenter::END_OF_PACKAGE_IDENTIFIER)) != PackageFragmenter::END_OF_PACKAGE_IDENTIFIER) {
+ // Not fine
+ $isValid = false;
+ } elseif (substr_count($chunks[count($chunks) - 1], PackageFragmenter::CHUNK_HASH_SEPARATOR) != 1) {
+ // CHUNK_HASH_SEPARATOR shall only be found once
+ $isValid = false;
+ }
+
+ // Return status
+ return $isValid;
+ }
+
/**
* Translates socket error codes into our own internal names which can be
* used for call-backs.
*/
public function addAllChunksWithFinal (array $chunks) {
// Validate final chunk
- if (substr($chunks[count($chunks) - 1], 0, strlen(PackageFragmenter::END_OF_PACKAGE_IDENTIFIER)) != PackageFragmenter::END_OF_PACKAGE_IDENTIFIER) {
+ if (!$this->isValidFinalChunk($chunks)) {
// Last chunk is not valid
throw new FinalChunkVerificationException(array($this, $chunks), BaseListener::EXCEPTION_FINAL_CHUNK_VERIFICATION);
} // END - if
const EXCEPTION_CONNECTION_ALREADY_REGISTERED = 0xa04;
const EXCEPTION_UNEXPECTED_PACKAGE_STATUS = 0xa05;
const EXCEPTION_UNSUPPORTED_PACKAGE_CODE_HANDLER = 0xa06;
+ const EXCEPTION_FINAL_CHUNK_VERIFICATION = 0xa07;
/**
* Used protocol (Default: invalid, which is indeed invalid...)
* 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 PackageAssembler extends BaseFrameworkSystem implements Assembler, Registerable {
+class PackageAssembler extends BaseHubSystem implements Assembler, Registerable {
/**
* Protected constructor
*
$chunks = explode(PackageFragmenter::CHUNK_SEPARATOR, $packageContent[BaseRawDataHandler::PACKAGE_DECODED_DATA]);
// Validate final chunk
- if (substr($chunks[count($chunks) - 1], 0, strlen(PackageFragmenter::END_OF_PACKAGE_IDENTIFIER)) != PackageFragmenter::END_OF_PACKAGE_IDENTIFIER) {
+ if (!$this->isValidFinalChunk($chunks)) {
// Last chunk is not valid
throw new FinalChunkVerificationException(array($this, $chunks), BaseListener::EXCEPTION_FINAL_CHUNK_VERIFICATION);
} // END - if