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
{