THRIFT-4208 C# NamedPipesServer not really working in some scenarios Client: C# Patch: Jens Geyer
diff --git a/lib/csharp/src/Transport/TNamedPipeServerTransport.cs b/lib/csharp/src/Transport/TNamedPipeServerTransport.cs
index c1e8400..240f0df 100644
--- a/lib/csharp/src/Transport/TNamedPipeServerTransport.cs
+++ b/lib/csharp/src/Transport/TNamedPipeServerTransport.cs
@@ -22,9 +22,9 @@
*/
using System;
-using System.Collections.Generic;
using System.IO.Pipes;
using System.Threading;
+using System.Security.Principal;
namespace Thrift.Transport
{
@@ -68,23 +68,32 @@
if (stream == null)
{
var direction = PipeDirection.InOut;
- var maxconn = 254;
+ var maxconn = NamedPipeServerStream.MaxAllowedServerInstances;
var mode = PipeTransmissionMode.Byte;
var options = asyncMode ? PipeOptions.Asynchronous : PipeOptions.None;
- var inbuf = 4096;
- var outbuf = 4096;
- // TODO: security
+ const int INBUF_SIZE = 4096;
+ const int OUTBUF_SIZE = 4096;
+
+ // security
+ var security = new PipeSecurity();
+ security.AddAccessRule(
+ new PipeAccessRule(
+ new SecurityIdentifier(WellKnownSidType.WorldSid, null),
+ PipeAccessRights.Read | PipeAccessRights.Write | PipeAccessRights.Synchronize | PipeAccessRights.CreateNewInstance,
+ System.Security.AccessControl.AccessControlType.Allow
+ )
+ );
try
{
- stream = new NamedPipeServerStream(pipeAddress, direction, maxconn, mode, options, inbuf, outbuf);
+ stream = new NamedPipeServerStream(pipeAddress, direction, maxconn, mode, options, INBUF_SIZE, OUTBUF_SIZE, security);
}
catch (NotImplementedException) // Mono still does not support async, fallback to sync
{
if (asyncMode)
{
options &= (~PipeOptions.Asynchronous);
- stream = new NamedPipeServerStream(pipeAddress, direction, maxconn, mode, options, inbuf, outbuf);
+ stream = new NamedPipeServerStream(pipeAddress, direction, maxconn, mode, options, INBUF_SIZE, OUTBUF_SIZE, security);
asyncMode = false;
}
else