RequestMediator.php

Namespace

Guzzle\Http\Curl

File

drupal/core/vendor/guzzle/http/Guzzle/Http/Curl/RequestMediator.php
View source
<?php

namespace Guzzle\Http\Curl;

use Guzzle\Http\Message\RequestInterface;

/**
 * Mediator between curl handles and request objects
 */
class RequestMediator {

  /**
   * @var RequestInterface
   */
  protected $request;

  /**
   * @var bool Whether or not to emit read/write events
   */
  protected $emitIo;

  /**
   * @var CurlHandle
   */
  protected $curlHandle;

  /**
   * @param RequestInterface $request Request to mediate
   */
  public function __construct(RequestInterface $request) {
    $this->request = $request;
    $this->emitIo = $request
      ->getParams()
      ->get('curl.emit_io');
  }

  /**
   * Set the associated CurlHandle object
   *
   * @param CurlHandle $handle Curl handle
   *
   * @return RequestMediator
   */
  public function setCurlHandle(CurlHandle $handle) {
    $this->curlHandle = $handle;
    $this->request
      ->getParams()
      ->set('curl_handle', $handle);
    return $this;
  }

  /**
   * Receive a response header from curl
   *
   * @param resource $curl   Curl handle
   * @param string   $header Received header
   *
   * @return int
   */
  public function receiveResponseHeader($curl, $header) {
    return $this->request
      ->receiveResponseHeader($header);
  }

  /**
   * Received a progress notification
   *
   * @param int $downloadSize Total download size
   * @param int $downloaded   Amount of bytes downloaded
   * @param int $uploadSize   Total upload size
   * @param int $uploaded     Amount of bytes uploaded
   */
  public function progress($downloadSize, $downloaded, $uploadSize, $uploaded) {
    $this->request
      ->dispatch('curl.callback.progress', array(
      'request' => $this->request,
      'handle' => $this->curlHandle,
      'download_size' => $downloadSize,
      'downloaded' => $downloaded,
      'upload_size' => $uploadSize,
      'uploaded' => $uploaded,
    ));
  }

  /**
   * Write data to the response body of a request
   *
   * @param resource $curl  Curl handle
   * @param string   $write Data that was received
   *
   * @return int
   */
  public function writeResponseBody($curl, $write) {
    if ($this->emitIo) {
      $this->request
        ->dispatch('curl.callback.write', array(
        'request' => $this->request,
        'write' => $write,
      ));
    }
    return $this->request
      ->getResponse()
      ->getBody()
      ->write($write);
  }

  /**
   * Read data from the request body and send it to curl
   *
   * @param resource $ch     Curl handle
   * @param resource $fd     File descriptor
   * @param int      $length Amount of data to read
   *
   * @return string
   */
  public function readRequestBody($ch, $fd, $length) {
    $read = '';
    if ($this->request
      ->getBody()) {
      $read = $this->request
        ->getBody()
        ->read($length);
      if ($this->emitIo) {
        $this->request
          ->dispatch('curl.callback.read', array(
          'request' => $this->request,
          'read' => $read,
        ));
      }
    }
    return !$read ? '' : $read;
  }

}

Classes

Namesort descending Description
RequestMediator Mediator between curl handles and request objects