mirror of https://github.com/aria2/aria2
AbstractBtMessage: Use std::unique_ptr for validator
parent
a18bba7c66
commit
23086b6e21
|
@ -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)
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.");
|
||||||
|
|
Loading…
Reference in New Issue