return $handlerInstance;
}
+ /**
+ * Verifies the package data itself (only rudymentary check)
+ *
+ * @param $rawData Raw package data (as string
+ * @return $isValid Wether the package data is valid
+ */
+ private function isPackageDataValid ($rawData) {
+ // Default is not valid
+ $isValid = false;
+
+ // Convert it back into an array
+ $packageData = explode(NetworkPackage::PACKAGE_DATA_SEPERATOR, $rawData);
+
+ // This should be at least three entries: sender|recipient|raw data
+ if (count($packageData) < 3) {
+ // Not enougth fields in $packageData!
+ $this->setErrorCode(self::PACKAGE_ERROR_INCOMPLETE_DATA);
+ } elseif (count(explode(NetworkPackage::PACKAGE_MASK_SEPERATOR, $packageData[2])) < 2) {
+ // Not entougth fields in content
+ $this->setErrorCode(self::PACKAGE_ERROR_INVALID_CONTENT);
+ } else {
+ // This check went fine...
+ $isValid = true;
+ }
+
+ // Return the result
+ return $isValid;
+ }
+
/**
* Processes a package from given resource. This is mostly useful for TCP
* package handling and is implemented in the TcpListener class
throw new InvalidResourceException($this, self::EXCEPTION_INVALID_RESOURCE);
} // END - if
+ // Init package data array
+ $packageData = array();
+
// Reset error code to unhandled
$this->setErrorCode(self::SOCKET_ERROR_UNHANDLED);
$this->setErrorCode(self::SOCKET_ERROR_EMPTY_DATA);
} elseif (!$this->isPackageDataValid($rawData)) {
// Invalid package data
- $this->setErrorCode(self::PACKAGE_ERROR_INVALID_DATA);
+ if ($this->getErrorCode() == self::SOCKET_ERROR_UNHANDLED) {
+ // Set it to PACKAGE_ERROR_INVALID_DATA, because SOCKET_ERROR_UNHANDLED should not be used
+ $this->setErrorCode(self::PACKAGE_ERROR_INVALID_DATA);
+ } // END - if
} else {
+ // Prepare the package data
+ $packageData = explode(NetworkPackage::PACKAGE_DATA_SEPERATOR, $rawData);
+
// Low-level checks are all green
$this->setErrorCode(self::PACKAGE_LEVEL_CHECK_OKAY);
}
- // Prepare the package data
- $packageData = explode(NetworkPackage::PACKAGE_DATA_SEPERATOR, $rawData);
-
// Get a state from the resolver for this package
$stateInstance = $this->getResolverInstance()->resolveStateByPackage($this, $packageData);
die('UNFINISHED:'.$stateInstance->__toString());