AbstractBtMessage: Use std::unique_ptr for validator

pull/103/head
Tatsuhiro Tsujikawa 2013-06-23 16:12:19 +09:00
parent a18bba7c66
commit 23086b6e21
4 changed files with 29 additions and 37 deletions

View File

@ -68,8 +68,10 @@ void AbstractBtMessage::validate()
}
void
AbstractBtMessage::setBtMessageValidator(const std::shared_ptr<BtMessageValidator>& validator) {
validator_ = validator;
AbstractBtMessage::setBtMessageValidator
(std::unique_ptr<BtMessageValidator> validator)
{
validator_ = std::move(validator);
}
void AbstractBtMessage::setPieceStorage(PieceStorage* pieceStorage)

View File

@ -68,7 +68,7 @@ private:
PeerConnection* peerConnection_;
std::shared_ptr<BtMessageValidator> validator_;
std::unique_ptr<BtMessageValidator> validator_;
bool metadataGetMode_;
protected:
@ -151,7 +151,7 @@ public:
virtual void onChokingEvent(const BtChokingEvent& event) {}
void setBtMessageValidator(const std::shared_ptr<BtMessageValidator>& validator);
void setBtMessageValidator(std::unique_ptr<BtMessageValidator> validator);
void setPieceStorage(PieceStorage* pieceStorage);

View File

@ -123,31 +123,27 @@ DefaultBtMessageFactory::createBtMessage
case BtHaveMessage::ID:
msg.reset(BtHaveMessage::create(data, dataLength));
if(!metadataGetMode_) {
std::shared_ptr<BtMessageValidator> v
(new IndexBtMessageValidator(static_cast<BtHaveMessage*>(msg.get()),
downloadContext_->getNumPieces()));
msg->setBtMessageValidator(v);
msg->setBtMessageValidator(make_unique<IndexBtMessageValidator>
(static_cast<BtHaveMessage*>(msg.get()),
downloadContext_->getNumPieces()));
}
break;
case BtBitfieldMessage::ID:
msg.reset(BtBitfieldMessage::create(data, dataLength));
if(!metadataGetMode_) {
std::shared_ptr<BtMessageValidator> v
(new BtBitfieldMessageValidator
(static_cast<BtBitfieldMessage*>(msg.get()),
downloadContext_->getNumPieces()));
msg->setBtMessageValidator(v);
msg->setBtMessageValidator(make_unique<BtBitfieldMessageValidator>
(static_cast<BtBitfieldMessage*>(msg.get()),
downloadContext_->getNumPieces()));
}
break;
case BtRequestMessage::ID: {
BtRequestMessage* m = BtRequestMessage::create(data, dataLength);
if(!metadataGetMode_) {
std::shared_ptr<BtMessageValidator> validator
(new RangeBtMessageValidator
m->setBtMessageValidator
(make_unique<RangeBtMessageValidator>
(m,
downloadContext_->getNumPieces(),
pieceStorage_->getPieceLength(m->getIndex())));
m->setBtMessageValidator(validator);
}
msg.reset(m);
break;
@ -155,12 +151,11 @@ DefaultBtMessageFactory::createBtMessage
case BtCancelMessage::ID: {
BtCancelMessage* m = BtCancelMessage::create(data, dataLength);
if(!metadataGetMode_) {
std::shared_ptr<BtMessageValidator> validator
(new RangeBtMessageValidator
m->setBtMessageValidator
(make_unique<RangeBtMessageValidator>
(m,
downloadContext_->getNumPieces(),
pieceStorage_->getPieceLength(m->getIndex())));
m->setBtMessageValidator(validator);
}
msg.reset(m);
break;
@ -168,12 +163,11 @@ DefaultBtMessageFactory::createBtMessage
case BtPieceMessage::ID: {
BtPieceMessage* m = BtPieceMessage::create(data, dataLength);
if(!metadataGetMode_) {
std::shared_ptr<BtMessageValidator> validator
(new BtPieceMessageValidator
m->setBtMessageValidator
(make_unique<BtPieceMessageValidator>
(m,
downloadContext_->getNumPieces(),
pieceStorage_->getPieceLength(m->getIndex())));
m->setBtMessageValidator(validator);
}
m->setDownloadContext(downloadContext_);
m->setPeerStorage(peerStorage_);
@ -189,12 +183,11 @@ DefaultBtMessageFactory::createBtMessage
case BtRejectMessage::ID: {
BtRejectMessage* m = BtRejectMessage::create(data, dataLength);
if(!metadataGetMode_) {
std::shared_ptr<BtMessageValidator> validator
(new RangeBtMessageValidator
m->setBtMessageValidator
(make_unique<RangeBtMessageValidator>
(m,
downloadContext_->getNumPieces(),
pieceStorage_->getPieceLength(m->getIndex())));
m->setBtMessageValidator(validator);
}
msg.reset(m);
break;
@ -203,9 +196,8 @@ DefaultBtMessageFactory::createBtMessage
BtSuggestPieceMessage* m =
BtSuggestPieceMessage::create(data, dataLength);
if(!metadataGetMode_) {
std::shared_ptr<BtMessageValidator> validator
(new IndexBtMessageValidator(m, downloadContext_->getNumPieces()));
m->setBtMessageValidator(validator);
m->setBtMessageValidator(make_unique<IndexBtMessageValidator>
(m, downloadContext_->getNumPieces()));
}
msg.reset(m);
break;
@ -215,7 +207,8 @@ DefaultBtMessageFactory::createBtMessage
if(!metadataGetMode_) {
std::shared_ptr<BtMessageValidator> validator
(new IndexBtMessageValidator(m, downloadContext_->getNumPieces()));
m->setBtMessageValidator(validator);
m->setBtMessageValidator(make_unique<IndexBtMessageValidator>
(m, downloadContext_->getNumPieces()));
}
msg.reset(m);
break;
@ -267,10 +260,9 @@ DefaultBtMessageFactory::createHandshakeMessage
{
std::shared_ptr<BtHandshakeMessage> msg =
BtHandshakeMessage::create(data, dataLength);
std::shared_ptr<BtMessageValidator> validator
(new BtHandshakeMessageValidator
(msg.get(), bittorrent::getInfoHash(downloadContext_)));
msg->setBtMessageValidator(validator);
msg->setBtMessageValidator(make_unique<BtHandshakeMessageValidator>
(msg.get(),
bittorrent::getInfoHash(downloadContext_)));
setCommonProperty(msg.get());
return msg;
}

View File

@ -256,16 +256,14 @@ void BtRequestMessageTest::testToString() {
void BtRequestMessageTest::testValidate() {
BtRequestMessage msg(0, 0, 16*1024);
msg.setBtMessageValidator
(std::shared_ptr<BtMessageValidator>
(new RangeBtMessageValidator(&msg, 1024, 256*1024)));
(make_unique<RangeBtMessageValidator>(&msg, 1024, 256*1024));
msg.validate();
}
void BtRequestMessageTest::testValidate_lengthTooLong() {
BtRequestMessage msg(0, 0, 16*1024+1);
msg.setBtMessageValidator
(std::shared_ptr<BtMessageValidator>
(new RangeBtMessageValidator(&msg, 1024, 256*1024)));
(make_unique<RangeBtMessageValidator>(&msg, 1024, 256*1024));
try {
msg.validate();
CPPUNIT_FAIL("exception must be thrown.");