Fixed file transfer sequence bug

Esse commit está contido em:
Benjamin Dobell
2014-06-01 13:12:07 +10:00
commit 46d9a51e18
2 arquivos alterados com 11 adições e 13 exclusões
+7 -9
Ver Arquivo
@@ -1040,14 +1040,9 @@ bool BridgeManager::SendFile(FILE *file, unsigned int destination, unsigned int
{
bool isLastSequence = (sequenceIndex == sequenceCount - 1);
unsigned int sequenceSize = (isLastSequence) ? lastSequenceSize : fileTransferSequenceMaxLength;
unsigned int sequenceByteCount;
unsigned int sequenceTotalByteCount = sequenceSize * fileTransferPacketSize;
if (isLastSequence)
sequenceByteCount = ((partialPacketByteCount) ? lastSequenceSize - 1 : lastSequenceSize) * fileTransferPacketSize + partialPacketByteCount;
else
sequenceByteCount = fileTransferSequenceMaxLength * fileTransferPacketSize;
FlashPartFileTransferPacket *beginFileTransferPacket = new FlashPartFileTransferPacket(sequenceByteCount);
FlashPartFileTransferPacket *beginFileTransferPacket = new FlashPartFileTransferPacket(sequenceTotalByteCount);
success = SendPacket(beginFileTransferPacket);
delete beginFileTransferPacket;
@@ -1169,9 +1164,12 @@ bool BridgeManager::SendFile(FILE *file, unsigned int destination, unsigned int
previousPercent = currentPercent;
}
unsigned int sequenceEffectiveByteCount = (isLastSequence && partialPacketByteCount != 0) ?
fileTransferPacketSize * (lastSequenceSize - 1) + partialPacketByteCount : sequenceTotalByteCount;
if (destination == EndFileTransferPacket::kDestinationPhone)
{
EndPhoneFileTransferPacket *endPhoneFileTransferPacket = new EndPhoneFileTransferPacket(sequenceByteCount, 0, deviceType, fileIdentifier, isLastSequence);
EndPhoneFileTransferPacket *endPhoneFileTransferPacket = new EndPhoneFileTransferPacket(sequenceEffectiveByteCount, 0, deviceType, fileIdentifier, isLastSequence);
success = SendPacket(endPhoneFileTransferPacket, kDefaultTimeoutSend, kSendEmptyTransferBeforeAndAfter);
delete endPhoneFileTransferPacket;
@@ -1185,7 +1183,7 @@ bool BridgeManager::SendFile(FILE *file, unsigned int destination, unsigned int
}
else // destination == EndFileTransferPacket::kDestinationModem
{
EndModemFileTransferPacket *endModemFileTransferPacket = new EndModemFileTransferPacket(sequenceByteCount, 0, deviceType, isLastSequence);
EndModemFileTransferPacket *endModemFileTransferPacket = new EndModemFileTransferPacket(sequenceEffectiveByteCount, 0, deviceType, isLastSequence);
success = SendPacket(endModemFileTransferPacket, kDefaultTimeoutSend, kSendEmptyTransferBeforeAndAfter);
delete endModemFileTransferPacket;
+4 -4
Ver Arquivo
@@ -34,7 +34,7 @@ namespace Heimdall
{
public:
SendFilePartPacket(FILE *file, int size) : OutboundPacket(size)
SendFilePartPacket(FILE *file, unsigned int size) : OutboundPacket(size)
{
memset(data, 0, size);
@@ -45,13 +45,13 @@ namespace Heimdall
fseek(file, position, SEEK_SET);
// min(fileSize, size)
int bytesToRead = (fileSize < size) ? fileSize - position : size;
unsigned int bytesToRead = (fileSize < size) ? fileSize - position : size;
// bytesRead is discarded (it's just there to stop GCC warnings)
int bytesRead = fread(data, 1, bytesToRead, file);
unsigned int bytesRead = fread(data, 1, bytesToRead, file);
}
SendFilePartPacket(unsigned char *buffer, int size) : OutboundPacket(size)
SendFilePartPacket(unsigned char *buffer, unsigned int size) : OutboundPacket(size)
{
memcpy(data, buffer, size);
}