mirror of https://github.com/aria2/aria2
2010-07-31 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Use hostname of original URI when counting hostname in inFlightRequest. * src/FileEntry.ccpull/1/head
parent
4280650e29
commit
3a0f45ec8d
13
ChangeLog
13
ChangeLog
|
@ -1,3 +1,16 @@
|
||||||
|
2010-07-31 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
|
Use hostname of original URI when counting hostname in
|
||||||
|
inFlightRequest.
|
||||||
|
* src/FileEntry.cc
|
||||||
|
|
||||||
|
2010-07-31 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
|
Fixed the bug that
|
||||||
|
AdaptiveFileAllocationIterator::getCurrentLength() does not return
|
||||||
|
updated allocated bytes.
|
||||||
|
* src/AdaptiveFileAllocationIterator.h
|
||||||
|
|
||||||
2010-07-30 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
2010-07-30 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
Added FTP EPSV and EPRT command support. aria2 issues these
|
Added FTP EPSV and EPRT command support. aria2 issues these
|
||||||
|
|
|
@ -103,19 +103,17 @@ void FileEntry::getUris(std::vector<std::string>& uris) const
|
||||||
uris.insert(uris.end(), uris_.begin(), uris_.end());
|
uris.insert(uris.end(), uris_.begin(), uris_.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename InputIterator>
|
template<typename InputIterator, typename OutputIterator>
|
||||||
static size_t countInFlightHost(InputIterator first, InputIterator last,
|
static OutputIterator
|
||||||
const std::string& hostname)
|
enumerateInFlightHosts
|
||||||
|
(InputIterator first, InputIterator last, OutputIterator out)
|
||||||
{
|
{
|
||||||
// TODO redirection should be considered here. We need to parse
|
Request r;
|
||||||
// original URI to get hostname.
|
|
||||||
size_t count = 0;
|
|
||||||
for(; first != last; ++first) {
|
for(; first != last; ++first) {
|
||||||
if((*first)->getHost() == hostname) {
|
r.setUri((*first)->getUri());
|
||||||
++count;
|
*out++ = r.getHost();
|
||||||
}
|
}
|
||||||
}
|
return out;
|
||||||
return count;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SharedHandle<Request>
|
SharedHandle<Request>
|
||||||
|
@ -128,6 +126,10 @@ FileEntry::getRequest
|
||||||
{
|
{
|
||||||
SharedHandle<Request> req;
|
SharedHandle<Request> req;
|
||||||
Request r;
|
Request r;
|
||||||
|
std::vector<std::string> inFlightHosts;
|
||||||
|
enumerateInFlightHosts(inFlightRequests_.begin(), inFlightRequests_.end(),
|
||||||
|
std::back_inserter(inFlightHosts));
|
||||||
|
|
||||||
if(!requestPool_.empty()) {
|
if(!requestPool_.empty()) {
|
||||||
for(std::deque<SharedHandle<Request> >::iterator i = requestPool_.begin(),
|
for(std::deque<SharedHandle<Request> >::iterator i = requestPool_.begin(),
|
||||||
eoi = requestPool_.end(); i != eoi; ++i) {
|
eoi = requestPool_.end(); i != eoi; ++i) {
|
||||||
|
@ -136,8 +138,8 @@ FileEntry::getRequest
|
||||||
usedHosts.end()) {
|
usedHosts.end()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if(countInFlightHost(inFlightRequests_.begin(), inFlightRequests_.end(),
|
if(std::count(inFlightHosts.begin(), inFlightHosts.end(), r.getHost())
|
||||||
r.getHost()) >= maxConnectionPerServer_) {
|
>= static_cast<int>(maxConnectionPerServer_)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
req = *i;
|
req = *i;
|
||||||
|
@ -157,9 +159,8 @@ FileEntry::getRequest
|
||||||
}
|
}
|
||||||
req.reset(new Request());
|
req.reset(new Request());
|
||||||
if(req->setUri(uri)) {
|
if(req->setUri(uri)) {
|
||||||
if(countInFlightHost(inFlightRequests_.begin(),
|
if(std::count(inFlightHosts.begin(), inFlightHosts.end(),req->getHost())
|
||||||
inFlightRequests_.end(),
|
>= static_cast<int>(maxConnectionPerServer_)) {
|
||||||
req->getHost()) >= maxConnectionPerServer_) {
|
|
||||||
pending.push_back(uri);
|
pending.push_back(uri);
|
||||||
ignoreHost.push_back(req->getHost());
|
ignoreHost.push_back(req->getHost());
|
||||||
req.reset();
|
req.reset();
|
||||||
|
@ -188,8 +189,8 @@ FileEntry::getRequest
|
||||||
for(std::deque<SharedHandle<Request> >::iterator i = requestPool_.begin(),
|
for(std::deque<SharedHandle<Request> >::iterator i = requestPool_.begin(),
|
||||||
eoi = requestPool_.end(); i != eoi; ++i) {
|
eoi = requestPool_.end(); i != eoi; ++i) {
|
||||||
r.setUri((*i)->getUri());
|
r.setUri((*i)->getUri());
|
||||||
if(countInFlightHost(inFlightRequests_.begin(), inFlightRequests_.end(),
|
if(std::count(inFlightHosts.begin(), inFlightHosts.end(), r.getHost())
|
||||||
r.getHost()) >= maxConnectionPerServer_) {
|
>= static_cast<int>(maxConnectionPerServer_)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
req = *i;
|
req = *i;
|
||||||
|
|
Loading…
Reference in New Issue