pull/1/head
Tatsuhiro Tsujikawa 2006-02-22 12:16:10 +00:00
parent ebdb4b86cf
commit 27d392d5f2
7 changed files with 21 additions and 25 deletions

View File

@ -1,3 +1,9 @@
2006-02-22 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* main.cc: -s option now affects all URLs in command-line arguemtns.
* HttpResponseCommand.cc: Fixed bug that segment file is not loaded.
* message.h: Change file size related %d to %lld.
2006-02-21 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* FtpInitiateConnectionCommand.{h,cc}:

4
TODO
View File

@ -4,4 +4,6 @@
* Add SSL client cert support
* Better HTTP status handling
* Download files listed in a specifed file.
* check MD5 checksum
* check MD5 checksum
* Apply "split longest remianing time first" algorithm to SegmentMan.
* split algorithm must be separate class.

View File

@ -26,10 +26,10 @@
class DlAbortEx:public Exception {
public:
DlAbortEx():Exception() {}
DlAbortEx(string msg, ...):Exception() {
DlAbortEx(const char* msg, ...):Exception() {
va_list ap;
va_start(ap, msg);
setMsg(msg, ap);
setMsg(string(msg), ap);
va_end(ap);
}
};

View File

@ -26,7 +26,7 @@
class DlRetryEx:public Exception {
public:
DlRetryEx():Exception() {}
DlRetryEx(string msg, ...):Exception() {
DlRetryEx(const char* msg, ...):Exception() {
va_list ap;
va_start(ap, msg);
setMsg(msg, ap);

View File

@ -68,10 +68,6 @@ bool HttpResponseCommand::executeInternal(Segment seg) {
if(req->getFile() != e->segmentMan->filename) {
throw new DlAbortEx(EX_FILENAME_MISMATCH, req->getFile().c_str(), e->segmentMan->filename.c_str());
}
long long int size = headers.getFirstAsLLInt("Content-Length");
if(e->segmentMan->totalSize != size) {
throw new DlAbortEx(EX_SIZE_MISMATCH, e->segmentMan->totalSize, size);
}
createHttpDownloadCommand();
return true;
}
@ -102,10 +98,8 @@ bool HttpResponseCommand::handleDefaultEncoding(const HttpHeader& headers) {
bool segFileExists = e->segmentMan->segmentFileExists();
e->segmentMan->downloadStarted = true;
if(segFileExists) {
e->segmentMan->load();
e->diskWriter->openExistingFile(e->segmentMan->getFilePath());
if(e->segmentMan->totalSize != size) {
return new DlAbortEx(EX_SIZE_MISMATCH, e->segmentMan->totalSize, size);
}
// send request again to the server with Range header
return prepareForRetry(0);
} else {

View File

@ -107,8 +107,8 @@ void showUsage() {
cout << " log is written to stdout." << endl;
cout << " -D, --daemon Run as daemon." << endl;
cout << " -s, --split=N Download a file using s connections. s must be" << endl;
cout << " between 1 and 5. If this option is specified the" << endl;
cout << " first URL is used, and the other URLs are ignored." << endl;
cout << " between 1 and 5. This option affects all URLs." << endl;
cout << " Thus, aria2 connects to each URL with N connections." << endl;
cout << " --retry-wait=SEC Set amount of time in second between requests" << endl;
cout << " for errors. Specify a value between 0 and 60." << endl;
cout << " Default: 5" << endl;
@ -163,7 +163,7 @@ int main(int argc, char* argv[]) {
string logfile;
string dir;
string ufilename;
int split = 0;
int split = 1;
bool daemonMode = false;
string referer;
@ -393,7 +393,6 @@ int main(int argc, char* argv[]) {
} else {
logger = new SimpleLogger("/dev/null");
}
e = new DownloadEngine();
e->logger = logger;
e->option = op;
@ -404,16 +403,11 @@ int main(int argc, char* argv[]) {
e->segmentMan->logger = logger;
e->segmentMan->option = op;
vector<Request*> requests;
if(split > 0) {
for(int i = 1; i <= split; i++) {
addCommand(i, argv[optind], referer, requests);
}
} else {
for(int i = 1; optind < argc; i++) {
addCommand(i, argv[optind++], referer, requests);
for(int i = 1; optind+i-1 < argc; i++) {
for(int s = 1; s <= split; s++) {
addCommand(split*(i-1)+s, argv[optind+i-1], referer, requests);
}
}
struct sigaction sigact;
sigact.sa_handler = handler;
sigact.sa_flags = 0;

View File

@ -52,9 +52,9 @@
#define EX_CONNECTION_FAILED "Connection failed."
#define EX_FILENAME_MISMATCH "The requested filename and the previously registered one are not same. %s != %s"
#define EX_BAD_STATUS "The response status is not successful. status = %d"
#define EX_TOO_LARGE_FILE "Too large file size. size = %d"
#define EX_TOO_LARGE_FILE "Too large file size. size = %lld"
#define EX_TRANSFER_ENCODING_NOT_SUPPORTED "Transfer encoding %s is not supported."
#define EX_SSL_INIT_FAILURE "SSL initialization failed."
#define EX_SIZE_MISMATCH "Size mismatch %d != %d"
#define EX_SIZE_MISMATCH "Size mismatch %lld != %lld"
#endif // _D_MESSAGE_H_