Mediator between curl handles and request objects
Expanded class hierarchy of RequestMediator
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;
}
}
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
RequestMediator:: |
public | function | ||
RequestMediator:: |
public | function | Write data to the response body of a request | |
RequestMediator:: |
public | function | Set the associated CurlHandle object | |
RequestMediator:: |
public | function | Receive a response header from curl | |
RequestMediator:: |
public | function | Read data from the request body and send it to curl | |
RequestMediator:: |
public | function | Received a progress notification | |
RequestMediator:: |
protected | property | ||
RequestMediator:: |
protected | property | ||
RequestMediator:: |
protected | property |