Made static create function of BtMessage subclass return raw pointer

pull/28/head
Tatsuhiro Tsujikawa 2012-09-27 23:40:25 +09:00
parent ae2e4cb7ff
commit 215d1d3d0b
53 changed files with 198 additions and 267 deletions

View File

@ -44,7 +44,7 @@ const char BtAllowedFastMessage::NAME[] = "allowed fast";
BtAllowedFastMessage::BtAllowedFastMessage(size_t index): BtAllowedFastMessage::BtAllowedFastMessage(size_t index):
IndexBtMessage(ID, NAME, index) {} IndexBtMessage(ID, NAME, index) {}
SharedHandle<BtAllowedFastMessage> BtAllowedFastMessage::create BtAllowedFastMessage* BtAllowedFastMessage::create
(const unsigned char* data, size_t dataLength) (const unsigned char* data, size_t dataLength)
{ {
return IndexBtMessage::create<BtAllowedFastMessage>(data, dataLength); return IndexBtMessage::create<BtAllowedFastMessage>(data, dataLength);

View File

@ -39,10 +39,6 @@
namespace aria2 { namespace aria2 {
class BtAllowedFastMessage;
typedef SharedHandle<BtAllowedFastMessage> BtAllowedFastMessageHandle;
class BtAllowedFastMessage : public IndexBtMessage { class BtAllowedFastMessage : public IndexBtMessage {
public: public:
BtAllowedFastMessage(size_t index = 0); BtAllowedFastMessage(size_t index = 0);
@ -51,7 +47,7 @@ public:
static const char NAME[]; static const char NAME[];
static SharedHandle<BtAllowedFastMessage> create static BtAllowedFastMessage* create
(const unsigned char* data, size_t dataLength); (const unsigned char* data, size_t dataLength);
virtual void doReceivedAction(); virtual void doReceivedAction();

View File

@ -78,12 +78,12 @@ void BtBitfieldMessage::setBitfield
memcpy(bitfield_, bitfield, bitfieldLength_); memcpy(bitfield_, bitfield, bitfieldLength_);
} }
BtBitfieldMessageHandle BtBitfieldMessage*
BtBitfieldMessage::create(const unsigned char* data, size_t dataLength) BtBitfieldMessage::create(const unsigned char* data, size_t dataLength)
{ {
bittorrent::assertPayloadLengthGreater(1,dataLength, NAME); bittorrent::assertPayloadLengthGreater(1,dataLength, NAME);
bittorrent::assertID(ID, data, NAME); bittorrent::assertID(ID, data, NAME);
BtBitfieldMessageHandle message(new BtBitfieldMessage()); BtBitfieldMessage* message(new BtBitfieldMessage());
message->setBitfield(data+1, dataLength-1); message->setBitfield(data+1, dataLength-1);
return message; return message;
} }

View File

@ -39,10 +39,6 @@
namespace aria2 { namespace aria2 {
class BtBitfieldMessage;
typedef SharedHandle<BtBitfieldMessage> BtBitfieldMessageHandle;
class BtBitfieldMessage : public SimpleBtMessage { class BtBitfieldMessage : public SimpleBtMessage {
private: private:
unsigned char* bitfield_; unsigned char* bitfield_;
@ -64,7 +60,7 @@ public:
size_t getBitfieldLength() const { return bitfieldLength_; } size_t getBitfieldLength() const { return bitfieldLength_; }
static BtBitfieldMessageHandle create static BtBitfieldMessage* create
(const unsigned char* data, size_t dataLength); (const unsigned char* data, size_t dataLength);
virtual void doReceivedAction(); virtual void doReceivedAction();

View File

@ -43,7 +43,7 @@ BtCancelMessage::BtCancelMessage
(size_t index, int32_t begin, int32_t length) (size_t index, int32_t begin, int32_t length)
:RangeBtMessage(ID, NAME, index, begin, length) {} :RangeBtMessage(ID, NAME, index, begin, length) {}
SharedHandle<BtCancelMessage> BtCancelMessage::create BtCancelMessage* BtCancelMessage::create
(const unsigned char* data, size_t dataLength) (const unsigned char* data, size_t dataLength)
{ {
return RangeBtMessage::create<BtCancelMessage>(data, dataLength); return RangeBtMessage::create<BtCancelMessage>(data, dataLength);

View File

@ -39,10 +39,6 @@
namespace aria2 { namespace aria2 {
class BtCancelMessage;
typedef SharedHandle<BtCancelMessage> BtCancelMessageHandle;
class BtCancelMessage : public RangeBtMessage { class BtCancelMessage : public RangeBtMessage {
public: public:
BtCancelMessage(size_t index = 0, int32_t begin = 0, int32_t length = 0); BtCancelMessage(size_t index = 0, int32_t begin = 0, int32_t length = 0);
@ -51,8 +47,7 @@ public:
static const char NAME[]; static const char NAME[];
static BtCancelMessageHandle create static BtCancelMessage* create(const unsigned char* data, size_t dataLength);
(const unsigned char* data, size_t dataLength);
virtual void doReceivedAction(); virtual void doReceivedAction();
}; };

View File

@ -43,7 +43,7 @@ const char BtChokeMessage::NAME[] = "choke";
BtChokeMessage::BtChokeMessage():ZeroBtMessage(ID, NAME) {} BtChokeMessage::BtChokeMessage():ZeroBtMessage(ID, NAME) {}
SharedHandle<BtChokeMessage> BtChokeMessage::create BtChokeMessage* BtChokeMessage::create
(const unsigned char* data, size_t dataLength) (const unsigned char* data, size_t dataLength)
{ {
return ZeroBtMessage::create<BtChokeMessage>(data, dataLength); return ZeroBtMessage::create<BtChokeMessage>(data, dataLength);

View File

@ -39,10 +39,6 @@
namespace aria2 { namespace aria2 {
class BtChokeMessage;
typedef SharedHandle<BtChokeMessage> BtChokeMessageHandle;
class BtChokeMessage : public ZeroBtMessage { class BtChokeMessage : public ZeroBtMessage {
public: public:
BtChokeMessage(); BtChokeMessage();
@ -53,8 +49,7 @@ public:
virtual void doReceivedAction(); virtual void doReceivedAction();
static SharedHandle<BtChokeMessage> create static BtChokeMessage* create(const unsigned char* data, size_t dataLength);
(const unsigned char* data, size_t dataLength);
virtual bool sendPredicate() const; virtual bool sendPredicate() const;

View File

@ -96,7 +96,7 @@ std::string BtExtendedMessage::toString() const {
return s; return s;
} }
BtExtendedMessageHandle BtExtendedMessage*
BtExtendedMessage::create(const SharedHandle<ExtensionMessageFactory>& factory, BtExtendedMessage::create(const SharedHandle<ExtensionMessageFactory>& factory,
const SharedHandle<Peer>& peer, const SharedHandle<Peer>& peer,
const unsigned char* data, size_t dataLength) const unsigned char* data, size_t dataLength)
@ -104,9 +104,9 @@ BtExtendedMessage::create(const SharedHandle<ExtensionMessageFactory>& factory,
bittorrent::assertPayloadLengthGreater(1, dataLength, NAME); bittorrent::assertPayloadLengthGreater(1, dataLength, NAME);
bittorrent::assertID(ID, data, NAME); bittorrent::assertID(ID, data, NAME);
assert(factory); assert(factory);
ExtensionMessageHandle extmsg = factory->createMessage(data+1, SharedHandle<ExtensionMessage> extmsg = factory->createMessage(data+1,
dataLength-1); dataLength-1);
BtExtendedMessageHandle message(new BtExtendedMessage(extmsg)); BtExtendedMessage* message(new BtExtendedMessage(extmsg));
return message; return message;
} }

View File

@ -41,9 +41,6 @@ namespace aria2 {
class ExtensionMessage; class ExtensionMessage;
class ExtensionMessageFactory; class ExtensionMessageFactory;
class BtExtendedMessage;
typedef SharedHandle<BtExtendedMessage> BtExtendedMessageHandle;
class BtExtendedMessage:public SimpleBtMessage class BtExtendedMessage:public SimpleBtMessage
{ {
private: private:
@ -59,7 +56,7 @@ public:
static const char NAME[]; static const char NAME[];
static BtExtendedMessageHandle create static BtExtendedMessage* create
(const SharedHandle<ExtensionMessageFactory>& factory, (const SharedHandle<ExtensionMessageFactory>& factory,
const SharedHandle<Peer>& peer, const SharedHandle<Peer>& peer,
const unsigned char* data, const unsigned char* data,

View File

@ -45,7 +45,7 @@ const char BtHaveAllMessage::NAME[] = "have all";
BtHaveAllMessage::BtHaveAllMessage():ZeroBtMessage(ID, NAME) {} BtHaveAllMessage::BtHaveAllMessage():ZeroBtMessage(ID, NAME) {}
SharedHandle<BtHaveAllMessage> BtHaveAllMessage::create BtHaveAllMessage* BtHaveAllMessage::create
(const unsigned char* data, size_t dataLength) (const unsigned char* data, size_t dataLength)
{ {
return ZeroBtMessage::create<BtHaveAllMessage>(data, dataLength); return ZeroBtMessage::create<BtHaveAllMessage>(data, dataLength);

View File

@ -39,10 +39,6 @@
namespace aria2 { namespace aria2 {
class BtHaveAllMessage;
typedef SharedHandle<BtHaveAllMessage> BtHaveAllMessageHandle;
class BtHaveAllMessage : public ZeroBtMessage { class BtHaveAllMessage : public ZeroBtMessage {
public: public:
BtHaveAllMessage(); BtHaveAllMessage();
@ -51,7 +47,7 @@ public:
static const char NAME[]; static const char NAME[];
static SharedHandle<BtHaveAllMessage> create static BtHaveAllMessage* create
(const unsigned char* data, size_t dataLength); (const unsigned char* data, size_t dataLength);
virtual void doReceivedAction(); virtual void doReceivedAction();

View File

@ -44,7 +44,7 @@ const char BtHaveMessage::NAME[] = "have";
BtHaveMessage::BtHaveMessage(size_t index):IndexBtMessage(ID, NAME, index) {} BtHaveMessage::BtHaveMessage(size_t index):IndexBtMessage(ID, NAME, index) {}
SharedHandle<BtHaveMessage> BtHaveMessage::create BtHaveMessage* BtHaveMessage::create
(const unsigned char* data, size_t dataLength) (const unsigned char* data, size_t dataLength)
{ {
return IndexBtMessage::create<BtHaveMessage>(data, dataLength); return IndexBtMessage::create<BtHaveMessage>(data, dataLength);

View File

@ -39,10 +39,6 @@
namespace aria2 { namespace aria2 {
class BtHaveMessage;
typedef SharedHandle<BtHaveMessage> BtHaveMessageHandle;
class BtHaveMessage : public IndexBtMessage { class BtHaveMessage : public IndexBtMessage {
public: public:
BtHaveMessage(size_t index = 0); BtHaveMessage(size_t index = 0);
@ -51,8 +47,7 @@ public:
static const char NAME[]; static const char NAME[];
static SharedHandle<BtHaveMessage> create static BtHaveMessage* create(const unsigned char* data, size_t dataLength);
(const unsigned char* data, size_t dataLength);
virtual void doReceivedAction(); virtual void doReceivedAction();
}; };

View File

@ -43,7 +43,7 @@ const char BtHaveNoneMessage::NAME[] = "have none";
BtHaveNoneMessage::BtHaveNoneMessage():ZeroBtMessage(ID, NAME) {} BtHaveNoneMessage::BtHaveNoneMessage():ZeroBtMessage(ID, NAME) {}
SharedHandle<BtHaveNoneMessage> BtHaveNoneMessage::create BtHaveNoneMessage* BtHaveNoneMessage::create
(const unsigned char* data, size_t dataLength) (const unsigned char* data, size_t dataLength)
{ {
return ZeroBtMessage::create<BtHaveNoneMessage>(data, dataLength); return ZeroBtMessage::create<BtHaveNoneMessage>(data, dataLength);

View File

@ -39,10 +39,6 @@
namespace aria2 { namespace aria2 {
class BtHaveNoneMessage;
typedef SharedHandle<BtHaveNoneMessage> BtHaveNoneMessageHandle;
class BtHaveNoneMessage : public ZeroBtMessage { class BtHaveNoneMessage : public ZeroBtMessage {
public: public:
BtHaveNoneMessage(); BtHaveNoneMessage();
@ -51,7 +47,7 @@ public:
static const char NAME[]; static const char NAME[];
static SharedHandle<BtHaveNoneMessage> create static BtHaveNoneMessage* create
(const unsigned char* data, size_t dataLength); (const unsigned char* data, size_t dataLength);
virtual void doReceivedAction(); virtual void doReceivedAction();

View File

@ -44,7 +44,7 @@ BtInterestedMessage::BtInterestedMessage():ZeroBtMessage(ID, NAME) {}
BtInterestedMessage::~BtInterestedMessage() {} BtInterestedMessage::~BtInterestedMessage() {}
SharedHandle<BtInterestedMessage> BtInterestedMessage::create BtInterestedMessage* BtInterestedMessage::create
(const unsigned char* data, size_t dataLength) (const unsigned char* data, size_t dataLength)
{ {
return ZeroBtMessage::create<BtInterestedMessage>(data, dataLength); return ZeroBtMessage::create<BtInterestedMessage>(data, dataLength);

View File

@ -42,8 +42,6 @@ namespace aria2 {
class PeerStorage; class PeerStorage;
class BtInterestedMessage; class BtInterestedMessage;
typedef SharedHandle<BtInterestedMessage> BtInterestedMessageHandle;
class BtInterestedMessage : public ZeroBtMessage { class BtInterestedMessage : public ZeroBtMessage {
private: private:
SharedHandle<PeerStorage> peerStorage_; SharedHandle<PeerStorage> peerStorage_;
@ -55,7 +53,7 @@ public:
static const char NAME[]; static const char NAME[];
static SharedHandle<BtInterestedMessage> create static BtInterestedMessage* create
(const unsigned char* data, size_t dataLength); (const unsigned char* data, size_t dataLength);
virtual void doReceivedAction(); virtual void doReceivedAction();

View File

@ -44,7 +44,7 @@ BtNotInterestedMessage::BtNotInterestedMessage():ZeroBtMessage(ID, NAME) {}
BtNotInterestedMessage::~BtNotInterestedMessage() {} BtNotInterestedMessage::~BtNotInterestedMessage() {}
SharedHandle<BtNotInterestedMessage> BtNotInterestedMessage::create BtNotInterestedMessage* BtNotInterestedMessage::create
(const unsigned char* data, size_t dataLength) (const unsigned char* data, size_t dataLength)
{ {
return ZeroBtMessage::create<BtNotInterestedMessage>(data, dataLength); return ZeroBtMessage::create<BtNotInterestedMessage>(data, dataLength);

View File

@ -42,8 +42,6 @@ namespace aria2 {
class PeerStorage; class PeerStorage;
class BtNotInterestedMessage; class BtNotInterestedMessage;
typedef SharedHandle<BtNotInterestedMessage> BtNotInterestedMessageHandle;
class BtNotInterestedMessage : public ZeroBtMessage { class BtNotInterestedMessage : public ZeroBtMessage {
private: private:
SharedHandle<PeerStorage> peerStorage_; SharedHandle<PeerStorage> peerStorage_;
@ -55,7 +53,7 @@ public:
static const char NAME[]; static const char NAME[];
static SharedHandle<BtNotInterestedMessage> create static BtNotInterestedMessage* create
(const unsigned char* data, size_t dataLength); (const unsigned char* data, size_t dataLength);
virtual void doReceivedAction(); virtual void doReceivedAction();

View File

@ -80,12 +80,12 @@ void BtPieceMessage::setMsgPayload(const unsigned char* data)
data_ = data; data_ = data;
} }
BtPieceMessageHandle BtPieceMessage::create BtPieceMessage* BtPieceMessage::create
(const unsigned char* data, size_t dataLength) (const unsigned char* data, size_t dataLength)
{ {
bittorrent::assertPayloadLengthGreater(9, dataLength, NAME); bittorrent::assertPayloadLengthGreater(9, dataLength, NAME);
bittorrent::assertID(ID, data, NAME); bittorrent::assertID(ID, data, NAME);
BtPieceMessageHandle message(new BtPieceMessage()); BtPieceMessage* message(new BtPieceMessage());
message->setIndex(bittorrent::getIntParam(data, 1)); message->setIndex(bittorrent::getIntParam(data, 1));
message->setBegin(bittorrent::getIntParam(data, 5)); message->setBegin(bittorrent::getIntParam(data, 5));
message->setBlockLength(dataLength-9); message->setBlockLength(dataLength-9);

View File

@ -40,12 +40,9 @@
namespace aria2 { namespace aria2 {
class Piece; class Piece;
class BtPieceMessage;
class DownloadContext; class DownloadContext;
class PeerStorage; class PeerStorage;
typedef SharedHandle<BtPieceMessage> BtPieceMessageHandle;
class BtPieceMessage : public AbstractBtMessage { class BtPieceMessage : public AbstractBtMessage {
private: private:
size_t index_; size_t index_;
@ -97,8 +94,7 @@ public:
void setPeerStorage(const SharedHandle<PeerStorage>& peerStorage); void setPeerStorage(const SharedHandle<PeerStorage>& peerStorage);
static BtPieceMessageHandle create static BtPieceMessage* create(const unsigned char* data, size_t dataLength);
(const unsigned char* data, size_t dataLength);
virtual void doReceivedAction(); virtual void doReceivedAction();

View File

@ -61,13 +61,13 @@ BtPortMessage::BtPortMessage(uint16_t port)
taskFactory_(0) taskFactory_(0)
{} {}
SharedHandle<BtPortMessage> BtPortMessage::create BtPortMessage* BtPortMessage::create
(const unsigned char* data, size_t dataLength) (const unsigned char* data, size_t dataLength)
{ {
bittorrent::assertPayloadLengthEqual(3, dataLength, NAME); bittorrent::assertPayloadLengthEqual(3, dataLength, NAME);
bittorrent::assertID(ID, data, NAME); bittorrent::assertID(ID, data, NAME);
uint16_t port = bittorrent::getShortIntParam(data, 1); uint16_t port = bittorrent::getShortIntParam(data, 1);
SharedHandle<BtPortMessage> message(new BtPortMessage(port)); BtPortMessage* message(new BtPortMessage(port));
return message; return message;
} }

View File

@ -65,8 +65,7 @@ public:
uint16_t getPort() const { return port_; } uint16_t getPort() const { return port_; }
static SharedHandle<BtPortMessage> create static BtPortMessage* create(const unsigned char* data, size_t dataLength);
(const unsigned char* data, size_t dataLength);
virtual void doReceivedAction(); virtual void doReceivedAction();

View File

@ -47,7 +47,7 @@ BtRejectMessage::BtRejectMessage
(size_t index, int32_t begin, int32_t length): (size_t index, int32_t begin, int32_t length):
RangeBtMessage(ID, NAME, index, begin, length) {} RangeBtMessage(ID, NAME, index, begin, length) {}
SharedHandle<BtRejectMessage> BtRejectMessage::create BtRejectMessage* BtRejectMessage::create
(const unsigned char* data, size_t dataLength) (const unsigned char* data, size_t dataLength)
{ {
return RangeBtMessage::create<BtRejectMessage>(data, dataLength); return RangeBtMessage::create<BtRejectMessage>(data, dataLength);

View File

@ -39,10 +39,6 @@
namespace aria2 { namespace aria2 {
class BtRejectMessage;
typedef SharedHandle<BtRejectMessage> BtRejectMessageHandle;
class BtRejectMessage : public RangeBtMessage { class BtRejectMessage : public RangeBtMessage {
public: public:
BtRejectMessage(size_t index = 0, int32_t begin = 0, int32_t length = 0); BtRejectMessage(size_t index = 0, int32_t begin = 0, int32_t length = 0);
@ -51,8 +47,7 @@ public:
static const char NAME[]; static const char NAME[];
static SharedHandle<BtRejectMessage> create static BtRejectMessage* create(const unsigned char* data, size_t dataLength);
(const unsigned char* data, size_t dataLength);
virtual void doReceivedAction(); virtual void doReceivedAction();
}; };

View File

@ -48,7 +48,7 @@ BtRequestMessage::BtRequestMessage
RangeBtMessage(ID, NAME, index, begin, length), RangeBtMessage(ID, NAME, index, begin, length),
blockIndex_(blockIndex) {} blockIndex_(blockIndex) {}
SharedHandle<BtRequestMessage> BtRequestMessage::create BtRequestMessage* BtRequestMessage::create
(const unsigned char* data, size_t dataLength) (const unsigned char* data, size_t dataLength)
{ {
return RangeBtMessage::create<BtRequestMessage>(data, dataLength); return RangeBtMessage::create<BtRequestMessage>(data, dataLength);

View File

@ -39,10 +39,6 @@
namespace aria2 { namespace aria2 {
class BtRequestMessage;
typedef SharedHandle<BtRequestMessage> BtRequestMessageHandle;
class BtRequestMessage : public RangeBtMessage { class BtRequestMessage : public RangeBtMessage {
private: private:
size_t blockIndex_; size_t blockIndex_;
@ -59,7 +55,7 @@ public:
size_t getBlockIndex() const { return blockIndex_; } size_t getBlockIndex() const { return blockIndex_; }
void setBlockIndex(size_t blockIndex) { blockIndex_ = blockIndex; } void setBlockIndex(size_t blockIndex) { blockIndex_ = blockIndex; }
static SharedHandle<BtRequestMessage> create static BtRequestMessage* create
(const unsigned char* data, size_t dataLength); (const unsigned char* data, size_t dataLength);
virtual void doReceivedAction(); virtual void doReceivedAction();

View File

@ -38,7 +38,7 @@ namespace aria2 {
const char BtSuggestPieceMessage::NAME[] = "suggest piece"; const char BtSuggestPieceMessage::NAME[] = "suggest piece";
SharedHandle<BtSuggestPieceMessage> BtSuggestPieceMessage::create BtSuggestPieceMessage* BtSuggestPieceMessage::create
(const unsigned char* data, size_t dataLength) (const unsigned char* data, size_t dataLength)
{ {
return IndexBtMessage::create<BtSuggestPieceMessage>(data, dataLength); return IndexBtMessage::create<BtSuggestPieceMessage>(data, dataLength);

View File

@ -39,10 +39,6 @@
namespace aria2 { namespace aria2 {
class BtSuggestPieceMessage;
typedef SharedHandle<BtSuggestPieceMessage> BtSuggestPieceMessageHandle;
class BtSuggestPieceMessage : public IndexBtMessage { class BtSuggestPieceMessage : public IndexBtMessage {
public: public:
BtSuggestPieceMessage():IndexBtMessage(ID, NAME, 0) {} BtSuggestPieceMessage():IndexBtMessage(ID, NAME, 0) {}
@ -51,7 +47,7 @@ public:
static const char NAME[]; static const char NAME[];
static SharedHandle<BtSuggestPieceMessage> create static BtSuggestPieceMessage* create
(const unsigned char* data, size_t dataLength); (const unsigned char* data, size_t dataLength);
virtual void doReceivedAction() { virtual void doReceivedAction() {

View File

@ -41,7 +41,7 @@ const char BtUnchokeMessage::NAME[] = "unchoke";
BtUnchokeMessage::BtUnchokeMessage():ZeroBtMessage(ID, NAME) {} BtUnchokeMessage::BtUnchokeMessage():ZeroBtMessage(ID, NAME) {}
SharedHandle<BtUnchokeMessage> BtUnchokeMessage::create BtUnchokeMessage* BtUnchokeMessage::create
(const unsigned char* data, size_t dataLength) (const unsigned char* data, size_t dataLength)
{ {
return ZeroBtMessage::create<BtUnchokeMessage>(data, dataLength); return ZeroBtMessage::create<BtUnchokeMessage>(data, dataLength);

View File

@ -39,10 +39,6 @@
namespace aria2 { namespace aria2 {
class BtUnchokeMessage;
typedef SharedHandle<BtUnchokeMessage> BtUnchokeMessageHandle;
class BtUnchokeMessage : public ZeroBtMessage { class BtUnchokeMessage : public ZeroBtMessage {
private: private:
static const size_t MESSAGE_LENGTH = 5; static const size_t MESSAGE_LENGTH = 5;
@ -53,7 +49,7 @@ public:
static const char NAME[]; static const char NAME[];
static SharedHandle<BtUnchokeMessage> create static BtUnchokeMessage* create
(const unsigned char* data, size_t dataLength); (const unsigned char* data, size_t dataLength);
virtual void doReceivedAction(); virtual void doReceivedAction();

View File

@ -85,11 +85,11 @@ DefaultBtMessageFactory::DefaultBtMessageFactory():
DefaultBtMessageFactory::~DefaultBtMessageFactory() {} DefaultBtMessageFactory::~DefaultBtMessageFactory() {}
BtMessageHandle SharedHandle<BtMessage>
DefaultBtMessageFactory::createBtMessage DefaultBtMessageFactory::createBtMessage
(const unsigned char* data, size_t dataLength) (const unsigned char* data, size_t dataLength)
{ {
AbstractBtMessageHandle msg; SharedHandle<AbstractBtMessage> msg;
if(dataLength == 0) { if(dataLength == 0) {
// keep-alive // keep-alive
msg.reset(new BtKeepAliveMessage()); msg.reset(new BtKeepAliveMessage());
@ -97,41 +97,37 @@ DefaultBtMessageFactory::createBtMessage
uint8_t id = bittorrent::getId(data); uint8_t id = bittorrent::getId(data);
switch(id) { switch(id) {
case BtChokeMessage::ID: case BtChokeMessage::ID:
msg = BtChokeMessage::create(data, dataLength); msg.reset(BtChokeMessage::create(data, dataLength));
break; break;
case BtUnchokeMessage::ID: case BtUnchokeMessage::ID:
msg = BtUnchokeMessage::create(data, dataLength); msg.reset(BtUnchokeMessage::create(data, dataLength));
break; break;
case BtInterestedMessage::ID: case BtInterestedMessage::ID:
{ {
SharedHandle<BtInterestedMessage> m = BtInterestedMessage* m = BtInterestedMessage::create(data, dataLength);
BtInterestedMessage::create(data, dataLength);
m->setPeerStorage(peerStorage_); m->setPeerStorage(peerStorage_);
msg = m; msg.reset(m);
} }
break; break;
case BtNotInterestedMessage::ID: case BtNotInterestedMessage::ID:
{ {
SharedHandle<BtNotInterestedMessage> m = BtNotInterestedMessage* m =
BtNotInterestedMessage::create(data, dataLength); BtNotInterestedMessage::create(data, dataLength);
m->setPeerStorage(peerStorage_); m->setPeerStorage(peerStorage_);
msg = m; msg.reset(m);
} }
break; break;
case BtHaveMessage::ID: case BtHaveMessage::ID:
msg = BtHaveMessage::create(data, dataLength); msg.reset(BtHaveMessage::create(data, dataLength));
{
if(!metadataGetMode_) { if(!metadataGetMode_) {
SharedHandle<BtMessageValidator> v SharedHandle<BtMessageValidator> v
(new IndexBtMessageValidator(static_cast<BtHaveMessage*>(msg.get()), (new IndexBtMessageValidator(static_cast<BtHaveMessage*>(msg.get()),
downloadContext_->getNumPieces())); downloadContext_->getNumPieces()));
msg->setBtMessageValidator(v); msg->setBtMessageValidator(v);
} }
}
break; break;
case BtBitfieldMessage::ID: case BtBitfieldMessage::ID:
msg = BtBitfieldMessage::create(data, dataLength); msg.reset(BtBitfieldMessage::create(data, dataLength));
{
if(!metadataGetMode_) { if(!metadataGetMode_) {
SharedHandle<BtMessageValidator> v SharedHandle<BtMessageValidator> v
(new BtBitfieldMessageValidator (new BtBitfieldMessageValidator
@ -139,106 +135,101 @@ DefaultBtMessageFactory::createBtMessage
downloadContext_->getNumPieces())); downloadContext_->getNumPieces()));
msg->setBtMessageValidator(v); msg->setBtMessageValidator(v);
} }
}
break; break;
case BtRequestMessage::ID: { case BtRequestMessage::ID: {
BtRequestMessageHandle temp = BtRequestMessage::create(data, dataLength); BtRequestMessage* m = BtRequestMessage::create(data, dataLength);
if(!metadataGetMode_) { if(!metadataGetMode_) {
SharedHandle<BtMessageValidator> validator SharedHandle<BtMessageValidator> validator
(new RangeBtMessageValidator (new RangeBtMessageValidator
(temp.get(), (m,
downloadContext_->getNumPieces(), downloadContext_->getNumPieces(),
pieceStorage_->getPieceLength(temp->getIndex()))); pieceStorage_->getPieceLength(m->getIndex())));
temp->setBtMessageValidator(validator); m->setBtMessageValidator(validator);
} }
msg = temp; msg.reset(m);
break; break;
} }
case BtCancelMessage::ID: { case BtCancelMessage::ID: {
BtCancelMessageHandle temp = BtCancelMessage::create(data, dataLength); BtCancelMessage* m = BtCancelMessage::create(data, dataLength);
if(!metadataGetMode_) { if(!metadataGetMode_) {
SharedHandle<BtMessageValidator> validator SharedHandle<BtMessageValidator> validator
(new RangeBtMessageValidator (new RangeBtMessageValidator
(temp.get(), (m,
downloadContext_->getNumPieces(), downloadContext_->getNumPieces(),
pieceStorage_->getPieceLength(temp->getIndex()))); pieceStorage_->getPieceLength(m->getIndex())));
temp->setBtMessageValidator(validator); m->setBtMessageValidator(validator);
} }
msg = temp; msg.reset(m);
break; break;
} }
case BtPieceMessage::ID: { case BtPieceMessage::ID: {
BtPieceMessageHandle temp = BtPieceMessage::create(data, dataLength); BtPieceMessage* m = BtPieceMessage::create(data, dataLength);
if(!metadataGetMode_) { if(!metadataGetMode_) {
BtMessageValidatorHandle validator BtMessageValidatorHandle validator
(new BtPieceMessageValidator (new BtPieceMessageValidator
(temp.get(), (m,
downloadContext_->getNumPieces(), downloadContext_->getNumPieces(),
pieceStorage_->getPieceLength(temp->getIndex()))); pieceStorage_->getPieceLength(m->getIndex())));
temp->setBtMessageValidator(validator); m->setBtMessageValidator(validator);
} }
temp->setDownloadContext(downloadContext_); m->setDownloadContext(downloadContext_);
temp->setPeerStorage(peerStorage_); m->setPeerStorage(peerStorage_);
msg = temp; msg.reset(m);
break; break;
} }
case BtHaveAllMessage::ID: case BtHaveAllMessage::ID:
msg = BtHaveAllMessage::create(data, dataLength); msg.reset(BtHaveAllMessage::create(data, dataLength));
break; break;
case BtHaveNoneMessage::ID: case BtHaveNoneMessage::ID:
msg = BtHaveNoneMessage::create(data, dataLength); msg.reset(BtHaveNoneMessage::create(data, dataLength));
break; break;
case BtRejectMessage::ID: { case BtRejectMessage::ID: {
BtRejectMessageHandle temp = BtRejectMessage::create(data, dataLength); BtRejectMessage* m = BtRejectMessage::create(data, dataLength);
if(!metadataGetMode_) { if(!metadataGetMode_) {
SharedHandle<BtMessageValidator> validator SharedHandle<BtMessageValidator> validator
(new RangeBtMessageValidator (new RangeBtMessageValidator
(temp.get(), (m,
downloadContext_->getNumPieces(), downloadContext_->getNumPieces(),
pieceStorage_->getPieceLength(temp->getIndex()))); pieceStorage_->getPieceLength(m->getIndex())));
temp->setBtMessageValidator(validator); m->setBtMessageValidator(validator);
} }
msg = temp; msg.reset(m);
break; break;
} }
case BtSuggestPieceMessage::ID: { case BtSuggestPieceMessage::ID: {
BtSuggestPieceMessageHandle temp = BtSuggestPieceMessage* m =
BtSuggestPieceMessage::create(data, dataLength); BtSuggestPieceMessage::create(data, dataLength);
if(!metadataGetMode_) { if(!metadataGetMode_) {
SharedHandle<BtMessageValidator> validator SharedHandle<BtMessageValidator> validator
(new IndexBtMessageValidator(temp.get(), (new IndexBtMessageValidator(m, downloadContext_->getNumPieces()));
downloadContext_->getNumPieces())); m->setBtMessageValidator(validator);
temp->setBtMessageValidator(validator);
} }
msg = temp; msg.reset(m);
break; break;
} }
case BtAllowedFastMessage::ID: { case BtAllowedFastMessage::ID: {
BtAllowedFastMessageHandle temp = BtAllowedFastMessage* m = BtAllowedFastMessage::create(data, dataLength);
BtAllowedFastMessage::create(data, dataLength);
if(!metadataGetMode_) { if(!metadataGetMode_) {
SharedHandle<BtMessageValidator> validator SharedHandle<BtMessageValidator> validator
(new IndexBtMessageValidator(temp.get(), (new IndexBtMessageValidator(m, downloadContext_->getNumPieces()));
downloadContext_->getNumPieces())); m->setBtMessageValidator(validator);
temp->setBtMessageValidator(validator);
} }
msg = temp; msg.reset(m);
break; break;
} }
case BtPortMessage::ID: { case BtPortMessage::ID: {
SharedHandle<BtPortMessage> temp = BtPortMessage* m = BtPortMessage::create(data, dataLength);
BtPortMessage::create(data, dataLength); m->setLocalNode(localNode_);
temp->setLocalNode(localNode_); m->setRoutingTable(routingTable_);
temp->setRoutingTable(routingTable_); m->setTaskQueue(taskQueue_);
temp->setTaskQueue(taskQueue_); m->setTaskFactory(taskFactory_);
temp->setTaskFactory(taskFactory_); msg.reset(m);
msg = temp;
break; break;
} }
case BtExtendedMessage::ID: { case BtExtendedMessage::ID: {
if(peer_->isExtendedMessagingEnabled()) { if(peer_->isExtendedMessagingEnabled()) {
msg = BtExtendedMessage::create(extensionMessageFactory_, msg.reset(BtExtendedMessage::create(extensionMessageFactory_,
peer_, data, dataLength); peer_, data, dataLength));
} else { } else {
throw DL_ABORT_EX("Received extended message from peer during" throw DL_ABORT_EX("Received extended message from peer during"
" a session with extended messaging disabled."); " a session with extended messaging disabled.");
@ -249,12 +240,12 @@ DefaultBtMessageFactory::createBtMessage
throw DL_ABORT_EX(fmt("Invalid message ID. id=%u", id)); throw DL_ABORT_EX(fmt("Invalid message ID. id=%u", id));
} }
} }
setCommonProperty(msg); setCommonProperty(msg.get());
return msg; return msg;
} }
void DefaultBtMessageFactory::setCommonProperty void DefaultBtMessageFactory::setCommonProperty(AbstractBtMessage* msg)
(const AbstractBtMessageHandle& msg) { {
msg->setCuid(cuid_); msg->setCuid(cuid_);
msg->setPeer(peer_); msg->setPeer(peer_);
msg->setPieceStorage(pieceStorage_); msg->setPieceStorage(pieceStorage_);
@ -277,7 +268,7 @@ DefaultBtMessageFactory::createHandshakeMessage
(new BtHandshakeMessageValidator (new BtHandshakeMessageValidator
(msg.get(), bittorrent::getInfoHash(downloadContext_))); (msg.get(), bittorrent::getInfoHash(downloadContext_)));
msg->setBtMessageValidator(validator); msg->setBtMessageValidator(validator);
setCommonProperty(msg); setCommonProperty(msg.get());
return msg; return msg;
} }
@ -292,181 +283,180 @@ DefaultBtMessageFactory::createHandshakeMessage(const unsigned char* infoHash,
(msg.get(), bittorrent::getInfoHash(downloadContext_))); (msg.get(), bittorrent::getInfoHash(downloadContext_)));
msg->setBtMessageValidator(validator); msg->setBtMessageValidator(validator);
msg->setDHTEnabled(dhtEnabled_); msg->setDHTEnabled(dhtEnabled_);
setCommonProperty(msg); setCommonProperty(msg.get());
return msg; return msg;
} }
BtMessageHandle SharedHandle<BtMessage>
DefaultBtMessageFactory::createRequestMessage DefaultBtMessageFactory::createRequestMessage
(const SharedHandle<Piece>& piece, size_t blockIndex) (const SharedHandle<Piece>& piece, size_t blockIndex)
{ {
BtRequestMessageHandle msg BtRequestMessage* msg
(new BtRequestMessage(piece->getIndex(), (new BtRequestMessage(piece->getIndex(),
blockIndex*piece->getBlockLength(), blockIndex*piece->getBlockLength(),
piece->getBlockLength(blockIndex), piece->getBlockLength(blockIndex),
blockIndex)); blockIndex));
SharedHandle<BtMessageValidator> validator SharedHandle<BtMessageValidator> validator
(new RangeBtMessageValidator (new RangeBtMessageValidator
(msg.get(), (msg,
downloadContext_->getNumPieces(), downloadContext_->getNumPieces(),
pieceStorage_->getPieceLength(msg->getIndex()))); pieceStorage_->getPieceLength(msg->getIndex())));
msg->setBtMessageValidator(validator); msg->setBtMessageValidator(validator);
setCommonProperty(msg); setCommonProperty(msg);
return msg; return SharedHandle<BtMessage>(msg);
} }
BtMessageHandle SharedHandle<BtMessage>
DefaultBtMessageFactory::createCancelMessage DefaultBtMessageFactory::createCancelMessage
(size_t index, int32_t begin, int32_t length) (size_t index, int32_t begin, int32_t length)
{ {
BtCancelMessageHandle msg(new BtCancelMessage(index, begin, length)); BtCancelMessage* msg(new BtCancelMessage(index, begin, length));
SharedHandle<BtMessageValidator> validator SharedHandle<BtMessageValidator> validator
(new RangeBtMessageValidator (new RangeBtMessageValidator
(msg.get(), (msg,
downloadContext_->getNumPieces(), downloadContext_->getNumPieces(),
pieceStorage_->getPieceLength(index))); pieceStorage_->getPieceLength(index)));
msg->setBtMessageValidator(validator); msg->setBtMessageValidator(validator);
setCommonProperty(msg); setCommonProperty(msg);
return msg; return SharedHandle<BtMessage>(msg);
} }
BtMessageHandle SharedHandle<BtMessage>
DefaultBtMessageFactory::createPieceMessage DefaultBtMessageFactory::createPieceMessage
(size_t index, int32_t begin, int32_t length) (size_t index, int32_t begin, int32_t length)
{ {
BtPieceMessageHandle msg(new BtPieceMessage(index, begin, length)); BtPieceMessage* msg(new BtPieceMessage(index, begin, length));
BtMessageValidatorHandle validator BtMessageValidatorHandle validator
(new BtPieceMessageValidator(msg.get(), (new BtPieceMessageValidator(msg,
downloadContext_->getNumPieces(), downloadContext_->getNumPieces(),
pieceStorage_->getPieceLength(index))); pieceStorage_->getPieceLength(index)));
msg->setBtMessageValidator(validator); msg->setBtMessageValidator(validator);
msg->setDownloadContext(downloadContext_); msg->setDownloadContext(downloadContext_);
setCommonProperty(msg); setCommonProperty(msg);
return msg; return SharedHandle<BtMessage>(msg);
} }
BtMessageHandle SharedHandle<BtMessage>
DefaultBtMessageFactory::createHaveMessage(size_t index) DefaultBtMessageFactory::createHaveMessage(size_t index)
{ {
BtHaveMessageHandle msg(new BtHaveMessage(index)); BtHaveMessage* msg(new BtHaveMessage(index));
SharedHandle<BtMessageValidator> v SharedHandle<BtMessageValidator> v
(new IndexBtMessageValidator(msg.get(), downloadContext_->getNumPieces())); (new IndexBtMessageValidator(msg, downloadContext_->getNumPieces()));
msg->setBtMessageValidator(v); msg->setBtMessageValidator(v);
setCommonProperty(msg); setCommonProperty(msg);
return msg; return SharedHandle<BtMessage>(msg);
} }
BtMessageHandle SharedHandle<BtMessage>
DefaultBtMessageFactory::createChokeMessage() DefaultBtMessageFactory::createChokeMessage()
{ {
BtChokeMessageHandle msg(new BtChokeMessage()); BtChokeMessage* msg(new BtChokeMessage());
setCommonProperty(msg); setCommonProperty(msg);
return msg; return SharedHandle<BtMessage>(msg);
} }
BtMessageHandle SharedHandle<BtMessage>
DefaultBtMessageFactory::createUnchokeMessage() DefaultBtMessageFactory::createUnchokeMessage()
{ {
BtUnchokeMessageHandle msg(new BtUnchokeMessage()); BtUnchokeMessage* msg(new BtUnchokeMessage());
setCommonProperty(msg); setCommonProperty(msg);
return msg; return SharedHandle<BtMessage>(msg);
} }
BtMessageHandle SharedHandle<BtMessage>
DefaultBtMessageFactory::createInterestedMessage() DefaultBtMessageFactory::createInterestedMessage()
{ {
BtInterestedMessageHandle msg(new BtInterestedMessage()); BtInterestedMessage* msg(new BtInterestedMessage());
setCommonProperty(msg); setCommonProperty(msg);
return msg; return SharedHandle<BtMessage>(msg);
} }
BtMessageHandle SharedHandle<BtMessage>
DefaultBtMessageFactory::createNotInterestedMessage() DefaultBtMessageFactory::createNotInterestedMessage()
{ {
BtNotInterestedMessageHandle msg(new BtNotInterestedMessage()); BtNotInterestedMessage* msg(new BtNotInterestedMessage());
setCommonProperty(msg); setCommonProperty(msg);
return msg; return SharedHandle<BtMessage>(msg);
} }
BtMessageHandle SharedHandle<BtMessage>
DefaultBtMessageFactory::createBitfieldMessage() DefaultBtMessageFactory::createBitfieldMessage()
{ {
BtBitfieldMessageHandle msg BtBitfieldMessage* msg
(new BtBitfieldMessage(pieceStorage_->getBitfield(), (new BtBitfieldMessage(pieceStorage_->getBitfield(),
pieceStorage_->getBitfieldLength())); pieceStorage_->getBitfieldLength()));
SharedHandle<BtMessageValidator> v SharedHandle<BtMessageValidator> v
(new BtBitfieldMessageValidator(msg.get(), (new BtBitfieldMessageValidator(msg, downloadContext_->getNumPieces()));
downloadContext_->getNumPieces()));
msg->setBtMessageValidator(v); msg->setBtMessageValidator(v);
setCommonProperty(msg); setCommonProperty(msg);
return msg; return SharedHandle<BtMessage>(msg);
} }
BtMessageHandle SharedHandle<BtMessage>
DefaultBtMessageFactory::createKeepAliveMessage() DefaultBtMessageFactory::createKeepAliveMessage()
{ {
BtKeepAliveMessageHandle msg(new BtKeepAliveMessage()); BtKeepAliveMessage* msg(new BtKeepAliveMessage());
setCommonProperty(msg); setCommonProperty(msg);
return msg; return SharedHandle<BtMessage>(msg);
} }
BtMessageHandle SharedHandle<BtMessage>
DefaultBtMessageFactory::createHaveAllMessage() DefaultBtMessageFactory::createHaveAllMessage()
{ {
BtHaveAllMessageHandle msg(new BtHaveAllMessage()); BtHaveAllMessage* msg(new BtHaveAllMessage());
setCommonProperty(msg); setCommonProperty(msg);
return msg; return SharedHandle<BtMessage>(msg);
} }
BtMessageHandle SharedHandle<BtMessage>
DefaultBtMessageFactory::createHaveNoneMessage() DefaultBtMessageFactory::createHaveNoneMessage()
{ {
BtHaveNoneMessageHandle msg(new BtHaveNoneMessage()); BtHaveNoneMessage* msg(new BtHaveNoneMessage());
setCommonProperty(msg); setCommonProperty(msg);
return msg; return SharedHandle<BtMessage>(msg);
} }
BtMessageHandle SharedHandle<BtMessage>
DefaultBtMessageFactory::createRejectMessage DefaultBtMessageFactory::createRejectMessage
(size_t index, int32_t begin, int32_t length) (size_t index, int32_t begin, int32_t length)
{ {
BtRejectMessageHandle msg(new BtRejectMessage(index, begin, length)); BtRejectMessage* msg(new BtRejectMessage(index, begin, length));
SharedHandle<BtMessageValidator> validator SharedHandle<BtMessageValidator> validator
(new RangeBtMessageValidator (new RangeBtMessageValidator
(msg.get(), (msg,
downloadContext_->getNumPieces(), downloadContext_->getNumPieces(),
pieceStorage_->getPieceLength(index))); pieceStorage_->getPieceLength(index)));
msg->setBtMessageValidator(validator); msg->setBtMessageValidator(validator);
setCommonProperty(msg); setCommonProperty(msg);
return msg; return SharedHandle<BtMessage>(msg);
} }
BtMessageHandle SharedHandle<BtMessage>
DefaultBtMessageFactory::createAllowedFastMessage(size_t index) DefaultBtMessageFactory::createAllowedFastMessage(size_t index)
{ {
BtAllowedFastMessageHandle msg(new BtAllowedFastMessage(index)); BtAllowedFastMessage* msg(new BtAllowedFastMessage(index));
SharedHandle<BtMessageValidator> validator SharedHandle<BtMessageValidator> validator
(new IndexBtMessageValidator(msg.get(), downloadContext_->getNumPieces())); (new IndexBtMessageValidator(msg, downloadContext_->getNumPieces()));
msg->setBtMessageValidator(validator); msg->setBtMessageValidator(validator);
setCommonProperty(msg); setCommonProperty(msg);
return msg; return SharedHandle<BtMessage>(msg);
} }
BtMessageHandle SharedHandle<BtMessage>
DefaultBtMessageFactory::createPortMessage(uint16_t port) DefaultBtMessageFactory::createPortMessage(uint16_t port)
{ {
SharedHandle<BtPortMessage> msg(new BtPortMessage(port)); BtPortMessage* msg(new BtPortMessage(port));
setCommonProperty(msg); setCommonProperty(msg);
return msg; return SharedHandle<BtMessage>(msg);
} }
BtMessageHandle SharedHandle<BtMessage>
DefaultBtMessageFactory::createBtExtendedMessage DefaultBtMessageFactory::createBtExtendedMessage
(const ExtensionMessageHandle& msg) (const ExtensionMessageHandle& msg)
{ {
BtExtendedMessageHandle m(new BtExtendedMessage(msg)); BtExtendedMessage* m(new BtExtendedMessage(msg));
setCommonProperty(m); setCommonProperty(m);
return m; return SharedHandle<BtMessage>(m);
} }
void DefaultBtMessageFactory::setTaskQueue(DHTTaskQueue* taskQueue) void DefaultBtMessageFactory::setTaskQueue(DHTTaskQueue* taskQueue)

View File

@ -82,7 +82,7 @@ private:
bool metadataGetMode_; bool metadataGetMode_;
void setCommonProperty(const SharedHandle<AbstractBtMessage>& msg); void setCommonProperty(AbstractBtMessage* msg);
public: public:
DefaultBtMessageFactory(); DefaultBtMessageFactory();
@ -176,8 +176,6 @@ public:
} }
}; };
typedef SharedHandle<DefaultBtMessageFactory> DefaultBtMessageFactoryHandle;
} // namespace aria2 } // namespace aria2
#endif // D_DEFAULT_BT_MESSAGE_FACTORY_H #endif // D_DEFAULT_BT_MESSAGE_FACTORY_H

View File

@ -47,11 +47,11 @@ private:
static const size_t MESSAGE_LENGTH = 9; static const size_t MESSAGE_LENGTH = 9;
protected: protected:
template<typename T> template<typename T>
static SharedHandle<T> create(const unsigned char* data, size_t dataLength) static T* create(const unsigned char* data, size_t dataLength)
{ {
bittorrent::assertPayloadLengthEqual(5, dataLength, T::NAME); bittorrent::assertPayloadLengthEqual(5, dataLength, T::NAME);
bittorrent::assertID(T::ID, data, T::NAME); bittorrent::assertID(T::ID, data, T::NAME);
SharedHandle<T> message(new T()); T* message(new T());
message->setIndex(bittorrent::getIntParam(data, 1)); message->setIndex(bittorrent::getIntParam(data, 1));
return message; return message;
} }

View File

@ -49,12 +49,11 @@ private:
static const size_t MESSAGE_LENGTH = 17; static const size_t MESSAGE_LENGTH = 17;
protected: protected:
template<typename T> template<typename T>
static SharedHandle<T> create static T* create(const unsigned char* data, size_t dataLength)
(const unsigned char* data, size_t dataLength)
{ {
bittorrent::assertPayloadLengthEqual(13, dataLength, T::NAME); bittorrent::assertPayloadLengthEqual(13, dataLength, T::NAME);
bittorrent::assertID(T::ID, data, T::NAME); bittorrent::assertID(T::ID, data, T::NAME);
SharedHandle<T> message(new T()); T* message(new T());
message->setIndex(bittorrent::getIntParam(data, 1)); message->setIndex(bittorrent::getIntParam(data, 1));
message->setBegin(bittorrent::getIntParam(data, 5)); message->setBegin(bittorrent::getIntParam(data, 5));
message->setLength(bittorrent::getIntParam(data, 9)); message->setLength(bittorrent::getIntParam(data, 9));

View File

@ -45,11 +45,11 @@ private:
static const size_t MESSAGE_LENGTH = 5; static const size_t MESSAGE_LENGTH = 5;
protected: protected:
template<typename T> template<typename T>
static SharedHandle<T> create(const unsigned char* data, size_t dataLength) static T* create(const unsigned char* data, size_t dataLength)
{ {
bittorrent::assertPayloadLengthEqual(1, dataLength, T::NAME); bittorrent::assertPayloadLengthEqual(1, dataLength, T::NAME);
bittorrent::assertID(T::ID, data, T::NAME); bittorrent::assertID(T::ID, data, T::NAME);
SharedHandle<T> message(new T()); T* message(new T());
return message; return message;
} }

View File

@ -38,7 +38,8 @@ void BtAllowedFastMessageTest::testCreate() {
unsigned char msg[9]; unsigned char msg[9];
bittorrent::createPeerMessageString(msg, sizeof(msg), 5, 17); bittorrent::createPeerMessageString(msg, sizeof(msg), 5, 17);
bittorrent::setIntParam(&msg[5], 12345); bittorrent::setIntParam(&msg[5], 12345);
SharedHandle<BtAllowedFastMessage> pm = BtAllowedFastMessage::create(&msg[4], 5); SharedHandle<BtAllowedFastMessage> pm
(BtAllowedFastMessage::create(&msg[4], 5));
CPPUNIT_ASSERT_EQUAL((uint8_t)17, pm->getId()); CPPUNIT_ASSERT_EQUAL((uint8_t)17, pm->getId());
CPPUNIT_ASSERT_EQUAL((size_t)12345, pm->getIndex()); CPPUNIT_ASSERT_EQUAL((size_t)12345, pm->getIndex());

View File

@ -44,7 +44,7 @@ void BtBitfieldMessageTest::testCreate() {
unsigned char bitfield[2]; unsigned char bitfield[2];
memset(bitfield, 0xff, sizeof(bitfield)); memset(bitfield, 0xff, sizeof(bitfield));
memcpy(&msg[5], bitfield, sizeof(bitfield)); memcpy(&msg[5], bitfield, sizeof(bitfield));
SharedHandle<BtBitfieldMessage> pm = BtBitfieldMessage::create(&msg[4], 3); SharedHandle<BtBitfieldMessage> pm(BtBitfieldMessage::create(&msg[4], 3));
CPPUNIT_ASSERT_EQUAL((uint8_t)5, pm->getId()); CPPUNIT_ASSERT_EQUAL((uint8_t)5, pm->getId());
CPPUNIT_ASSERT(memcmp(bitfield, pm->getBitfield(), sizeof(bitfield)) == 0); CPPUNIT_ASSERT(memcmp(bitfield, pm->getBitfield(), sizeof(bitfield)) == 0);
CPPUNIT_ASSERT_EQUAL((size_t)2, pm->getBitfieldLength()); CPPUNIT_ASSERT_EQUAL((size_t)2, pm->getBitfieldLength());

View File

@ -58,7 +58,7 @@ void BtCancelMessageTest::testCreate() {
bittorrent::setIntParam(&msg[5], 12345); bittorrent::setIntParam(&msg[5], 12345);
bittorrent::setIntParam(&msg[9], 256); bittorrent::setIntParam(&msg[9], 256);
bittorrent::setIntParam(&msg[13], 1024); bittorrent::setIntParam(&msg[13], 1024);
SharedHandle<BtCancelMessage> pm = BtCancelMessage::create(&msg[4], 13); SharedHandle<BtCancelMessage> pm(BtCancelMessage::create(&msg[4], 13));
CPPUNIT_ASSERT_EQUAL((uint8_t)8, pm->getId()); CPPUNIT_ASSERT_EQUAL((uint8_t)8, pm->getId());
CPPUNIT_ASSERT_EQUAL((size_t)12345, pm->getIndex()); CPPUNIT_ASSERT_EQUAL((size_t)12345, pm->getIndex());
CPPUNIT_ASSERT_EQUAL(256, pm->getBegin()); CPPUNIT_ASSERT_EQUAL(256, pm->getBegin());

View File

@ -71,7 +71,7 @@ CPPUNIT_TEST_SUITE_REGISTRATION(BtChokeMessageTest);
void BtChokeMessageTest::testCreate() { void BtChokeMessageTest::testCreate() {
unsigned char msg[5]; unsigned char msg[5];
bittorrent::createPeerMessageString(msg, sizeof(msg), 1, 0); bittorrent::createPeerMessageString(msg, sizeof(msg), 1, 0);
SharedHandle<BtChokeMessage> pm = BtChokeMessage::create(&msg[4], 1); SharedHandle<BtChokeMessage> pm(BtChokeMessage::create(&msg[4], 1));
CPPUNIT_ASSERT_EQUAL((uint8_t)0, pm->getId()); CPPUNIT_ASSERT_EQUAL((uint8_t)0, pm->getId());
// case: payload size is wrong // case: payload size is wrong

View File

@ -45,9 +45,9 @@ void BtExtendedMessageTest::testCreate() {
bittorrent::createPeerMessageString((unsigned char*)msg, sizeof(msg), 13, 20); bittorrent::createPeerMessageString((unsigned char*)msg, sizeof(msg), 13, 20);
msg[5] = 1; // Set dummy extended message ID 1 msg[5] = 1; // Set dummy extended message ID 1
memcpy(msg+6, payload.c_str(), payload.size()); memcpy(msg+6, payload.c_str(), payload.size());
SharedHandle<BtExtendedMessage> pm = BtExtendedMessage::create(exmsgFactory, SharedHandle<BtExtendedMessage> pm(BtExtendedMessage::create(exmsgFactory,
peer, peer,
&msg[4], 13); &msg[4], 13));
CPPUNIT_ASSERT_EQUAL((uint8_t)20, pm->getId()); CPPUNIT_ASSERT_EQUAL((uint8_t)20, pm->getId());
// case: payload size is wrong // case: payload size is wrong

View File

@ -38,7 +38,7 @@ CPPUNIT_TEST_SUITE_REGISTRATION(BtHaveAllMessageTest);
void BtHaveAllMessageTest::testCreate() { void BtHaveAllMessageTest::testCreate() {
unsigned char msg[5]; unsigned char msg[5];
bittorrent::createPeerMessageString(msg, sizeof(msg), 1, 14); bittorrent::createPeerMessageString(msg, sizeof(msg), 1, 14);
SharedHandle<BtHaveAllMessage> pm = BtHaveAllMessage::create(&msg[4], 1); SharedHandle<BtHaveAllMessage> pm(BtHaveAllMessage::create(&msg[4], 1));
CPPUNIT_ASSERT_EQUAL((uint8_t)14, pm->getId()); CPPUNIT_ASSERT_EQUAL((uint8_t)14, pm->getId());
// case: payload size is wrong // case: payload size is wrong

View File

@ -41,7 +41,7 @@ void BtHaveMessageTest::testCreate() {
unsigned char msg[9]; unsigned char msg[9];
bittorrent::createPeerMessageString(msg, sizeof(msg), 5, 4); bittorrent::createPeerMessageString(msg, sizeof(msg), 5, 4);
bittorrent::setIntParam(&msg[5], 12345); bittorrent::setIntParam(&msg[5], 12345);
SharedHandle<BtHaveMessage> pm = BtHaveMessage::create(&msg[4], 5); SharedHandle<BtHaveMessage> pm(BtHaveMessage::create(&msg[4], 5));
CPPUNIT_ASSERT_EQUAL((uint8_t)4, pm->getId()); CPPUNIT_ASSERT_EQUAL((uint8_t)4, pm->getId());
CPPUNIT_ASSERT_EQUAL((size_t)12345, pm->getIndex()); CPPUNIT_ASSERT_EQUAL((size_t)12345, pm->getIndex());

View File

@ -35,7 +35,7 @@ CPPUNIT_TEST_SUITE_REGISTRATION(BtHaveNoneMessageTest);
void BtHaveNoneMessageTest::testCreate() { void BtHaveNoneMessageTest::testCreate() {
unsigned char msg[5]; unsigned char msg[5];
bittorrent::createPeerMessageString(msg, sizeof(msg), 1, 15); bittorrent::createPeerMessageString(msg, sizeof(msg), 1, 15);
SharedHandle<BtHaveNoneMessage> pm = BtHaveNoneMessage::create(&msg[4], 1); SharedHandle<BtHaveNoneMessage> pm(BtHaveNoneMessage::create(&msg[4], 1));
CPPUNIT_ASSERT_EQUAL((uint8_t)15, pm->getId()); CPPUNIT_ASSERT_EQUAL((uint8_t)15, pm->getId());
// case: payload size is wrong // case: payload size is wrong

View File

@ -33,7 +33,8 @@ CPPUNIT_TEST_SUITE_REGISTRATION(BtInterestedMessageTest);
void BtInterestedMessageTest::testCreate() { void BtInterestedMessageTest::testCreate() {
unsigned char msg[5]; unsigned char msg[5];
bittorrent::createPeerMessageString(msg, sizeof(msg), 1, 2); bittorrent::createPeerMessageString(msg, sizeof(msg), 1, 2);
BtInterestedMessageHandle pm = BtInterestedMessage::create(&msg[4], 1); SharedHandle<BtInterestedMessage> pm
(BtInterestedMessage::create(&msg[4], 1));
CPPUNIT_ASSERT_EQUAL((uint8_t)2, pm->getId()); CPPUNIT_ASSERT_EQUAL((uint8_t)2, pm->getId());
// case: payload size is wrong // case: payload size is wrong

View File

@ -33,7 +33,8 @@ CPPUNIT_TEST_SUITE_REGISTRATION(BtNotInterestedMessageTest);
void BtNotInterestedMessageTest::testCreate() { void BtNotInterestedMessageTest::testCreate() {
unsigned char msg[5]; unsigned char msg[5];
bittorrent::createPeerMessageString(msg, sizeof(msg), 1, 3); bittorrent::createPeerMessageString(msg, sizeof(msg), 1, 3);
BtNotInterestedMessageHandle pm = BtNotInterestedMessage::create(&msg[4], 1); SharedHandle<BtNotInterestedMessage> pm
(BtNotInterestedMessage::create(&msg[4], 1));
CPPUNIT_ASSERT_EQUAL((uint8_t)3, pm->getId()); CPPUNIT_ASSERT_EQUAL((uint8_t)3, pm->getId());
// case: payload size is wrong // case: payload size is wrong

View File

@ -110,7 +110,7 @@ void BtPieceMessageTest::testCreate() {
bittorrent::setIntParam(&msg[5], 12345); bittorrent::setIntParam(&msg[5], 12345);
bittorrent::setIntParam(&msg[9], 256); bittorrent::setIntParam(&msg[9], 256);
memcpy(&msg[13], data, sizeof(data)); memcpy(&msg[13], data, sizeof(data));
SharedHandle<BtPieceMessage> pm = BtPieceMessage::create(&msg[4], 11); SharedHandle<BtPieceMessage> pm(BtPieceMessage::create(&msg[4], 11));
CPPUNIT_ASSERT_EQUAL((uint8_t)7, pm->getId()); CPPUNIT_ASSERT_EQUAL((uint8_t)7, pm->getId());
CPPUNIT_ASSERT_EQUAL((size_t)12345, pm->getIndex()); CPPUNIT_ASSERT_EQUAL((size_t)12345, pm->getIndex());
CPPUNIT_ASSERT_EQUAL(256, pm->getBegin()); CPPUNIT_ASSERT_EQUAL(256, pm->getBegin());

View File

@ -62,7 +62,7 @@ void BtPortMessageTest::testCreate() {
unsigned char msg[7]; unsigned char msg[7];
bittorrent::createPeerMessageString(msg, sizeof(msg), 3, 9); bittorrent::createPeerMessageString(msg, sizeof(msg), 3, 9);
bittorrent::setShortIntParam(&msg[5], 12345); bittorrent::setShortIntParam(&msg[5], 12345);
SharedHandle<BtPortMessage> pm = BtPortMessage::create(&msg[4], 3); SharedHandle<BtPortMessage> pm(BtPortMessage::create(&msg[4], 3));
CPPUNIT_ASSERT_EQUAL((uint8_t)9, pm->getId()); CPPUNIT_ASSERT_EQUAL((uint8_t)9, pm->getId());
CPPUNIT_ASSERT_EQUAL((uint16_t)12345, pm->getPort()); CPPUNIT_ASSERT_EQUAL((uint16_t)12345, pm->getPort());

View File

@ -90,7 +90,7 @@ void BtRejectMessageTest::testCreate() {
bittorrent::setIntParam(&msg[5], 12345); bittorrent::setIntParam(&msg[5], 12345);
bittorrent::setIntParam(&msg[9], 256); bittorrent::setIntParam(&msg[9], 256);
bittorrent::setIntParam(&msg[13], 1024); bittorrent::setIntParam(&msg[13], 1024);
SharedHandle<BtRejectMessage> pm = BtRejectMessage::create(&msg[4], 13); SharedHandle<BtRejectMessage> pm(BtRejectMessage::create(&msg[4], 13));
CPPUNIT_ASSERT_EQUAL((uint8_t)16, pm->getId()); CPPUNIT_ASSERT_EQUAL((uint8_t)16, pm->getId());
CPPUNIT_ASSERT_EQUAL((size_t)12345, pm->getIndex()); CPPUNIT_ASSERT_EQUAL((size_t)12345, pm->getIndex());
CPPUNIT_ASSERT_EQUAL(256, pm->getBegin()); CPPUNIT_ASSERT_EQUAL(256, pm->getBegin());

View File

@ -132,7 +132,7 @@ void BtRequestMessageTest::testCreate() {
bittorrent::setIntParam(&msg[5], 12345); bittorrent::setIntParam(&msg[5], 12345);
bittorrent::setIntParam(&msg[9], 256); bittorrent::setIntParam(&msg[9], 256);
bittorrent::setIntParam(&msg[13], 1024); bittorrent::setIntParam(&msg[13], 1024);
SharedHandle<BtRequestMessage> pm = BtRequestMessage::create(&msg[4], 13); SharedHandle<BtRequestMessage> pm(BtRequestMessage::create(&msg[4], 13));
CPPUNIT_ASSERT_EQUAL((uint8_t)6, pm->getId()); CPPUNIT_ASSERT_EQUAL((uint8_t)6, pm->getId());
CPPUNIT_ASSERT_EQUAL((size_t)12345, pm->getIndex()); CPPUNIT_ASSERT_EQUAL((size_t)12345, pm->getIndex());
CPPUNIT_ASSERT_EQUAL(256, pm->getBegin()); CPPUNIT_ASSERT_EQUAL(256, pm->getBegin());

View File

@ -32,7 +32,8 @@ void BtSuggestPieceMessageTest::testCreate() {
unsigned char msg[9]; unsigned char msg[9];
bittorrent::createPeerMessageString(msg, sizeof(msg), 5, 13); bittorrent::createPeerMessageString(msg, sizeof(msg), 5, 13);
bittorrent::setIntParam(&msg[5], 12345); bittorrent::setIntParam(&msg[5], 12345);
SharedHandle<BtSuggestPieceMessage> pm = BtSuggestPieceMessage::create(&msg[4], 5); SharedHandle<BtSuggestPieceMessage> pm
(BtSuggestPieceMessage::create(&msg[4], 5));
CPPUNIT_ASSERT_EQUAL((uint8_t)13, pm->getId()); CPPUNIT_ASSERT_EQUAL((uint8_t)13, pm->getId());
CPPUNIT_ASSERT_EQUAL((size_t)12345, pm->getIndex()); CPPUNIT_ASSERT_EQUAL((size_t)12345, pm->getIndex());

View File

@ -33,7 +33,7 @@ CPPUNIT_TEST_SUITE_REGISTRATION(BtUnchokeMessageTest);
void BtUnchokeMessageTest::testCreate() { void BtUnchokeMessageTest::testCreate() {
unsigned char msg[5]; unsigned char msg[5];
bittorrent::createPeerMessageString(msg, sizeof(msg), 1, 1); bittorrent::createPeerMessageString(msg, sizeof(msg), 1, 1);
SharedHandle<BtUnchokeMessage> pm = BtUnchokeMessage::create(&msg[4], 1); SharedHandle<BtUnchokeMessage> pm(BtUnchokeMessage::create(&msg[4], 1));
CPPUNIT_ASSERT_EQUAL((uint8_t)1, pm->getId()); CPPUNIT_ASSERT_EQUAL((uint8_t)1, pm->getId());
// case: payload size is wrong // case: payload size is wrong