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 void
AbstractBtMessage::setBtMessageValidator(const std::shared_ptr<BtMessageValidator>& validator) { AbstractBtMessage::setBtMessageValidator
validator_ = validator; (std::unique_ptr<BtMessageValidator> validator)
{
validator_ = std::move(validator);
} }
void AbstractBtMessage::setPieceStorage(PieceStorage* pieceStorage) void AbstractBtMessage::setPieceStorage(PieceStorage* pieceStorage)

View File

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

View File

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

View File

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