summaryrefslogtreecommitdiff
path: root/src/RpcMethodImpl.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2013-05-16 23:09:19 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2013-05-16 23:09:19 +0900
commitc7c4d46672a12eec9531723037ee1fb7cd5028b4 (patch)
tree698b38190c44204d4b0dd78e65b7c3dbfe002a25 /src/RpcMethodImpl.cc
parentbe4c9aa95e4ee240507d91de2925a6d6a2394ebf (diff)
Add changeOption and DownloadHandle::getOption API
In aria2c.rst, define section label for "Input File" section so that it can be referenced from other document.
Diffstat (limited to 'src/RpcMethodImpl.cc')
-rw-r--r--src/RpcMethodImpl.cc156
1 files changed, 77 insertions, 79 deletions
diff --git a/src/RpcMethodImpl.cc b/src/RpcMethodImpl.cc
index c88753f7..1142c445 100644
--- a/src/RpcMethodImpl.cc
+++ b/src/RpcMethodImpl.cc
@@ -1082,85 +1082,6 @@ SharedHandle<ValueBase> RemoveDownloadResultRpcMethod::process
return VLB_OK;
}
-namespace {
-void changeOption
-(const SharedHandle<RequestGroup>& group,
- const Option& option,
- DownloadEngine* e)
-{
- const SharedHandle<DownloadContext>& dctx = group->getDownloadContext();
- const SharedHandle<Option>& grOption = group->getOption();
- grOption->merge(option);
- if(option.defined(PREF_CHECKSUM)) {
- const std::string& checksum = grOption->get(PREF_CHECKSUM);
- std::pair<Scip, Scip> p;
- util::divide(p, checksum.begin(), checksum.end(), '=');
- std::string hashType(p.first.first, p.first.second);
- util::lowercase(hashType);
- dctx->setDigest(hashType, util::fromHex(p.second.first, p.second.second));
- }
- if(option.defined(PREF_SELECT_FILE)) {
- SegList<int> sgl;
- util::parseIntSegments(sgl, grOption->get(PREF_SELECT_FILE));
- sgl.normalize();
- dctx->setFileFilter(sgl);
- }
- if(option.defined(PREF_SPLIT)) {
- group->setNumConcurrentCommand(grOption->getAsInt(PREF_SPLIT));
- }
- if(option.defined(PREF_MAX_CONNECTION_PER_SERVER)) {
- int maxConn = grOption->getAsInt(PREF_MAX_CONNECTION_PER_SERVER);
- const std::vector<SharedHandle<FileEntry> >& files = dctx->getFileEntries();
- for(std::vector<SharedHandle<FileEntry> >::const_iterator i = files.begin(),
- eoi = files.end(); i != eoi; ++i) {
- (*i)->setMaxConnectionPerServer(maxConn);
- }
- }
- if(option.defined(PREF_DIR) || option.defined(PREF_OUT)) {
- if(dctx->getFileEntries().size() == 1
-#ifdef ENABLE_BITTORRENT
- && !dctx->hasAttribute(CTX_ATTR_BT)
-#endif // ENABLE_BITTORRENT
- ) {
- dctx->getFirstFileEntry()->setPath
- (grOption->blank(PREF_OUT) ? A2STR::NIL :
- util::applyDir(grOption->get(PREF_DIR), grOption->get(PREF_OUT)));
- }
- }
-#ifdef ENABLE_BITTORRENT
- if(option.defined(PREF_DIR) || option.defined(PREF_INDEX_OUT)) {
- if(dctx->hasAttribute(CTX_ATTR_BT)) {
- std::istringstream indexOutIn(grOption->get(PREF_INDEX_OUT));
- std::vector<std::pair<size_t, std::string> > indexPaths =
- util::createIndexPaths(indexOutIn);
- for(std::vector<std::pair<size_t, std::string> >::const_iterator i =
- indexPaths.begin(), eoi = indexPaths.end(); i != eoi; ++i) {
- dctx->setFilePathWithIndex
- ((*i).first,
- util::applyDir(grOption->get(PREF_DIR), (*i).second));
- }
- }
- }
-#endif // ENABLE_BITTORRENT
- if(option.defined(PREF_MAX_DOWNLOAD_LIMIT)) {
- group->setMaxDownloadSpeedLimit
- (grOption->getAsInt(PREF_MAX_DOWNLOAD_LIMIT));
- }
- if(option.defined(PREF_MAX_UPLOAD_LIMIT)) {
- group->setMaxUploadSpeedLimit(grOption->getAsInt(PREF_MAX_UPLOAD_LIMIT));
- }
-#ifdef ENABLE_BITTORRENT
- const SharedHandle<BtObject>& btObject =
- e->getBtRegistry()->get(group->getGID());
- if(btObject) {
- if(option.defined(PREF_BT_MAX_PEERS)) {
- btObject->btRuntime->setMaxPeers(grOption->getAsInt(PREF_BT_MAX_PEERS));
- }
- }
-#endif // ENABLE_BITTORRENT
-}
-} // namespace
-
SharedHandle<ValueBase> ChangeOptionRpcMethod::process
(const RpcRequest& req, DownloadEngine* e)
{
@@ -1544,4 +1465,81 @@ bool pauseRequestGroup
}
}
+void changeOption
+(const SharedHandle<RequestGroup>& group,
+ const Option& option,
+ DownloadEngine* e)
+{
+ const SharedHandle<DownloadContext>& dctx = group->getDownloadContext();
+ const SharedHandle<Option>& grOption = group->getOption();
+ grOption->merge(option);
+ if(option.defined(PREF_CHECKSUM)) {
+ const std::string& checksum = grOption->get(PREF_CHECKSUM);
+ std::pair<Scip, Scip> p;
+ util::divide(p, checksum.begin(), checksum.end(), '=');
+ std::string hashType(p.first.first, p.first.second);
+ util::lowercase(hashType);
+ dctx->setDigest(hashType, util::fromHex(p.second.first, p.second.second));
+ }
+ if(option.defined(PREF_SELECT_FILE)) {
+ SegList<int> sgl;
+ util::parseIntSegments(sgl, grOption->get(PREF_SELECT_FILE));
+ sgl.normalize();
+ dctx->setFileFilter(sgl);
+ }
+ if(option.defined(PREF_SPLIT)) {
+ group->setNumConcurrentCommand(grOption->getAsInt(PREF_SPLIT));
+ }
+ if(option.defined(PREF_MAX_CONNECTION_PER_SERVER)) {
+ int maxConn = grOption->getAsInt(PREF_MAX_CONNECTION_PER_SERVER);
+ const std::vector<SharedHandle<FileEntry> >& files = dctx->getFileEntries();
+ for(std::vector<SharedHandle<FileEntry> >::const_iterator i = files.begin(),
+ eoi = files.end(); i != eoi; ++i) {
+ (*i)->setMaxConnectionPerServer(maxConn);
+ }
+ }
+ if(option.defined(PREF_DIR) || option.defined(PREF_OUT)) {
+ if(dctx->getFileEntries().size() == 1
+#ifdef ENABLE_BITTORRENT
+ && !dctx->hasAttribute(CTX_ATTR_BT)
+#endif // ENABLE_BITTORRENT
+ ) {
+ dctx->getFirstFileEntry()->setPath
+ (grOption->blank(PREF_OUT) ? A2STR::NIL :
+ util::applyDir(grOption->get(PREF_DIR), grOption->get(PREF_OUT)));
+ }
+ }
+#ifdef ENABLE_BITTORRENT
+ if(option.defined(PREF_DIR) || option.defined(PREF_INDEX_OUT)) {
+ if(dctx->hasAttribute(CTX_ATTR_BT)) {
+ std::istringstream indexOutIn(grOption->get(PREF_INDEX_OUT));
+ std::vector<std::pair<size_t, std::string> > indexPaths =
+ util::createIndexPaths(indexOutIn);
+ for(std::vector<std::pair<size_t, std::string> >::const_iterator i =
+ indexPaths.begin(), eoi = indexPaths.end(); i != eoi; ++i) {
+ dctx->setFilePathWithIndex
+ ((*i).first,
+ util::applyDir(grOption->get(PREF_DIR), (*i).second));
+ }
+ }
+ }
+#endif // ENABLE_BITTORRENT
+ if(option.defined(PREF_MAX_DOWNLOAD_LIMIT)) {
+ group->setMaxDownloadSpeedLimit
+ (grOption->getAsInt(PREF_MAX_DOWNLOAD_LIMIT));
+ }
+ if(option.defined(PREF_MAX_UPLOAD_LIMIT)) {
+ group->setMaxUploadSpeedLimit(grOption->getAsInt(PREF_MAX_UPLOAD_LIMIT));
+ }
+#ifdef ENABLE_BITTORRENT
+ const SharedHandle<BtObject>& btObject =
+ e->getBtRegistry()->get(group->getGID());
+ if(btObject) {
+ if(option.defined(PREF_BT_MAX_PEERS)) {
+ btObject->btRuntime->setMaxPeers(grOption->getAsInt(PREF_BT_MAX_PEERS));
+ }
+ }
+#endif // ENABLE_BITTORRENT
+}
+
} // namespace aria2