THRIFT-4829 HTTP server transport lacks TransportFactory arguments
Client: netstd
Patch: Jens Geyer

This closes #1766
diff --git a/lib/netstd/Thrift/Transport/Server/THttpServerTransport.cs b/lib/netstd/Thrift/Transport/Server/THttpServerTransport.cs
index fab9fa7..953db70 100644
--- a/lib/netstd/Thrift/Transport/Server/THttpServerTransport.cs
+++ b/lib/netstd/Thrift/Transport/Server/THttpServerTransport.cs
@@ -38,21 +38,34 @@
         protected ITProtocolFactory InputProtocolFactory;
         protected ITProtocolFactory OutputProtocolFactory;
 
+        protected TTransportFactory InputTransportFactory;
+        protected TTransportFactory OutputTransportFactory;
+
         protected ITAsyncProcessor Processor;
 
         public THttpServerTransport(ITAsyncProcessor processor, RequestDelegate next = null, ILoggerFactory loggerFactory = null)
-            : this(processor, new TBinaryProtocol.Factory(), next, loggerFactory)
+            : this(processor, new TBinaryProtocol.Factory(), null, next, loggerFactory)
         {
         }
 
-        public THttpServerTransport(ITAsyncProcessor processor, ITProtocolFactory protocolFactory, RequestDelegate next = null,
+        public THttpServerTransport(
+            ITAsyncProcessor processor, 
+            ITProtocolFactory protocolFactory, 
+            TTransportFactory transFactory = null, 
+            RequestDelegate next = null,
             ILoggerFactory loggerFactory = null)
-            : this(processor, protocolFactory, protocolFactory, next, loggerFactory)
+            : this(processor, protocolFactory, protocolFactory, transFactory, transFactory, next, loggerFactory)
         {
         }
 
-        public THttpServerTransport(ITAsyncProcessor processor, ITProtocolFactory inputProtocolFactory,
-            ITProtocolFactory outputProtocolFactory, RequestDelegate next = null, ILoggerFactory loggerFactory = null)
+        public THttpServerTransport(
+            ITAsyncProcessor processor, 
+            ITProtocolFactory inputProtocolFactory,
+            ITProtocolFactory outputProtocolFactory,
+            TTransportFactory inputTransFactory = null,
+            TTransportFactory outputTransFactory = null,
+            RequestDelegate next = null, 
+            ILoggerFactory loggerFactory = null)
         {
             // loggerFactory == null is not illegal anymore
 
@@ -60,6 +73,9 @@
             InputProtocolFactory = inputProtocolFactory ?? throw new ArgumentNullException(nameof(inputProtocolFactory));
             OutputProtocolFactory = outputProtocolFactory ?? throw new ArgumentNullException(nameof(outputProtocolFactory));
 
+            InputTransportFactory = inputTransFactory;
+            OutputTransportFactory = outputTransFactory;
+
             _next = next;
             _logger = (loggerFactory != null) ? loggerFactory.CreateLogger<THttpServerTransport>() : new NullLogger<THttpServerTransport>();
         }
@@ -76,8 +92,11 @@
 
             try
             {
-                var input = InputProtocolFactory.GetProtocol(transport);
-                var output = OutputProtocolFactory.GetProtocol(transport);
+                var intrans = (InputTransportFactory != null) ? InputTransportFactory.GetTransport(transport) : transport;
+                var outtrans = (OutputTransportFactory != null) ? OutputTransportFactory.GetTransport(transport) : transport;
+
+                var input = InputProtocolFactory.GetProtocol(intrans);
+                var output = OutputProtocolFactory.GetProtocol(outtrans);
 
                 while (await Processor.ProcessAsync(input, output, cancellationToken))
                 {
@@ -86,6 +105,8 @@
             catch (TTransportException)
             {
                 // Client died, just move on
+                if (!context.Response.HasStarted)
+                    context.Response.StatusCode = 500;
             }
             finally
             {