mirror of https://github.com/aria2/aria2
2010-03-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added getServers XML-RPC method. * doc/aria2c.1.txt * src/FileEntry.h * src/XmlRpcMethodFactory.cc * src/XmlRpcMethodImpl.cc * src/XmlRpcMethodImpl.hpull/1/head
parent
5fb7197a08
commit
6ce44b001d
|
@ -1,3 +1,12 @@
|
|||
2010-03-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||
|
||||
Added getServers XML-RPC method.
|
||||
* doc/aria2c.1.txt
|
||||
* src/FileEntry.h
|
||||
* src/XmlRpcMethodFactory.cc
|
||||
* src/XmlRpcMethodImpl.cc
|
||||
* src/XmlRpcMethodImpl.h
|
||||
|
||||
2010-03-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||
|
||||
Pool request when download finished.
|
||||
|
|
29
doc/aria2c.1
29
doc/aria2c.1
|
@ -2450,6 +2450,35 @@ seeder
|
|||
"true" is this client is a seeder\&. Otherwise "false"\&.
|
||||
.RE
|
||||
.sp
|
||||
\fBaria2\&.getServers\fR \fIgid\fR
|
||||
.sp
|
||||
This method returns currently connected HTTP(S)/FTP servers of the download denoted by \fIgid\fR\&. \fIgid\fR is of type string\&. The response is of type array and its element is of type struct and it contains following keys\&. The value type is string\&.
|
||||
.PP
|
||||
index
|
||||
.RS 4
|
||||
Index of file\&. Starting with 1\&. This is the same order with the files in multi\-file torrent\&.
|
||||
.RE
|
||||
.PP
|
||||
servers
|
||||
.RS 4
|
||||
The list of struct which contains following keys\&.
|
||||
.PP
|
||||
uri
|
||||
.RS 4
|
||||
URI originally added\&.
|
||||
.RE
|
||||
.PP
|
||||
currentUri
|
||||
.RS 4
|
||||
This is the URI currently used for downloading\&. If redirection is involved, currentUri and uri may differ\&.
|
||||
.RE
|
||||
.PP
|
||||
downloadSpeed
|
||||
.RS 4
|
||||
Download speed (byte/sec)
|
||||
.RE
|
||||
.RE
|
||||
.sp
|
||||
\fBaria2\&.tellActive\fR
|
||||
.sp
|
||||
This method returns the list of active downloads\&. The response is of type array and its element is the same struct returned by \fBaria2\&.tellStatus\fR method\&.
|
||||
|
|
|
@ -3146,6 +3146,56 @@ seeder
|
|||
</p>
|
||||
</dd>
|
||||
</dl></div>
|
||||
<div class="paragraph"><p><strong>aria2.getServers</strong> <em>gid</em></p></div>
|
||||
<div class="paragraph"><p>This method returns currently connected HTTP(S)/FTP servers of the download denoted by <em>gid</em>. <em>gid</em> is of type string. The response
|
||||
is of type array and its element is of type struct and it contains
|
||||
following keys. The value type is string.</p></div>
|
||||
<div class="dlist"><dl>
|
||||
<dt class="hdlist1">
|
||||
index
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Index of file. Starting with 1. This is the same order with the
|
||||
files in multi-file torrent.
|
||||
</p>
|
||||
</dd>
|
||||
<dt class="hdlist1">
|
||||
servers
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
The list of struct which contains following keys.
|
||||
</p>
|
||||
<div class="dlist"><dl>
|
||||
<dt class="hdlist1">
|
||||
uri
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
URI originally added.
|
||||
</p>
|
||||
</dd>
|
||||
<dt class="hdlist1">
|
||||
currentUri
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
This is the URI currently used for downloading. If redirection is
|
||||
involved, currentUri and uri may differ.
|
||||
</p>
|
||||
</dd>
|
||||
<dt class="hdlist1">
|
||||
downloadSpeed
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Download speed (byte/sec)
|
||||
</p>
|
||||
</dd>
|
||||
</dl></div>
|
||||
</dd>
|
||||
</dl></div>
|
||||
<div class="paragraph"><p><strong>aria2.tellActive</strong></p></div>
|
||||
<div class="paragraph"><p>This method returns the list of active downloads. The response is of
|
||||
type array and its element is the same struct returned by
|
||||
|
@ -3754,7 +3804,7 @@ files in the program, then also delete it here.</p></div>
|
|||
<div id="footnotes"><hr /></div>
|
||||
<div id="footer">
|
||||
<div id="footer-text">
|
||||
Last updated 2010-03-07 16:16:27 JST
|
||||
Last updated 2010-03-07 17:15:38 JST
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
|
|
@ -1418,6 +1418,34 @@ seeder::
|
|||
|
||||
"true" is this client is a seeder. Otherwise "false".
|
||||
|
||||
*aria2.getServers* 'gid'
|
||||
|
||||
This method returns currently connected HTTP(S)/FTP servers of the download denoted by 'gid'. 'gid' is of type string. The response
|
||||
is of type array and its element is of type struct and it contains
|
||||
following keys. The value type is string.
|
||||
|
||||
index::
|
||||
|
||||
Index of file. Starting with 1. This is the same order with the
|
||||
files in multi-file torrent.
|
||||
|
||||
servers::
|
||||
|
||||
The list of struct which contains following keys.
|
||||
|
||||
uri;;
|
||||
|
||||
URI originally added.
|
||||
|
||||
currentUri;;
|
||||
|
||||
This is the URI currently used for downloading. If redirection is
|
||||
involved, currentUri and uri may differ.
|
||||
|
||||
downloadSpeed;;
|
||||
|
||||
Download speed (byte/sec)
|
||||
|
||||
*aria2.tellActive*
|
||||
|
||||
This method returns the list of active downloads. The response is of
|
||||
|
|
|
@ -212,6 +212,11 @@ public:
|
|||
return _requestPool.size();
|
||||
}
|
||||
|
||||
const std::deque<SharedHandle<Request> >& getInFlightRequests() const
|
||||
{
|
||||
return _inFlightRequests;
|
||||
}
|
||||
|
||||
bool operator<(const FileEntry& fileEntry) const;
|
||||
|
||||
bool exists() const;
|
||||
|
|
|
@ -73,6 +73,8 @@ XmlRpcMethodFactory::create(const std::string& methodName)
|
|||
else if(methodName == GetPeersXmlRpcMethod::getMethodName()) {
|
||||
return SharedHandle<XmlRpcMethod>(new GetPeersXmlRpcMethod());
|
||||
#endif // ENABLE_BITTORRENT
|
||||
} else if(methodName == GetServersXmlRpcMethod::getMethodName()) {
|
||||
return SharedHandle<XmlRpcMethod>(new GetServersXmlRpcMethod());
|
||||
} else if(methodName == TellActiveXmlRpcMethod::getMethodName()) {
|
||||
return SharedHandle<XmlRpcMethod>(new TellActiveXmlRpcMethod());
|
||||
} else if(methodName == TellWaitingXmlRpcMethod::getMethodName()) {
|
||||
|
|
|
@ -112,6 +112,7 @@ const std::string KEY_PATH = "path";
|
|||
const std::string KEY_SELECTED = "selected";
|
||||
const std::string KEY_LENGTH = "length";
|
||||
const std::string KEY_URI = "uri";
|
||||
const std::string KEY_CURRENT_URI = "currentUri";
|
||||
const std::string KEY_VERSION = "version";
|
||||
const std::string KEY_ENABLED_FEATURES = "enabledFeatures";
|
||||
const std::string KEY_METHOD_NAME = "methodName";
|
||||
|
@ -127,6 +128,7 @@ const std::string KEY_ANNOUNCE_LIST = "announceList";
|
|||
const std::string KEY_COMMENT = "comment";
|
||||
const std::string KEY_CREATION_DATE = "creationDate";
|
||||
const std::string KEY_MODE = "mode";
|
||||
const std::string KEY_SERVERS = "servers";
|
||||
}
|
||||
|
||||
static BDE createGIDResponse(int32_t gid)
|
||||
|
@ -880,6 +882,49 @@ BDE GetSessionInfoXmlRpcMethod::process
|
|||
return result;
|
||||
}
|
||||
|
||||
BDE GetServersXmlRpcMethod::process
|
||||
(const XmlRpcRequest& req, DownloadEngine* e)
|
||||
{
|
||||
const BDE& params = req._params;
|
||||
assert(params.isList());
|
||||
|
||||
if(params.empty() || !params[0].isString()) {
|
||||
throw DL_ABORT_EX("Bad request");
|
||||
}
|
||||
int32_t gid = util::parseInt(params[0].s());
|
||||
SharedHandle<RequestGroup> group = e->_requestGroupMan->findRequestGroup(gid);
|
||||
if(group.isNull()) {
|
||||
throw DL_ABORT_EX(StringFormat("No active download for GID#%d", gid).str());
|
||||
}
|
||||
SharedHandle<DownloadContext> dctx = group->getDownloadContext();
|
||||
const std::vector<SharedHandle<FileEntry> >& files = dctx->getFileEntries();
|
||||
BDE result = BDE::list();
|
||||
size_t index = 1;
|
||||
for(std::vector<SharedHandle<FileEntry> >::const_iterator fi = files.begin(),
|
||||
eoi = files.end(); fi != eoi; ++fi, ++index) {
|
||||
BDE fileEntry = BDE::dict();
|
||||
fileEntry[KEY_INDEX] = util::uitos(index);
|
||||
BDE servers = BDE::list();
|
||||
const std::deque<SharedHandle<Request> >& requests =
|
||||
(*fi)->getInFlightRequests();
|
||||
for(std::deque<SharedHandle<Request> >::const_iterator ri =requests.begin(),
|
||||
eoi = requests.end(); ri != eoi; ++ri) {
|
||||
SharedHandle<PeerStat> ps = (*ri)->getPeerStat();
|
||||
if(!ps.isNull()) {
|
||||
BDE serverEntry = BDE::dict();
|
||||
serverEntry[KEY_URI] = (*ri)->getUrl();
|
||||
serverEntry[KEY_CURRENT_URI] = (*ri)->getCurrentUrl();
|
||||
serverEntry[KEY_DOWNLOAD_SPEED] =
|
||||
util::uitos(ps->calculateDownloadSpeed());
|
||||
servers << serverEntry;
|
||||
}
|
||||
}
|
||||
fileEntry[KEY_SERVERS] = servers;
|
||||
result << fileEntry;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
BDE ChangeUriXmlRpcMethod::process
|
||||
(const XmlRpcRequest& req, DownloadEngine* e)
|
||||
{
|
||||
|
|
|
@ -156,6 +156,17 @@ public:
|
|||
};
|
||||
#endif // ENABLE_BITTORRENT
|
||||
|
||||
class GetServersXmlRpcMethod:public XmlRpcMethod {
|
||||
protected:
|
||||
virtual BDE process(const XmlRpcRequest& req, DownloadEngine* e);
|
||||
public:
|
||||
static const std::string& getMethodName()
|
||||
{
|
||||
static std::string methodName = "aria2.getServers";
|
||||
return methodName;
|
||||
}
|
||||
};
|
||||
|
||||
class TellStatusXmlRpcMethod:public XmlRpcMethod {
|
||||
protected:
|
||||
virtual BDE process(const XmlRpcRequest& req, DownloadEngine* e);
|
||||
|
|
Loading…
Reference in New Issue