public function update(SplSubject $subject)
 {
     $event = $subject->getLastEvent();
     // force a timeout when writing request body
     if ('sentHeaders' == $event['name']) {
         $this->headers = $event['data'];
     }
 }
示例#2
0
 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'];
     }
 }
示例#4
0
 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);
     }
 }
示例#5
0
 /**
  * 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:
     }
 }
示例#6
0
 /**
  * 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;
     }
 }
示例#7
0
 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;
     }
 }