Server: Prevented several ConnectionState members from being changed after instantiation

This commit is contained in:
Tal Aloni 2017-09-27 23:31:47 +03:00
parent 107d755269
commit d753135620
2 changed files with 48 additions and 15 deletions

View file

@ -18,28 +18,30 @@ namespace SMBLibrary.Server
internal class ConnectionState
{
public Socket ClientSocket;
public IPEndPoint ClientEndPoint;
public NBTConnectionReceiveBuffer ReceiveBuffer;
public BlockingQueue<SessionPacket> SendQueue;
protected LogDelegate LogToServerHandler;
private Socket m_clientSocket;
private IPEndPoint m_clientEndPoint;
private NBTConnectionReceiveBuffer m_receiveBuffer;
private BlockingQueue<SessionPacket> m_sendQueue;
private LogDelegate LogToServerHandler;
public SMBDialect Dialect;
public GSSContext AuthenticationContext;
public ConnectionState(LogDelegate logToServerHandler)
public ConnectionState(Socket clientSocket, IPEndPoint clientEndPoint, LogDelegate logToServerHandler)
{
ReceiveBuffer = new NBTConnectionReceiveBuffer();
SendQueue = new BlockingQueue<SessionPacket>();
m_clientSocket = clientSocket;
m_clientEndPoint = clientEndPoint;
m_receiveBuffer = new NBTConnectionReceiveBuffer();
m_sendQueue = new BlockingQueue<SessionPacket>();
LogToServerHandler = logToServerHandler;
Dialect = SMBDialect.NotSet;
}
public ConnectionState(ConnectionState state)
{
ClientSocket = state.ClientSocket;
ClientEndPoint = state.ClientEndPoint;
ReceiveBuffer = state.ReceiveBuffer;
SendQueue = state.SendQueue;
m_clientSocket = state.ClientSocket;
m_clientEndPoint = state.ClientEndPoint;
m_receiveBuffer = state.ReceiveBuffer;
m_sendQueue = state.SendQueue;
LogToServerHandler = state.LogToServerHandler;
Dialect = state.Dialect;
}
@ -70,6 +72,38 @@ namespace SMBLibrary.Server
LogToServer(severity, String.Format(message, args));
}
public Socket ClientSocket
{
get
{
return m_clientSocket;
}
}
public IPEndPoint ClientEndPoint
{
get
{
return m_clientEndPoint;
}
}
public NBTConnectionReceiveBuffer ReceiveBuffer
{
get
{
return m_receiveBuffer;
}
}
public BlockingQueue<SessionPacket> SendQueue
{
get
{
return m_sendQueue;
}
}
public string ConnectionIdentifier
{
get

View file

@ -115,11 +115,10 @@ namespace SMBLibrary.Server
// Windows will set the TCP keepalive timeout to 120 seconds for an SMB connection
SocketUtils.SetKeepAlive(clientSocket, TimeSpan.FromMinutes(2));
ConnectionState state = new ConnectionState(Log);
// Disable the Nagle Algorithm for this tcp socket:
clientSocket.NoDelay = true;
state.ClientSocket = clientSocket;
state.ClientEndPoint = clientSocket.RemoteEndPoint as IPEndPoint;
IPEndPoint clientEndPoint = (IPEndPoint)clientSocket.RemoteEndPoint;
ConnectionState state = new ConnectionState(clientSocket, clientEndPoint, Log);
state.LogToServer(Severity.Verbose, "New connection request");
Thread senderThread = new Thread(delegate()
{