Exemple #1
0
        public static void Serialize(Stream s, XrdsDocument document)
        {
            Condition.Requires(s, "s").IsNotNull();
            Condition.Requires(document, "document").IsNotNull();

            lock (XrdsDocumentSerializer)
            {
                XrdsDocumentSerializer.Serialize(s, document);
            }
        }
Exemple #2
0
        public static XrdsDocument Deserialize(Stream s)
        {
            Condition.Requires(s, "s").IsNotNull();

            lock (XrdsDocumentSerializer)
            {
                XrdsDocument document = (XrdsDocument)XrdsDocumentSerializer.Deserialize(s);
                return(document);
            }
        }
Exemple #3
0
        private XrdsDocument GetYadisDocument(Uri url)
        {
            Trace += string.Format("Lookup URL {0}. ", url);

            // GET directly from URL
            HttpWebRequest request;

            try
            {
                request = (HttpWebRequest)HttpWebRequest.Create(url);
            }
            catch (Exception ex)
            {
                throw new YadisRequestFailedException(string.Format("Unable to build Yadis request. Got '{0}'. Tried: {1}.", ex.Message, Trace));
            }

            try
            {
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    if (response.Headers["X-XRDS-Location"] != null)
                    {
                        Trace += string.Format("Got X-XRDS-Location header {0}. ", response.Headers["X-XRDS-Location"]);
                        Uri location;
                        try
                        {
                            location = new Uri(response.Headers["X-XRDS-Location"]);
                        }
                        catch (Exception ex)
                        {
                            throw new YadisRequestFailedException(string.Format("Unable to discover Yadis URL {0}. Got '{1}'. Tried: {2}.", Url, ex.Message, Trace));
                        }
                        return(GetYadisDocument(location));
                    }
                    else if (response.ContentType.StartsWith("application/xrds+xml"))
                    {
                        Trace        += string.Format("Found Yadis document at {0}. ", url);
                        DiscoveredUrl = url;
                        try
                        {
                            using (Stream s = response.GetResponseStream())
                            {
                                return(XrdsDocument.Deserialize(s));
                            }
                        }
                        catch (Exception ex)
                        {
                            throw new YadisRequestFailedException(string.Format("Unable to deserialize Yadis document. Got '{0}'. Tried: {1}.", ex.Message, Trace));
                        }
                    }
                    else
                    {
                        Trace += string.Format("No X-XRDS-Location header or Yadis document found.");
                        throw new YadisRequestFailedException(string.Format("Unable to discover Yadis URL {0}. Tried: {1}.", Url, Trace));
                    }
                }
            }
            catch (WebException ex)
            {
                throw new YadisRequestFailedException(string.Format("Unable to get Yadis response. Got '{0}'. Tried: {1}.", ex.Message, Trace));
            }
        }