- // delete single use transferRefNum
- delete(s.FileTransfers, transferRefNum)
+ // 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),
+ )
+
+ fullPath, err := readPath(s.Config.FileRoot, fileTransfer.FilePath, fileTransfer.FileName)
+ if err != nil {
+ return err
+ }