private static void SetCookies(IEnumerable <string> values, TcpResponseMessage response, TcpClientMessageHandler handler) { if (!response._handler.UseCookies) { return; } foreach (var value in values) { response._handler.CookieContainer.SetCookies(response._requestUri, value); } }
protected async Task <HttpResponseMessage> InternalSendAsync(HttpRequestMessage request, HttpMethod requestMethod, Uri requestUri, CancellationToken cancellationToken, bool forceRecreate) { var useSsl = string.Equals(requestUri.Scheme, "https", StringComparison.OrdinalIgnoreCase); var destinationAddress = new SocksAddress(requestUri); switch (destinationAddress.HostNameType) { case EndPointType.IPv4: // All SOCKS implementations support IPv4 break; case EndPointType.IPv6: if ((AddressCompatibility & AddressCompatibility.SupportsIPv6) != AddressCompatibility.SupportsIPv6) { throw new NotSupportedException(); } break; case EndPointType.HostName: if ((AddressCompatibility & AddressCompatibility.SupportsHost) != AddressCompatibility.SupportsHost) { destinationAddress = await ResolveHostName(destinationAddress); if (destinationAddress == null) { throw new NotSupportedException(); } } break; } if (ResolveHost && destinationAddress.HostNameType == EndPointType.HostName) { destinationAddress = await ResolveHostName(destinationAddress) ?? destinationAddress; } var client = CreateClient(request, destinationAddress, useSsl, cancellationToken, forceRecreate); try { client.Timeout = Timeout; client.ReadWriteTimeout = ReadWriteTimeout; await client.Open(cancellationToken); var stream = client.GetStream(); await ValidateHeader(request); // Send request await WriteRequestHeader(stream, request, requestMethod, requestUri, cancellationToken); await WriteContent(stream, request, cancellationToken); await stream.FlushAsync(cancellationToken); if (UseCookies && CookieContainer == null) { CookieContainer = new CookieContainer(); } // Parse response var response = new TcpResponseMessage(client, request, requestUri, this); await response.Parse(cancellationToken); OnResponseReceived(response); return(response); } catch { client.Dispose(); throw; } }