1
0
Fork 0
mirror of https://github.com/Yetangitu/ampache synced 2025-10-05 02:39:47 +02:00

Begin WebSocket support for Broadcast and Player control

This commit is contained in:
Afterster 2014-02-05 08:08:46 +01:00
parent 2b128b122d
commit 6adf8307c4
516 changed files with 64260 additions and 18 deletions

View file

@ -0,0 +1,57 @@
<?php
namespace React\Http;
use Evenement\EventEmitter;
use Guzzle\Parser\Message\MessageParser;
/**
* @event headers
* @event error
*/
class RequestHeaderParser extends EventEmitter
{
private $buffer = '';
private $maxSize = 4096;
public function feed($data)
{
if (strlen($this->buffer) + strlen($data) > $this->maxSize) {
$this->emit('error', array(new \OverflowException("Maximum header size of {$this->maxSize} exceeded."), $this));
return;
}
$this->buffer .= $data;
if (false !== strpos($this->buffer, "\r\n\r\n")) {
list($request, $bodyBuffer) = $this->parseRequest($this->buffer);
$this->emit('headers', array($request, $bodyBuffer));
$this->removeAllListeners();
}
}
public function parseRequest($data)
{
list($headers, $bodyBuffer) = explode("\r\n\r\n", $data, 2);
$parser = new MessageParser();
$parsed = $parser->parseRequest($headers."\r\n\r\n");
$parsedQuery = array();
if ($parsed['request_url']['query']) {
parse_str($parsed['request_url']['query'], $parsedQuery);
}
$request = new Request(
$parsed['method'],
$parsed['request_url']['path'],
$parsedQuery,
$parsed['version'],
$parsed['headers']
);
return array($request, $bodyBuffer);
}
}