private void ParseFeedDoc(XmlDocument xmlDoc, Uri baseUri, bool includeTitle, ref string homepageUrl, ref string title) { if (includeTitle) { XmlElement titleEl = xmlDoc.SelectSingleNodeNS(@"atom:feed/atom:title", _nsMgr.ToNSMethodFormat()) as XmlElement; if (titleEl != null) { title = _atomVer.TextNodeToPlaintext(titleEl); } } foreach (XmlElement linkEl in xmlDoc.SelectNodesNS(@"atom:feed/atom:link[@rel='alternate']", _nsMgr.ToNSMethodFormat())) { IDictionary contentTypeInfo = MimeHelper.ParseContentType(linkEl.GetAttribute("type"), true); switch (contentTypeInfo[""] as string) { case "text/html": case "application/xhtml+xml": homepageUrl = XmlHelper.GetUrl(linkEl, "@href", baseUri); return; } } }
protected async Task <BlogInfo[]> GetUsersBlogsInternal() { XmlRestRequestHelper.XmlRequestResult xmlResult = new XmlRestRequestHelper.XmlRequestResult(); xmlResult.uri = FeedServiceUrl; XmlDocument xmlDoc = await xmlRestRequestHelper.Get(RequestFilter, xmlResult); // Either the FeedServiceUrl points to a service document OR a feed. if (xmlDoc.SelectSingleNodeNS("/app:service", _nsMgr.ToNSMethodFormat()) != null) { ArrayList blogInfos = new ArrayList(); foreach (XmlElement coll in xmlDoc.SelectNodesNS("/app:service/app:workspace/app:collection", _nsMgr.ToNSMethodFormat())) { bool promote = ShouldPromote(coll); // does this collection accept entries? XmlNodeList acceptNodes = coll.SelectNodesNS("app:accept", _nsMgr.ToNSMethodFormat()); bool acceptsEntries = false; if (acceptNodes.Count == 0) { acceptsEntries = true; } else { foreach (XmlElement acceptNode in acceptNodes) { if (AcceptsEntry(acceptNode.InnerText)) { acceptsEntries = true; break; } } } if (acceptsEntries) { string feedUrl = XmlHelper.GetUrl(coll, "@href", xmlResult.uri); if (feedUrl == null || feedUrl.Length == 0) { continue; } // form title StringBuilder titleBuilder = new StringBuilder(); foreach (XmlElement titleContainerNode in new XmlElement[] { coll.ParentNode as XmlElement, coll }) { Debug.Assert(titleContainerNode != null); if (titleContainerNode != null) { XmlElement titleNode = titleContainerNode.SelectSingleNodeNS("atom:title", _nsMgr.ToNSMethodFormat()) as XmlElement; if (titleNode != null) { string titlePart = _atomVer.TextNodeToPlaintext(titleNode); if (titlePart.Length != 0) { //Res.LOCME("loc the separator between parts of the blog name"); if (titleBuilder.Length != 0) { titleBuilder.Append(" - "); } titleBuilder.Append(titlePart); } } } } // get homepage URL string homepageUrl = ""; string dummy = ""; XmlRestRequestHelper.XmlRequestResult xmlResult2 = new XmlRestRequestHelper.XmlRequestResult(); xmlResult2.uri = new Uri(feedUrl); XmlDocument feedDoc = await xmlRestRequestHelper.Get(RequestFilter, xmlResult2); ParseFeedDoc(feedDoc, xmlResult2.uri, false, ref homepageUrl, ref dummy); // TODO: Sniff out the homepage URL BlogInfo blogInfo = new BlogInfo(feedUrl, titleBuilder.ToString().Trim(), homepageUrl); if (promote) { blogInfos.Insert(0, blogInfo); } else { blogInfos.Add(blogInfo); } } } return((BlogInfo[])blogInfos.ToArray(typeof(BlogInfo))); } else { string title = string.Empty; string homepageUrl = string.Empty; ParseFeedDoc(xmlDoc, xmlResult.uri, true, ref homepageUrl, ref title); return(new BlogInfo[] { new BlogInfo(UrlHelper.SafeToAbsoluteUri(FeedServiceUrl), title, homepageUrl) }); } }
internal async Task<IList<Camera>> probeTask() { var cameras = new List<Camera>(); var cameraAddressMap = new Dictionary<string, Camera>(); listener.MessageReceived += (DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args) => { try { var reader = args.GetDataReader(); var bytesRemaining = reader.UnconsumedBufferLength; var receivedString = reader.ReadString(bytesRemaining); var soapEnvelope = new XmlDocument(); soapEnvelope.LoadXml(receivedString); //var probeMatches = soapEnvelope.GetElementsByTagName("wsdd:ProbeMatch"); var probeMatches = soapEnvelope.SelectNodesNS("//wsdd:ProbeMatch", "xmlns:wsdd='http://schemas.xmlsoap.org/ws/2005/04/discovery'"); foreach (var probeMatch in probeMatches) { Debug.WriteLine(probeMatch.GetXml()); var endpointAddressNode = probeMatch.SelectSingleNodeNS("wsa:EndpointReference/wsa:Address", "xmlns:wsdd='http://schemas.xmlsoap.org/ws/2005/04/discovery' xmlns:wsa='http://schemas.xmlsoap.org/ws/2004/08/addressing'"); var xAddressNode = probeMatch.SelectSingleNodeNS("wsdd:XAddrs", "xmlns:wsdd='http://schemas.xmlsoap.org/ws/2005/04/discovery' xmlns:wsa='http://schemas.xmlsoap.org/ws/2004/08/addressing'"); var cameraAddress = endpointAddressNode.InnerText; var cameraUri = xAddressNode.InnerText; if (!cameraAddressMap.ContainsKey(cameraAddress)) { var uri = new Uri(cameraUri); var cameraInstance = new Camera(cameraAddress, uri); cameras.Add(cameraInstance); cameraAddressMap.Add(cameraAddress, cameraInstance); } } } catch (Exception e) { Debug.WriteLine(e.Message + "\n" + e.StackTrace); } }; await listener.BindEndpointAsync(null, string.Empty); var ssdp = new Windows.Networking.HostName("239.255.255.250"); listener.JoinMulticastGroup(ssdp); using (var stream = await listener.GetOutputStreamAsync(ssdp, "3702")) { using (var writer = new DataWriter(stream)) { string req = GetRequestString(); writer.WriteString(req); await writer.StoreAsync(); await Task.Delay(5000); } } return cameras; }