/**
  * @param Payload $payload
  * @return CurlResponse
  * @throws ConnectionException
  */
 public function sendPayload(Payload $payload)
 {
     $ch = curl_init($payload->getUrl());
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
     curl_setopt($ch, CURLOPT_HEADER, 1);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->curlOptConnectionTimeOut);
     curl_setopt($ch, CURLOPT_TIMEOUT, $this->curlOptTimeOut);
     if (in_array($payload->getMethod(), ['post', 'put'])) {
         curl_setopt($ch, CURLOPT_POST, 1);
         curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload->getPostData()));
     }
     $headers = $payload->getHeaders();
     if (false === empty($headers)) {
         $curlHeaders = array();
         foreach ($headers as $key => $value) {
             $curlHeaders[] = $key . ': ' . $value;
         }
         curl_setopt($ch, CURLOPT_HTTPHEADER, $curlHeaders);
     }
     $content = curl_exec($ch);
     if ($content === false) {
         throw new ConnectionException();
     }
     $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
     $retHeaders = substr($content, 0, $header_size);
     $body = substr($content, $header_size);
     return new CurlResponse(curl_getinfo($ch, CURLINFO_HTTP_CODE), $retHeaders, $body);
 }
 /**
  * @param Payload $payload
  * @return ResponseInterface
  */
 public function sendPayload(Payload $payload)
 {
     switch ($payload->getUrl()) {
         case 'http://my.videopublisher.io/api/published':
             return $this->generateListStreamsResponse();
         case 'http://my.videopublisher.io/api/publish/00000000-0000-0000-0000-00000000':
             return $this->generateGetStreamResponse();
         case 'http://my.videopublisher.io/exception/api/published':
             return new CurlResponse(400, null, null);
         case 'http://my.videopublisher.io/exception/api/publish/00000000-0000-0000-0000-00000000':
             return new CurlResponse(400, null, null);
     }
 }