Skip to content

Commit

Permalink
2010-03-05 Tatsuhiro Tsujikawa <[email protected]>
Browse files Browse the repository at this point in the history
	Reduced copying/std::string instantiation in sending/receiving
	BitTorrent messages.
	* src/BtBitfieldMessage.cc
	* src/BtBitfieldMessage.h
	* src/BtExtendedMessage.cc
	* src/BtExtendedMessage.h
	* src/BtHandshakeMessage.cc
	* src/BtHandshakeMessage.h
	* src/BtKeepAliveMessage.cc
	* src/BtKeepAliveMessage.h
	* src/BtPieceMessage.cc
	* src/BtPieceMessage.h
	* src/BtPortMessage.cc
	* src/BtPortMessage.h
	* src/BtUnchokeMessage.h
	* src/DefaultBtMessageReceiver.cc
	* src/IndexBtMessage.cc
	* src/IndexBtMessage.h
	* src/PeerConnection.cc
	* src/PeerConnection.h
	* src/RangeBtMessage.cc
	* src/RangeBtMessage.h
	* src/SimpleBtMessage.cc
	* src/SimpleBtMessage.h
	* src/SocketBuffer.cc
	* src/SocketBuffer.h
	* src/ZeroBtMessage.cc
	* src/ZeroBtMessage.h
	* test/BtAllowedFastMessageTest.cc
	* test/BtBitfieldMessageTest.cc
	* test/BtCancelMessageTest.cc
	* test/BtChokeMessageTest.cc
	* test/BtExtendedMessageTest.cc
	* test/BtHandshakeMessageTest.cc
	* test/BtHaveAllMessageTest.cc
	* test/BtHaveMessageTest.cc
	* test/BtHaveNoneMessageTest.cc
	* test/BtInterestedMessageTest.cc
	* test/BtKeepAliveMessageTest.cc
	* test/BtNotInterestedMessageTest.cc
	* test/BtPieceMessageTest.cc
	* test/BtPortMessageTest.cc
	* test/BtRejectMessageTest.cc
	* test/BtRequestMessageTest.cc
	* test/BtSuggestPieceMessageTest.cc
	* test/BtUnchokeMessageTest.cc
  • Loading branch information
tatsuhiro-t committed Mar 4, 2010
1 parent 5d05ef0 commit 8b73c28
Show file tree
Hide file tree
Showing 45 changed files with 470 additions and 316 deletions.
49 changes: 49 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,52 @@
2010-03-05 Tatsuhiro Tsujikawa <[email protected]>

Reduced copying/std::string instantiation in sending/receiving
BitTorrent messages.
* src/BtBitfieldMessage.cc
* src/BtBitfieldMessage.h
* src/BtExtendedMessage.cc
* src/BtExtendedMessage.h
* src/BtHandshakeMessage.cc
* src/BtHandshakeMessage.h
* src/BtKeepAliveMessage.cc
* src/BtKeepAliveMessage.h
* src/BtPieceMessage.cc
* src/BtPieceMessage.h
* src/BtPortMessage.cc
* src/BtPortMessage.h
* src/BtUnchokeMessage.h
* src/DefaultBtMessageReceiver.cc
* src/IndexBtMessage.cc
* src/IndexBtMessage.h
* src/PeerConnection.cc
* src/PeerConnection.h
* src/RangeBtMessage.cc
* src/RangeBtMessage.h
* src/SimpleBtMessage.cc
* src/SimpleBtMessage.h
* src/SocketBuffer.cc
* src/SocketBuffer.h
* src/ZeroBtMessage.cc
* src/ZeroBtMessage.h
* test/BtAllowedFastMessageTest.cc
* test/BtBitfieldMessageTest.cc
* test/BtCancelMessageTest.cc
* test/BtChokeMessageTest.cc
* test/BtExtendedMessageTest.cc
* test/BtHandshakeMessageTest.cc
* test/BtHaveAllMessageTest.cc
* test/BtHaveMessageTest.cc
* test/BtHaveNoneMessageTest.cc
* test/BtInterestedMessageTest.cc
* test/BtKeepAliveMessageTest.cc
* test/BtNotInterestedMessageTest.cc
* test/BtPieceMessageTest.cc
* test/BtPortMessageTest.cc
* test/BtRejectMessageTest.cc
* test/BtRequestMessageTest.cc
* test/BtSuggestPieceMessageTest.cc
* test/BtUnchokeMessageTest.cc

2010-03-03 Tatsuhiro Tsujikawa <[email protected]>

Rewritten SocketBuffer. Old implementation uses single std::string
Expand Down
27 changes: 12 additions & 15 deletions src/BtBitfieldMessage.cc
Original file line number Diff line number Diff line change
Expand Up @@ -81,25 +81,22 @@ void BtBitfieldMessage::doReceivedAction() {
}
}

const unsigned char* BtBitfieldMessage::getMessage() {
if(!msg) {
/**
* len --- 1+bitfieldLength, 4bytes
* id --- 5, 1byte
* bitfield --- bitfield, len bytes
* total: 5+len bytes
*/
msgLength = 5+bitfieldLength;
msg = new unsigned char[msgLength];
bittorrent::createPeerMessageString(msg, msgLength, 1+bitfieldLength, ID);
memcpy(msg+5, bitfield, bitfieldLength);
}
unsigned char* BtBitfieldMessage::createMessage() {
/**
* len --- 1+bitfieldLength, 4bytes
* id --- 5, 1byte
* bitfield --- bitfield, len bytes
* total: 5+len bytes
*/
const size_t msgLength = 5+bitfieldLength;
unsigned char* msg = new unsigned char[msgLength];
bittorrent::createPeerMessageString(msg, msgLength, 1+bitfieldLength, ID);
memcpy(msg+5, bitfield, bitfieldLength);
return msg;
}

size_t BtBitfieldMessage::getMessageLength() {
getMessage();
return msgLength;
return 5+bitfieldLength;
}

std::string BtBitfieldMessage::toString() const {
Expand Down
7 changes: 1 addition & 6 deletions src/BtBitfieldMessage.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,14 +47,10 @@ class BtBitfieldMessage : public SimpleBtMessage {
private:
unsigned char* bitfield;
size_t bitfieldLength;
unsigned char* msg;
size_t msgLength;

void init() {
bitfield = 0;
bitfieldLength = 0;
msg = 0;
msgLength = 0;
}
public:
BtBitfieldMessage():SimpleBtMessage(ID, NAME)
Expand All @@ -71,7 +67,6 @@ class BtBitfieldMessage : public SimpleBtMessage {

virtual ~BtBitfieldMessage() {
delete [] bitfield;
delete [] msg;
}

static const uint8_t ID = 5;
Expand All @@ -88,7 +83,7 @@ class BtBitfieldMessage : public SimpleBtMessage {

virtual void doReceivedAction();

virtual const unsigned char* getMessage();
virtual unsigned char* createMessage();

virtual size_t getMessageLength();

Expand Down
41 changes: 18 additions & 23 deletions src/BtExtendedMessage.cc
Original file line number Diff line number Diff line change
Expand Up @@ -55,36 +55,31 @@ BtExtendedMessage::BtExtendedMessage
(const ExtensionMessageHandle& extensionMessage):
SimpleBtMessage(ID, NAME),
_extensionMessage(extensionMessage),
_msg(0),
_msgLength(0)
{}

BtExtendedMessage::~BtExtendedMessage()
unsigned char* BtExtendedMessage::createMessage()
{
delete [] _msg;
}

const unsigned char* BtExtendedMessage::getMessage() {
if(!_msg) {
/**
* len --- 2+extpayload.length, 4bytes
* id --- 20, 1byte
* extmsgid --- extmsgid, 1byte
* extpayload --- extpayload, nbytes
* total: 6+extpayload.length bytes
*/
std::string payload = _extensionMessage->getPayload();
_msgLength = 6+payload.size();
_msg = new unsigned char[_msgLength];
bittorrent::createPeerMessageString(_msg, _msgLength, 2+payload.size(), ID);
*(_msg+5) = _extensionMessage->getExtensionMessageID();
memcpy(_msg+6, payload.c_str(), payload.size());
}
return _msg;
/**
* len --- 2+extpayload.length, 4bytes
* id --- 20, 1byte
* extmsgid --- extmsgid, 1byte
* extpayload --- extpayload, nbytes
* total: 6+extpayload.length bytes
*/
std::string payload = _extensionMessage->getPayload();
_msgLength = 6+payload.size();
unsigned char* msg = new unsigned char[_msgLength];
bittorrent::createPeerMessageString(msg, _msgLength, 2+payload.size(), ID);
*(msg+5) = _extensionMessage->getExtensionMessageID();
memcpy(msg+6, payload.data(), payload.size());
return msg;
}

size_t BtExtendedMessage::getMessageLength() {
getMessage();
if(!_msgLength) {
_msgLength = 6+_extensionMessage->getPayload().size();
}
return _msgLength;
}

Expand Down
6 changes: 1 addition & 5 deletions src/BtExtendedMessage.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,15 +49,11 @@ class BtExtendedMessage:public SimpleBtMessage
private:
SharedHandle<ExtensionMessage> _extensionMessage;

unsigned char* _msg;

size_t _msgLength;
public:
BtExtendedMessage(const SharedHandle<ExtensionMessage>& extensionMessage =
SharedHandle<ExtensionMessage>());

virtual ~BtExtendedMessage();

static const uint8_t ID = 20;

static const std::string NAME;
Expand All @@ -70,7 +66,7 @@ class BtExtendedMessage:public SimpleBtMessage

virtual void doReceivedAction();

virtual const unsigned char* getMessage();
virtual unsigned char* createMessage();

virtual size_t getMessageLength();

Expand Down
18 changes: 8 additions & 10 deletions src/BtHandshakeMessage.cc
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,6 @@ BtHandshakeMessage::BtHandshakeMessage(const unsigned char* infoHash,
}

void BtHandshakeMessage::init() {
msg = 0;
this->pstrlen = 19;
pstr = new unsigned char[PSTR_LENGTH];
reserved = new unsigned char[RESERVED_LENGTH];
Expand All @@ -88,15 +87,14 @@ BtHandshakeMessage::create(const unsigned char* data, size_t dataLength)
return message;
}

const unsigned char* BtHandshakeMessage::getMessage() {
if(!msg) {
msg = new unsigned char[MESSAGE_LENGTH];
msg[0] = pstrlen;
memcpy(msg+1, pstr, PSTR_LENGTH);
memcpy(msg+20, reserved, RESERVED_LENGTH);
memcpy(msg+28, infoHash, INFO_HASH_LENGTH);
memcpy(msg+48, peerId, PEER_ID_LENGTH);
}
unsigned char* BtHandshakeMessage::createMessage()
{
unsigned char* msg = new unsigned char[MESSAGE_LENGTH];
msg[0] = pstrlen;
memcpy(msg+1, pstr, PSTR_LENGTH);
memcpy(msg+20, reserved, RESERVED_LENGTH);
memcpy(msg+28, infoHash, INFO_HASH_LENGTH);
memcpy(msg+48, peerId, PEER_ID_LENGTH);
return msg;
}

Expand Down
4 changes: 1 addition & 3 deletions src/BtHandshakeMessage.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ class BtHandshakeMessage : public SimpleBtMessage {
unsigned char* reserved;
unsigned char* infoHash;
unsigned char* peerId;
unsigned char* msg;
void init();
public:
BtHandshakeMessage();
Expand All @@ -65,7 +64,6 @@ class BtHandshakeMessage : public SimpleBtMessage {
create(const unsigned char* data, size_t dataLength);

virtual ~BtHandshakeMessage() {
delete [] msg;
delete [] pstr;
delete [] reserved;
delete [] infoHash;
Expand All @@ -78,7 +76,7 @@ class BtHandshakeMessage : public SimpleBtMessage {

virtual void doReceivedAction() {};

virtual const unsigned char* getMessage();
virtual unsigned char* createMessage();

virtual size_t getMessageLength();

Expand Down
20 changes: 10 additions & 10 deletions src/BtKeepAliveMessage.cc
Original file line number Diff line number Diff line change
Expand Up @@ -39,19 +39,19 @@ namespace aria2 {

const std::string BtKeepAliveMessage::NAME("keep alive");

const unsigned char* BtKeepAliveMessage::getMessage() {
if(!msg) {
/**
* len --- 0, 4bytes
* total: 4bytes
*/
msg = new unsigned char[MESSAGE_LENGTH];
memset(msg, 0, MESSAGE_LENGTH);
}
unsigned char* BtKeepAliveMessage::createMessage()
{
/**
* len --- 0, 4bytes
* total: 4bytes
*/
unsigned char* msg = new unsigned char[MESSAGE_LENGTH];
memset(msg, 0, MESSAGE_LENGTH);
return msg;
}

size_t BtKeepAliveMessage::getMessageLength() {
size_t BtKeepAliveMessage::getMessageLength()
{
return MESSAGE_LENGTH;
}

Expand Down
13 changes: 4 additions & 9 deletions src/BtKeepAliveMessage.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,27 +45,22 @@ typedef SharedHandle<BtKeepAliveMessage> BtKeepAliveMessageHandle;

class BtKeepAliveMessage : public SimpleBtMessage {
private:
unsigned char* msg;

static const size_t MESSAGE_LENGTH = 4;
public:
BtKeepAliveMessage():SimpleBtMessage(ID, NAME), msg(0) {}

virtual ~BtKeepAliveMessage() {
delete [] msg;
}
BtKeepAliveMessage():SimpleBtMessage(ID, NAME) {}

static const uint8_t ID = 99;

static const std::string NAME;

virtual void doReceivedAction() {}

virtual const unsigned char* getMessage();
virtual unsigned char* createMessage();

virtual size_t getMessageLength();

virtual std::string toString() const {
virtual std::string toString() const
{
return NAME;
}
};
Expand Down
Loading

0 comments on commit 8b73c28

Please sign in to comment.