diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-03-04 16:24:03 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-03-04 16:24:03 +0000 |
| commit | 8b73c2843f659fe6cafd94534481e371888f0b5e (patch) | |
| tree | a228c40972e5a2053ef2837b8df7687019f99d9f /src/BtExtendedMessage.cc | |
| parent | 5d05ef0e756a7c52673fcf78b4ab8c9ccee2154d (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.cc | 41 |
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; } |
