You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by je...@apache.org on 2014/10/03 20:13:28 UTC

[07/10] THRIFT-2768: Whitespace Fixup Client: C#, Delphi Patch: Jens Geyer

http://git-wip-us.apache.org/repos/asf/thrift/blob/d5436f5c/lib/csharp/src/Transport/TTLSSocket.cs
----------------------------------------------------------------------
diff --git a/lib/csharp/src/Transport/TTLSSocket.cs b/lib/csharp/src/Transport/TTLSSocket.cs
index b87576d..9e1f9f2 100644
--- a/lib/csharp/src/Transport/TTLSSocket.cs
+++ b/lib/csharp/src/Transport/TTLSSocket.cs
@@ -25,276 +25,276 @@ using System.Security.Cryptography.X509Certificates;
 
 namespace Thrift.Transport
 {
-	/// <summary>
-	/// SSL Socket Wrapper class
-	/// </summary>
-	public class TTLSSocket : TStreamTransport
-	{
-		/// <summary>
-		/// Internal TCP Client
-		/// </summary>
-		private TcpClient client = null;
-
-		/// <summary>
-		/// The host
-		/// </summary>
-		private string host = null;
-
-		/// <summary>
-		/// The port
-		/// </summary>
-		private int port = 0;
-
-		/// <summary>
-		/// The timeout for the connection
-		/// </summary>
-		private int timeout = 0;
-
-		/// <summary>
-		/// Internal SSL Stream for IO
-		/// </summary>
-		private SslStream secureStream = null;
-
-		/// <summary>
-		/// Defines wheter or not this socket is a server socket<br/>
-		/// This is used for the TLS-authentication
-		/// </summary>
-		private bool isServer = false;
-
-		/// <summary>
-		/// The certificate
-		/// </summary>
-		private X509Certificate certificate = null;
-
-		/// <summary>
-		/// User defined certificate validator.
-		/// </summary>
-		private RemoteCertificateValidationCallback certValidator = null;
-
-		/// <summary>
-		/// Initializes a new instance of the <see cref="TTLSSocket"/> class.
-		/// </summary>
-		/// <param name="client">An already created TCP-client</param>
-		/// <param name="certificate">The certificate.</param>
-		/// <param name="isServer">if set to <c>true</c> [is server].</param>
-		public TTLSSocket(TcpClient client, X509Certificate certificate, bool isServer = false)
-		{
-			this.client = client;
-			this.certificate = certificate;
-			this.isServer = isServer;
-
-			if (IsOpen)
-			{
-				base.inputStream = client.GetStream();
-				base.outputStream = client.GetStream();
-			}
-		}
-
-		/// <summary>
-		/// Initializes a new instance of the <see cref="TTLSSocket"/> class.
-		/// </summary>
-		/// <param name="host">The host, where the socket should connect to.</param>
-		/// <param name="port">The port.</param>
-		/// <param name="certificatePath">The certificate path.</param>
-		/// <param name="certValidator">User defined cert validator.</param>
-		public TTLSSocket(string host, int port, string certificatePath, RemoteCertificateValidationCallback certValidator = null)
-			: this(host, port, 0, X509Certificate.CreateFromCertFile(certificatePath), certValidator)
-		{
-		}
-
-		/// <summary>
-		/// Initializes a new instance of the <see cref="TTLSSocket"/> class.
-		/// </summary>
-		/// <param name="host">The host, where the socket should connect to.</param>
-		/// <param name="port">The port.</param>
-		/// <param name="certificate">The certificate.</param>
-		/// <param name="certValidator">User defined cert validator.</param>
-		public TTLSSocket(string host, int port, X509Certificate certificate, RemoteCertificateValidationCallback certValidator = null)
-			: this(host, port, 0, certificate, certValidator)
-		{
-		}
-
-		/// <summary>
-		/// Initializes a new instance of the <see cref="TTLSSocket"/> class.
-		/// </summary>
-		/// <param name="host">The host, where the socket should connect to.</param>
-		/// <param name="port">The port.</param>
-		/// <param name="timeout">The timeout.</param>
-		/// <param name="certificate">The certificate.</param>
-		/// <param name="certValidator">User defined cert validator.</param>
-		public TTLSSocket(string host, int port, int timeout, X509Certificate certificate, RemoteCertificateValidationCallback certValidator = null)
-		{
-			this.host = host;
-			this.port = port;
-			this.timeout = timeout;
-			this.certificate = certificate;
-			this.certValidator = certValidator;
-
-			InitSocket();
-		}
-
-		/// <summary>
-		/// Creates the TcpClient and sets the timeouts
-		/// </summary>
-		private void InitSocket()
-		{
-			this.client = new TcpClient();
-			client.ReceiveTimeout = client.SendTimeout = timeout;
-			client.Client.NoDelay = true;
-		}
-
-		/// <summary>
-		/// Sets Send / Recv Timeout for IO
-		/// </summary>
-		public int Timeout
-		{
-			set
-			{
-				this.client.ReceiveTimeout = this.client.SendTimeout = this.timeout = value;
-			}
-		}
-
-		/// <summary>
-		/// Gets the TCP client.
-		/// </summary>
-		public TcpClient TcpClient
-		{
-			get
-			{
-				return client;
-			}
-		}
-
-		/// <summary>
-		/// Gets the host.
-		/// </summary>
-		public string Host
-		{
-			get
-			{
-				return host;
-			}
-		}
-
-		/// <summary>
-		/// Gets the port.
-		/// </summary>
-		public int Port
-		{
-			get
-			{
-				return port;
-			}
-		}
-
-		/// <summary>
-		/// Gets a value indicating whether TCP Client is Cpen 
-		/// </summary>
-		public override bool IsOpen
-		{
-			get
-			{
-				if (this.client == null)
-				{
-					return false;
-				}
-
-				return this.client.Connected;
-			}
-		}
-
-		/// <summary>
-		/// Validates the certificates!<br/>
-		/// </summary>
-		/// <param name="sender">The sender-object.</param>
-		/// <param name="certificate">The used certificate.</param>
-		/// <param name="chain">The certificate chain.</param>
-		/// <param name="sslPolicyErrors">An enum, which lists all the errors from the .NET certificate check.</param>
-		/// <returns></returns>
-		private bool CertificateValidator(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslValidationErrors)
-		{
-			return (sslValidationErrors == SslPolicyErrors.None);
-		}
-
-		/// <summary>
-		/// Connects to the host and starts the routine, which sets up the TLS
-		/// </summary>
-		public override void Open()
-		{
-			if (IsOpen)
-			{
-				throw new TTransportException(TTransportException.ExceptionType.AlreadyOpen, "Socket already connected");
-			}
-
-			if (String.IsNullOrEmpty(host))
-			{
-				throw new TTransportException(TTransportException.ExceptionType.NotOpen, "Cannot open null host");
-			}
-
-			if (port <= 0)
-			{
-				throw new TTransportException(TTransportException.ExceptionType.NotOpen, "Cannot open without port");
-			}
-
-			if (client == null)
-			{
-				InitSocket();
-			}
-
-			client.Connect(host, port);
-
-			setupTLS();
-		}
-
-		/// <summary>
-		/// Creates a TLS-stream and lays it over the existing socket
-		/// </summary>
-		public void setupTLS()
-		{
-			if (isServer)
-			{
-				// Server authentication
-				this.secureStream = new SslStream(this.client.GetStream(), false);
-				this.secureStream.AuthenticateAsServer(this.certificate, false, SslProtocols.Tls, true);
-			}
-			else
-			{
-				// Client authentication
-				X509CertificateCollection validCerts = new X509CertificateCollection();
-				validCerts.Add(certificate);
-
-				if (this.certValidator != null)
-				{
-					this.secureStream = new SslStream(this.client.GetStream(), false, new RemoteCertificateValidationCallback(this.certValidator));
-				}
-				else
-				{
-					this.secureStream = new SslStream(this.client.GetStream(), false, new RemoteCertificateValidationCallback(CertificateValidator));
-				}
-				this.secureStream.AuthenticateAsClient(host, validCerts, SslProtocols.Tls, true);
-			}
-
-			inputStream = this.secureStream;
-			outputStream = this.secureStream;
-		}
-
-		/// <summary>
-		/// Closes the SSL Socket
-		/// </summary>
-		public override void Close()
-		{
-			base.Close();
-			if (this.client != null)
-			{
-				this.client.Close();
-				this.client = null;
-			}
-
-			if (this.secureStream != null)
-			{
-				this.secureStream.Close();
-				this.secureStream = null;
-			}
-		}
-	}
+    /// <summary>
+    /// SSL Socket Wrapper class
+    /// </summary>
+    public class TTLSSocket : TStreamTransport
+    {
+        /// <summary>
+        /// Internal TCP Client
+        /// </summary>
+        private TcpClient client = null;
+
+        /// <summary>
+        /// The host
+        /// </summary>
+        private string host = null;
+
+        /// <summary>
+        /// The port
+        /// </summary>
+        private int port = 0;
+
+        /// <summary>
+        /// The timeout for the connection
+        /// </summary>
+        private int timeout = 0;
+
+        /// <summary>
+        /// Internal SSL Stream for IO
+        /// </summary>
+        private SslStream secureStream = null;
+
+        /// <summary>
+        /// Defines wheter or not this socket is a server socket<br/>
+        /// This is used for the TLS-authentication
+        /// </summary>
+        private bool isServer = false;
+
+        /// <summary>
+        /// The certificate
+        /// </summary>
+        private X509Certificate certificate = null;
+
+        /// <summary>
+        /// User defined certificate validator.
+        /// </summary>
+        private RemoteCertificateValidationCallback certValidator = null;
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TTLSSocket"/> class.
+        /// </summary>
+        /// <param name="client">An already created TCP-client</param>
+        /// <param name="certificate">The certificate.</param>
+        /// <param name="isServer">if set to <c>true</c> [is server].</param>
+        public TTLSSocket(TcpClient client, X509Certificate certificate, bool isServer = false)
+        {
+            this.client = client;
+            this.certificate = certificate;
+            this.isServer = isServer;
+
+            if (IsOpen)
+            {
+                base.inputStream = client.GetStream();
+                base.outputStream = client.GetStream();
+            }
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TTLSSocket"/> class.
+        /// </summary>
+        /// <param name="host">The host, where the socket should connect to.</param>
+        /// <param name="port">The port.</param>
+        /// <param name="certificatePath">The certificate path.</param>
+        /// <param name="certValidator">User defined cert validator.</param>
+        public TTLSSocket(string host, int port, string certificatePath, RemoteCertificateValidationCallback certValidator = null)
+            : this(host, port, 0, X509Certificate.CreateFromCertFile(certificatePath), certValidator)
+        {
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TTLSSocket"/> class.
+        /// </summary>
+        /// <param name="host">The host, where the socket should connect to.</param>
+        /// <param name="port">The port.</param>
+        /// <param name="certificate">The certificate.</param>
+        /// <param name="certValidator">User defined cert validator.</param>
+        public TTLSSocket(string host, int port, X509Certificate certificate, RemoteCertificateValidationCallback certValidator = null)
+            : this(host, port, 0, certificate, certValidator)
+        {
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TTLSSocket"/> class.
+        /// </summary>
+        /// <param name="host">The host, where the socket should connect to.</param>
+        /// <param name="port">The port.</param>
+        /// <param name="timeout">The timeout.</param>
+        /// <param name="certificate">The certificate.</param>
+        /// <param name="certValidator">User defined cert validator.</param>
+        public TTLSSocket(string host, int port, int timeout, X509Certificate certificate, RemoteCertificateValidationCallback certValidator = null)
+        {
+            this.host = host;
+            this.port = port;
+            this.timeout = timeout;
+            this.certificate = certificate;
+            this.certValidator = certValidator;
+
+            InitSocket();
+        }
+
+        /// <summary>
+        /// Creates the TcpClient and sets the timeouts
+        /// </summary>
+        private void InitSocket()
+        {
+            this.client = new TcpClient();
+            client.ReceiveTimeout = client.SendTimeout = timeout;
+            client.Client.NoDelay = true;
+        }
+
+        /// <summary>
+        /// Sets Send / Recv Timeout for IO
+        /// </summary>
+        public int Timeout
+        {
+            set
+            {
+                this.client.ReceiveTimeout = this.client.SendTimeout = this.timeout = value;
+            }
+        }
+
+        /// <summary>
+        /// Gets the TCP client.
+        /// </summary>
+        public TcpClient TcpClient
+        {
+            get
+            {
+                return client;
+            }
+        }
+
+        /// <summary>
+        /// Gets the host.
+        /// </summary>
+        public string Host
+        {
+            get
+            {
+                return host;
+            }
+        }
+
+        /// <summary>
+        /// Gets the port.
+        /// </summary>
+        public int Port
+        {
+            get
+            {
+                return port;
+            }
+        }
+
+        /// <summary>
+        /// Gets a value indicating whether TCP Client is Cpen
+        /// </summary>
+        public override bool IsOpen
+        {
+            get
+            {
+                if (this.client == null)
+                {
+                    return false;
+                }
+
+                return this.client.Connected;
+            }
+        }
+
+        /// <summary>
+        /// Validates the certificates!<br/>
+        /// </summary>
+        /// <param name="sender">The sender-object.</param>
+        /// <param name="certificate">The used certificate.</param>
+        /// <param name="chain">The certificate chain.</param>
+        /// <param name="sslPolicyErrors">An enum, which lists all the errors from the .NET certificate check.</param>
+        /// <returns></returns>
+        private bool CertificateValidator(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslValidationErrors)
+        {
+            return (sslValidationErrors == SslPolicyErrors.None);
+        }
+
+        /// <summary>
+        /// Connects to the host and starts the routine, which sets up the TLS
+        /// </summary>
+        public override void Open()
+        {
+            if (IsOpen)
+            {
+                throw new TTransportException(TTransportException.ExceptionType.AlreadyOpen, "Socket already connected");
+            }
+
+            if (String.IsNullOrEmpty(host))
+            {
+                throw new TTransportException(TTransportException.ExceptionType.NotOpen, "Cannot open null host");
+            }
+
+            if (port <= 0)
+            {
+                throw new TTransportException(TTransportException.ExceptionType.NotOpen, "Cannot open without port");
+            }
+
+            if (client == null)
+            {
+                InitSocket();
+            }
+
+            client.Connect(host, port);
+
+            setupTLS();
+        }
+
+        /// <summary>
+        /// Creates a TLS-stream and lays it over the existing socket
+        /// </summary>
+        public void setupTLS()
+        {
+            if (isServer)
+            {
+                // Server authentication
+                this.secureStream = new SslStream(this.client.GetStream(), false);
+                this.secureStream.AuthenticateAsServer(this.certificate, false, SslProtocols.Tls, true);
+            }
+            else
+            {
+                // Client authentication
+                X509CertificateCollection validCerts = new X509CertificateCollection();
+                validCerts.Add(certificate);
+
+                if (this.certValidator != null)
+                {
+                    this.secureStream = new SslStream(this.client.GetStream(), false, new RemoteCertificateValidationCallback(this.certValidator));
+                }
+                else
+                {
+                    this.secureStream = new SslStream(this.client.GetStream(), false, new RemoteCertificateValidationCallback(CertificateValidator));
+                }
+                this.secureStream.AuthenticateAsClient(host, validCerts, SslProtocols.Tls, true);
+            }
+
+            inputStream = this.secureStream;
+            outputStream = this.secureStream;
+        }
+
+        /// <summary>
+        /// Closes the SSL Socket
+        /// </summary>
+        public override void Close()
+        {
+            base.Close();
+            if (this.client != null)
+            {
+                this.client.Close();
+                this.client = null;
+            }
+
+            if (this.secureStream != null)
+            {
+                this.secureStream.Close();
+                this.secureStream = null;
+            }
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/thrift/blob/d5436f5c/lib/csharp/src/Transport/TTransport.cs
----------------------------------------------------------------------
diff --git a/lib/csharp/src/Transport/TTransport.cs b/lib/csharp/src/Transport/TTransport.cs
index 5bb8f9e..13314ec 100644
--- a/lib/csharp/src/Transport/TTransport.cs
+++ b/lib/csharp/src/Transport/TTransport.cs
@@ -25,24 +25,24 @@ using System;
 
 namespace Thrift.Transport
 {
-	public abstract class TTransport : IDisposable
-	{
-		public abstract bool IsOpen
-		{
-			get;
-		}
-
-		private byte[] _peekBuffer = new byte[1];
+    public abstract class TTransport : IDisposable
+    {
+        public abstract bool IsOpen
+        {
+            get;
+        }
+
+        private byte[] _peekBuffer = new byte[1];
         private bool _hasPeekByte = false;
 
         public bool Peek()
         {
             //If we already have a byte read but not consumed, do nothing.
-            if (_hasPeekByte) 
+            if (_hasPeekByte)
                 return true;
 
             //If transport closed we can't peek.
-            if (!IsOpen) 
+            if (!IsOpen)
                 return false;
 
             //Try to read one byte. If succeeds we will need to store it for the next read.
@@ -54,15 +54,15 @@ namespace Thrift.Transport
             return true;
         }
 
-		public abstract void Open();
+        public abstract void Open();
 
-		public abstract void Close();
+        public abstract void Close();
 
-		public abstract int Read(byte[] buf, int off, int len);
+        public abstract int Read(byte[] buf, int off, int len);
 
-		public int ReadAll(byte[] buf, int off, int len)
-		{
-			int got = 0;
+        public int ReadAll(byte[] buf, int off, int len)
+        {
+            int got = 0;
 
             //If we previously peeked a byte, we need to use that first.
             if (_hasPeekByte)
@@ -83,19 +83,19 @@ namespace Thrift.Transport
                 got += ret;
             }
             return got;
-		}
+        }
+
+        public virtual void Write(byte[] buf)
+        {
+            Write (buf, 0, buf.Length);
+        }
 
-		public virtual void Write(byte[] buf) 
-		{
-			Write (buf, 0, buf.Length);
-		}
+        public abstract void Write(byte[] buf, int off, int len);
 
-		public abstract void Write(byte[] buf, int off, int len);
+        public virtual void Flush()
+        {
+        }
 
-		public virtual void Flush()
-		{
-		}
-        
         public virtual IAsyncResult BeginFlush(AsyncCallback callback, object state)
         {
             throw new TTransportException(
@@ -110,16 +110,16 @@ namespace Thrift.Transport
                 "Asynchronous operations are not supported by this transport.");
         }
 
-		#region " IDisposable Support "
-		// IDisposable
-		protected abstract void Dispose(bool disposing);
-
-		public void Dispose()
-		{
-			// Do not change this code.  Put cleanup code in Dispose(ByVal disposing As Boolean) above.
-			Dispose(true);
-			GC.SuppressFinalize(this);
-		}
-		#endregion
-	}
+        #region " IDisposable Support "
+        // IDisposable
+        protected abstract void Dispose(bool disposing);
+
+        public void Dispose()
+        {
+            // Do not change this code.  Put cleanup code in Dispose(ByVal disposing As Boolean) above.
+            Dispose(true);
+            GC.SuppressFinalize(this);
+        }
+        #endregion
+    }
 }

http://git-wip-us.apache.org/repos/asf/thrift/blob/d5436f5c/lib/csharp/src/Transport/TTransportException.cs
----------------------------------------------------------------------
diff --git a/lib/csharp/src/Transport/TTransportException.cs b/lib/csharp/src/Transport/TTransportException.cs
index fda0138..6dcd987 100644
--- a/lib/csharp/src/Transport/TTransportException.cs
+++ b/lib/csharp/src/Transport/TTransportException.cs
@@ -25,44 +25,44 @@ using System;
 
 namespace Thrift.Transport
 {
-	public class TTransportException : TException
-	{
-		protected ExceptionType type;
+    public class TTransportException : TException
+    {
+        protected ExceptionType type;
 
-		public TTransportException()
-			: base()
-		{
-		}
+        public TTransportException()
+            : base()
+        {
+        }
 
-		public TTransportException(ExceptionType type)
-			: this()
-		{
-			this.type = type;
-		}
+        public TTransportException(ExceptionType type)
+            : this()
+        {
+            this.type = type;
+        }
 
-		public TTransportException(ExceptionType type, string message)
-			: base(message)
-		{
-			this.type = type;
-		}
+        public TTransportException(ExceptionType type, string message)
+            : base(message)
+        {
+            this.type = type;
+        }
 
-		public TTransportException(string message)
-			: base(message)
-		{
-		}
+        public TTransportException(string message)
+            : base(message)
+        {
+        }
 
-		public ExceptionType Type
-		{
-			get { return type; }
-		}
+        public ExceptionType Type
+        {
+            get { return type; }
+        }
 
-		public enum ExceptionType
-		{
-			Unknown,
-			NotOpen,
-			AlreadyOpen,
-			TimedOut,
-			EndOfFile
-		}
-	}
+        public enum ExceptionType
+        {
+            Unknown,
+            NotOpen,
+            AlreadyOpen,
+            TimedOut,
+            EndOfFile
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/thrift/blob/d5436f5c/lib/csharp/src/Transport/TTransportFactory.cs
----------------------------------------------------------------------
diff --git a/lib/csharp/src/Transport/TTransportFactory.cs b/lib/csharp/src/Transport/TTransportFactory.cs
index 8f4f15d..fa10033 100644
--- a/lib/csharp/src/Transport/TTransportFactory.cs
+++ b/lib/csharp/src/Transport/TTransportFactory.cs
@@ -25,18 +25,18 @@ using System;
 
 namespace Thrift.Transport
 {
-	/// <summary>
-	/// From Mark Slee & Aditya Agarwal of Facebook:
-	/// Factory class used to create wrapped instance of Transports.
-	/// This is used primarily in servers, which get Transports from
-	/// a ServerTransport and then may want to mutate them (i.e. create
-	/// a BufferedTransport from the underlying base transport)
-	/// </summary>
-	public class TTransportFactory
-	{
-		public virtual TTransport GetTransport(TTransport trans)
-		{
-			return trans;
-		}
-	}
+    /// <summary>
+    /// From Mark Slee & Aditya Agarwal of Facebook:
+    /// Factory class used to create wrapped instance of Transports.
+    /// This is used primarily in servers, which get Transports from
+    /// a ServerTransport and then may want to mutate them (i.e. create
+    /// a BufferedTransport from the underlying base transport)
+    /// </summary>
+    public class TTransportFactory
+    {
+        public virtual TTransport GetTransport(TTransport trans)
+        {
+            return trans;
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/thrift/blob/d5436f5c/lib/csharp/test/JSON/JSONTest.csproj
----------------------------------------------------------------------
diff --git a/lib/csharp/test/JSON/JSONTest.csproj b/lib/csharp/test/JSON/JSONTest.csproj
index 61e8e6c..f07d43e 100644
--- a/lib/csharp/test/JSON/JSONTest.csproj
+++ b/lib/csharp/test/JSON/JSONTest.csproj
@@ -75,7 +75,7 @@
     </ProjectReference>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
        Other similar extension points exist, see Microsoft.Common.targets.
   <Target Name="BeforeBuild">
   </Target>

http://git-wip-us.apache.org/repos/asf/thrift/blob/d5436f5c/lib/csharp/test/JSON/Program.cs
----------------------------------------------------------------------
diff --git a/lib/csharp/test/JSON/Program.cs b/lib/csharp/test/JSON/Program.cs
index d66c78a..9823221 100644
--- a/lib/csharp/test/JSON/Program.cs
+++ b/lib/csharp/test/JSON/Program.cs
@@ -28,55 +28,55 @@ using Thrift.Transport;
 
 namespace JSONTest
 {
-	class Program
-	{
-		static void Main(string[] args)
-		{
-			TestThrift2365();  // JSON binary decodes too much data
-			TestThrift2336();  // hex encoding using \uXXXX where 0xXXXX > 0xFF
-		}
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            TestThrift2365();  // JSON binary decodes too much data
+            TestThrift2336();  // hex encoding using \uXXXX where 0xXXXX > 0xFF
+        }
 
 
-		public static void TestThrift2365()
-		{
-			var rnd = new Random();
-			for (var len = 0; len < 10; ++len)
-			{
-				byte[] dataWritten = new byte[len];
-				rnd.NextBytes(dataWritten);
+        public static void TestThrift2365()
+        {
+            var rnd = new Random();
+            for (var len = 0; len < 10; ++len)
+            {
+                byte[] dataWritten = new byte[len];
+                rnd.NextBytes(dataWritten);
 
-				Stream stm = new MemoryStream();
-				TTransport trans = new TStreamTransport(null, stm);
-				TProtocol prot = new TJSONProtocol(trans);
-				prot.WriteBinary(dataWritten);
+                Stream stm = new MemoryStream();
+                TTransport trans = new TStreamTransport(null, stm);
+                TProtocol prot = new TJSONProtocol(trans);
+                prot.WriteBinary(dataWritten);
 
-				stm.Position = 0;
-				trans = new TStreamTransport(stm, null);
-				prot = new TJSONProtocol(trans);
-				byte[] dataRead = prot.ReadBinary();
+                stm.Position = 0;
+                trans = new TStreamTransport(stm, null);
+                prot = new TJSONProtocol(trans);
+                byte[] dataRead = prot.ReadBinary();
 
-				Debug.Assert(dataRead.Length == dataWritten.Length);
-				for (var i = 0; i < dataRead.Length; ++i)
-					Debug.Assert(dataRead[i] == dataWritten[i]);			
-			}
-		}
+                Debug.Assert(dataRead.Length == dataWritten.Length);
+                for (var i = 0; i < dataRead.Length; ++i)
+                    Debug.Assert(dataRead[i] == dataWritten[i]);
+            }
+        }
 
 
-		public static void TestThrift2336()
-		{
-			const string RUSSIAN_TEXT = "\u0420\u0443\u0441\u0441\u043a\u043e\u0435 \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435";
-			const string RUSSIAN_JSON = "\"\\u0420\\u0443\\u0441\\u0441\\u043a\\u043e\\u0435 \\u041d\\u0430\\u0437\\u0432\\u0430\\u043d\\u0438\\u0435\"";
-			
-			// prepare buffer with JSON data
-			byte[] rawBytes = new byte[RUSSIAN_JSON.Length];
-			for (var i = 0; i < RUSSIAN_JSON.Length; ++i)
-				rawBytes[i] = (byte)(RUSSIAN_JSON[i] & (char)0xFF);  // only low bytes
+        public static void TestThrift2336()
+        {
+            const string RUSSIAN_TEXT = "\u0420\u0443\u0441\u0441\u043a\u043e\u0435 \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435";
+            const string RUSSIAN_JSON = "\"\\u0420\\u0443\\u0441\\u0441\\u043a\\u043e\\u0435 \\u041d\\u0430\\u0437\\u0432\\u0430\\u043d\\u0438\\u0435\"";
 
-			// parse and check
-			var stm = new MemoryStream(rawBytes);
-			var trans = new TStreamTransport(stm, null);
-			var prot = new TJSONProtocol(trans);
-			Debug.Assert(prot.ReadString() == RUSSIAN_TEXT, "reading JSON with hex-encoded chars > 8 bit");
-		}
-	}
+            // prepare buffer with JSON data
+            byte[] rawBytes = new byte[RUSSIAN_JSON.Length];
+            for (var i = 0; i < RUSSIAN_JSON.Length; ++i)
+                rawBytes[i] = (byte)(RUSSIAN_JSON[i] & (char)0xFF);  // only low bytes
+
+            // parse and check
+            var stm = new MemoryStream(rawBytes);
+            var trans = new TStreamTransport(stm, null);
+            var prot = new TJSONProtocol(trans);
+            Debug.Assert(prot.ReadString() == RUSSIAN_TEXT, "reading JSON with hex-encoded chars > 8 bit");
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/thrift/blob/d5436f5c/lib/csharp/test/JSON/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/lib/csharp/test/JSON/Properties/AssemblyInfo.cs b/lib/csharp/test/JSON/Properties/AssemblyInfo.cs
index 8629f6f..6788bc3 100644
--- a/lib/csharp/test/JSON/Properties/AssemblyInfo.cs
+++ b/lib/csharp/test/JSON/Properties/AssemblyInfo.cs
@@ -21,7 +21,7 @@ using System.Reflection;
 using System.Runtime.CompilerServices;
 using System.Runtime.InteropServices;
 
-// Allgemeine Informationen über eine Assembly werden über die folgenden 
+// Allgemeine Informationen über eine Assembly werden über die folgenden
 // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
 // die mit einer Assembly verknüpft sind.
 [assembly: AssemblyTitle("JSONTest")]
@@ -33,8 +33,8 @@ using System.Runtime.InteropServices;
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
 
-// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar 
-// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von 
+// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar
+// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von
 // COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest.
 [assembly: ComVisible(false)]
 
@@ -44,11 +44,11 @@ using System.Runtime.InteropServices;
 // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
 //
 //      Hauptversion
-//      Nebenversion 
+//      Nebenversion
 //      Buildnummer
 //      Revision
 //
-// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern 
+// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
 // übernehmen, indem Sie "*" eingeben:
 // [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyVersion("1.0.0.0")]

http://git-wip-us.apache.org/repos/asf/thrift/blob/d5436f5c/lib/csharp/test/JSON/app.config
----------------------------------------------------------------------
diff --git a/lib/csharp/test/JSON/app.config b/lib/csharp/test/JSON/app.config
index bc39140..9c1919d 100644
--- a/lib/csharp/test/JSON/app.config
+++ b/lib/csharp/test/JSON/app.config
@@ -1,21 +1,21 @@
-<?xml version="1.0"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<configuration>
-<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
+<?xml version="1.0"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements. See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership. The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License. You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied. See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<configuration>
+<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

http://git-wip-us.apache.org/repos/asf/thrift/blob/d5436f5c/lib/csharp/test/Multiplex/Client/Multiplex.Test.Client.cs
----------------------------------------------------------------------
diff --git a/lib/csharp/test/Multiplex/Client/Multiplex.Test.Client.cs b/lib/csharp/test/Multiplex/Client/Multiplex.Test.Client.cs
index 95ba5a4..ccfe21d 100644
--- a/lib/csharp/test/Multiplex/Client/Multiplex.Test.Client.cs
+++ b/lib/csharp/test/Multiplex/Client/Multiplex.Test.Client.cs
@@ -29,8 +29,8 @@ using Test.Multiplex;
 
 namespace Test.Multiplex.Client
 {
-	public class TestClient
-	{
+    public class TestClient
+    {
         private void Run()
         {
             try
@@ -49,7 +49,7 @@ namespace Test.Multiplex.Client
 
                 multiplex = new TMultiplexedProtocol( Protocol, Constants.NAME_AGGR);
                 Aggr.Iface aggr = new Aggr.Client( multiplex);
-                
+
                 sbyte i;
                 for( i = 1; 10 >= i; ++i)
                 {

http://git-wip-us.apache.org/repos/asf/thrift/blob/d5436f5c/lib/csharp/test/Multiplex/Multiplex.Test.Common.cs
----------------------------------------------------------------------
diff --git a/lib/csharp/test/Multiplex/Multiplex.Test.Common.cs b/lib/csharp/test/Multiplex/Multiplex.Test.Common.cs
index 5296b68..a687852 100644
--- a/lib/csharp/test/Multiplex/Multiplex.Test.Common.cs
+++ b/lib/csharp/test/Multiplex/Multiplex.Test.Common.cs
@@ -30,8 +30,8 @@ using Thrift.Server;
 
 namespace Test.Multiplex
 {
-	public class Constants
-	{
+    public class Constants
+    {
         public const string NAME_BENCHMARKSERVICE = "BenchmarkService";
         public const string NAME_AGGR             = "Aggr";
     }

http://git-wip-us.apache.org/repos/asf/thrift/blob/d5436f5c/lib/csharp/test/Multiplex/Server/Multiplex.Test.Server.cs
----------------------------------------------------------------------
diff --git a/lib/csharp/test/Multiplex/Server/Multiplex.Test.Server.cs b/lib/csharp/test/Multiplex/Server/Multiplex.Test.Server.cs
index fbec1b7..61c2d7c 100644
--- a/lib/csharp/test/Multiplex/Server/Multiplex.Test.Server.cs
+++ b/lib/csharp/test/Multiplex/Server/Multiplex.Test.Server.cs
@@ -28,8 +28,8 @@ using Test.Multiplex;
 
 namespace Test.Multiplex.Server
 {
-	public class TestServer
-	{
+    public class TestServer
+    {
         public interface ITestHandler
         {
             void SetServer( TServer aServer);
@@ -38,7 +38,7 @@ namespace Test.Multiplex.Server
         protected class TestHandlerImpl : ITestHandler
         {
             private TServer Server;
-    
+
             public void SetServer( TServer aServer)
             {
                 Server = aServer;
@@ -53,7 +53,7 @@ namespace Test.Multiplex.Server
                 int prev, next, result;
                 prev   = 0;
                 result = 1;
-                while( n > 0) 
+                while( n > 0)
                 {
                     next   = result + prev;
                     prev   = result;
@@ -110,7 +110,7 @@ namespace Test.Multiplex.Server
                (benchHandler as ITestHandler).SetServer(null);
                (aggrHandler as ITestHandler).SetServer(null);
 
-           } 
+           }
            catch( Exception e)
            {
                Console.WriteLine( e.Message);
@@ -118,7 +118,7 @@ namespace Test.Multiplex.Server
            Console.WriteLine( "done.");
        }
 
-        
+
        static void Main(string[] args)
        {
            Execute();

http://git-wip-us.apache.org/repos/asf/thrift/blob/d5436f5c/lib/csharp/test/Multiplex/maketest.sh
----------------------------------------------------------------------
diff --git a/lib/csharp/test/Multiplex/maketest.sh b/lib/csharp/test/Multiplex/maketest.sh
index a2bcde4..1f29ee2 100755
--- a/lib/csharp/test/Multiplex/maketest.sh
+++ b/lib/csharp/test/Multiplex/maketest.sh
@@ -22,13 +22,13 @@
 ../../../../compiler/cpp/thrift --gen csharp  ../../../../contrib/async-test/aggr.thrift
 ../../../../compiler/cpp/thrift --gen csharp  ../../../rb/benchmark/Benchmark.thrift
 gmcs /t:library /out:./ThriftImpl.dll /recurse:./gen-csharp/* /reference:../../Thrift.dll Multiplex.Test.Common.cs
-gmcs  /out:MultiplexClient.exe /reference:../../Thrift.dll /reference:ThriftImpl.dll Client/Multiplex.Test.Client.cs  
-gmcs  /out:MultiplexServer.exe /reference:../../Thrift.dll /reference:ThriftImpl.dll Server/Multiplex.Test.Server.cs  
+gmcs  /out:MultiplexClient.exe /reference:../../Thrift.dll /reference:ThriftImpl.dll Client/Multiplex.Test.Client.cs
+gmcs  /out:MultiplexServer.exe /reference:../../Thrift.dll /reference:ThriftImpl.dll Server/Multiplex.Test.Server.cs
 
 
 
 export MONO_PATH=../../
 
-timeout 120 ./MultiplexServer.exe & 
+timeout 120 ./MultiplexServer.exe &
 sleep 3;
 ./MultiplexClient.exe

http://git-wip-us.apache.org/repos/asf/thrift/blob/d5436f5c/lib/csharp/test/ThriftTest/Program.cs
----------------------------------------------------------------------
diff --git a/lib/csharp/test/ThriftTest/Program.cs b/lib/csharp/test/ThriftTest/Program.cs
index 4c63ca4..3bf6796 100644
--- a/lib/csharp/test/ThriftTest/Program.cs
+++ b/lib/csharp/test/ThriftTest/Program.cs
@@ -29,33 +29,33 @@ using Thrift.Test; //generated code
 
 namespace Test
 {
-	class Program
-	{
-		static void Main(string[] args)
-		{
-			if (args.Length == 0)
-			{
-				Console.WriteLine("must provide 'server' or 'client' arg");
-				return;
-			}
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            if (args.Length == 0)
+            {
+                Console.WriteLine("must provide 'server' or 'client' arg");
+                return;
+            }
 
-			string[] subArgs = new string[args.Length - 1];
-			for(int i = 1; i < args.Length; i++)
-			{
-				subArgs[i-1] = args[i];
-			}
-			if (args[0] == "client")
-			{
-				TestClient.Execute(subArgs);
-			}
-			else if (args[0] == "server")
-			{
-				TestServer.Execute(subArgs);
-			}
-			else
-			{
-				Console.WriteLine("first argument must be 'server' or 'client'");
-			}
-		}
-	}
+            string[] subArgs = new string[args.Length - 1];
+            for(int i = 1; i < args.Length; i++)
+            {
+                subArgs[i-1] = args[i];
+            }
+            if (args[0] == "client")
+            {
+                TestClient.Execute(subArgs);
+            }
+            else if (args[0] == "server")
+            {
+                TestServer.Execute(subArgs);
+            }
+            else
+            {
+                Console.WriteLine("first argument must be 'server' or 'client'");
+            }
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/thrift/blob/d5436f5c/lib/csharp/test/ThriftTest/TestClient.cs
----------------------------------------------------------------------
diff --git a/lib/csharp/test/ThriftTest/TestClient.cs b/lib/csharp/test/ThriftTest/TestClient.cs
index db0fe63..cb33473 100644
--- a/lib/csharp/test/ThriftTest/TestClient.cs
+++ b/lib/csharp/test/ThriftTest/TestClient.cs
@@ -27,453 +27,453 @@ using Thrift.Test;
 
 namespace Test
 {
-	public class TestClient
-	{
-		private static int numIterations = 1;
-		private static string protocol = "";
-
-		public static void Execute(string[] args)
-		{
-			try
-			{
-				string host = "localhost";
-				int port = 9090;
-				string url = null, pipe = null;
-				int numThreads = 1;
-				bool buffered = false, framed = false, encrypted = false;
-
-				try
-				{
-					for (int i = 0; i < args.Length; i++)
-					{
-						if (args[i] == "-u")
-						{
-							url = args[++i];
-						}
-						else if (args[i] == "-n")
-						{
-							numIterations = Convert.ToInt32(args[++i]);
-						}
-						else if (args[i] == "-pipe")  // -pipe <name>
-						{
-							pipe = args[++i];
-							Console.WriteLine("Using named pipes transport");
-						}
-						else if (args[i].Contains("--host="))
-						{
-							host = args[i].Substring(args[i].IndexOf("=") + 1);
-						}
-						else if (args[i].Contains("--port="))
-						{
-							port = int.Parse(args[i].Substring(args[i].IndexOf("=")+1));
-						}
-						else if (args[i] == "-b" || args[i] == "--buffered" || args[i] == "--transport=buffered")
-						{
-							buffered = true;
-							Console.WriteLine("Using buffered sockets");
-						}
-						else if (args[i] == "-f" || args[i] == "--framed"  || args[i] == "--transport=framed")
-						{
-							framed = true;
-							Console.WriteLine("Using framed transport");
-						}
-						else if (args[i] == "-t")
-						{
-							numThreads = Convert.ToInt32(args[++i]);
-						}
-						else if (args[i] == "--compact" || args[i] == "--protocol=compact")
-						{
-							protocol = "compact";
-							Console.WriteLine("Using compact protocol");
-						}
-						else if (args[i] == "--json" || args[i] == "--protocol=json")
-						{
-							protocol = "json";
-							Console.WriteLine("Using JSON protocol");
-						}
-						else if (args[i] == "--ssl")
-						{
-							encrypted = true;
-							Console.WriteLine("Using encrypted transport");
-						}
-					}
-				}
-				catch (Exception e)
-				{
-					Console.WriteLine(e.StackTrace);
-				}
-
-				//issue tests on separate threads simultaneously
-				Thread[] threads = new Thread[numThreads];
-				DateTime start = DateTime.Now;
-				for (int test = 0; test < numThreads; test++)
-				{
-					Thread t = new Thread(new ParameterizedThreadStart(ClientThread));
-					threads[test] = t;
-					if (url == null)
-					{
-						// endpoint transport
-						TTransport trans = null;
-						if (pipe != null)
-							trans = new TNamedPipeClientTransport(pipe);
-						else
-						{
-							if (encrypted)
-								trans = new TTLSSocket(host, port, "../../../../../keys/client.pem");
-							else
-								trans = new TSocket(host, port);
-						}
-
-						// layered transport
-						if (buffered)
-							trans = new TBufferedTransport(trans as TStreamTransport);
-						if (framed)
-							trans = new TFramedTransport(trans);
-
-						//ensure proper open/close of transport
-						trans.Open();
-						trans.Close();
-						t.Start(trans);
-					}
-					else
-					{
-						THttpClient http = new THttpClient(new Uri(url));
-						t.Start(http);
-					}
-				}
-
-				for (int test = 0; test < numThreads; test++)
-				{
-					threads[test].Join();
-				}
-				Console.Write("Total time: " + (DateTime.Now - start));
-			}
-			catch (Exception outerEx)
-			{
-				Console.WriteLine(outerEx.Message + " ST: " + outerEx.StackTrace);
-			}
-
-			Console.WriteLine();
-			Console.WriteLine();
-		}
-
-		public static void ClientThread(object obj)
-		{
-			TTransport transport = (TTransport)obj;
-			for (int i = 0; i < numIterations; i++)
-			{
-				ClientTest(transport);
-			}
-			transport.Close();
-		}
-
-		public static void ClientTest(TTransport transport)
-		{
-			TProtocol proto;
-			if (protocol == "compact")
-				proto = new TCompactProtocol(transport);
-			else if (protocol == "json")
-				proto = new TJSONProtocol(transport);
-			else
-				proto = new TBinaryProtocol(transport);
-
-			ThriftTest.Client client = new ThriftTest.Client(proto);
-			try
-			{
-				if (!transport.IsOpen)
-				{
-					transport.Open();
-				}
-			}
-			catch (TTransportException ttx)
-			{
-				Console.WriteLine("Connect failed: " + ttx.Message);
-				return;
-			}
-
-			long start = DateTime.Now.ToFileTime();
-
-			Console.Write("testVoid()");
-			client.testVoid();
-			Console.WriteLine(" = void");
-
-			Console.Write("testString(\"Test\")");
-			string s = client.testString("Test");
-			Console.WriteLine(" = \"" + s + "\"");
-
-			Console.Write("testByte(1)");
-			sbyte i8 = client.testByte((sbyte)1);
-			Console.WriteLine(" = " + i8);
-
-			Console.Write("testI32(-1)");
-			int i32 = client.testI32(-1);
-			Console.WriteLine(" = " + i32);
-
-			Console.Write("testI64(-34359738368)");
-			long i64 = client.testI64(-34359738368);
-			Console.WriteLine(" = " + i64);
-
-			Console.Write("testDouble(5.325098235)");
-			double dub = client.testDouble(5.325098235);
-			Console.WriteLine(" = " + dub);
-
-			Console.Write("testStruct({\"Zero\", 1, -3, -5})");
-			Xtruct o = new Xtruct();
-			o.String_thing = "Zero";
-			o.Byte_thing = (sbyte)1;
-			o.I32_thing = -3;
-			o.I64_thing = -5;
-			Xtruct i = client.testStruct(o);
-			Console.WriteLine(" = {\"" + i.String_thing + "\", " + i.Byte_thing + ", " + i.I32_thing + ", " + i.I64_thing + "}");
-
-			Console.Write("testNest({1, {\"Zero\", 1, -3, -5}, 5})");
-			Xtruct2 o2 = new Xtruct2();
-			o2.Byte_thing = (sbyte)1;
-			o2.Struct_thing = o;
-			o2.I32_thing = 5;
-			Xtruct2 i2 = client.testNest(o2);
-			i = i2.Struct_thing;
-			Console.WriteLine(" = {" + i2.Byte_thing + ", {\"" + i.String_thing + "\", " + i.Byte_thing + ", " + i.I32_thing + ", " + i.I64_thing + "}, " + i2.I32_thing + "}");
-
-			Dictionary<int, int> mapout = new Dictionary<int, int>();
-			for (int j = 0; j < 5; j++)
-			{
-				mapout[j] = j - 10;
-			}
-			Console.Write("testMap({");
-			bool first = true;
-			foreach (int key in mapout.Keys)
-			{
-				if (first)
-				{
-					first = false;
-				}
-				else
-				{
-					Console.Write(", ");
-				}
-				Console.Write(key + " => " + mapout[key]);
-			}
-			Console.Write("})");
-
-			Dictionary<int, int> mapin = client.testMap(mapout);
-
-			Console.Write(" = {");
-			first = true;
-			foreach (int key in mapin.Keys)
-			{
-				if (first)
-				{
-					first = false;
-				}
-				else
-				{
-					Console.Write(", ");
-				}
-				Console.Write(key + " => " + mapin[key]);
-			}
-			Console.WriteLine("}");
-
-			List<int> listout = new List<int>();
-			for (int j = -2; j < 3; j++)
-			{
-				listout.Add(j);
-			}
-			Console.Write("testList({");
-			first = true;
-			foreach (int j in listout)
-			{
-				if (first)
-				{
-					first = false;
-				}
-				else
-				{
-					Console.Write(", ");
-				}
-				Console.Write(j);
-			}
-			Console.Write("})");
-
-			List<int> listin = client.testList(listout);
-
-			Console.Write(" = {");
-			first = true;
-			foreach (int j in listin)
-			{
-				if (first)
-				{
-					first = false;
-				}
-				else
-				{
-					Console.Write(", ");
-				}
-				Console.Write(j);
-			}
-			Console.WriteLine("}");
-
-			//set
-			THashSet<int> setout = new THashSet<int>();
-			for (int j = -2; j < 3; j++)
-			{
-				setout.Add(j);
-			}
-			Console.Write("testSet({");
-			first = true;
-			foreach (int j in setout)
-			{
-				if (first)
-				{
-					first = false;
-				}
-				else
-				{
-					Console.Write(", ");
-				}
-				Console.Write(j);
-			}
-			Console.Write("})");
-
-			THashSet<int> setin = client.testSet(setout);
-
-			Console.Write(" = {");
-			first = true;
-			foreach (int j in setin)
-			{
-				if (first)
-				{
-					first = false;
-				}
-				else
-				{
-					Console.Write(", ");
-				}
-				Console.Write(j);
-			}
-			Console.WriteLine("}");
-
-
-			Console.Write("testEnum(ONE)");
-			Numberz ret = client.testEnum(Numberz.ONE);
-			Console.WriteLine(" = " + ret);
-
-			Console.Write("testEnum(TWO)");
-			ret = client.testEnum(Numberz.TWO);
-			Console.WriteLine(" = " + ret);
-
-			Console.Write("testEnum(THREE)");
-			ret = client.testEnum(Numberz.THREE);
-			Console.WriteLine(" = " + ret);
-
-			Console.Write("testEnum(FIVE)");
-			ret = client.testEnum(Numberz.FIVE);
-			Console.WriteLine(" = " + ret);
-
-			Console.Write("testEnum(EIGHT)");
-			ret = client.testEnum(Numberz.EIGHT);
-			Console.WriteLine(" = " + ret);
-
-			Console.Write("testTypedef(309858235082523)");
-			long uid = client.testTypedef(309858235082523L);
-			Console.WriteLine(" = " + uid);
-
-			Console.Write("testMapMap(1)");
-			Dictionary<int, Dictionary<int, int>> mm = client.testMapMap(1);
-			Console.Write(" = {");
-			foreach (int key in mm.Keys)
-			{
-				Console.Write(key + " => {");
-				Dictionary<int, int> m2 = mm[key];
-				foreach (int k2 in m2.Keys)
-				{
-					Console.Write(k2 + " => " + m2[k2] + ", ");
-				}
-				Console.Write("}, ");
-			}
-			Console.WriteLine("}");
-
-			Insanity insane = new Insanity();
-			insane.UserMap = new Dictionary<Numberz, long>();
-			insane.UserMap[Numberz.FIVE] = 5000L;
-			Xtruct truck = new Xtruct();
-			truck.String_thing = "Truck";
-			truck.Byte_thing = (sbyte)8;
-			truck.I32_thing = 8;
-			truck.I64_thing = 8;
-			insane.Xtructs = new List<Xtruct>();
-			insane.Xtructs.Add(truck);
-			Console.Write("testInsanity()");
-			Dictionary<long, Dictionary<Numberz, Insanity>> whoa = client.testInsanity(insane);
-			Console.Write(" = {");
-			foreach (long key in whoa.Keys)
-			{
-				Dictionary<Numberz, Insanity> val = whoa[key];
-				Console.Write(key + " => {");
-
-				foreach (Numberz k2 in val.Keys)
-				{
-					Insanity v2 = val[k2];
-
-					Console.Write(k2 + " => {");
-					Dictionary<Numberz, long> userMap = v2.UserMap;
-
-					Console.Write("{");
-					if (userMap != null)
-					{
-						foreach (Numberz k3 in userMap.Keys)
-						{
-							Console.Write(k3 + " => " + userMap[k3] + ", ");
-						}
-					}
-					else
-					{
-						Console.Write("null");
-					}
-					Console.Write("}, ");
-
-					List<Xtruct> xtructs = v2.Xtructs;
-
-					Console.Write("{");
-					if (xtructs != null)
-					{
-						foreach (Xtruct x in xtructs)
-						{
-							Console.Write("{\"" + x.String_thing + "\", " + x.Byte_thing + ", " + x.I32_thing + ", " + x.I32_thing + "}, ");
-						}
-					}
-					else
-					{
-						Console.Write("null");
-					}
-					Console.Write("}");
-
-					Console.Write("}, ");
-				}
-				Console.Write("}, ");
-			}
-			Console.WriteLine("}");
-
-			sbyte arg0 = 1;
-			int arg1 = 2;
-			long arg2 = long.MaxValue;
-			Dictionary<short, string> multiDict = new Dictionary<short, string>();
-			multiDict[1] = "one";
-			Numberz arg4 = Numberz.FIVE;
-			long arg5 = 5000000;
-			Console.Write("Test Multi(" + arg0 + "," + arg1 + "," + arg2 + "," + multiDict + "," + arg4 + "," + arg5 + ")");
-			Xtruct multiResponse = client.testMulti(arg0, arg1, arg2, multiDict, arg4, arg5);
-			Console.Write(" = Xtruct(byte_thing:" + multiResponse.Byte_thing + ",String_thing:" + multiResponse.String_thing
-						+ ",i32_thing:" + multiResponse.I32_thing + ",i64_thing:" + multiResponse.I64_thing + ")\n");
-
-			Console.WriteLine("Test Oneway(1)");
-			client.testOneway(1);
-
-			Console.Write("Test Calltime()");
-			var startt = DateTime.UtcNow;
-			for ( int k=0; k<1000; ++k )
-				client.testVoid();
-			Console.WriteLine(" = " + (DateTime.UtcNow - startt).TotalSeconds.ToString() + " ms a testVoid() call" );
-		}
-	}
+    public class TestClient
+    {
+        private static int numIterations = 1;
+        private static string protocol = "";
+
+        public static void Execute(string[] args)
+        {
+            try
+            {
+                string host = "localhost";
+                int port = 9090;
+                string url = null, pipe = null;
+                int numThreads = 1;
+                bool buffered = false, framed = false, encrypted = false;
+
+                try
+                {
+                    for (int i = 0; i < args.Length; i++)
+                    {
+                        if (args[i] == "-u")
+                        {
+                            url = args[++i];
+                        }
+                        else if (args[i] == "-n")
+                        {
+                            numIterations = Convert.ToInt32(args[++i]);
+                        }
+                        else if (args[i] == "-pipe")  // -pipe <name>
+                        {
+                            pipe = args[++i];
+                            Console.WriteLine("Using named pipes transport");
+                        }
+                        else if (args[i].Contains("--host="))
+                        {
+                            host = args[i].Substring(args[i].IndexOf("=") + 1);
+                        }
+                        else if (args[i].Contains("--port="))
+                        {
+                            port = int.Parse(args[i].Substring(args[i].IndexOf("=")+1));
+                        }
+                        else if (args[i] == "-b" || args[i] == "--buffered" || args[i] == "--transport=buffered")
+                        {
+                            buffered = true;
+                            Console.WriteLine("Using buffered sockets");
+                        }
+                        else if (args[i] == "-f" || args[i] == "--framed"  || args[i] == "--transport=framed")
+                        {
+                            framed = true;
+                            Console.WriteLine("Using framed transport");
+                        }
+                        else if (args[i] == "-t")
+                        {
+                            numThreads = Convert.ToInt32(args[++i]);
+                        }
+                        else if (args[i] == "--compact" || args[i] == "--protocol=compact")
+                        {
+                            protocol = "compact";
+                            Console.WriteLine("Using compact protocol");
+                        }
+                        else if (args[i] == "--json" || args[i] == "--protocol=json")
+                        {
+                            protocol = "json";
+                            Console.WriteLine("Using JSON protocol");
+                        }
+                        else if (args[i] == "--ssl")
+                        {
+                            encrypted = true;
+                            Console.WriteLine("Using encrypted transport");
+                        }
+                    }
+                }
+                catch (Exception e)
+                {
+                    Console.WriteLine(e.StackTrace);
+                }
+
+                //issue tests on separate threads simultaneously
+                Thread[] threads = new Thread[numThreads];
+                DateTime start = DateTime.Now;
+                for (int test = 0; test < numThreads; test++)
+                {
+                    Thread t = new Thread(new ParameterizedThreadStart(ClientThread));
+                    threads[test] = t;
+                    if (url == null)
+                    {
+                        // endpoint transport
+                        TTransport trans = null;
+                        if (pipe != null)
+                            trans = new TNamedPipeClientTransport(pipe);
+                        else
+                        {
+                            if (encrypted)
+                                trans = new TTLSSocket(host, port, "../../../../../keys/client.pem");
+                            else
+                                trans = new TSocket(host, port);
+                        }
+
+                        // layered transport
+                        if (buffered)
+                            trans = new TBufferedTransport(trans as TStreamTransport);
+                        if (framed)
+                            trans = new TFramedTransport(trans);
+
+                        //ensure proper open/close of transport
+                        trans.Open();
+                        trans.Close();
+                        t.Start(trans);
+                    }
+                    else
+                    {
+                        THttpClient http = new THttpClient(new Uri(url));
+                        t.Start(http);
+                    }
+                }
+
+                for (int test = 0; test < numThreads; test++)
+                {
+                    threads[test].Join();
+                }
+                Console.Write("Total time: " + (DateTime.Now - start));
+            }
+            catch (Exception outerEx)
+            {
+                Console.WriteLine(outerEx.Message + " ST: " + outerEx.StackTrace);
+            }
+
+            Console.WriteLine();
+            Console.WriteLine();
+        }
+
+        public static void ClientThread(object obj)
+        {
+            TTransport transport = (TTransport)obj;
+            for (int i = 0; i < numIterations; i++)
+            {
+                ClientTest(transport);
+            }
+            transport.Close();
+        }
+
+        public static void ClientTest(TTransport transport)
+        {
+            TProtocol proto;
+            if (protocol == "compact")
+                proto = new TCompactProtocol(transport);
+            else if (protocol == "json")
+                proto = new TJSONProtocol(transport);
+            else
+                proto = new TBinaryProtocol(transport);
+
+            ThriftTest.Client client = new ThriftTest.Client(proto);
+            try
+            {
+                if (!transport.IsOpen)
+                {
+                    transport.Open();
+                }
+            }
+            catch (TTransportException ttx)
+            {
+                Console.WriteLine("Connect failed: " + ttx.Message);
+                return;
+            }
+
+            long start = DateTime.Now.ToFileTime();
+
+            Console.Write("testVoid()");
+            client.testVoid();
+            Console.WriteLine(" = void");
+
+            Console.Write("testString(\"Test\")");
+            string s = client.testString("Test");
+            Console.WriteLine(" = \"" + s + "\"");
+
+            Console.Write("testByte(1)");
+            sbyte i8 = client.testByte((sbyte)1);
+            Console.WriteLine(" = " + i8);
+
+            Console.Write("testI32(-1)");
+            int i32 = client.testI32(-1);
+            Console.WriteLine(" = " + i32);
+
+            Console.Write("testI64(-34359738368)");
+            long i64 = client.testI64(-34359738368);
+            Console.WriteLine(" = " + i64);
+
+            Console.Write("testDouble(5.325098235)");
+            double dub = client.testDouble(5.325098235);
+            Console.WriteLine(" = " + dub);
+
+            Console.Write("testStruct({\"Zero\", 1, -3, -5})");
+            Xtruct o = new Xtruct();
+            o.String_thing = "Zero";
+            o.Byte_thing = (sbyte)1;
+            o.I32_thing = -3;
+            o.I64_thing = -5;
+            Xtruct i = client.testStruct(o);
+            Console.WriteLine(" = {\"" + i.String_thing + "\", " + i.Byte_thing + ", " + i.I32_thing + ", " + i.I64_thing + "}");
+
+            Console.Write("testNest({1, {\"Zero\", 1, -3, -5}, 5})");
+            Xtruct2 o2 = new Xtruct2();
+            o2.Byte_thing = (sbyte)1;
+            o2.Struct_thing = o;
+            o2.I32_thing = 5;
+            Xtruct2 i2 = client.testNest(o2);
+            i = i2.Struct_thing;
+            Console.WriteLine(" = {" + i2.Byte_thing + ", {\"" + i.String_thing + "\", " + i.Byte_thing + ", " + i.I32_thing + ", " + i.I64_thing + "}, " + i2.I32_thing + "}");
+
+            Dictionary<int, int> mapout = new Dictionary<int, int>();
+            for (int j = 0; j < 5; j++)
+            {
+                mapout[j] = j - 10;
+            }
+            Console.Write("testMap({");
+            bool first = true;
+            foreach (int key in mapout.Keys)
+            {
+                if (first)
+                {
+                    first = false;
+                }
+                else
+                {
+                    Console.Write(", ");
+                }
+                Console.Write(key + " => " + mapout[key]);
+            }
+            Console.Write("})");
+
+            Dictionary<int, int> mapin = client.testMap(mapout);
+
+            Console.Write(" = {");
+            first = true;
+            foreach (int key in mapin.Keys)
+            {
+                if (first)
+                {
+                    first = false;
+                }
+                else
+                {
+                    Console.Write(", ");
+                }
+                Console.Write(key + " => " + mapin[key]);
+            }
+            Console.WriteLine("}");
+
+            List<int> listout = new List<int>();
+            for (int j = -2; j < 3; j++)
+            {
+                listout.Add(j);
+            }
+            Console.Write("testList({");
+            first = true;
+            foreach (int j in listout)
+            {
+                if (first)
+                {
+                    first = false;
+                }
+                else
+                {
+                    Console.Write(", ");
+                }
+                Console.Write(j);
+            }
+            Console.Write("})");
+
+            List<int> listin = client.testList(listout);
+
+            Console.Write(" = {");
+            first = true;
+            foreach (int j in listin)
+            {
+                if (first)
+                {
+                    first = false;
+                }
+                else
+                {
+                    Console.Write(", ");
+                }
+                Console.Write(j);
+            }
+            Console.WriteLine("}");
+
+            //set
+            THashSet<int> setout = new THashSet<int>();
+            for (int j = -2; j < 3; j++)
+            {
+                setout.Add(j);
+            }
+            Console.Write("testSet({");
+            first = true;
+            foreach (int j in setout)
+            {
+                if (first)
+                {
+                    first = false;
+                }
+                else
+                {
+                    Console.Write(", ");
+                }
+                Console.Write(j);
+            }
+            Console.Write("})");
+
+            THashSet<int> setin = client.testSet(setout);
+
+            Console.Write(" = {");
+            first = true;
+            foreach (int j in setin)
+            {
+                if (first)
+                {
+                    first = false;
+                }
+                else
+                {
+                    Console.Write(", ");
+                }
+                Console.Write(j);
+            }
+            Console.WriteLine("}");
+
+
+            Console.Write("testEnum(ONE)");
+            Numberz ret = client.testEnum(Numberz.ONE);
+            Console.WriteLine(" = " + ret);
+
+            Console.Write("testEnum(TWO)");
+            ret = client.testEnum(Numberz.TWO);
+            Console.WriteLine(" = " + ret);
+
+            Console.Write("testEnum(THREE)");
+            ret = client.testEnum(Numberz.THREE);
+            Console.WriteLine(" = " + ret);
+
+            Console.Write("testEnum(FIVE)");
+            ret = client.testEnum(Numberz.FIVE);
+            Console.WriteLine(" = " + ret);
+
+            Console.Write("testEnum(EIGHT)");
+            ret = client.testEnum(Numberz.EIGHT);
+            Console.WriteLine(" = " + ret);
+
+            Console.Write("testTypedef(309858235082523)");
+            long uid = client.testTypedef(309858235082523L);
+            Console.WriteLine(" = " + uid);
+
+            Console.Write("testMapMap(1)");
+            Dictionary<int, Dictionary<int, int>> mm = client.testMapMap(1);
+            Console.Write(" = {");
+            foreach (int key in mm.Keys)
+            {
+                Console.Write(key + " => {");
+                Dictionary<int, int> m2 = mm[key];
+                foreach (int k2 in m2.Keys)
+                {
+                    Console.Write(k2 + " => " + m2[k2] + ", ");
+                }
+                Console.Write("}, ");
+            }
+            Console.WriteLine("}");
+
+            Insanity insane = new Insanity();
+            insane.UserMap = new Dictionary<Numberz, long>();
+            insane.UserMap[Numberz.FIVE] = 5000L;
+            Xtruct truck = new Xtruct();
+            truck.String_thing = "Truck";
+            truck.Byte_thing = (sbyte)8;
+            truck.I32_thing = 8;
+            truck.I64_thing = 8;
+            insane.Xtructs = new List<Xtruct>();
+            insane.Xtructs.Add(truck);
+            Console.Write("testInsanity()");
+            Dictionary<long, Dictionary<Numberz, Insanity>> whoa = client.testInsanity(insane);
+            Console.Write(" = {");
+            foreach (long key in whoa.Keys)
+            {
+                Dictionary<Numberz, Insanity> val = whoa[key];
+                Console.Write(key + " => {");
+
+                foreach (Numberz k2 in val.Keys)
+                {
+                    Insanity v2 = val[k2];
+
+                    Console.Write(k2 + " => {");
+                    Dictionary<Numberz, long> userMap = v2.UserMap;
+
+                    Console.Write("{");
+                    if (userMap != null)
+                    {
+                        foreach (Numberz k3 in userMap.Keys)
+                        {
+                            Console.Write(k3 + " => " + userMap[k3] + ", ");
+                        }
+                    }
+                    else
+                    {
+                        Console.Write("null");
+                    }
+                    Console.Write("}, ");
+
+                    List<Xtruct> xtructs = v2.Xtructs;
+
+                    Console.Write("{");
+                    if (xtructs != null)
+                    {
+                        foreach (Xtruct x in xtructs)
+                        {
+                            Console.Write("{\"" + x.String_thing + "\", " + x.Byte_thing + ", " + x.I32_thing + ", " + x.I32_thing + "}, ");
+                        }
+                    }
+                    else
+                    {
+                        Console.Write("null");
+                    }
+                    Console.Write("}");
+
+                    Console.Write("}, ");
+                }
+                Console.Write("}, ");
+            }
+            Console.WriteLine("}");
+
+            sbyte arg0 = 1;
+            int arg1 = 2;
+            long arg2 = long.MaxValue;
+            Dictionary<short, string> multiDict = new Dictionary<short, string>();
+            multiDict[1] = "one";
+            Numberz arg4 = Numberz.FIVE;
+            long arg5 = 5000000;
+            Console.Write("Test Multi(" + arg0 + "," + arg1 + "," + arg2 + "," + multiDict + "," + arg4 + "," + arg5 + ")");
+            Xtruct multiResponse = client.testMulti(arg0, arg1, arg2, multiDict, arg4, arg5);
+            Console.Write(" = Xtruct(byte_thing:" + multiResponse.Byte_thing + ",String_thing:" + multiResponse.String_thing
+                        + ",i32_thing:" + multiResponse.I32_thing + ",i64_thing:" + multiResponse.I64_thing + ")\n");
+
+            Console.WriteLine("Test Oneway(1)");
+            client.testOneway(1);
+
+            Console.Write("Test Calltime()");
+            var startt = DateTime.UtcNow;
+            for ( int k=0; k<1000; ++k )
+                client.testVoid();
+            Console.WriteLine(" = " + (DateTime.UtcNow - startt).TotalSeconds.ToString() + " ms a testVoid() call" );
+        }
+    }
 }