summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2006-04-17 14:15:36 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2006-04-17 14:15:36 +0000
commitdcc225a145aa784c85472e9618cd5fdf96a271b6 (patch)
tree54459ad6e48e03a59e0ffc701b4fefdd144bff32
parent28a82bfa4ad7a3b905f00d023f7be7096a2f75d4 (diff)
* src/TrackerInitCommand.cc (TrackerInitCommand): Added a "key"
parameter to a tracker request. * src/TorrentMan.cc (readFileEntryFromMetaInfoFile): Bug fix. * src/TrackerWatcherCommand.cc (execute): Call req->resetTryCount(). * src/main.cc (setSignalHander): New function. (main): Added a handler for SIGTERM. (handler): Updated message. (torrentHandler): Updated message.
-rw-r--r--ChangeLog15
-rw-r--r--TODO4
-rw-r--r--src/TorrentMan.cc6
-rw-r--r--src/TrackerInitCommand.cc3
-rw-r--r--src/TrackerWatcherCommand.cc1
-rw-r--r--src/main.cc40
6 files changed, 44 insertions, 25 deletions
diff --git a/ChangeLog b/ChangeLog
index 422648c7..ae748c76 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2006-04-17 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
+
+ * src/TrackerInitCommand.cc (TrackerInitCommand): Added a "key"
+ parameter to a tracker request.
+
+ * src/TorrentMan.cc (readFileEntryFromMetaInfoFile): Bug fix.
+
+ * src/TrackerWatcherCommand.cc (execute): Call req->resetTryCount().
+
+ * src/main.cc (setSignalHander): New function.
+ (main): Added a handler for SIGTERM.
+ (handler): Updated message.
+ (torrentHandler): Updated message.
+
+
2006-04-16 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* src/TorrentConsoleDownloadEngine.cc
diff --git a/TODO b/TODO
index 92870030..621eeaac 100644
--- a/TODO
+++ b/TODO
@@ -13,11 +13,9 @@
* Distinguish seeder from leecher
0.4.0 release
-* Add selective downloading mode
* try to use ftruncate to allocate file.
-* test all download mode
* Add loggerfactory
-* Add SIGTERM signal handler
+* add log message when download completes
0.4.1 release
* Add port command-line option
diff --git a/src/TorrentMan.cc b/src/TorrentMan.cc
index f076feb6..9c8f06a0 100644
--- a/src/TorrentMan.cc
+++ b/src/TorrentMan.cc
@@ -427,9 +427,11 @@ FileEntries TorrentMan::readFileEntryFromMetaInfoFile(const string& metaInfoFile
Dictionary* topDic = (Dictionary*)MetaFileUtil::parseMetaFile(metaInfoFile);
const Dictionary* infoDic = (const Dictionary*)topDic->get("info");
FileEntries fileEntries;
- Directory* topDir;
+ Directory* topDir = NULL;
readFileEntry(fileEntries, &topDir, infoDic, metaInfoFile);
- delete topDir;
+ if(topDir != NULL) {
+ delete topDir;
+ }
return fileEntries;
}
diff --git a/src/TrackerInitCommand.cc b/src/TrackerInitCommand.cc
index 4f254c06..565077ce 100644
--- a/src/TrackerInitCommand.cc
+++ b/src/TrackerInitCommand.cc
@@ -61,7 +61,8 @@ bool TrackerInitCommand::execute() {
"downloaded="+Util::llitos(e->torrentMan->getSessionDownloadLength())+"&"+
"left="+(e->torrentMan->getTotalLength()-e->torrentMan->getDownloadLength() <= 0
? "0" : Util::llitos(e->torrentMan->getTotalLength()-e->torrentMan->getDownloadLength()))+"&"+
- "compact=1";
+ "compact=1"+"&"+
+ "key="+e->torrentMan->peerId;
if(!event.empty()) {
url += string("&")+"event="+event;
}
diff --git a/src/TrackerWatcherCommand.cc b/src/TrackerWatcherCommand.cc
index 41b8b6ef..c14e71ee 100644
--- a/src/TrackerWatcherCommand.cc
+++ b/src/TrackerWatcherCommand.cc
@@ -30,6 +30,7 @@ TrackerWatcherCommand::TrackerWatcherCommand(int cuid, Request* req,
TrackerWatcherCommand::~TrackerWatcherCommand() {}
bool TrackerWatcherCommand::execute() {
+ req->resetTryCount();
Command* command = new TrackerInitCommand(e->torrentMan->getNewCuid(),
req,
e);
diff --git a/src/main.cc b/src/main.cc
index 03d2e58f..69fab73a 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -71,6 +71,14 @@ void printDownloadAbortMessage() {
printf(_("\nThe download was not complete because of errors. Check the log.\n"));
}
+void setSignalHander(int signal, void (*handler)(int)) {
+ struct sigaction sigact;
+ sigact.sa_handler = handler;
+ sigact.sa_flags = 0;
+ sigemptyset(&sigact.sa_mask);
+ sigaction(signal, &sigact, NULL);
+}
+
void clearRequest(Request* req) {
delete(req);
}
@@ -79,16 +87,19 @@ DownloadEngine* e;
TorrentDownloadEngine* te;
void handler(int signal) {
- cout << _("\nSIGINT signal received.") << endl;
+ printf(_("\nstopping application...\n"));
+ fflush(stdout);
e->segmentMan->save();
if(e->diskWriter != NULL) {
e->diskWriter->closeFile();
}
+ printf("done\n");
exit(0);
}
void torrentHandler(int signal) {
- cout << _("\nSIGINT signal received.") << endl;
+ printf(_("\nstopping application...\n"));
+ fflush(stdout);
if(te->torrentMan->diskAdaptor != NULL) {
te->torrentMan->diskAdaptor->closeFile();
}
@@ -99,7 +110,7 @@ void torrentHandler(int signal) {
} else {
te->torrentMan->save();
}
-
+ printf("done\n");
exit(0);
}
@@ -533,21 +544,14 @@ int main(int argc, char* argv[]) {
SegmentSplitter* splitter = new SplitSlowestSegmentSplitter();
splitter->setMinSegmentSize(op->getAsLLInt(PREF_MIN_SEGMENT_SIZE));
- struct sigaction sigactIgn;
- sigactIgn.sa_handler = SIG_IGN;
- sigactIgn.sa_flags = 0;
- sigemptyset(&sigactIgn.sa_mask);
- sigaction(SIGPIPE, &sigactIgn, NULL);
+ setSignalHander(SIGPIPE, SIG_IGN);
bool readyToTorrentMode = false;
string downloadedTorrentFile;
if(torrentFile.empty()) {
- struct sigaction sigact;
- sigact.sa_handler = handler;
- sigact.sa_flags = 0;
- sigemptyset(&sigact.sa_mask);
- sigaction(SIGINT, &sigact, NULL);
-
+ setSignalHander(SIGINT, handler);
+ setSignalHander(SIGTERM, handler);
+
splitter->logger = logger;
e = new ConsoleDownloadEngine();
e->logger = logger;
@@ -590,11 +594,9 @@ int main(int argc, char* argv[]) {
if(!torrentFile.empty() || followTorrent && readyToTorrentMode) {
try {
//op->put(PREF_MAX_TRIES, "0");
- struct sigaction sigact;
- sigact.sa_handler = torrentHandler;
- sigact.sa_flags = 0;
- sigemptyset(&sigact.sa_mask);
- sigaction(SIGINT, &sigact, NULL);
+ setSignalHander(SIGINT, torrentHandler);
+ setSignalHander(SIGTERM, torrentHandler);
+
Request* req = new Request();
req->isTorrent = true;
req->setTrackerEvent(Request::STARTED);