X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/d2810ae9038b057e8f18e8b495a57d8f96ae5be6..2d52424e94e617627e4438fd207ee94949409328:/hotline/transaction_handlers.go?ds=sidebyside diff --git a/hotline/transaction_handlers.go b/hotline/transaction_handlers.go index 90ca6de..5dc2be5 100644 --- a/hotline/transaction_handlers.go +++ b/hotline/transaction_handlers.go @@ -419,7 +419,7 @@ func HandleGetFileInfo(cc *ClientConn, t *Transaction) (res []Transaction, err e res = append(res, cc.NewReply(t, NewField(fieldFileName, fileName), - NewField(fieldFileTypeString, ffo.FlatFileInformationFork.TypeSignature), + NewField(fieldFileTypeString, ffo.FlatFileInformationFork.friendlyType()), NewField(fieldFileCreatorString, ffo.FlatFileInformationFork.CreatorSignature), NewField(fieldFileComment, ffo.FlatFileInformationFork.Comment), NewField(fieldFileType, ffo.FlatFileInformationFork.TypeSignature), @@ -1313,8 +1313,6 @@ func HandleDownloadFile(cc *ClientConn, t *Transaction) (res []Transaction, err fileName := t.GetField(fieldFileName).Data filePath := t.GetField(fieldFilePath).Data - // 2 bytes - // transferOptions := t.GetField(fieldFileTransferOptions).Data resumeData := t.GetField(fieldFileResumeData).Data var dataOffset int64 @@ -1353,13 +1351,26 @@ func HandleDownloadFile(cc *ClientConn, t *Transaction) (res []Transaction, err ft.fileResumeData = &frd } + xferSize := ffo.TransferSize() + + // Optional field for when a HL v1.5+ client requests file preview + // Used only for TEXT, JPEG, GIFF, BMP or PICT files + // The value will always be 2 + if t.GetField(fieldFileTransferOptions).Data != nil { + ft.options = t.GetField(fieldFileTransferOptions).Data + xferSize = ffo.FlatFileDataForkHeader.DataSize[:] + } + + cc.Server.mux.Lock() + defer cc.Server.mux.Unlock() cc.Server.FileTransfers[data] = ft + cc.Transfers[FileDownload] = append(cc.Transfers[FileDownload], ft) res = append(res, cc.NewReply(t, NewField(fieldRefNum, transactionRef), NewField(fieldWaitingCount, []byte{0x00, 0x00}), // TODO: Implement waiting count - NewField(fieldTransferSize, ffo.TransferSize()), + NewField(fieldTransferSize, xferSize), NewField(fieldFileSize, ffo.FlatFileDataForkHeader.DataSize[:]), )) @@ -1510,12 +1521,14 @@ func HandleUploadFile(cc *ClientConn, t *Transaction) (res []Transaction, err er transactionRef := cc.Server.NewTransactionRef() data := binary.BigEndian.Uint32(transactionRef) + cc.Server.mux.Lock() cc.Server.FileTransfers[data] = &FileTransfer{ FileName: fileName, FilePath: filePath, ReferenceNumber: transactionRef, Type: FileUpload, } + cc.Server.mux.Unlock() replyT := cc.NewReply(t, NewField(fieldRefNum, transactionRef))