From c0ad3684863649a02a53ec7e462af248acaf1bd7 Mon Sep 17 00:00:00 2001 From: Jens Geyer Date: Thu, 8 May 2014 22:31:34 +0200 Subject: [PATCH] THRIFT-2455 Allow client certificates to be used with THttpClient Client: C# Patch: Adam Connelly & Jens Geyer This closes #96 commit a87068655a3d31e2f85e5630462dd174b02f43c6 Author: Adam Connelly Date: 2014-04-09T12:06:20Z THRIFT-2455: Allow client certificates to be used with THttpClient --- lib/csharp/src/Transport/THttpClient.cs | 33 ++++++++++++++++++------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/lib/csharp/src/Transport/THttpClient.cs b/lib/csharp/src/Transport/THttpClient.cs index d19b7a76..2acf4683 100644 --- a/lib/csharp/src/Transport/THttpClient.cs +++ b/lib/csharp/src/Transport/THttpClient.cs @@ -24,32 +24,42 @@ using System.Collections.Generic; using System.IO; using System.Net; using System.Threading; +using System.Linq; +using System.Security.Cryptography.X509Certificates; namespace Thrift.Transport { - public class THttpClient : TTransport, IDisposable - { - private readonly Uri uri; - private Stream inputStream; - private MemoryStream outputStream = new MemoryStream(); + + public class THttpClient : TTransport, IDisposable + { + private readonly Uri uri; + private readonly X509Certificate[] certificates; + private Stream inputStream; + private MemoryStream outputStream = new MemoryStream(); // Timeouts in milliseconds private int connectTimeout = 30000; private int readTimeout = 30000; - private IDictionary customHeaders = new Dictionary(); + private IDictionary customHeaders = new Dictionary(); #if !SILVERLIGHT private IWebProxy proxy = WebRequest.DefaultWebProxy; #endif - public THttpClient(Uri u) + public THttpClient(Uri u) + : this(u, Enumerable.Empty()) { - uri = u; } - public int ConnectTimeout + public THttpClient(Uri u, IEnumerable certificates) + { + uri = u; + this.certificates = (certificates ?? Enumerable.Empty()).ToArray(); + } + + public int ConnectTimeout { set { @@ -180,7 +190,12 @@ namespace Thrift.Transport { HttpWebRequest connection = (HttpWebRequest)WebRequest.Create(uri); + #if !SILVERLIGHT + // Adding certificates through code is not supported with WP7 Silverlight + // see "Windows Phone 7 and Certificates_FINAL_121610.pdf" + connection.ClientCertificates.AddRange(certificates); + if (connectTimeout > 0) { connection.Timeout = connectTimeout; -- 2.17.1