From 960bab86c745732358695776fca6e859bef47d1a Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sat, 30 May 2009 13:55:14 +0000 Subject: [PATCH] 2009-05-31 Tatsuhiro Tsujikawa Added 'position' parameter to addUri, addTorrent and addMetalink xml-rpc method. * src/RequestGroupMan.cc * src/RequestGroupMan.h * src/XmlRpcMethodImpl.cc * test/XmlRpcMethodTest.cc --- ChangeLog | 9 +++++ src/RequestGroupMan.cc | 17 ++++++++- src/RequestGroupMan.h | 5 +++ src/XmlRpcMethodImpl.cc | 61 +++++++++++++++++++++++++++------ test/XmlRpcMethodTest.cc | 74 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 155 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 154e92fe..78e45604 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2009-05-31 Tatsuhiro Tsujikawa + + Added 'position' parameter to addUri, addTorrent and addMetalink + xml-rpc method. + * src/RequestGroupMan.cc + * src/RequestGroupMan.h + * src/XmlRpcMethodImpl.cc + * test/XmlRpcMethodTest.cc + 2009-05-29 Tatsuhiro Tsujikawa Removed Peer.cc from compile source list when --disable-bittorrent diff --git a/src/RequestGroupMan.cc b/src/RequestGroupMan.cc index e5fcec5a..955f7436 100644 --- a/src/RequestGroupMan.cc +++ b/src/RequestGroupMan.cc @@ -112,11 +112,26 @@ void RequestGroupMan::addReservedGroup(const RequestGroups& groups) _reservedGroups.insert(_reservedGroups.end(), groups.begin(), groups.end()); } -void RequestGroupMan::addReservedGroup(const RequestGroupHandle& group) +void RequestGroupMan::addReservedGroup(const SharedHandle& group) { _reservedGroups.push_back(group); } +void RequestGroupMan::insertReservedGroup +(size_t pos, const std::deque >& groups) +{ + _reservedGroups.insert + (_reservedGroups.begin()+std::min(_reservedGroups.size(), pos), + groups.begin(), groups.end()); +} + +void RequestGroupMan::insertReservedGroup +(size_t pos, const SharedHandle& group) +{ + _reservedGroups.insert + (_reservedGroups.begin()+std::min(_reservedGroups.size(), pos), group); +} + size_t RequestGroupMan::countRequestGroup() const { return _requestGroups.size(); diff --git a/src/RequestGroupMan.h b/src/RequestGroupMan.h index 67f9578f..af119a00 100644 --- a/src/RequestGroupMan.h +++ b/src/RequestGroupMan.h @@ -106,6 +106,11 @@ public: void addReservedGroup(const SharedHandle& group); + void insertReservedGroup + (size_t pos, const std::deque >& groups); + + void insertReservedGroup(size_t pos, const SharedHandle& group); + size_t countRequestGroup() const; SharedHandle getRequestGroup(size_t index) const; diff --git a/src/XmlRpcMethodImpl.cc b/src/XmlRpcMethodImpl.cc index e3a626f8..2d04d8de 100644 --- a/src/XmlRpcMethodImpl.cc +++ b/src/XmlRpcMethodImpl.cc @@ -81,6 +81,34 @@ static BDE createGIDResponse(int32_t gid) return BDE(Util::itos(gid)); } +static BDE addRequestGroup(const SharedHandle& group, + DownloadEngine* e, + bool posGiven, int pos) +{ + if(posGiven) { + e->_requestGroupMan->insertReservedGroup(pos, group); + } else { + e->_requestGroupMan->addReservedGroup(group); + } + return createGIDResponse(group->getGID()); +} + +static bool hasDictParam(const BDE& params, size_t index) +{ + return params.size() > index && params[index].isDict(); +} + +static void getPosParam(const BDE& params, size_t posParamIndex, + bool& posGiven, size_t& pos) +{ + if(params.size() > posParamIndex && params[posParamIndex].isInteger()) { + pos = params[posParamIndex].i(); + posGiven = true; + } else { + posGiven = false; + } +} + BDE AddUriXmlRpcMethod::process(const XmlRpcRequest& req, DownloadEngine* e) { const BDE& params = req._params; @@ -97,17 +125,20 @@ BDE AddUriXmlRpcMethod::process(const XmlRpcRequest& req, DownloadEngine* e) } SharedHandle