Go to the documentation of this file.00001 <?php
00002
00020 require_once "Services/Yadis/PlainHTTPFetcher.php";
00021 require_once "Services/Yadis/ParanoidHTTPFetcher.php";
00022
00026 require_once "Services/Yadis/ParseHTML.php";
00027
00031 require_once "Services/Yadis/XRDS.php";
00032
00114 class Services_Yadis_Yadis {
00115
00122 function getHTTPFetcher($timeout = 20)
00123 {
00124 if (defined('Services_Yadis_CURL_PRESENT') &&
00125 Services_Yadis_CURL_PRESENT) {
00126 $fetcher = new Services_Yadis_ParanoidHTTPFetcher($timeout);
00127 } else {
00128 $fetcher = new Services_Yadis_PlainHTTPFetcher($timeout);
00129 }
00130 return $fetcher;
00131 }
00132
00136 function _getHeader($header_list, $names)
00137 {
00138 foreach ($header_list as $name => $value) {
00139 foreach ($names as $n) {
00140 if (strtolower($name) == strtolower($n)) {
00141 return $value;
00142 }
00143 }
00144 }
00145
00146 return null;
00147 }
00148
00152 function _getContentType($content_type_header)
00153 {
00154 if ($content_type_header) {
00155 $parts = explode(";", $content_type_header);
00156 return strtolower($parts[0]);
00157 }
00158 }
00159
00184 function discover($uri, &$http_response, &$fetcher,
00185 $extra_ns_map = null, $timeout = 20)
00186 {
00187 if (!$uri) {
00188 return null;
00189 }
00190
00191 $request_uri = $uri;
00192 $headers = array("Accept: application/xrds+xml");
00193
00194 if (!$fetcher) {
00195 $fetcher = Services_Yadis_Yadis::getHTTPFetcher($timeout);
00196 }
00197
00198 $response = $fetcher->get($uri, $headers);
00199 $http_response = $response;
00200
00201 if (!$response) {
00202 return null;
00203 }
00204
00205 if ($response->status != 200) {
00206 return null;
00207 }
00208
00209 $xrds_uri = $response->final_url;
00210 $uri = $response->final_url;
00211 $body = $response->body;
00212
00213 $xrds_header_uri = Services_Yadis_Yadis::_getHeader(
00214 $response->headers,
00215 array('x-xrds-location',
00216 'x-yadis-location'));
00217
00218 $content_type = Services_Yadis_Yadis::_getHeader($response->headers,
00219 array('content-type'));
00220
00221 if ($xrds_header_uri) {
00222 $xrds_uri = $xrds_header_uri;
00223 $response = $fetcher->get($xrds_uri);
00224 $http_response = $response;
00225 if (!$response) {
00226 return null;
00227 } else {
00228 $body = $response->body;
00229 $headers = $response->headers;
00230 $content_type = Services_Yadis_Yadis::_getHeader($headers,
00231 array('content-type'));
00232 }
00233 }
00234
00235 if (Services_Yadis_Yadis::_getContentType($content_type) !=
00236 'application/xrds+xml') {
00237
00238 $parser = new Services_Yadis_ParseHTML();
00239 $new_uri = $parser->getHTTPEquiv($body);
00240 $xrds_uri = null;
00241 if ($new_uri) {
00242 $response = $fetcher->get($new_uri);
00243 if ($response->status != 200) {
00244 return null;
00245 }
00246 $http_response = $response;
00247 $body = $response->body;
00248 $xrds_uri = $new_uri;
00249 $content_type = Services_Yadis_Yadis::_getHeader(
00250 $response->headers,
00251 array('content-type'));
00252 }
00253 }
00254
00255 $xrds = Services_Yadis_XRDS::parseXRDS($body, $extra_ns_map);
00256
00257 if ($xrds !== null) {
00258 $y = new Services_Yadis_Yadis();
00259
00260 $y->request_uri = $request_uri;
00261 $y->xrds = $xrds;
00262 $y->uri = $uri;
00263 $y->xrds_uri = $xrds_uri;
00264 $y->body = $body;
00265 $y->content_type = $content_type;
00266
00267 return $y;
00268 } else {
00269 return null;
00270 }
00271 }
00272
00281 function Services_Yadis_Yadis()
00282 {
00283 $this->request_uri = null;
00284 $this->uri = null;
00285 $this->xrds = null;
00286 $this->xrds_uri = null;
00287 $this->body = null;
00288 $this->content_type = null;
00289 }
00290
00299 function services()
00300 {
00301 if ($this->xrds) {
00302 return $this->xrds->services();
00303 }
00304
00305 return null;
00306 }
00307 }
00308
00309 ?>