function generateResult($base_url, $input_name, $id_name, $result_name, $success)
{
    $input_url = $base_url . $input_name;
    // urlparse.urljoin(base_url, input_name)
    // If the name is null then we expect the protocol to fail, which
    // we represent by null
    if ($id_name === null) {
        // assert result_name is null
        return array($input_url, null);
        // DiscoveryFailure
    }
    $result = generateSample($result_name, $base_url);
    list($headers, $content) = explode("\n\n", $result, 2);
    $header_lines = explode("\n", $headers);
    $ctype = null;
    foreach ($header_lines as $header_line) {
        if (strpos($header_line, 'Content-Type:') === 0) {
            list($temp, $ctype) = explode(":", $header_line, 2);
            $ctype = trim($ctype);
            break;
        }
    }
    $id_url = $base_url . $id_name;
    $result = new Auth_Yadis_Yadis();
    $result->uri = $id_url;
    if ($success) {
        $result->xrds_uri = $base_url . $result_name;
    } else {
        $result->xrds_uri = null;
    }
    $result->content_type = $ctype;
    $result->body = $content;
    return array($input_url, $result);
}
 function get($url, $headers = null)
 {
     $current_url = $url;
     while (true) {
         $parsed = parse_url($current_url);
         $path = substr($parsed['path'], 1);
         $data = generateSample($path, $this->base_url);
         if ($data === null) {
             return new Auth_Yadis_HTTPResponse($current_url, 404, array(), '');
         }
         $response = mkResponse($data);
         if (in_array($response->status, array(301, 302, 303, 307))) {
             $current_url = $response->headers['location'];
         } else {
             $response->final_url = $current_url;
             return $response;
         }
     }
 }