aria2/src/HandshakeExtensionMessage.h

129 lines
3.4 KiB
C
Raw Normal View History

2007-12-22 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com> Added uTorrent compatible Peer Exchange. * src/BencodeVisitor.{h, cc} * test/BencodeVisitorTest.cc * src/BtConstants.h * src/BtContext.h: Added 'private' flag. * src/BtExtendedMessage.{h, cc} * test/BtExtendedMessageTest.cc * src/BtHandshakeMessage.{h, cc}: Set extended messaging bit in reserved field. * test/BtHandshakeMessageTest.cc * src/BtMessageFactory.h * src/BtRegistry.h * src/BtRuntime.h: This class holds default extension message IDs for aria2. By default, aria2 uses ID 8 for ut_pex. * src/DefaultBtContext.cc * src/DefaultBtInteractive.{h, cc}: This class holds _utPexEnabled. When it is true, aria2 enables ut_pex. This value is set by PeerInteractionCommand. * src/DefaultBtMessageFactory.{h, cc} * test/DefaultBtMessageFactoryTest.cc * src/DefaultBtMessageReceiver.cc: Moved the code of fast extension handling to DefaultBtInteractive class. * src/DefaultExtensionMessageFactory.{h, cc} * test/DefaultExtensionMessageFactoryTest.cc * src/DefaultPeerStorage.cc: Returns false if a peer is already in the container(peers and incomingPeers. The equality is determined by Peer::id). * test/DefaultPeerStorageTest.cc * src/ExtensionMessage.h * test/MockExtensionMessage.h * src/ExtensionMessageFactory.h * test/MockExtensionMessageFactory.h * src/HandshakeExtensionMessage.{h, cc} * test/HandshakeExtensionMessageTest.cc * src/MetaEntry.h * src/Peer.{h, cc} * src/PeerInteractionCommand.cc * src/PeerReceiveHandshakeCommand.cc: Evaluate the return value of addIncomingPeer. * src/PeerMessageUtil.{h, cc} * src/PeerObject.h * src/UTPexExtensionMessage.{h, cc} * test/UTPexExtensionMessageTest.cc * src/message.h * src/prefs.h Fixed the bug that returns incomplete data when it contains null character. A convenient constructor was also added. * src/Data.{h, cc} Rewritten. * src/CompactPeerListProcessor.cc Fixed typos. * src/message.h * src/MetaFileUtil.cc
2007-12-22 03:57:55 +00:00
/* <!-- copyright */
/*
* 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 --> */
#ifndef _D_HANDSHAKE_EXTENSION_MESSAGE_H_
#define _D_HANDSHAKE_EXTENSION_MESSAGE_H_
#include "ExtensionMessage.h"
#include "BtConstants.h"
class BtContext;
typedef SharedHandle<BtContext> BtContextHandle;
class Peer;
typedef SharedHandle<Peer> PeerHandle;
class HandshakeExtensionMessage;
typedef SharedHandle<HandshakeExtensionMessage> HandshakeExtensionMessageHandle;
class Logger;
class HandshakeExtensionMessage:public ExtensionMessage {
private:
string _clientVersion;
uint16_t _tcpPort;
map<string, uint8_t> _extensions;
BtContextHandle _btContext;
PeerHandle _peer;
const Logger* _logger;
public:
HandshakeExtensionMessage();
virtual ~HandshakeExtensionMessage();
virtual string getBencodedData();
virtual uint8_t getExtensionMessageID()
{
return 0;
}
virtual const string& getExtensionName() const
{
return EXTENSION_NAME;
}
static const string EXTENSION_NAME;
virtual string toString() const;
virtual void doReceivedAction();
void setClientVersion(const string& version)
{
_clientVersion = version;
}
const string& getClientVersion() const
{
return _clientVersion;
}
void setTCPPort(uint16_t port)
{
_tcpPort = port;
}
uint16_t getTCPPort() const
{
return _tcpPort;
}
void setExtension(const string& name, uint8_t id)
{
_extensions[name] = id;
}
void setExtensions(const Extensions& extensions)
{
_extensions = extensions;
}
uint8_t getExtensionMessageID(const string& name) const;
void setPeer(const PeerHandle& peer);
void setBtContext(const BtContextHandle& btContext);
static HandshakeExtensionMessageHandle create(const char* data,
size_t dataLength);
};
typedef SharedHandle<HandshakeExtensionMessage> HandshakeExtensionMessageHandle;
#endif // _D_HANDSHAKE_EXTENSION_MESSAGE_H_