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
 | 
			
		||||
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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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.");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue