// As client private void sendProxyConnectRequest () { var req = HttpRequest.CreateConnectRequest (_uri); var res = sendHttpRequest (req, 90000); if (res.IsProxyAuthenticationRequired) { var chal = res.Headers["Proxy-Authenticate"]; _logger.Warn ( String.Format ("Received a proxy authentication requirement for '{0}'.", chal)); if (chal.IsNullOrEmpty ()) throw new WebSocketException ("No proxy authentication challenge is specified."); var authChal = AuthenticationChallenge.Parse (chal); if (authChal == null) throw new WebSocketException ("An invalid proxy authentication challenge is specified."); if (_proxyCredentials != null) { if (res.HasConnectionClose) { releaseClientResources (); _tcpClient = new TcpClient (_proxyUri.DnsSafeHost, _proxyUri.Port); _stream = _tcpClient.GetStream (); } var authRes = new AuthenticationResponse (authChal, _proxyCredentials, 0); req.Headers["Proxy-Authorization"] = authRes.ToString (); res = sendHttpRequest (req, 15000); } if (res.IsProxyAuthenticationRequired) throw new WebSocketException ("A proxy authentication is required."); } if (res.StatusCode[0] != '2') throw new WebSocketException ( "The proxy has failed a connection to the requested host and port."); }
// As client private HttpResponse sendHandshakeRequest () { var req = createHandshakeRequest (); var res = sendHttpRequest (req, 90000); if (res.IsUnauthorized) { var chal = res.Headers["WWW-Authenticate"]; _logger.Warn (String.Format ("Received an authentication requirement for '{0}'.", chal)); if (chal.IsNullOrEmpty ()) { _logger.Error ("No authentication challenge is specified."); return res; } _authChallenge = AuthenticationChallenge.Parse (chal); if (_authChallenge == null) { _logger.Error ("An invalid authentication challenge is specified."); return res; } if (_credentials != null && (!_preAuth || _authChallenge.Scheme == AuthenticationSchemes.Digest)) { if (res.HasConnectionClose) { releaseClientResources (); setClientStream (); } var authRes = new AuthenticationResponse (_authChallenge, _credentials, _nonceCount); _nonceCount = authRes.NonceCount; req.Headers["Authorization"] = authRes.ToString (); res = sendHttpRequest (req, 15000); } } if (res.IsRedirect) { var url = res.Headers["Location"]; _logger.Warn (String.Format ("Received a redirection to '{0}'.", url)); if (_enableRedirection) { if (url.IsNullOrEmpty ()) { _logger.Error ("No url to redirect is located."); return res; } Uri uri; string msg; if (!url.TryCreateWebSocketUri (out uri, out msg)) { _logger.Error ("An invalid url to redirect is located: " + msg); return res; } releaseClientResources (); _uri = uri; _secure = uri.Scheme == "wss"; setClientStream (); return sendHandshakeRequest (); } } return res; }