diff options
author | Benjamin Dobell <benjamin.dobell+git@glassechidna.com.au> | 2014-06-01 13:12:07 +1000 |
---|---|---|
committer | Benjamin Dobell <benjamin.dobell+git@glassechidna.com.au> | 2014-06-01 13:12:07 +1000 |
commit | 46d9a51e18d260e416479432fec50c6e601eb3ce (patch) | |
tree | cefc1d72db4568715dfdcd737eba46ae289d1d52 /heimdall/source/BridgeManager.cpp | |
parent | 7d6ddcd5d54e30e7437f0ba1aa4676224e68bf6a (diff) | |
download | external_heimdall-46d9a51e18d260e416479432fec50c6e601eb3ce.zip external_heimdall-46d9a51e18d260e416479432fec50c6e601eb3ce.tar.gz external_heimdall-46d9a51e18d260e416479432fec50c6e601eb3ce.tar.bz2 |
Fixed file transfer sequence bug
Diffstat (limited to 'heimdall/source/BridgeManager.cpp')
-rw-r--r-- | heimdall/source/BridgeManager.cpp | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/heimdall/source/BridgeManager.cpp b/heimdall/source/BridgeManager.cpp index 96c22fb..32807ca 100644 --- a/heimdall/source/BridgeManager.cpp +++ b/heimdall/source/BridgeManager.cpp @@ -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; |