diff --git a/lib/linkheader.php b/lib/linkheader.php index efa3f65ff3..a08fb67116 100644 --- a/lib/linkheader.php +++ b/lib/linkheader.php @@ -1,6 +1,51 @@ . + * + * @category Discovery + * @package StatusNet + * @author James Walker + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Class to represent Link: headers in an HTTP response + * + * Since these are a fairly important part of Hammer-stack discovery, they're + * reified and implemented here. + * + * @category Discovery + * @package StatusNet + * @author James Walker + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + * + * @see Discovery */ class LinkHeader @@ -9,13 +54,21 @@ class LinkHeader var $rel; var $type; + /** + * Initialize from a string + * + * @param string $str Link: header value + * + * @return LinkHeader self + */ + function __construct($str) { preg_match('/^<[^>]+>/', $str, $uri_reference); //if (empty($uri_reference)) return; $this->href = trim($uri_reference[0], '<>'); - $this->rel = array(); + $this->rel = array(); $this->type = null; // remove uri-reference from header @@ -25,9 +78,12 @@ class LinkHeader $params = explode(';', $str); foreach ($params as $param) { - if (empty($param)) continue; + if (empty($param)) { + continue; + } list($param_name, $param_value) = explode('=', $param, 2); - $param_name = trim($param_name); + + $param_name = trim($param_name); $param_value = preg_replace('(^"|"$)', '', trim($param_value)); // for now we only care about 'rel' and 'type' link params @@ -43,6 +99,16 @@ class LinkHeader } } + /** + * Given an HTTP response, return the requested Link: header + * + * @param HTTP_Request2_Response $response response to check + * @param string $rel relationship to look for + * @param string $type media type to look for + * + * @return LinkHeader discovered header, or null on failure + */ + static function getLink($response, $rel=null, $type=null) { $headers = $response->getHeader('Link');