diff options
author | Evan Prodromou <evan@status.net> | 2010-03-16 11:25:18 -0500 |
---|---|---|
committer | Evan Prodromou <evan@status.net> | 2010-03-16 11:25:18 -0500 |
commit | f21f78364a9cbde2ca535a3983b384707ad097ae (patch) | |
tree | a9e0836d7aaa42d7a0f272213d11cbccef9e354b /plugins/OStatus/lib/linkheader.php | |
parent | c1e96cbdefa66e66815c421378b9452d7c8d5548 (diff) |
Change the workflow to get better discovery
Tried to re-structure the workflow of discovery to get more and richer
data and hints.
Diffstat (limited to 'plugins/OStatus/lib/linkheader.php')
-rw-r--r-- | plugins/OStatus/lib/linkheader.php | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/plugins/OStatus/lib/linkheader.php b/plugins/OStatus/lib/linkheader.php new file mode 100644 index 000000000..2f6c66dc9 --- /dev/null +++ b/plugins/OStatus/lib/linkheader.php @@ -0,0 +1,63 @@ +<?php + +class LinkHeader +{ + var $href; + var $rel; + var $type; + + function __construct($str) + { + preg_match('/^<[^>]+>/', $str, $uri_reference); + //if (empty($uri_reference)) return; + + $this->uri = trim($uri_reference[0], '<>'); + $this->rel = array(); + $this->type = null; + + // remove uri-reference from header + $str = substr($str, strlen($uri_reference[0])); + + // parse link-params + $params = explode(';', $str); + + foreach ($params as $param) { + if (empty($param)) continue; + list($param_name, $param_value) = explode('=', $param, 2); + $param_name = trim($param_name); + $param_value = preg_replace('(^"|"$)', '', trim($param_value)); + + // for now we only care about 'rel' and 'type' link params + // TODO do something with the other links-params + switch ($param_name) { + case 'rel': + $this->rel = trim($param_value); + break; + + case 'type': + $this->type = trim($param_value); + } + } + } + + static function getLink($response, $rel=null, $type=null) + { + $headers = $response->getHeader('Link'); + + // Can get an array or string, so try to simplify the path + if (!is_array($headers)) { + $headers = array($headers); + } + + foreach ($headers as $header) { + $lh = new LinkHeader($header); + + if ((is_null($rel) || $lh->rel == $rel) && + (is_null($type) || $lh->type == $type)) { + return $lh->href; + } + } + + return null; + } +}
\ No newline at end of file |