summaryrefslogtreecommitdiff
path: root/src/BtExtendedMessage.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-03-04 16:24:03 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-03-04 16:24:03 +0000
commit8b73c2843f659fe6cafd94534481e371888f0b5e (patch)
treea228c40972e5a2053ef2837b8df7687019f99d9f /src/BtExtendedMessage.cc
parent5d05ef0e756a7c52673fcf78b4ab8c9ccee2154d (diff)
2010-03-05 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
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
Diffstat (limited to 'src/BtExtendedMessage.cc')
-rw-r--r--src/BtExtendedMessage.cc41
1 files changed, 18 insertions, 23 deletions
diff --git a/src/BtExtendedMessage.cc b/src/BtExtendedMessage.cc
index 2f51068e..2311e46c 100644
--- a/src/BtExtendedMessage.cc
+++ b/src/BtExtendedMessage.cc
@@ -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;
}