public function update(SplSubject $subject) { $event = $subject->getLastEvent(); // force a timeout when writing request body if ('sentHeaders' == $event['name']) { $this->headers = $event['data']; } }
public function update(SplSubject $subject) { /* @var $subject HTTP_Request2 */ $event = $subject->getLastEvent(); if ('sentBody' == $event['name']) { $this->size = $event['data']; } }
public function update(SplSubject $subject) { /* @var $subject HTTP_Request2 */ $event = $subject->getLastEvent(); if ($event['name'] !== end($this->sequence) && (empty($this->_watched) || in_array($event['name'], $this->_watched, true))) { $this->sequence[] = $event['name']; } }
public function update(SplSubject $subject) { $event = $subject->getLastEvent(); switch ($event['name']) { case 'receivedHeaders': $this->fp = @fopen($this->filename, 'wb'); if (!$this->fp) { throw new Exception("Cannot open target file '{$filename}'"); } break; case 'receivedBodyPart': case 'receivedEncodedBodyPart': fwrite($this->fp, $event['data']); break; case 'receivedBody': fclose($this->fp); } }
/** * Saves current chunk to disk each time a body part is received. * If the filename is empty, tries to determine it from received headers * * @throws \TYPO3\CMS\Core\Exception if file can not be opened * @throws \UnexpectedValueException if the file name is empty and can not be determined from headers * @param \SplSubject|\HTTP_Request2 $request * @return void */ public function update(\SplSubject $request) { $event = $request->getLastEvent(); switch ($event['name']) { case 'receivedHeaders': if ($this->targetFilename === '') { $this->determineFilename($request, $event['data']); } $this->openFile(); break; case 'receivedBodyPart': case 'receivedEncodedBodyPart': fwrite($this->filePointer, $event['data']); break; case 'receivedBody': $this->closeFile(); break; default: } }
/** * Called when the request notifies us of an event. * * @param HTTP_Request2 $subject The HTTP_Request2 instance * * @return void */ public function update(SplSubject $subject) { $event = $subject->getLastEvent(); if (!in_array($event['name'], $this->events)) { return; } switch ($event['name']) { case 'connect': $this->log('* Connected to ' . $event['data']); break; case 'sentHeaders': $headers = explode("\r\n", $event['data']); array_pop($headers); foreach ($headers as $header) { $this->log('> ' . $header); } break; case 'sentBodyPart': $this->log('> ' . $event['data'] . ' byte(s) sent'); break; case 'receivedHeaders': $this->log(sprintf('< HTTP/%s %s %s', $event['data']->getVersion(), $event['data']->getStatus(), $event['data']->getReasonPhrase())); $headers = $event['data']->getHeader(); foreach ($headers as $key => $val) { $this->log('< ' . $key . ': ' . $val); } $this->log('< '); break; case 'receivedBody': $this->log($event['data']->getBody()); break; case 'disconnect': $this->log('* Disconnected'); break; } }
public function update(SplSubject $subject) { $this->calls++; $this->event = $subject->getLastEvent(); }
/** * Called when the request notifies us of an event. * * @param SplSubject $request The HTTP_Request2 instance * * @return void * @throws HTTP_Request2_MessageException */ public function update(SplSubject $request) { /* @var $request HTTP_Request2 */ $event = $request->getLastEvent(); $encoded = false; /* @var $event['data'] HTTP_Request2_Response */ switch ($event['name']) { case 'receivedHeaders': $this->_processingHeader = true; $this->_redirect = $event['data']->isRedirect(); $this->_encoding = strtolower($event['data']->getHeader('content-encoding')); $this->_possibleHeader = ''; break; case 'receivedEncodedBodyPart': if (!$this->_streamFilter && ($this->_encoding === 'deflate' || $this->_encoding === 'gzip')) { $this->_streamFilter = stream_filter_append($this->_stream, 'zlib.inflate', STREAM_FILTER_WRITE); } $encoded = true; // fall-through is intentional // fall-through is intentional case 'receivedBodyPart': if ($this->_redirect) { break; } if (!$encoded || !$this->_processingHeader) { $bytes = fwrite($this->_stream, $event['data']); } else { $offset = 0; $this->_possibleHeader .= $event['data']; if ('deflate' === $this->_encoding) { if (2 > strlen($this->_possibleHeader)) { break; } $header = unpack('n', substr($this->_possibleHeader, 0, 2)); if (0 == $header[1] % 31) { $offset = 2; } } elseif ('gzip' === $this->_encoding) { if (10 > strlen($this->_possibleHeader)) { break; } try { $offset = HTTP_Request2_Response::parseGzipHeader($this->_possibleHeader, false); } catch (HTTP_Request2_MessageException $e) { // need more data? if (false !== strpos($e->getMessage(), 'data too short')) { break; } throw $e; } } $this->_processingHeader = false; $bytes = fwrite($this->_stream, substr($this->_possibleHeader, $offset)); } if (false === $bytes) { throw new HTTP_Request2_MessageException('fwrite failed.'); } if ($this->_maxDownloadSize && ftell($this->_stream) - $this->_startPosition > $this->_maxDownloadSize) { throw new HTTP_Request2_MessageException(sprintf('Body length limit (%d bytes) reached', $this->_maxDownloadSize)); } break; case 'receivedBody': if ($this->_streamFilter) { stream_filter_remove($this->_streamFilter); $this->_streamFilter = null; } break; } }