public XmlStream(Stream stream) { Stream = new LoggedStream(stream); Stream.Logged = true; Stream.ReadTimeout = Timeout.Infinite; Stream.WriteTimeout = Timeout.Infinite; _Reader = new Lazy <XmlReader>(() => XmlTextReader.Create( Stream, new XmlReaderSettings { CloseInput = false } ) ); _Writer = new Lazy <XmlWriter>(() => XmlWriter.Create( Stream, new XmlWriterSettings { ConformanceLevel = System.Xml.ConformanceLevel.Fragment, OmitXmlDeclaration = true, CloseOutput = false } ) ); }
protected static Stream Connect(string Host, int Port, string ProxyHost = null, int ProxyPort = 0) { if (ProxyHost != null && ProxyPort != 0) { var client = new TcpClient(); client.Connect(ProxyHost, ProxyPort); var stream = client.GetStream(); var requestbytes = Encoding.ASCII.GetBytes(String.Format("CONNECT {0}:{1} HTTP/1.1\r\nHost: {0}:{1}\r\nProxy-Connection: keep-alive\r\n\r\n", Host, Port)); LoggedStream.LogOutput(requestbytes, 0, requestbytes.Length); stream.Write(requestbytes, 0, requestbytes.Length); var responsebytes = new byte[65536]; var pos = 0; var len = 0; while ((len = stream.Read(responsebytes, pos, responsebytes.Length - pos)) != 0) { pos += len; LoggedStream.LogInput(responsebytes, 0, pos); var response = Encoding.ASCII.GetString(responsebytes, 0, pos).Replace("\r", "").Split('\n').ToArray(); if (response.Length < 2) { continue; } if (response[response.Length - 1] != "") { continue; } var responsestatus = response[0].Split(new char[] { ' ' }, 3); if (responsestatus.Length < 2) { throw new WebException("Invalid Response Status Line " + response[0], WebExceptionStatus.ProtocolError); } if (!responsestatus[0].StartsWith("HTTP")) { throw new WebException("Invalid Protocol " + responsestatus[0], WebExceptionStatus.ProtocolError); } if (responsestatus[1] != "200") { throw new WebException(responsestatus[2], WebExceptionStatus.ConnectionClosed); } return(stream); } throw new WebException(String.Format("Connection Closed Prematurely after reading {0} bytes", pos), WebExceptionStatus.ConnectionClosed); } else { return(new TcpClient(Host, Port).GetStream()); } }
public XmlStream(Stream stream) { Stream = new LoggedStream(stream); Stream.Logged = true; Stream.ReadTimeout = Timeout.Infinite; Stream.WriteTimeout = Timeout.Infinite; _Reader = new Lazy<XmlReader>(() => XmlTextReader.Create( Stream, new XmlReaderSettings { CloseInput = false } ) ); _Writer = new Lazy<XmlWriter>(() => XmlWriter.Create( Stream, new XmlWriterSettings { ConformanceLevel = System.Xml.ConformanceLevel.Fragment, OmitXmlDeclaration = true, CloseOutput = false } ) ); }