Ejemplo n.º 1
0
        /// <summary>
        /// This function will connect a stream to a uri (host and port),
        /// negotiating proxies and SSL
        /// </summary>
        /// <param name="uri"></param>
        /// <param name="timeout_ms">Timeout, in ms. 0 for no timeout.</param>
        /// <returns></returns>
        public static Stream ConnectStream(Uri uri, IWebProxy proxy, bool nodelay, int timeout_ms)
        {
            IMockWebProxy mockProxy = proxy != null ? proxy as IMockWebProxy : null;

            if (mockProxy != null)
            {
                return(mockProxy.GetStream(uri));
            }

            Stream stream;
            bool   useProxy = proxy != null && !proxy.IsBypassed(uri);

            if (useProxy)
            {
                Uri proxyURI = proxy.GetProxy(uri);
                stream = ConnectSocket(proxyURI, nodelay, timeout_ms);
            }
            else
            {
                stream = ConnectSocket(uri, nodelay, timeout_ms);
            }

            try
            {
                if (useProxy)
                {
                    string line = String.Format("CONNECT {0}:{1} HTTP/1.0", uri.Host, uri.Port);
                    WriteLine(line, stream);
                    WriteLine(stream);

                    List <string> initialResponse = new List <string>();
                    ReadHttpHeaders(ref stream, proxy, nodelay, timeout_ms, initialResponse);

                    AuthenticateProxy(ref stream, uri, proxy, nodelay, timeout_ms, initialResponse, line);
                }

                if (UseSSL(uri))
                {
                    SslStream sslStream = new SslStream(stream, false,
                                                        new RemoteCertificateValidationCallback(ValidateServerCertificate), null);
                    sslStream.AuthenticateAsClient("", null, SslProtocols.Tls | SslProtocols.Tls11 | SslProtocols.Tls12, true);

                    stream = sslStream;
                }

                return(stream);
            }
            catch
            {
                stream.Close();
                throw;
            }
        }
Ejemplo n.º 2
0
        public static Stream ConnectStream(Uri uri, IWebProxy proxy, bool nodelay, int timeout_ms)
        {
            Stream        stream;
            Stream        stream3;
            IMockWebProxy proxy2 = (proxy != null) ? (proxy as IMockWebProxy) : null;

            if (proxy2 != null)
            {
                return(proxy2.GetStream(uri));
            }
            bool flag = (proxy != null) && !proxy.IsBypassed(uri);

            if (flag)
            {
                stream = ConnectSocket(proxy.GetProxy(uri), nodelay, timeout_ms);
            }
            else
            {
                stream = ConnectSocket(uri, nodelay, timeout_ms);
            }
            try
            {
                if (flag)
                {
                    WriteLine(string.Format("CONNECT {0}:{1} HTTP/1.0", uri.Host, uri.Port), stream);
                    WriteLine(stream);
                    ReadHttpHeaders(ref stream, proxy, nodelay, timeout_ms);
                }
                if (UseSSL(uri))
                {
                    SslStream stream2 = new SslStream(stream, false, new RemoteCertificateValidationCallback(HTTP.ValidateServerCertificate), null);
                    stream2.AuthenticateAsClient("");
                    stream = stream2;
                }
                stream3 = stream;
            }
            catch
            {
                stream.Close();
                throw;
            }
            return(stream3);
        }