diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-04-13 13:30:12 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-04-13 13:30:12 +0000 |
| commit | 846e7c70f5278bcdfc518facd6a8f33ce71ce5b0 (patch) | |
| tree | dcce44138556a87de36d2dd8da0d83efc8203428 /src/ProtocolDetector.cc | |
| parent | 0516a07fa6db865b32a9585d59c31f67df3f6c77 (diff) | |
2008-04-13 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Implemented auto protocol detection.
Now you can do:
aria2c -Z http://host/file file1.torrent file2.metalink
(Note: -Z option is required for auto protcol detection.)
Then aria2c downloads 3 files simultaneously:
1. http://host/file
2. file1.torrent <-- read local torrent file
3. file2.metalink <-- read local Metalink file.
Same thing goes with -i option. Assume your uris.txt contans:
http://host/file
file1.torrent
file2.metalink
Then you can do: aria2c -i uris.txt
(Note: -Z option is not needed if -i option is given.)
* src/main.cc
* src/ProtocolDetector.{cc, h}
* test/ProtocolDetectorTest.cc
Diffstat (limited to 'src/ProtocolDetector.cc')
| -rw-r--r-- | src/ProtocolDetector.cc | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/ProtocolDetector.cc b/src/ProtocolDetector.cc new file mode 100644 index 00000000..9a01736f --- /dev/null +++ b/src/ProtocolDetector.cc @@ -0,0 +1,76 @@ +/* <!-- copyright */ +/* + * aria2 - The high speed download utility + * + * Copyright (C) 2006 Tatsuhiro Tsujikawa + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the + * OpenSSL library under certain conditions as described in each + * individual source file, and distribute linked combinations + * including the two. + * You must obey the GNU General Public License in all respects + * for all of the code used other than OpenSSL. If you modify + * file(s) with this exception, you may extend this exception to your + * version of the file(s), but you are not obligated to do so. If you + * do not wish to do so, delete this exception statement from your + * version. If you delete this exception statement from all source + * files in the program, then also delete it here. + */ +/* copyright --> */ +#include "ProtocolDetector.h" +#include "Request.h" +#include <cstring> +#include <fstream> +#include <iomanip> + +namespace aria2 { + +ProtocolDetector::ProtocolDetector() {} + +ProtocolDetector::~ProtocolDetector() {} + +bool ProtocolDetector::isStreamProtocol(const std::string& uri) const +{ + return Request().setUrl(uri); +} + +bool ProtocolDetector::guessTorrentFile(const std::string& uri) const +{ + std::ifstream in(uri.c_str()); + if(in) { + char head; + in >> head; + return head == 'd'; + } else { + return false; + } +} + +bool ProtocolDetector::guessMetalinkFile(const std::string& uri) const +{ + std::ifstream in(uri.c_str()); + if(in) { + char head[6]; + in >> std::setw(6) >> head; + return strcmp(head, "<?xml") == 0; + } else { + return false; + } +} + +} // namespace aria2 |
