diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2006-10-01 11:29:14 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2006-10-01 11:29:14 +0000 |
| commit | 07e91896e1558f6beb10bcdc3e5c3ff38904317f (patch) | |
| tree | 238e441e6eeb51018e8173b08b612f1369923cdc /src/CompactPeerListProcessor.cc | |
| parent | f7f1770633ac92bd6ba82a320a12ec8076532122 (diff) | |
2006-10-01 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
To add timeout to async name resolution:
* src/AbstractCommand.h
(nameResolveFinished): New function. This is not elegant way. It needs
to be more refined.
(nameResolverCheck): New variable.
* src/AbstractCommand.cc
(AbstractCommand): Added nameResolverCheck.
(execute): Added the check whether the name resolution has finished.
(setNameResolverCheck): Set nameResolverCheck to true.
(disableNameResolverCheck): Set nameResolverCheck to false.
(nameResolverFinished): New function.
* src/FtpInitiateConnectionCommand.h
(nameResolverFinished): New function.
* src/HttpInitiateConnectionCommand.h
(nameResolverFinished): New function.
To add the support for a non-compact response from a tracker:
* src/PeerListProcessor.h: New class.
* src/DefaultPeerListProcessor.h: New class.
* src/DefaultPeerListProcessor.cc: New class.
* src/CompactPeerListProcessor.h: New class.
* src/CompactPeerListProcessor.cc: New class.
* src/DelegatingPeerListProcessor.h: New class.
* src/DelegatingPeerListProcessor.cc: New class.
* src/TorrentMan.cc
(addPeer): New function(overload).
(addPeer): Delete unused peers only when new peer is added.
* src/TorrentMan.h
(PeerListProcessor.h): Included.
(Peers): Removed.
(addPeer): New function(overload).
* src/TrackerUpdateCommand.cc
(netinet/in.h): Removed.
(DelegatingPeerListProcessor.h): Included.
(execute): Updated to use DelegatingPeerListProcessor.
To fix the memory leak in TorrentMan::peers:
* src/PeerAbstractCommand.cc
(onAbort): Added peer->resetStatus().
* src/Peer.h
(resetStatus): Made public.
To improve the precision of the speed calculation:
* src/SpeedCalc.h
(nextInterval): New variable.
* src/SpeedCalc.cc
(reset): Added nextInterval.
(isIntervalOver): Use nextInterval instead of CHANGE_INTERVAL_SEC.
(changeSw): Set nextInterval to 15 seconds relative to the current
instant time.
* src/main.cc
(showVersion): Updated.
Diffstat (limited to 'src/CompactPeerListProcessor.cc')
| -rw-r--r-- | src/CompactPeerListProcessor.cc | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/CompactPeerListProcessor.cc b/src/CompactPeerListProcessor.cc new file mode 100644 index 00000000..bae88c2b --- /dev/null +++ b/src/CompactPeerListProcessor.cc @@ -0,0 +1,64 @@ +/* + * 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 "CompactPeerListProcessor.h" +#include "Data.h" +#include <netinet/in.h> + +bool CompactPeerListProcessor::canHandle(const MetaEntry* peersEntry) const { + return dynamic_cast<const Data*>(peersEntry) != 0; +} + +Peers CompactPeerListProcessor::extractPeer(const MetaEntry* peersEntry) { + Peers peers; + + const Data* peersData = (const Data*)peersEntry; + if(peersData->getLen() > 0) { + for(int i = 0; i < peersData->getLen(); i += 6) { + unsigned int ipaddr1 = (unsigned char)*(peersData->getData()+i); + unsigned int ipaddr2 = (unsigned char)*(peersData->getData()+i+1); + unsigned int ipaddr3 = (unsigned char)*(peersData->getData()+i+2); + unsigned int ipaddr4 = (unsigned char)*(peersData->getData()+i+3); + unsigned int port = ntohs(*(unsigned short int*)(peersData->getData()+i+4)); + char ipaddr[16]; + + snprintf(ipaddr, sizeof(ipaddr), "%d.%d.%d.%d", + ipaddr1, ipaddr2, ipaddr3, ipaddr4); + PeerHandle peer = + PeerHandle(new Peer(ipaddr, port, pieceLength, totalLength)); + + peers.push_back(peer); + } + } + return peers; +} |
