summaryrefslogtreecommitdiff
path: root/src/MultiDiskWriter.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2006-04-16 14:38:19 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2006-04-16 14:38:19 +0000
commit2a84b9de43c759fb93aa7a0bb2d22d4b5f37af4e (patch)
tree8d12afe1fe42fb6903b900f1a4e3080f6bc2fcd1 /src/MultiDiskWriter.cc
parent58633887e90b26c89dcf871dfa4873b73f4c5f6a (diff)
2006-04-16 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* src/TorrentConsoleDownloadEngine.cc (onPartialDownloadingCompletes): Renamed as onSelectiveDownloadingCompletes. (onSelectiveDownloadingCompletes): Updated message. To add DiskAdaptor which abstract DiskWriter family: * src/PeerConnection.cc: Use diskAdaptor instead of diskWriter. * src/PeerInteractionCommand.cc: Use diskAdaptor instead of diskWriter. * src/BitfieldMan.cc (isAllBitSet): bug fix. * src/TorrentMan.cc : Included CopyDiskAdaptor.h, DirectDiskAdaptor.h, MultiDiskAdaptor.h. (readFileEntry): Changed its arguments. (setup): setupDiskWriter is merged into this function. (setupDiskWriter): Removed. (setFileFilter): New function. (readFileEntryFromMetaInfoFile): Updated according to the changes made in readFileEntry. (getFilePath): Removed. (getTempFilePath): Removed. (getSegmentFilePath): Updated due to the removal of getFilePath. (fixFilename): Removed. (copySingleFile): Removed. (splitMultiFile): Removed. (deleteTempFile): Removed. (setFileEntriesToDownload): Removed. (isPartialDownloadingMode): Renamed as isSelectiveDownloadingMode. (isSelectiveDownloadingMode): New function. (setAllMultiFileRequestedState): Removed. (finishPartialDownloadingMode): Renamed as finishSelectiveDownloadingMode. (finishSelectiveDownloadingMode): New function. (getPartialTotalLength): Renamed as getSelectedTotalLength. (getSelectedTotalLength): New function. (onDownloadComplete): Use diskAdaptor. * src/MultiDiskWriter.cc (Constructor): Added the argument pieceLength (Range): Removed. (setMultiFileEntries): Renamed as setFileEntries. (setFileEntries): New function. * src/MultiDiskWriter.h [DiskWriterEntry](enabled): Removed. (pieceLength): New variable. * src/main.cc (printDownloadCompeleteMessage): New function. (torrentHandler): Use diskAdaptor instead of diskWriter. (main): Renamed torrent-show-files to show-files. Rewritten file contents listing. * src/TorrentMan.h (FileEntry): Removed. (multiFileTopDir): Removed. (multiFileEntries): Removed. (diskWriter): Removed. (diskAdaptor): New variable. * src/DefaultDiskWriter.h (totalLength): New variable. * src/DefaultDiskWriter.cc (initAndOpenFile): Added ftruncate. * src/TorrentDownloadEngine.cc (onEndOfRun): Use diskAdaptor instead of diskWriter. * src/TorrentConsoleDownloadEngine.h (partialDownloadLengthDiff): Renamed as selectedDownloadLengthDiff. (partialTotalLength): Renamed as selectedTotalLength. * src/AbstractDiskWriter.cc (openFile): If file exists, call openExistingFile, otherwise call initAndOpenFile. (closeFile): fd > 0, not fd != 0. * src/prefs.h (PREF_TORRENT_SHOW_FILES): Renamed as PREF_SHOW_FILES (PREF_SHOW_FILES): New definition.
Diffstat (limited to 'src/MultiDiskWriter.cc')
-rw-r--r--src/MultiDiskWriter.cc70
1 files changed, 9 insertions, 61 deletions
diff --git a/src/MultiDiskWriter.cc b/src/MultiDiskWriter.cc
index 7172b809..922eed8e 100644
--- a/src/MultiDiskWriter.cc
+++ b/src/MultiDiskWriter.cc
@@ -24,7 +24,7 @@
#include "Util.h"
#include <errno.h>
-MultiDiskWriter::MultiDiskWriter() {
+MultiDiskWriter::MultiDiskWriter(int pieceLength):pieceLength(pieceLength) {
#ifdef ENABLE_SHA1DIGEST
sha1DigestInit(ctx);
#endif // ENABLE_SHA1DIGEST
@@ -37,63 +37,26 @@ MultiDiskWriter::~MultiDiskWriter() {
#endif // ENABLE_SHA1DIGEST
}
-typedef struct {
- long long int blockOffset;
- long long int length;
-} Range;
-
-typedef deque<Range> Ranges;
-
void MultiDiskWriter::clearEntries() {
for(DiskWriterEntries::iterator itr = diskWriterEntries.begin();
itr != diskWriterEntries.end(); itr++) {
- if((*itr)->enabled) {
- (*itr)->diskWriter->closeFile();
- }
delete *itr;
}
diskWriterEntries.clear();
}
-void MultiDiskWriter::setMultiFileEntries(const MultiFileEntries& multiFileEntries, int pieceLength) {
+void MultiDiskWriter::setFileEntries(const FileEntries& fileEntries) {
clearEntries();
- Ranges ranges;
- for(MultiFileEntries::const_iterator itr = multiFileEntries.begin();
- itr != multiFileEntries.end(); itr++) {
- if(itr->requested) {
- Range range;
- range.blockOffset = (itr->offset/pieceLength)*pieceLength;
- range.length = ((itr->offset+itr->length)/pieceLength+
- ((itr->offset+itr->length)%pieceLength ? 1 : 0))*pieceLength-range.blockOffset;
- ranges.push_back(range);
- }
- }
- Ranges::const_iterator ritr = ranges.begin();
- for(MultiFileEntries::const_iterator itr = multiFileEntries.begin();
- itr != multiFileEntries.end(); itr++) {
- DiskWriterEntry* entry;
- if(ritr != ranges.end() &&
- // !(ritr->blockOffset+ritr->length-1 < itr->offset ||
- // itr->offset+itr->length-1 < ritr->blockOffset)) {
- itr->offset < ritr->blockOffset+ritr->length &&
- ritr->blockOffset < itr->offset+itr->length) {
-
- entry = new DiskWriterEntry(*itr, true);
- for(;ritr->blockOffset+ritr->length <= itr->offset+itr->length &&
- ritr != ranges.end(); ritr++);
- } else {
- entry = new DiskWriterEntry(*itr, false);
- }
- diskWriterEntries.push_back(entry);
+ for(FileEntries::const_iterator itr = fileEntries.begin();
+ itr != fileEntries.end(); itr++) {
+ diskWriterEntries.push_back(new DiskWriterEntry(*itr));
}
}
void MultiDiskWriter::openFile(const string& filename) {
for(DiskWriterEntries::iterator itr = diskWriterEntries.begin();
itr != diskWriterEntries.end(); itr++) {
- if((*itr)->enabled) {
- (*itr)->diskWriter->openFile(filename+"/"+(*itr)->fileEntry.path);
- }
+ (*itr)->diskWriter->openFile(filename+"/"+(*itr)->fileEntry.path);
}
}
@@ -101,27 +64,21 @@ void MultiDiskWriter::openFile(const string& filename) {
void MultiDiskWriter::initAndOpenFile(string filename) {
for(DiskWriterEntries::iterator itr = diskWriterEntries.begin();
itr != diskWriterEntries.end(); itr++) {
- if((*itr)->enabled) {
- (*itr)->diskWriter->initAndOpenFile(filename+"/"+(*itr)->fileEntry.path);
- }
+ (*itr)->diskWriter->initAndOpenFile(filename+"/"+(*itr)->fileEntry.path);
}
}
void MultiDiskWriter::closeFile() {
for(DiskWriterEntries::iterator itr = diskWriterEntries.begin();
itr != diskWriterEntries.end(); itr++) {
- if((*itr)->enabled) {
- (*itr)->diskWriter->closeFile();
- }
+ (*itr)->diskWriter->closeFile();
}
}
void MultiDiskWriter::openExistingFile(string filename) {
for(DiskWriterEntries::iterator itr = diskWriterEntries.begin();
itr != diskWriterEntries.end(); itr++) {
- if((*itr)->enabled) {
- (*itr)->diskWriter->openExistingFile(filename+"/"+(*itr)->fileEntry.path);
- }
+ (*itr)->diskWriter->openExistingFile(filename+"/"+(*itr)->fileEntry.path);
}
}
@@ -133,9 +90,6 @@ void MultiDiskWriter::writeData(const char* data, int len, long long int positio
for(DiskWriterEntries::iterator itr = diskWriterEntries.begin();
itr != diskWriterEntries.end() && rem != 0; itr++) {
if(isInRange(*itr, offset) || writing) {
- if(!(*itr)->enabled) {
- throw new DlAbortEx("invalid offset or length. offset = %lld", offset);
- }
int writeLength = calculateLength(*itr, fileOffset, rem);
(*itr)->diskWriter->writeData(data+(len-rem), writeLength, fileOffset);
rem -= writeLength;
@@ -174,9 +128,6 @@ int MultiDiskWriter::readData(char* data, int len, long long int position) {
for(DiskWriterEntries::iterator itr = diskWriterEntries.begin();
itr != diskWriterEntries.end() && rem != 0; itr++) {
if(isInRange(*itr, offset) || reading) {
- if(!(*itr)->enabled) {
- throw new DlAbortEx("invalid offset or length. offset = %lld", offset);
- }
int readLength = calculateLength((*itr), fileOffset, rem);
totalReadLength += (*itr)->diskWriter->readData(data+(len-rem), readLength, fileOffset);
rem -= readLength;
@@ -223,9 +174,6 @@ string MultiDiskWriter::sha1Sum(long long int offset, long long int length) {
for(DiskWriterEntries::iterator itr = diskWriterEntries.begin();
itr != diskWriterEntries.end() && rem != 0; itr++) {
if(isInRange(*itr, offset) || reading) {
- if(!(*itr)->enabled) {
- throw new DlAbortEx("invalid offset or length. offset = %lld", offset);
- }
int readLength = calculateLength((*itr), fileOffset, rem);
hashUpdate(*itr, fileOffset, readLength);
rem -= readLength;