/** * deserialize * * This method deserializes a request. It requires an SabreAMF_InputStream with valid AMF data. After * deserialization the contents of the request can be found through the getBodies and getHeaders methods * * @param SabreAMF_InputStream $stream * @return void */ public function deserialize(SabreAMF_InputStream $stream) { $this->headers = array(); $this->bodies = array(); $this->InputStream = $stream; $stream->readByte(); $this->clientType = $stream->readByte(); $deserializer = new SabreAMF_AMF0_Deserializer($stream); $totalHeaders = $stream->readInt(); for ($i = 0; $i < $totalHeaders; $i++) { $header = array('name' => $deserializer->readString(), 'required' => $stream->readByte() == true); $stream->readLong(); $header['data'] = $deserializer->readAMFData(null, true); $this->headers[] = $header; } $totalBodies = $stream->readInt(); for ($i = 0; $i < $totalBodies; $i++) { try { $target = $deserializer->readString(); } catch (Exception $e) { // Could not fetch next body.. this happens with some versions of AMFPHP where the body // count isn't properly set. If this happens we simply stop decoding break; } $body = array('target' => $target, 'response' => $deserializer->readString(), 'length' => $stream->readLong(), 'data' => $deserializer->readAMFData(null, true)); if (is_object($body['data']) && $body['data'] instanceof SabreAMF_AMF3_Wrapper) { $body['data'] = $body['data']->getData(); $this->encoding = SabreAMF_Const::AMF3; } else { if (is_array($body['data']) && isset($body['data'][0]) && is_object($body['data'][0]) && $body['data'][0] instanceof SabreAMF_AMF3_Wrapper) { $body['data'] = $body['data'][0]->getData(); $this->encoding = SabreAMF_Const::AMF3; } } $this->bodies[] = $body; } }