Exception
6 years ago
WebAuthException
6 years ago
certs
6 years ago
AppInfo.php
6 years ago
AppInfoLoadException.php
6 years ago
ArrayEntryStore.php
6 years ago
AuthBase.php
6 years ago
AuthInfo.php
6 years ago
AuthInfoLoadException.php
6 years ago
Checker.php
6 years ago
Client.php
6 years ago
Curl.php
6 years ago
CurlStreamRelay.php
6 years ago
DeserializeException.php
6 years ago
DropboxMetadataHeaderCatcher.php
6 years ago
Exception.php
6 years ago
Host.php
6 years ago
HttpResponse.php
6 years ago
OAuth1AccessToken.php
6 years ago
OAuth1Upgrader.php
6 years ago
Path.php
6 years ago
RequestUtil.php
6 years ago
RootCertificates.php
6 years ago
SSLTester.php
6 years ago
Security.php
6 years ago
StreamReadException.php
6 years ago
Util.php
6 years ago
ValueStore.php
6 years ago
WebAuth.php
6 years ago
WebAuthBase.php
6 years ago
WebAuthNoRedirect.php
6 years ago
WriteMode.php
6 years ago
autoload.php
6 years ago
strict.php
6 years ago
DropboxMetadataHeaderCatcher.php
84 lines
| 1 | <?php |
| 2 | namespace Dropbox; |
| 3 | |
| 4 | /** |
| 5 | * @internal |
| 6 | */ |
| 7 | final class DropboxMetadataHeaderCatcher |
| 8 | { |
| 9 | /** |
| 10 | * @var mixed |
| 11 | */ |
| 12 | var $metadata = null; |
| 13 | |
| 14 | /** |
| 15 | * @var string |
| 16 | */ |
| 17 | var $error = null; |
| 18 | |
| 19 | /** |
| 20 | * @var bool |
| 21 | */ |
| 22 | var $skippedFirstLine = false; |
| 23 | |
| 24 | /** |
| 25 | * @param resource $ch |
| 26 | */ |
| 27 | function __construct($ch) |
| 28 | { |
| 29 | curl_setopt($ch, CURLOPT_HEADERFUNCTION, array($this, 'headerFunction')); |
| 30 | } |
| 31 | |
| 32 | /** |
| 33 | * @param resource $ch |
| 34 | * @param string $header |
| 35 | * @return int |
| 36 | * @throws Exception_BadResponse |
| 37 | */ |
| 38 | function headerFunction($ch, $header) |
| 39 | { |
| 40 | // The first line is the HTTP status line (Ex: "HTTP/1.1 200 OK"). |
| 41 | if (!$this->skippedFirstLine) { |
| 42 | $this->skippedFirstLine = true; |
| 43 | return strlen($header); |
| 44 | } |
| 45 | |
| 46 | // If we've encountered an error on a previous callback, then there's nothing left to do. |
| 47 | if ($this->error !== null) { |
| 48 | return strlen($header); |
| 49 | } |
| 50 | |
| 51 | // case-insensitive starts-with check. |
| 52 | if (\substr_compare($header, "x-dropbox-metadata:", 0, 19, true) !== 0) { |
| 53 | return strlen($header); |
| 54 | } |
| 55 | |
| 56 | if ($this->metadata !== null) { |
| 57 | $this->error = "Duplicate X-Dropbox-Metadata header"; |
| 58 | return strlen($header); |
| 59 | } |
| 60 | |
| 61 | $headerValue = substr($header, 19); |
| 62 | $parsed = json_decode($headerValue, true, 10); |
| 63 | |
| 64 | if ($parsed === null) { |
| 65 | $this->error = "Bad JSON in X-Dropbox-Metadata header"; |
| 66 | return strlen($header); |
| 67 | } |
| 68 | |
| 69 | $this->metadata = $parsed; |
| 70 | return strlen($header); |
| 71 | } |
| 72 | |
| 73 | function getMetadata() |
| 74 | { |
| 75 | if ($this->error !== null) { |
| 76 | throw new Exception_BadResponse($this->error); |
| 77 | } |
| 78 | if ($this->metadata === null) { |
| 79 | throw new Exception_BadResponse("Missing X-Dropbox-Metadata header"); |
| 80 | } |
| 81 | return $this->metadata; |
| 82 | } |
| 83 | } |
| 84 |