by Lee Gillie [Lee at odp dot com] posted on 2005/08/12 |
|
I think I said the last post was a DATA channel problem. Obviously it is not.
When the FTPS client wants to end his session he issues a QUIT command. I process this by providing a sign off command, and then procede to close the upgraded SSL channel. By the way, this all works perfectly if the channel had NOT be upgraded to SSL.
Anyway, my code looks like this:
Private Function EndSession(ByVal WithSignoffMessage As Boolean) As Boolean
AcceptingCommands = False
If WithSignoffMessage Then
If config.SignOff.Length > 0 Then
Dim Line As String
Dim Lines() As String = Split(config.SignOff, vbCr)
For Each Line In Lines
SendLine(1000, "230-" & Line)
Next
End If
SendLine(1000, "221 Logged off.")
End If
PLog("Shutdown session socket...")
CommandSocket.Shutdown(SocketShutdown.Both)
PLog("Close session socket...")
CommandSocket.Close()
PLog("QUIT action completed.")
Return True
End Function
The call to CommandSocket.Shutdown is line 1441, where the exception occurs. Here is a stack dump of the exception:
09:13:54.57 <- 226 Transfer complete. Data Connection Closed.
09:15:15.50 -> QUIT
09:15:15.50 <- 221 Logged off.
09:15:15.50 Shutdown session socket...
09:15:15.55 CommandSessionThread: Org.Mentalis.Security.Ssl.Shared.SslException: An exception occurred ---> System.ObjectDisposedException: Cannot access a disposed object named "Org.Mentalis.Security.Cryptography.HMAC".
09:15:15.55 Object name: "Org.Mentalis.Security.Cryptography.HMAC".
09:15:15.55 at Org.Mentalis.Security.Cryptography.HMAC.Initialize() in D:\ODP\Core\seclib-1.0\seclib\Security\Cryptography\HMAC.cs:line 79
09:15:15.55 at Org.Mentalis.Security.Ssl.Shared.RecordLayer.WrapMessage(RecordMessage message) in D:\ODP\Core\seclib-1.0\seclib\Security\Ssl\Shared\RecordLayer.cs:line 188
09:15:15.55 --- End of inner exception stack trace ---
09:15:15.55 at Org.Mentalis.Security.Ssl.Shared.RecordLayer.WrapMessage(RecordMessage message) in D:\ODP\Core\seclib-1.0\seclib\Security\Ssl\Shared\RecordLayer.cs:line 228
09:15:15.55 at Org.Mentalis.Security.Ssl.Shared.RecordLayer.InternalEncryptBytes(Byte[] buffer, Int32 offset, Int32 size, ContentType type) in D:\ODP\Core\seclib-1.0\seclib\Security\Ssl\Shared\RecordLayer.cs:line 171
09:15:15.55 at Org.Mentalis.Security.Ssl.Shared.RecordLayer.EncryptBytes(Byte[] buffer, Int32 offset, Int32 size, ContentType type) in D:\ODP\Core\seclib-1.0\seclib\Security\Ssl\Shared\RecordLayer.cs:line 329
09:15:15.55 at Org.Mentalis.Security.Ssl.Shared.HandshakeLayer.GetControlBytes(ControlType type) in D:\ODP\Core\seclib-1.0\seclib\Security\Ssl\Shared\HandshakeLayer.cs:line 314
09:15:15.55 at Org.Mentalis.Security.Ssl.Shared.RecordLayer.GetControlBytes(ControlType type) in D:\ODP\Core\seclib-1.0\seclib\Security\Ssl\Shared\RecordLayer.cs:line 403
09:15:15.55 at Org.Mentalis.Security.Ssl.Shared.SocketController.BeginShutdown(AsyncCallback callback, Object state) in D:\ODP\Core\seclib-1.0\seclib\Security\Ssl\Shared\SocketController.cs:line 351
09:15:15.55 at Org.Mentalis.Security.Ssl.SecureSocket.BeginShutdown(AsyncCallback callback, Object state) in d:\odp\core\seclib-1.0\seclib\security\ssl\securesocket.cs:line 528
09:15:15.55 at Org.Mentalis.Security.Ssl.SecureSocket.Shutdown(SocketShutdown how) in d:\odp\core\seclib-1.0\seclib\security\ssl\securesocket.cs:line 507
09:15:15.55 at ODP.NMServe.CommandChannelSession.EndSession(Boolean WithSignoffMessage) in D:\ODP\Core\NetMover.NET\NMServe\CommandChannelSession.vb:line 1441
09:15:15.55 at ODP.NMServe.CommandChannelSession.Cmd_QUIT(Command CMD) in D:\ODP\Core\NetMover.NET\NMServe\CommandChannelSession.vb:line 783
09:15:15.55 at ODP.NMServe.CommandChannelSession.ProcessCommand(Command CMD) in D:\ODP\Core\NetMover.NET\NMServe\CommandChannelSession.vb:line 519
09:15:15.55 at ODP.NMServe.CommandChannelSession.CommandSessionThread() in D:\ODP\Core\NetMover.NET\NMServe\CommandChannelSession.vb:line 273
09:15:15.55 <- 221 Logged off due to catastrophic failure.
|