/// <summary> /// Creates, configures and processes an asynchronous request to the indicated resource. /// </summary> /// <returns>Task in which the request is executed</returns> /// <param name="request">Request provided by <see cref="System.Net.Http.HttpClient"/></param> /// <param name="cancellationToken">Cancellation token.</param> protected override async Task <HttpResponseMessage> SendAsync (HttpRequestMessage request, CancellationToken cancellationToken) { AssertSelf (); if (request == null) throw new ArgumentNullException (nameof (request)); if (!request.RequestUri.IsAbsoluteUri) throw new ArgumentException ("Must represent an absolute URI", "request"); /*using (*/java_url = new URL (request.RequestUri.ToString ());/*) {*/ /*using (*/java_connection = java_url.OpenConnection ();/*) {*/ HttpURLConnection httpConnection = SetupRequestInternal (request, java_connection); return await ProcessRequest (request, httpConnection, cancellationToken); /*} }*/ }
HttpURLConnection SetupRequestInternal (HttpRequestMessage request, URLConnection conn) { if (conn == null) throw new ArgumentNullException (nameof (conn)); var httpConnection = conn.JavaCast <HttpURLConnection> (); if (httpConnection == null) throw new InvalidOperationException ($"Unsupported URL scheme {conn.URL.Protocol}"); // SSL context must be set up as soon as possible, before adding any content or // headers. Otherwise Java won't use the socket factory SetupSSL (httpConnection as HttpsURLConnection); if (request.Content != null) AddHeaders (httpConnection, request.Content.Headers); AddHeaders (httpConnection, request.Headers); List <string> accept_encoding = null; decompress_here = false; if ((AutomaticDecompression & DecompressionMethods.GZip) != 0) { AppendEncoding (GZIP_ENCODING, ref accept_encoding); decompress_here = true; } if ((AutomaticDecompression & DecompressionMethods.Deflate) != 0) { AppendEncoding (DEFLATE_ENCODING, ref accept_encoding); decompress_here = true; } if (AutomaticDecompression == DecompressionMethods.None) { accept_encoding?.Clear (); AppendEncoding (IDENTITY_ENCODING, ref accept_encoding); // Turns off compression for the Java client } if (accept_encoding?.Count > 0) httpConnection.SetRequestProperty ("Accept-Encoding", String.Join (",", accept_encoding)); if (UseCookies && CookieContainer != null) { string cookieHeaderValue = CookieContainer.GetCookieHeader (request.RequestUri); if (!String.IsNullOrEmpty (cookieHeaderValue)) httpConnection.SetRequestProperty ("Cookie", cookieHeaderValue); } HandlePreAuthentication (httpConnection); SetupRequest (request, httpConnection); SetupRequestBody (httpConnection, request); return httpConnection; }
protected override void Dispose (bool disposing) { disposed = true; if (java_connection != null) { java_connection.Dispose (); java_connection = null; } if (java_url != null) { java_url.Dispose (); java_url = null; } base.Dispose (disposing); }