• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • Examples
  • File List
  • Globals

cms/openid/Services/Yadis/Yadis.php

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             // Treat the body as HTML and look for a META tag.
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 ?>

Generated on Sun Jan 2 2011 04:55:32 for Pragyan CMS by  doxygen 1.7.1