- transferRefNum := binary.BigEndian.Uint32(t.ReferenceNumber[:])
- fileTransfer := s.FileTransfers[transferRefNum]
+ defer func() {
+ s.mux.Lock()
+ delete(s.fileTransfers, t.ReferenceNumber)
+ s.mux.Unlock()
+
+ // Wait a few seconds before closing the connection: this is a workaround for problems
+ // observed with Windows clients where the client must initiate close of the TCP connection before
+ // the server does. This is gross and seems unnecessary. TODO: Revisit?
+ time.Sleep(3 * time.Second)
+ }()
+
+ s.mux.Lock()
+ fileTransfer, ok := s.fileTransfers[t.ReferenceNumber]
+ s.mux.Unlock()
+ if !ok {
+ return errors.New("invalid transaction ID")
+ }
+
+ defer func() {
+ fileTransfer.ClientConn.transfersMU.Lock()
+ delete(fileTransfer.ClientConn.transfers[fileTransfer.Type], t.ReferenceNumber)
+ fileTransfer.ClientConn.transfersMU.Unlock()
+ }()
+
+ rLogger := s.Logger.With(
+ "remoteAddr", ctx.Value(contextKeyReq).(requestCtx).remoteAddr,
+ "login", fileTransfer.ClientConn.Account.Login,
+ "name", string(fileTransfer.ClientConn.UserName),
+ )