Skip to content

Commit d40bb46

Browse files
authored
Merge pull request #157 from clue-labs/options
Support asterisk-form request target for OPTIONS method
2 parents 34edb9a + 05786a0 commit d40bb46

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

src/RequestHeaderParser.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,20 @@ private function parseRequest($data)
5555
{
5656
list($headers, $bodyBuffer) = explode("\r\n\r\n", $data, 2);
5757

58+
$asterisk = false;
59+
if (strpos($headers, 'OPTIONS * ') === 0) {
60+
$asterisk = true;
61+
$headers = 'OPTIONS / ' . substr($headers, 10);
62+
}
63+
5864
$request = g7\parse_request($headers);
5965

66+
if ($asterisk) {
67+
$request = $request->withUri(
68+
$request->getUri()->withPath('')
69+
)->withRequestTarget('*');
70+
}
71+
6072
return array($request, $bodyBuffer);
6173
}
6274
}

tests/ServerTest.php

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,31 @@ function ($data) use (&$buffer) {
9898

9999
$this->assertSame(1, $i);
100100
$this->assertInstanceOf('RingCentral\Psr7\Request', $requestAssertion);
101-
$this->assertSame('/', $requestAssertion->getUri()->getPath());
102101
$this->assertSame('GET', $requestAssertion->getMethod());
102+
$this->assertSame('/', $requestAssertion->getRequestTarget());
103+
$this->assertSame('/', $requestAssertion->getUri()->getPath());
104+
$this->assertSame('http://example.com/', (string)$requestAssertion->getUri());
103105
$this->assertSame('127.0.0.1', $requestAssertion->remoteAddress);
106+
}
107+
108+
public function testRequestOptionsAsterisk()
109+
{
110+
$requestAssertion = null;
111+
$server = new Server($this->socket, function ($request) use (&$requestAssertion) {
112+
$requestAssertion = $request;
113+
return new Response();
114+
});
115+
116+
$this->socket->emit('connection', array($this->connection));
104117

118+
$data = "OPTIONS * HTTP/1.1\r\nHost: example.com\r\n\r\n";
119+
$this->connection->emit('data', array($data));
120+
121+
$this->assertInstanceOf('RingCentral\Psr7\Request', $requestAssertion);
122+
$this->assertSame('OPTIONS', $requestAssertion->getMethod());
123+
$this->assertSame('*', $requestAssertion->getRequestTarget());
124+
$this->assertSame('', $requestAssertion->getUri()->getPath());
125+
$this->assertSame('http://example.com', (string)$requestAssertion->getUri());
105126
}
106127

107128
public function testRequestPauseWillbeForwardedToConnection()

0 commit comments

Comments
 (0)