diff --git a/SMBLibrary/Server/ConnectionState/ConnectionState.cs b/SMBLibrary/Server/ConnectionState/ConnectionState.cs index e4a791b..79b5a53 100644 --- a/SMBLibrary/Server/ConnectionState/ConnectionState.cs +++ b/SMBLibrary/Server/ConnectionState/ConnectionState.cs @@ -24,6 +24,7 @@ namespace SMBLibrary.Server private BlockingQueue m_sendQueue; private DateTime m_creationDT; private DateTime m_lastReceiveDT; + private Reference m_lastSendDTRef; // We must use a reference because the sender thread will keep using the original ConnectionState object private LogDelegate LogToServerHandler; public SMBDialect Dialect; public GSSContext AuthenticationContext; @@ -36,6 +37,7 @@ namespace SMBLibrary.Server m_sendQueue = new BlockingQueue(); m_creationDT = DateTime.UtcNow; m_lastReceiveDT = DateTime.UtcNow; + m_lastSendDTRef = DateTime.UtcNow; LogToServerHandler = logToServerHandler; Dialect = SMBDialect.NotSet; } @@ -48,6 +50,7 @@ namespace SMBLibrary.Server m_sendQueue = state.SendQueue; m_creationDT = state.CreationDT; m_lastReceiveDT = state.LastReceiveDT; + m_lastSendDTRef = state.LastSendDTRef; LogToServerHandler = state.LogToServerHandler; Dialect = state.Dialect; } @@ -126,11 +129,32 @@ namespace SMBLibrary.Server } } + public DateTime LastSendDT + { + get + { + return LastSendDTRef.Value; + } + } + + internal Reference LastSendDTRef + { + get + { + return m_lastSendDTRef; + } + } + public void UpdateLastReceiveDT() { m_lastReceiveDT = DateTime.UtcNow; } + public void UpdateLastSendDT() + { + m_lastSendDTRef.Value = DateTime.UtcNow; + } + public string ConnectionIdentifier { get diff --git a/SMBLibrary/Server/SMBServer.cs b/SMBLibrary/Server/SMBServer.cs index dafc808..3aa7a63 100644 --- a/SMBLibrary/Server/SMBServer.cs +++ b/SMBLibrary/Server/SMBServer.cs @@ -399,6 +399,7 @@ namespace SMBLibrary.Server m_connectionManager.ReleaseConnection(state.ClientEndPoint); return; } + state.UpdateLastSendDT(); } } diff --git a/Utilities/Generics/Reference.cs b/Utilities/Generics/Reference.cs new file mode 100644 index 0000000..4698a2b --- /dev/null +++ b/Utilities/Generics/Reference.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; + +namespace Utilities +{ + public class Reference where T : struct + { + T m_value; + + public Reference(T value) + { + m_value = value; + } + + public T Value + { + get { return m_value; } + set { m_value = value; } + } + + public override string ToString() + { + return m_value.ToString(); + } + + public static implicit operator T(Reference wrapper) + { + return wrapper.Value; + } + + public static implicit operator Reference(T value) + { + return new Reference(value); + } + } +} diff --git a/Utilities/Utilities.csproj b/Utilities/Utilities.csproj index 90d8236..7e33e8c 100644 --- a/Utilities/Utilities.csproj +++ b/Utilities/Utilities.csproj @@ -46,6 +46,7 @@ +