Sfoglia il codice sorgente

Server: Prevented several ConnectionState members from being changed after instantiation

Tal Aloni 7 anni fa
parent
commit
d753135620

+ 46 - 12
SMBLibrary/Server/ConnectionState/ConnectionState.cs

@@ -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

+ 2 - 3
SMBLibrary/Server/SMBServer.cs

@@ -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()
             {