Browse Source

2008-04-20 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>

	Rewritten SharedHandle. Now copy constructor taking raw pointer 
has
	keyword explicit and SharedHandle's default constructor 
initializes
	its internal obj to null, old implementation initializes it 
using
	obj's default constructor.
	To assign null, write SharedHandle<T> x(...); x.reset();
	TODO: test/SharedHandleTest.cc needs more tests.
	* src/SharedHandle.h
Tatsuhiro Tsujikawa 17 years ago
parent
commit
3505201f33
100 changed files with 427 additions and 426 deletions
  1. 10 0
      ChangeLog
  2. 0 1
      src/AbstractAuthResolver.cc
  3. 0 4
      src/AbstractBtMessage.cc
  4. 2 3
      src/AbstractCommand.cc
  5. 3 3
      src/AbstractProxyRequestCommand.cc
  6. 3 5
      src/AbstractSingleDiskAdaptor.cc
  7. 22 18
      src/AuthConfigFactory.cc
  8. 1 1
      src/BNode.cc
  9. 1 1
      src/BNode.h
  10. 0 2
      src/BitfieldMan.cc
  11. 3 3
      src/BitfieldManFactory.cc
  12. 1 1
      src/BtAllowedFastMessage.cc
  13. 1 1
      src/BtBitfieldMessage.cc
  14. 1 1
      src/BtCancelMessage.cc
  15. 1 1
      src/BtCheckIntegrityEntry.cc
  16. 1 1
      src/BtChokeMessage.cc
  17. 3 3
      src/BtDependency.cc
  18. 1 1
      src/BtExtendedMessage.cc
  19. 2 1
      src/BtExtendedMessage.h
  20. 1 1
      src/BtHandshakeMessage.cc
  21. 1 1
      src/BtHaveAllMessage.cc
  22. 1 1
      src/BtHaveMessage.cc
  23. 1 1
      src/BtHaveNoneMessage.cc
  24. 1 1
      src/BtInterestedMessage.cc
  25. 3 2
      src/BtMessageFactory.h
  26. 3 2
      src/BtMessageReceiver.h
  27. 1 1
      src/BtNotInterestedMessage.cc
  28. 1 1
      src/BtPieceMessage.cc
  29. 8 2
      src/BtPieceMessage.h
  30. 2 2
      src/BtPortMessage.cc
  31. 6 4
      src/BtPostDownloadHandler.cc
  32. 1 1
      src/BtRejectMessage.cc
  33. 1 1
      src/BtRequestMessage.cc
  34. 2 1
      src/BtRequestMessage.h
  35. 6 4
      src/BtSetup.cc
  36. 1 1
      src/BtSuggestPieceMessage.cc
  37. 1 1
      src/BtUnchokeMessage.cc
  38. 1 1
      src/ByteArrayDiskWriterFactory.cc
  39. 1 2
      src/CheckIntegrityEntry.cc
  40. 1 1
      src/CheckIntegrityMan.cc
  41. 6 3
      src/ChecksumCheckIntegrityEntry.cc
  42. 1 1
      src/CompactPeerListProcessor.cc
  43. 1 1
      src/ConsoleStatCalc.cc
  44. 1 1
      src/ContentTypeRequestGroupCriteria.cc
  45. 1 1
      src/CookieBoxFactory.cc
  46. 2 1
      src/DHTAbstractMessage.cc
  47. 4 2
      src/DHTAbstractNodeLookupTask.cc
  48. 1 2
      src/DHTAbstractTask.cc
  49. 1 3
      src/DHTAnnouncePeerMessage.cc
  50. 1 3
      src/DHTAutoSaveCommand.cc
  51. 6 6
      src/DHTBucket.cc
  52. 1 4
      src/DHTBucketRefreshCommand.cc
  53. 1 1
      src/DHTBucketRefreshTask.cc
  54. 1 5
      src/DHTEntryPointNameResolveCommand.cc
  55. 2 5
      src/DHTGetPeersCommand.cc
  56. 1 1
      src/DHTGetPeersMessage.cc
  57. 2 6
      src/DHTInteractionCommand.cc
  58. 4 2
      src/DHTMessageDispatcher.h
  59. 2 1
      src/DHTMessageDispatcherImpl.cc
  60. 4 2
      src/DHTMessageDispatcherImpl.h
  61. 25 23
      src/DHTMessageFactoryImpl.cc
  62. 4 7
      src/DHTMessageReceiver.cc
  63. 4 5
      src/DHTMessageTracker.cc
  64. 4 2
      src/DHTMessageTracker.h
  65. 2 1
      src/DHTMessageTrackerEntry.h
  66. 3 1
      src/DHTNodeLookupTask.cc
  67. 1 3
      src/DHTPeerAnnounceCommand.cc
  68. 3 3
      src/DHTPeerAnnounceEntry.cc
  69. 5 6
      src/DHTPeerAnnounceStorage.cc
  70. 2 2
      src/DHTPeerLookupTask.cc
  71. 6 2
      src/DHTPingTask.cc
  72. 19 18
      src/DHTRegistry.cc
  73. 3 1
      src/DHTReplaceNodeTask.cc
  74. 5 5
      src/DHTRoutingTable.cc
  75. 3 4
      src/DHTRoutingTableDeserializer.cc
  76. 1 1
      src/DHTRoutingTableSerializer.cc
  77. 15 13
      src/DHTSetup.cc
  78. 8 12
      src/DHTTaskFactoryImpl.cc
  79. 2 4
      src/DHTTaskQueueImpl.cc
  80. 1 3
      src/DHTTokenUpdateCommand.cc
  81. 1 1
      src/DHTUnknownMessage.cc
  82. 2 2
      src/DefaultBtContext.cc
  83. 9 9
      src/DefaultBtInteractive.cc
  84. 6 10
      src/DefaultBtMessageDispatcher.cc
  85. 92 83
      src/DefaultBtMessageFactory.cc
  86. 2 2
      src/DefaultBtMessageFactory.h
  87. 10 10
      src/DefaultBtMessageReceiver.cc
  88. 2 2
      src/DefaultBtMessageReceiver.h
  89. 6 6
      src/DefaultBtProgressInfoFile.cc
  90. 1 5
      src/DefaultBtRequestFactory.cc
  91. 1 1
      src/DefaultDiskWriterFactory.cc
  92. 0 2
      src/DefaultExtensionMessageFactory.cc
  93. 1 1
      src/DefaultPeerListProcessor.cc
  94. 2 2
      src/DefaultPeerStorage.cc
  95. 14 16
      src/DefaultPieceStorage.cc
  96. 1 6
      src/DefaultSegmentManFactory.cc
  97. 8 2
      src/DelegatingPeerListProcessor.cc
  98. 3 5
      src/DownloadCommand.cc
  99. 1 5
      src/DownloadEngine.cc
  100. 6 6
      src/DownloadEngineFactory.cc

+ 10 - 0
ChangeLog

@@ -1,3 +1,13 @@
+2008-04-20  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>
+
+	Rewritten SharedHandle. Now copy constructor taking raw pointer has
+	keyword explicit and SharedHandle's default constructor initializes
+	its internal obj to null, old implementation initializes it using
+	obj's default constructor.
+	To assign null, write SharedHandle<T> x(...); x.reset();
+	TODO: test/SharedHandleTest.cc needs more tests.
+	* src/SharedHandle.h
+
 2008-04-15  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>
 2008-04-15  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>
 
 
 	Fixed type in man page.
 	Fixed type in man page.

+ 0 - 1
src/AbstractAuthResolver.cc

@@ -38,7 +38,6 @@
 namespace aria2 {
 namespace aria2 {
 
 
 AbstractAuthResolver::AbstractAuthResolver():
 AbstractAuthResolver::AbstractAuthResolver():
-  _userDefinedAuthConfig(0),
   _defaultAuthConfig(new AuthConfig()) {}
   _defaultAuthConfig(new AuthConfig()) {}
 
 
 AbstractAuthResolver::~AbstractAuthResolver() {}
 AbstractAuthResolver::~AbstractAuthResolver() {}

+ 0 - 4
src/AbstractBtMessage.cc

@@ -48,10 +48,6 @@ AbstractBtMessage::AbstractBtMessage():sendingInProgress(false),
 				       invalidate(false),
 				       invalidate(false),
 				       uploading(false),
 				       uploading(false),
 				       cuid(0),
 				       cuid(0),
-				       btContext(0),
-				       pieceStorage(0),
-				       peer(0),
-				       validator(0),
 				       logger(LogFactory::getInstance())
 				       logger(LogFactory::getInstance())
 {}
 {}
 
 

+ 2 - 3
src/AbstractCommand.cc

@@ -97,7 +97,7 @@ bool AbstractCommand::execute() {
       //logger->debug("CUID#%d - finished.", cuid);
       //logger->debug("CUID#%d - finished.", cuid);
       return true;
       return true;
     }
     }
-    PeerStatHandle peerStat = 0;
+    PeerStatHandle peerStat;
     if(!_requestGroup->getSegmentMan().isNull()) {
     if(!_requestGroup->getSegmentMan().isNull()) {
       peerStat = _requestGroup->getSegmentMan()->getPeerStat(cuid);
       peerStat = _requestGroup->getSegmentMan()->getPeerStat(cuid);
     }
     }
@@ -316,8 +316,7 @@ bool AbstractCommand::nameResolveFinished() const {
 
 
 void AbstractCommand::prepareForNextAction(Command* nextCommand)
 void AbstractCommand::prepareForNextAction(Command* nextCommand)
 {
 {
-  CheckIntegrityEntryHandle entry =
-    new StreamCheckIntegrityEntry(req, _requestGroup, nextCommand);
+  CheckIntegrityEntryHandle entry(new StreamCheckIntegrityEntry(req, _requestGroup, nextCommand));
   e->addCommand(_requestGroup->processCheckIntegrityEntry(entry, e));
   e->addCommand(_requestGroup->processCheckIntegrityEntry(entry, e));
 }
 }
 
 

+ 3 - 3
src/AbstractProxyRequestCommand.cc

@@ -50,7 +50,7 @@ AbstractProxyRequestCommand::AbstractProxyRequestCommand(int cuid,
 							 RequestGroup* requestGroup,
 							 RequestGroup* requestGroup,
 							 DownloadEngine* e,
 							 DownloadEngine* e,
 							 const SocketHandle& s)
 							 const SocketHandle& s)
-  :AbstractCommand(cuid, req, requestGroup, e, s), httpConnection(0) {
+  :AbstractCommand(cuid, req, requestGroup, e, s) {
   disableReadCheckSocket();
   disableReadCheckSocket();
   setWriteCheckSocket(socket);
   setWriteCheckSocket(socket);
 }
 }
@@ -60,12 +60,12 @@ AbstractProxyRequestCommand::~AbstractProxyRequestCommand() {}
 bool AbstractProxyRequestCommand::executeInternal() {
 bool AbstractProxyRequestCommand::executeInternal() {
   socket->setBlockingMode();
   socket->setBlockingMode();
 
 
-  HttpRequestHandle httpRequest = new HttpRequest();
+  HttpRequestHandle httpRequest(new HttpRequest());
   httpRequest->setUserAgent(e->option->get(PREF_USER_AGENT));
   httpRequest->setUserAgent(e->option->get(PREF_USER_AGENT));
   httpRequest->setRequest(req);
   httpRequest->setRequest(req);
   httpRequest->configure(e->option);
   httpRequest->configure(e->option);
 
 
-  httpConnection= new HttpConnection(cuid, socket, e->option);
+  httpConnection.reset(new HttpConnection(cuid, socket, e->option));
 
 
   httpConnection->sendProxyRequest(httpRequest);
   httpConnection->sendProxyRequest(httpRequest);
 
 

+ 3 - 5
src/AbstractSingleDiskAdaptor.cc

@@ -39,9 +39,7 @@
 
 
 namespace aria2 {
 namespace aria2 {
 
 
-AbstractSingleDiskAdaptor::AbstractSingleDiskAdaptor():
-  diskWriter(0),
-  totalLength(0) {}
+AbstractSingleDiskAdaptor::AbstractSingleDiskAdaptor():totalLength(0) {}
 
 
 AbstractSingleDiskAdaptor::~AbstractSingleDiskAdaptor() {}
 AbstractSingleDiskAdaptor::~AbstractSingleDiskAdaptor() {}
 
 
@@ -92,8 +90,8 @@ void AbstractSingleDiskAdaptor::truncate(uint64_t length)
 
 
 FileAllocationIteratorHandle AbstractSingleDiskAdaptor::fileAllocationIterator()
 FileAllocationIteratorHandle AbstractSingleDiskAdaptor::fileAllocationIterator()
 {
 {
-  SingleFileAllocationIteratorHandle h =
-    new SingleFileAllocationIterator(this, size(), totalLength);
+  SingleFileAllocationIteratorHandle h
+    (new SingleFileAllocationIterator(this, size(), totalLength));
   h->init();
   h->init();
   return h;
   return h;
 }
 }

+ 22 - 18
src/AuthConfigFactory.cc

@@ -44,11 +44,12 @@
 namespace aria2 {
 namespace aria2 {
 
 
 AuthConfigFactory::AuthConfigFactory(const Option* option):
 AuthConfigFactory::AuthConfigFactory(const Option* option):
-  _option(option), _netrc(0) {}
+  _option(option) {}
 
 
 AuthConfigFactory::~AuthConfigFactory() {}
 AuthConfigFactory::~AuthConfigFactory() {}
 
 
-AuthConfigHandle AuthConfigFactory::createAuthConfig(const RequestHandle& request) const
+AuthConfigHandle
+AuthConfigFactory::createAuthConfig(const RequestHandle& request) const
 {
 {
   if(request->getProtocol() == "http" || request->getProtocol() == "https") {
   if(request->getProtocol() == "http" || request->getProtocol() == "https") {
     return createHttpAuthResolver()->resolveAuthConfig(request->getHost());
     return createHttpAuthResolver()->resolveAuthConfig(request->getHost());
@@ -59,31 +60,33 @@ AuthConfigHandle AuthConfigFactory::createAuthConfig(const RequestHandle& reques
       return createFtpAuthResolver()->resolveAuthConfig(request->getHost());
       return createFtpAuthResolver()->resolveAuthConfig(request->getHost());
     }
     }
   } else {
   } else {
-    return new AuthConfig();
+    return SharedHandle<AuthConfig>(new AuthConfig());
   }
   }
 }
 }
 
 
-AuthConfigHandle AuthConfigFactory::createAuthConfigForHttpProxy(const RequestHandle& request) const
+AuthConfigHandle
+AuthConfigFactory::createAuthConfigForHttpProxy(const RequestHandle& request) const
 {
 {
   return createHttpProxyAuthResolver()->resolveAuthConfig(request->getHost());
   return createHttpProxyAuthResolver()->resolveAuthConfig(request->getHost());
 }
 }
 
 
-AuthConfigHandle AuthConfigFactory::createAuthConfig(const std::string& user, const std::string& password) const
+AuthConfigHandle
+AuthConfigFactory::createAuthConfig(const std::string& user, const std::string& password) const
 {
 {
+  SharedHandle<AuthConfig> ac;
   if(user.length() > 0) {
   if(user.length() > 0) {
-    return new AuthConfig(user, password);
-  } else {
-    return 0;
+    ac.reset(new AuthConfig(user, password));
   }
   }
+  return ac;
 }
 }
 
 
 AuthResolverHandle AuthConfigFactory::createHttpAuthResolver() const
 AuthResolverHandle AuthConfigFactory::createHttpAuthResolver() const
 {
 {
-  AbstractAuthResolverHandle resolver = 0;
+  AbstractAuthResolverHandle resolver;
   if(true || _option->getAsBool(PREF_NO_NETRC)) {
   if(true || _option->getAsBool(PREF_NO_NETRC)) {
-    resolver = new DefaultAuthResolver();
+    resolver.reset(new DefaultAuthResolver());
   } else {
   } else {
-    NetrcAuthResolverHandle authResolver = new NetrcAuthResolver();
+    NetrcAuthResolverHandle authResolver(new NetrcAuthResolver());
     authResolver->setNetrc(_netrc);
     authResolver->setNetrc(_netrc);
     resolver = authResolver;
     resolver = authResolver;
   }
   }
@@ -93,26 +96,27 @@ AuthResolverHandle AuthConfigFactory::createHttpAuthResolver() const
 
 
 AuthResolverHandle AuthConfigFactory::createFtpAuthResolver() const
 AuthResolverHandle AuthConfigFactory::createFtpAuthResolver() const
 {
 {
-  AbstractAuthResolverHandle resolver = 0;
+  AbstractAuthResolverHandle resolver;
   if(_option->getAsBool(PREF_NO_NETRC)) {
   if(_option->getAsBool(PREF_NO_NETRC)) {
-    resolver = new DefaultAuthResolver();
+    resolver.reset(new DefaultAuthResolver());
   } else {
   } else {
-    NetrcAuthResolverHandle authResolver = new NetrcAuthResolver();
+    NetrcAuthResolverHandle authResolver(new NetrcAuthResolver());
     authResolver->setNetrc(_netrc);
     authResolver->setNetrc(_netrc);
     resolver = authResolver;
     resolver = authResolver;
   }
   }
   resolver->setUserDefinedAuthConfig(createAuthConfig(_option->get(PREF_FTP_USER), _option->get(PREF_FTP_PASSWD)));
   resolver->setUserDefinedAuthConfig(createAuthConfig(_option->get(PREF_FTP_USER), _option->get(PREF_FTP_PASSWD)));
-  resolver->setDefaultAuthConfig(new AuthConfig("anonymous", "ARIA2USER@"));
+  SharedHandle<AuthConfig> defaultAuthConfig(new AuthConfig("anonymous", "ARIA2USER@"));
+  resolver->setDefaultAuthConfig(defaultAuthConfig);
   return resolver;
   return resolver;
 }
 }
 
 
 AuthResolverHandle AuthConfigFactory::createHttpProxyAuthResolver() const
 AuthResolverHandle AuthConfigFactory::createHttpProxyAuthResolver() const
 {
 {
-  AbstractAuthResolverHandle resolver = 0;
+  AbstractAuthResolverHandle resolver;
   if(true || _option->getAsBool(PREF_NO_NETRC)) {
   if(true || _option->getAsBool(PREF_NO_NETRC)) {
-    resolver = new DefaultAuthResolver();
+    resolver.reset(new DefaultAuthResolver());
   } else {
   } else {
-    NetrcAuthResolverHandle authResolver = new NetrcAuthResolver();
+    NetrcAuthResolverHandle authResolver(new NetrcAuthResolver());
     authResolver->setNetrc(_netrc);
     authResolver->setNetrc(_netrc);
     resolver = authResolver;
     resolver = authResolver;
   }
   }

+ 1 - 1
src/BNode.cc

@@ -129,7 +129,7 @@ SharedHandle<DHTBucket> BNode::findBucketFor(BNode* b, const unsigned char* key)
   if(bnode) {
   if(bnode) {
     return bnode->getBucket();
     return bnode->getBucket();
   } else {
   } else {
-    return 0;
+    return SharedHandle<DHTBucket>();
   }
   }
 }
 }
 
 

+ 1 - 1
src/BNode.h

@@ -55,7 +55,7 @@ private:
   BNode* _right;
   BNode* _right;
 
 
 public:
 public:
-  BNode(const SharedHandle<DHTBucket>& bucket = 0);
+  BNode(const SharedHandle<DHTBucket>& bucket = SharedHandle<DHTBucket>());
 
 
   ~BNode();
   ~BNode();
 
 

+ 0 - 2
src/BitfieldMan.cc

@@ -49,7 +49,6 @@ BitfieldMan::BitfieldMan(size_t blockLength, uint64_t totalLength)
    bitfieldLength(0),
    bitfieldLength(0),
    blocks(0),
    blocks(0),
    filterEnabled(false),
    filterEnabled(false),
-   randomizer(0),
    cachedNumMissingBlock(0),
    cachedNumMissingBlock(0),
    cachedNumFilteredBlock(0),
    cachedNumFilteredBlock(0),
    cachedCompletedLength(0),
    cachedCompletedLength(0),
@@ -76,7 +75,6 @@ BitfieldMan::BitfieldMan(const BitfieldMan& bitfieldMan)
    bitfieldLength(0),
    bitfieldLength(0),
    blocks(0),
    blocks(0),
    filterEnabled(false),
    filterEnabled(false),
-   randomizer(0),
    cachedNumMissingBlock(0),
    cachedNumMissingBlock(0),
    cachedNumFilteredBlock(0),
    cachedNumFilteredBlock(0),
    cachedCompletedLength(0),
    cachedCompletedLength(0),

+ 3 - 3
src/BitfieldManFactory.cc

@@ -38,17 +38,17 @@
 
 
 namespace aria2 {
 namespace aria2 {
 
 
-BitfieldManFactoryHandle BitfieldManFactory::factory = 0;
+BitfieldManFactoryHandle BitfieldManFactory::factory;
 
 
 BitfieldManFactoryHandle BitfieldManFactory::getFactoryInstance()
 BitfieldManFactoryHandle BitfieldManFactory::getFactoryInstance()
 {
 {
   if(factory.isNull()) {
   if(factory.isNull()) {
-    factory = new BitfieldManFactory();
+    factory.reset(new BitfieldManFactory());
   }
   }
   return factory;
   return factory;
 }
 }
 
 
-BitfieldManFactory::BitfieldManFactory():randomizer(0) {}
+BitfieldManFactory::BitfieldManFactory() {}
 
 
 BitfieldManFactory::~BitfieldManFactory() {}
 BitfieldManFactory::~BitfieldManFactory() {}
 
 

+ 1 - 1
src/BtAllowedFastMessage.cc

@@ -49,7 +49,7 @@ BtAllowedFastMessageHandle BtAllowedFastMessage::create(const unsigned char* dat
   if(id != ID) {
   if(id != ID) {
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "allowed fast", ID);
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "allowed fast", ID);
   }
   }
-  BtAllowedFastMessageHandle message = new BtAllowedFastMessage();
+  BtAllowedFastMessageHandle message(new BtAllowedFastMessage());
   message->setIndex(PeerMessageUtil::getIntParam(data, 1));
   message->setIndex(PeerMessageUtil::getIntParam(data, 1));
   return message;
   return message;
 }
 }

+ 1 - 1
src/BtBitfieldMessage.cc

@@ -63,7 +63,7 @@ BtBitfieldMessage::create(const unsigned char* data, size_t dataLength)
   if(id != ID) {
   if(id != ID) {
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "bitfield", ID);
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "bitfield", ID);
   }
   }
-  BtBitfieldMessageHandle message = new BtBitfieldMessage();
+  BtBitfieldMessageHandle message(new BtBitfieldMessage());
   message->setBitfield((unsigned char*)data+1, dataLength-1);
   message->setBitfield((unsigned char*)data+1, dataLength-1);
   return message;
   return message;
 }
 }

+ 1 - 1
src/BtCancelMessage.cc

@@ -49,7 +49,7 @@ BtCancelMessageHandle BtCancelMessage::create(const unsigned char* data, size_t
   if(id != ID) {
   if(id != ID) {
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "cancel", ID);
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "cancel", ID);
   }
   }
-  BtCancelMessageHandle message = new BtCancelMessage();
+  BtCancelMessageHandle message(new BtCancelMessage());
   message->setIndex(PeerMessageUtil::getIntParam(data, 1));
   message->setIndex(PeerMessageUtil::getIntParam(data, 1));
   message->setBegin(PeerMessageUtil::getIntParam(data, 5));
   message->setBegin(PeerMessageUtil::getIntParam(data, 5));
   message->setLength(PeerMessageUtil::getIntParam(data, 9));
   message->setLength(PeerMessageUtil::getIntParam(data, 9));

+ 1 - 1
src/BtCheckIntegrityEntry.cc

@@ -50,7 +50,7 @@ BtCheckIntegrityEntry::~BtCheckIntegrityEntry() {}
 Commands BtCheckIntegrityEntry::onDownloadIncomplete(DownloadEngine* e)
 Commands BtCheckIntegrityEntry::onDownloadIncomplete(DownloadEngine* e)
 {
 {
   Commands commands;
   Commands commands;
-  FileAllocationEntryHandle entry = new BtFileAllocationEntry(_requestGroup);
+  FileAllocationEntryHandle entry(new BtFileAllocationEntry(_requestGroup));
   if(_requestGroup->needsFileAllocation()) {
   if(_requestGroup->needsFileAllocation()) {
     e->_fileAllocationMan->pushFileAllocationEntry(entry);
     e->_fileAllocationMan->pushFileAllocationEntry(entry);
   } else {
   } else {

+ 1 - 1
src/BtChokeMessage.cc

@@ -50,7 +50,7 @@ BtChokeMessageHandle BtChokeMessage::create(const unsigned char* data, size_t da
   if(id != ID) {
   if(id != ID) {
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "choke", ID);
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "choke", ID);
   }
   }
-  BtChokeMessageHandle chokeMessage = new BtChokeMessage();
+  BtChokeMessageHandle chokeMessage(new BtChokeMessage());
   return chokeMessage;
   return chokeMessage;
 }
 }
 
 

+ 3 - 3
src/BtDependency.cc

@@ -63,8 +63,8 @@ bool BtDependency::resolve()
   if(_dependee->getNumCommand() == 0 && _dependee->downloadFinished()) {
   if(_dependee->getNumCommand() == 0 && _dependee->downloadFinished()) {
     RequestGroupHandle dependee = _dependee;
     RequestGroupHandle dependee = _dependee;
     // cut reference here
     // cut reference here
-    _dependee = 0;
-    DefaultBtContextHandle btContext = new DefaultBtContext();
+    _dependee.reset();
+    DefaultBtContextHandle btContext(new DefaultBtContext());
     try {
     try {
       DiskAdaptorHandle diskAdaptor = dependee->getPieceStorage()->getDiskAdaptor();
       DiskAdaptorHandle diskAdaptor = dependee->getPieceStorage()->getDiskAdaptor();
       diskAdaptor->openExistingFile();
       diskAdaptor->openExistingFile();
@@ -89,7 +89,7 @@ bool BtDependency::resolve()
   } else if(_dependee->getNumCommand() == 0) {
   } else if(_dependee->getNumCommand() == 0) {
     // _dependee's download failed.
     // _dependee's download failed.
     // cut reference here
     // cut reference here
-    _dependee = 0;
+    _dependee.reset();
     _logger->debug("BtDependency for GID#%d failed. Go without Bt.",
     _logger->debug("BtDependency for GID#%d failed. Go without Bt.",
 		   _dependant->getGID());    
 		   _dependant->getGID());    
     return true;
     return true;

+ 1 - 1
src/BtExtendedMessage.cc

@@ -111,7 +111,7 @@ BtExtendedMessage::create(const BtContextHandle& btContext,
   assert(!factory.isNull());
   assert(!factory.isNull());
   ExtensionMessageHandle extmsg = factory->createMessage(data+1,
   ExtensionMessageHandle extmsg = factory->createMessage(data+1,
 							 dataLength-1);
 							 dataLength-1);
-  BtExtendedMessageHandle message = new BtExtendedMessage(extmsg);
+  BtExtendedMessageHandle message(new BtExtendedMessage(extmsg));
   return message;
   return message;
 }
 }
 
 

+ 2 - 1
src/BtExtendedMessage.h

@@ -52,7 +52,8 @@ private:
 
 
   size_t _msgLength;
   size_t _msgLength;
 public:
 public:
-  BtExtendedMessage(const SharedHandle<ExtensionMessage>& extensionMessage = 0);
+  BtExtendedMessage(const SharedHandle<ExtensionMessage>& extensionMessage =
+		    SharedHandle<ExtensionMessage>());
 
 
   virtual ~BtExtendedMessage();
   virtual ~BtExtendedMessage();
 
 

+ 1 - 1
src/BtHandshakeMessage.cc

@@ -72,7 +72,7 @@ void BtHandshakeMessage::init() {
 SharedHandle<BtHandshakeMessage>
 SharedHandle<BtHandshakeMessage>
 BtHandshakeMessage::create(const unsigned char* data, size_t dataLength)
 BtHandshakeMessage::create(const unsigned char* data, size_t dataLength)
 {
 {
-  SharedHandle<BtHandshakeMessage> message = new BtHandshakeMessage();
+  SharedHandle<BtHandshakeMessage> message(new BtHandshakeMessage());
   message->pstrlen = data[0];
   message->pstrlen = data[0];
   memcpy(message->pstr, &data[1], PSTR_LENGTH);
   memcpy(message->pstr, &data[1], PSTR_LENGTH);
   memcpy(message->reserved, &data[20], RESERVED_LENGTH);
   memcpy(message->reserved, &data[20], RESERVED_LENGTH);

+ 1 - 1
src/BtHaveAllMessage.cc

@@ -48,7 +48,7 @@ BtHaveAllMessageHandle BtHaveAllMessage::create(const unsigned char* data, size_
   if(id != ID) {
   if(id != ID) {
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "have all", ID);
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "have all", ID);
   }
   }
-  BtHaveAllMessageHandle message = new BtHaveAllMessage();
+  BtHaveAllMessageHandle message(new BtHaveAllMessage());
   return message;
   return message;
 }
 }
 
 

+ 1 - 1
src/BtHaveMessage.cc

@@ -49,7 +49,7 @@ BtHaveMessageHandle BtHaveMessage::create(const unsigned char* data, size_t data
   if(id != ID) {
   if(id != ID) {
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "have", ID);
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "have", ID);
   }
   }
-  BtHaveMessageHandle message = new BtHaveMessage();
+  BtHaveMessageHandle message(new BtHaveMessage());
   message->setIndex(PeerMessageUtil::getIntParam(data, 1));
   message->setIndex(PeerMessageUtil::getIntParam(data, 1));
   return message;
   return message;
 }
 }

+ 1 - 1
src/BtHaveNoneMessage.cc

@@ -48,7 +48,7 @@ BtHaveNoneMessageHandle BtHaveNoneMessage::create(const unsigned char* data, siz
   if(id != ID) {
   if(id != ID) {
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "have none", ID);
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "have none", ID);
   }
   }
-  BtHaveNoneMessageHandle message = new BtHaveNoneMessage();
+  BtHaveNoneMessageHandle message(new BtHaveNoneMessage());
   return message;
   return message;
 }
 }
 
 

+ 1 - 1
src/BtInterestedMessage.cc

@@ -51,7 +51,7 @@ BtInterestedMessageHandle BtInterestedMessage::create(const unsigned char* data,
   if(id != ID) {
   if(id != ID) {
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "interested", ID);
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "interested", ID);
   }
   }
-  BtInterestedMessageHandle message = new BtInterestedMessage();
+  BtInterestedMessageHandle message(new BtInterestedMessage());
   return message;
   return message;
 }
 }
 
 

+ 3 - 2
src/BtMessageFactory.h

@@ -41,6 +41,7 @@
 namespace aria2 {
 namespace aria2 {
 
 
 class BtMessage;
 class BtMessage;
+class BtHandshakeMessage;
 class Piece;
 class Piece;
 class ExtensionMessage;
 class ExtensionMessage;
 
 
@@ -51,10 +52,10 @@ public:
   virtual SharedHandle<BtMessage>
   virtual SharedHandle<BtMessage>
   createBtMessage(const unsigned char* msg, size_t msgLength) = 0;
   createBtMessage(const unsigned char* msg, size_t msgLength) = 0;
 
 
-  virtual SharedHandle<BtMessage>
+  virtual SharedHandle<BtHandshakeMessage>
   createHandshakeMessage(const unsigned char* msg, size_t msgLength) = 0;
   createHandshakeMessage(const unsigned char* msg, size_t msgLength) = 0;
 
 
-  virtual SharedHandle<BtMessage>
+  virtual SharedHandle<BtHandshakeMessage>
   createHandshakeMessage(const unsigned char* infoHash,
   createHandshakeMessage(const unsigned char* infoHash,
 			 const unsigned char* peerId) = 0;
 			 const unsigned char* peerId) = 0;
 
 

+ 3 - 2
src/BtMessageReceiver.h

@@ -41,14 +41,15 @@
 namespace aria2 {
 namespace aria2 {
 
 
 class BtMessage;
 class BtMessage;
+class BtHandshakeMessage;
 
 
 class BtMessageReceiver {
 class BtMessageReceiver {
 public:
 public:
   virtual ~BtMessageReceiver() {}
   virtual ~BtMessageReceiver() {}
 
 
-  virtual SharedHandle<BtMessage> receiveHandshake(bool quickReply = false) = 0;
+  virtual SharedHandle<BtHandshakeMessage> receiveHandshake(bool quickReply = false) = 0;
 
 
-  virtual SharedHandle<BtMessage> receiveAndSendHandshake() = 0;
+  virtual SharedHandle<BtHandshakeMessage> receiveAndSendHandshake() = 0;
 
 
   virtual SharedHandle<BtMessage> receiveMessage() = 0;
   virtual SharedHandle<BtMessage> receiveMessage() = 0;
 };
 };

+ 1 - 1
src/BtNotInterestedMessage.cc

@@ -51,7 +51,7 @@ BtNotInterestedMessageHandle BtNotInterestedMessage::create(const unsigned char*
   if(id != ID) {
   if(id != ID) {
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "not interested", ID);
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "not interested", ID);
   }
   }
-  BtNotInterestedMessageHandle message = new BtNotInterestedMessage();
+  BtNotInterestedMessageHandle message(new BtNotInterestedMessage());
   return message;
   return message;
 }
 }
 
 

+ 1 - 1
src/BtPieceMessage.cc

@@ -69,7 +69,7 @@ BtPieceMessageHandle BtPieceMessage::create(const unsigned char* data, size_t da
   if(id != ID) {
   if(id != ID) {
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "piece", ID);
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "piece", ID);
   }
   }
-  BtPieceMessageHandle message = new BtPieceMessage();
+  BtPieceMessageHandle message(new BtPieceMessage());
   message->setIndex(PeerMessageUtil::getIntParam(data, 1));
   message->setIndex(PeerMessageUtil::getIntParam(data, 1));
   message->setBegin(PeerMessageUtil::getIntParam(data, 5));
   message->setBegin(PeerMessageUtil::getIntParam(data, 5));
   message->setBlock(data+9, dataLength-9);
   message->setBlock(data+9, dataLength-9);

+ 8 - 2
src/BtPieceMessage.h

@@ -104,8 +104,14 @@ public:
      msgHeader(0)
      msgHeader(0)
   {
   {
     uploading = true;
     uploading = true;
-    addEventListener(new BtChokingEventListener(this));
-    addEventListener(new BtCancelSendingPieceEventListener(this));
+    {
+      SharedHandle<BtEventListener> listener(new BtChokingEventListener(this));
+      addEventListener(listener);
+    }
+    {
+      SharedHandle<BtEventListener> listener(new BtCancelSendingPieceEventListener(this));
+      addEventListener(listener);
+    }
   }
   }
 
 
   virtual ~BtPieceMessage() {
   virtual ~BtPieceMessage() {

+ 2 - 2
src/BtPortMessage.cc

@@ -64,7 +64,7 @@ SharedHandle<BtPortMessage> BtPortMessage::create(const unsigned char* data, siz
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "piece", ID);
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "piece", ID);
   }
   }
   uint16_t port = PeerMessageUtil::getShortIntParam(data, 1);
   uint16_t port = PeerMessageUtil::getShortIntParam(data, 1);
-  SharedHandle<BtPortMessage> message = new BtPortMessage(port);
+  SharedHandle<BtPortMessage> message(new BtPortMessage(port));
   return message;
   return message;
 }
 }
 
 
@@ -73,7 +73,7 @@ void BtPortMessage::doReceivedAction()
   if(!_taskFactory.isNull() && !_taskQueue.isNull()) {
   if(!_taskFactory.isNull() && !_taskQueue.isNull()) {
     // node id is random at this point. When ping reply received, new DHTNode
     // node id is random at this point. When ping reply received, new DHTNode
     // instance created with proper node ID and is added to a routing table.
     // instance created with proper node ID and is added to a routing table.
-    SharedHandle<DHTNode> node = new DHTNode();
+    SharedHandle<DHTNode> node(new DHTNode());
     node->setIPAddress(peer->ipaddr);
     node->setIPAddress(peer->ipaddr);
     node->setPort(_port);
     node->setPort(_port);
     {
     {

+ 6 - 4
src/BtPostDownloadHandler.cc

@@ -50,8 +50,10 @@ namespace aria2 {
 
 
 BtPostDownloadHandler::BtPostDownloadHandler()
 BtPostDownloadHandler::BtPostDownloadHandler()
 {
 {
-  setCriteria(new ContentTypeRequestGroupCriteria(DownloadHandlerConstants::getBtContentTypes(),
-						  DownloadHandlerConstants::getBtExtensions()));
+  SharedHandle<RequestGroupCriteria> cri
+    (new ContentTypeRequestGroupCriteria(DownloadHandlerConstants::getBtContentTypes(),
+					 DownloadHandlerConstants::getBtExtensions()));
+  setCriteria(cri);
 }
 }
 
 
 BtPostDownloadHandler::~BtPostDownloadHandler() {}
 BtPostDownloadHandler::~BtPostDownloadHandler() {}
@@ -61,7 +63,7 @@ RequestGroups BtPostDownloadHandler::getNextRequestGroups(RequestGroup* requestG
   const Option* op = requestGroup->getOption();
   const Option* op = requestGroup->getOption();
   _logger->debug("Generating RequestGroups for Torrent file %s",
   _logger->debug("Generating RequestGroups for Torrent file %s",
 		 requestGroup->getFilePath().c_str());
 		 requestGroup->getFilePath().c_str());
-  RequestGroupHandle rg = new RequestGroup(op, std::deque<std::string>());
+  RequestGroupHandle rg(new RequestGroup(op, std::deque<std::string>()));
 
 
   std::string content;
   std::string content;
   try {
   try {
@@ -72,7 +74,7 @@ RequestGroups BtPostDownloadHandler::getNextRequestGroups(RequestGroup* requestG
     requestGroup->getPieceStorage()->getDiskAdaptor()->closeFile();
     requestGroup->getPieceStorage()->getDiskAdaptor()->closeFile();
     throw;
     throw;
   }
   }
-  DefaultBtContextHandle btContext = new DefaultBtContext();
+  DefaultBtContextHandle btContext(new DefaultBtContext());
   btContext->loadFromMemory(content, File(requestGroup->getFilePath()).getBasename());
   btContext->loadFromMemory(content, File(requestGroup->getFilePath()).getBasename());
   if(op->defined(PREF_PEER_ID_PREFIX)) {
   if(op->defined(PREF_PEER_ID_PREFIX)) {
     btContext->setPeerIdPrefix(op->get(PREF_PEER_ID_PREFIX));
     btContext->setPeerIdPrefix(op->get(PREF_PEER_ID_PREFIX));

+ 1 - 1
src/BtRejectMessage.cc

@@ -51,7 +51,7 @@ BtRejectMessageHandle BtRejectMessage::create(const unsigned char* data, size_t
   if(id != ID) {
   if(id != ID) {
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "reject", ID);
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "reject", ID);
   }
   }
-  BtRejectMessageHandle message = new BtRejectMessage();
+  BtRejectMessageHandle message(new BtRejectMessage());
   message->setIndex(PeerMessageUtil::getIntParam(data, 1));
   message->setIndex(PeerMessageUtil::getIntParam(data, 1));
   message->setBegin(PeerMessageUtil::getIntParam(data, 5));
   message->setBegin(PeerMessageUtil::getIntParam(data, 5));
   message->setLength(PeerMessageUtil::getIntParam(data, 9));
   message->setLength(PeerMessageUtil::getIntParam(data, 9));

+ 1 - 1
src/BtRequestMessage.cc

@@ -55,7 +55,7 @@ BtRequestMessageHandle BtRequestMessage::create(const unsigned char* data, size_
   if(id != ID) {
   if(id != ID) {
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "request", ID);
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "request", ID);
   }
   }
-  BtRequestMessageHandle message = new BtRequestMessage();
+  BtRequestMessageHandle message(new BtRequestMessage());
   message->setIndex(PeerMessageUtil::getIntParam(data, 1));
   message->setIndex(PeerMessageUtil::getIntParam(data, 1));
   message->setBegin(PeerMessageUtil::getIntParam(data, 5));
   message->setBegin(PeerMessageUtil::getIntParam(data, 5));
   message->setLength(PeerMessageUtil::getIntParam(data, 9));
   message->setLength(PeerMessageUtil::getIntParam(data, 9));

+ 2 - 1
src/BtRequestMessage.h

@@ -77,7 +77,8 @@ public:
      blockIndex(blockIndex),
      blockIndex(blockIndex),
      msg(0)
      msg(0)
   {
   {
-    addEventListener(new BtAbortOutstandingRequestEventListener(this));
+    SharedHandle<BtEventListener> listener(new BtAbortOutstandingRequestEventListener(this));
+    addEventListener(listener);
   }
   }
 
 
   virtual ~BtRequestMessage() {
   virtual ~BtRequestMessage() {

+ 6 - 4
src/BtSetup.cc

@@ -66,7 +66,7 @@ Commands BtSetup::setup(RequestGroup* requestGroup,
 			const Option* option)
 			const Option* option)
 {
 {
   Commands commands;
   Commands commands;
-  BtContextHandle btContext = requestGroup->getDownloadContext();
+  BtContextHandle btContext(dynamic_pointer_cast<BtContext>(requestGroup->getDownloadContext()));
   if(btContext.isNull()) {
   if(btContext.isNull()) {
     return commands;
     return commands;
   }
   }
@@ -92,14 +92,16 @@ Commands BtSetup::setup(RequestGroup* requestGroup,
     command->setTaskFactory(DHTRegistry::_taskFactory);
     command->setTaskFactory(DHTRegistry::_taskFactory);
     commands.push_back(command);
     commands.push_back(command);
   }
   }
-  SharedHandle<UnionSeedCriteria> unionCri = new UnionSeedCriteria();
+  SharedHandle<UnionSeedCriteria> unionCri(new UnionSeedCriteria());
   if(option->defined(PREF_SEED_TIME)) {
   if(option->defined(PREF_SEED_TIME)) {
-    unionCri->addSeedCriteria(new TimeSeedCriteria(option->getAsInt(PREF_SEED_TIME)*60));
+    SharedHandle<SeedCriteria> cri(new TimeSeedCriteria(option->getAsInt(PREF_SEED_TIME)*60));
+    unionCri->addSeedCriteria(cri);
   }
   }
   {
   {
     double ratio = option->getAsDouble(PREF_SEED_RATIO);
     double ratio = option->getAsDouble(PREF_SEED_RATIO);
     if(ratio > 0.0) {
     if(ratio > 0.0) {
-      unionCri->addSeedCriteria(new ShareRatioSeedCriteria(option->getAsDouble(PREF_SEED_RATIO), btContext));
+      SharedHandle<SeedCriteria> cri(new ShareRatioSeedCriteria(option->getAsDouble(PREF_SEED_RATIO), btContext));
+      unionCri->addSeedCriteria(cri);
     }
     }
   }
   }
   if(unionCri->getSeedCriterion().size() > 0) {
   if(unionCri->getSeedCriterion().size() > 0) {

+ 1 - 1
src/BtSuggestPieceMessage.cc

@@ -48,7 +48,7 @@ BtSuggestPieceMessageHandle BtSuggestPieceMessage::create(const unsigned char* d
   if(id != ID) {
   if(id != ID) {
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "suggest piece", ID);
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "suggest piece", ID);
   }
   }
-  BtSuggestPieceMessageHandle message = new BtSuggestPieceMessage();
+  BtSuggestPieceMessageHandle message(new BtSuggestPieceMessage());
   message->setIndex(PeerMessageUtil::getIntParam(data, 1));
   message->setIndex(PeerMessageUtil::getIntParam(data, 1));
   return message;
   return message;
 }
 }

+ 1 - 1
src/BtUnchokeMessage.cc

@@ -48,7 +48,7 @@ BtUnchokeMessageHandle BtUnchokeMessage::create(const unsigned char* data, size_
   if(id != ID) {
   if(id != ID) {
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "unchoke", ID);
     throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "unchoke", ID);
   }
   }
-  BtUnchokeMessageHandle message = new BtUnchokeMessage();
+  BtUnchokeMessageHandle message(new BtUnchokeMessage());
   return message;
   return message;
 }
 }
 
 

+ 1 - 1
src/ByteArrayDiskWriterFactory.cc

@@ -39,7 +39,7 @@ namespace aria2 {
 
 
 DiskWriterHandle ByteArrayDiskWriterFactory::newDiskWriter()
 DiskWriterHandle ByteArrayDiskWriterFactory::newDiskWriter()
 {
 {
-  return new ByteArrayDiskWriter();
+  return SharedHandle<DiskWriter>(new ByteArrayDiskWriter());
 }
 }
 
 
 } // namespace aria2
 } // namespace aria2

+ 1 - 2
src/CheckIntegrityEntry.cc

@@ -39,8 +39,7 @@ namespace aria2 {
 
 
 CheckIntegrityEntry::CheckIntegrityEntry(RequestGroup* requestGroup,
 CheckIntegrityEntry::CheckIntegrityEntry(RequestGroup* requestGroup,
 					 Command* nextCommand):
 					 Command* nextCommand):
-  RequestGroupEntry(requestGroup, nextCommand),
-  _validator(0)
+  RequestGroupEntry(requestGroup, nextCommand)
 {}
 {}
 
 
 CheckIntegrityEntry::~CheckIntegrityEntry() {}
 CheckIntegrityEntry::~CheckIntegrityEntry() {}

+ 1 - 1
src/CheckIntegrityMan.cc

@@ -62,7 +62,7 @@ bool CheckIntegrityMan::removeCheckIntegrityEntry(const CheckIntegrityEntryHandl
 CheckIntegrityEntryHandle CheckIntegrityMan::getFirstCheckIntegrityEntry() const
 CheckIntegrityEntryHandle CheckIntegrityMan::getFirstCheckIntegrityEntry() const
 {
 {
   if(_checkIntegrityEntries.empty()) {
   if(_checkIntegrityEntries.empty()) {
-    return 0;
+    return SharedHandle<CheckIntegrityEntry>();
   } else {
   } else {
     return _checkIntegrityEntries.front();
     return _checkIntegrityEntries.front();
   }
   }

+ 6 - 3
src/ChecksumCheckIntegrityEntry.cc

@@ -49,15 +49,18 @@ ChecksumCheckIntegrityEntry::~ChecksumCheckIntegrityEntry() {}
 
 
 bool ChecksumCheckIntegrityEntry::isValidationReady()
 bool ChecksumCheckIntegrityEntry::isValidationReady()
 {
 {
-  SingleFileDownloadContextHandle dctx = _requestGroup->getDownloadContext();
+  SingleFileDownloadContextHandle dctx
+    (dynamic_pointer_cast<SingleFileDownloadContext>(_requestGroup->getDownloadContext()));
   return !dctx.isNull() && dctx->getChecksum().size() > 0 &&
   return !dctx.isNull() && dctx->getChecksum().size() > 0 &&
     dctx->getChecksumHashAlgo().size() > 0;
     dctx->getChecksumHashAlgo().size() > 0;
 }
 }
 
 
 void ChecksumCheckIntegrityEntry::initValidator()
 void ChecksumCheckIntegrityEntry::initValidator()
 {
 {
-  _validator = new IteratableChecksumValidator(_requestGroup->getDownloadContext(),
-					       _requestGroup->getPieceStorage());
+  SingleFileDownloadContextHandle dctx
+    (dynamic_pointer_cast<SingleFileDownloadContext>(_requestGroup->getDownloadContext()));
+  _validator.reset(new IteratableChecksumValidator(dctx,
+						   _requestGroup->getPieceStorage()));
   _validator->init();
   _validator->init();
 }
 }
 
 

+ 1 - 1
src/CompactPeerListProcessor.cc

@@ -58,7 +58,7 @@ Peers CompactPeerListProcessor::extractPeer(const MetaEntry* peersEntry) {
       in.s_addr = *(uint32_t*)(peersData->getData()+i);
       in.s_addr = *(uint32_t*)(peersData->getData()+i);
       std::string ipaddr = inet_ntoa(in);
       std::string ipaddr = inet_ntoa(in);
       uint16_t port = ntohs(*(uint16_t*)(peersData->getData()+i+4));
       uint16_t port = ntohs(*(uint16_t*)(peersData->getData()+i+4));
-      PeerHandle peer = new Peer(ipaddr, port);      
+      PeerHandle peer(new Peer(ipaddr, port));
       peers.push_back(peer);
       peers.push_back(peer);
     }
     }
   }
   }

+ 1 - 1
src/ConsoleStatCalc.cc

@@ -80,7 +80,7 @@ ConsoleStatCalc::calculateStat(const RequestGroupManHandle& requestGroupMan,
 	      << "#" << firstRequestGroup->getGID() << " ";
 	      << "#" << firstRequestGroup->getGID() << " ";
 #ifdef ENABLE_BITTORRENT
 #ifdef ENABLE_BITTORRENT
     if(firstRequestGroup->downloadFinished() &&
     if(firstRequestGroup->downloadFinished() &&
-       !BtContextHandle(firstRequestGroup->getDownloadContext()).isNull()) {
+       !dynamic_pointer_cast<BtContext>(firstRequestGroup->getDownloadContext()).isNull()) {
       std::cout << "SEEDING" << "(" << "ratio:"
       std::cout << "SEEDING" << "(" << "ratio:"
 		<< std::fixed << std::setprecision(1)
 		<< std::fixed << std::setprecision(1)
 		<< ((stat.getAllTimeUploadLength()*10)/firstRequestGroup->getCompletedLength())/10.0
 		<< ((stat.getAllTimeUploadLength()*10)/firstRequestGroup->getCompletedLength())/10.0

+ 1 - 1
src/ContentTypeRequestGroupCriteria.cc

@@ -52,7 +52,7 @@ bool ContentTypeRequestGroupCriteria::match(const RequestGroup* requestGroup) co
   if(forwardMatch(requestGroup->getFilePath(), _extensions)) {
   if(forwardMatch(requestGroup->getFilePath(), _extensions)) {
     return true;
     return true;
   } else {
   } else {
-    SingleFileDownloadContextHandle dctx = requestGroup->getDownloadContext();
+    SingleFileDownloadContextHandle dctx(dynamic_pointer_cast<SingleFileDownloadContext>(requestGroup->getDownloadContext()));
     if(dctx.isNull()) {
     if(dctx.isNull()) {
       return false;
       return false;
     } else {
     } else {

+ 1 - 1
src/CookieBoxFactory.cc

@@ -43,7 +43,7 @@ namespace aria2 {
 
 
 CookieBoxHandle CookieBoxFactory::createNewInstance()
 CookieBoxHandle CookieBoxFactory::createNewInstance()
 {
 {
-  CookieBoxHandle box = new CookieBox();
+  CookieBoxHandle box(new CookieBox());
   box->add(defaultCookies);
   box->add(defaultCookies);
   return box;
   return box;
 }
 }

+ 2 - 1
src/DHTAbstractMessage.cc

@@ -41,6 +41,7 @@
 #include "DHTMessageDispatcher.h"
 #include "DHTMessageDispatcher.h"
 #include "DHTMessageFactory.h"
 #include "DHTMessageFactory.h"
 #include "DHTRoutingTable.h"
 #include "DHTRoutingTable.h"
+#include "DHTMessageCallback.h"
 
 
 namespace aria2 {
 namespace aria2 {
 
 
@@ -53,7 +54,7 @@ DHTAbstractMessage::~DHTAbstractMessage() {}
 
 
 std::string DHTAbstractMessage::getBencodedMessage()
 std::string DHTAbstractMessage::getBencodedMessage()
 {
 {
-  SharedHandle<Dictionary> msg = new Dictionary();
+  SharedHandle<Dictionary> msg(new Dictionary());
   msg->put(std::string("t"), new Data(_transactionID));
   msg->put(std::string("t"), new Data(_transactionID));
   msg->put(std::string("y"), new Data(getType()));
   msg->put(std::string("y"), new Data(getType()));
   fillMessage(msg.get());
   fillMessage(msg.get());

+ 4 - 2
src/DHTAbstractNodeLookupTask.cc

@@ -118,7 +118,9 @@ void DHTAbstractNodeLookupTask::sendMessage()
       ++_inFlightMessage;
       ++_inFlightMessage;
       (*i)->_used = true;
       (*i)->_used = true;
       SharedHandle<DHTMessage> m = createMessage((*i)->_node);
       SharedHandle<DHTMessage> m = createMessage((*i)->_node);
-      _dispatcher->addMessageToQueue(m, new DHTMessageCallbackImpl(this));
+      WeakHandle<DHTMessageCallbackListener> listener(this);
+      SharedHandle<DHTMessageCallback> callback(new DHTMessageCallbackImpl(listener));
+      _dispatcher->addMessageToQueue(m, callback);
     }
     }
   }
   }
 }
 }
@@ -149,7 +151,7 @@ DHTAbstractNodeLookupTask::toEntries(const std::deque<SharedHandle<DHTNode> >& n
 {
 {
   std::deque<SharedHandle<DHTNodeLookupEntry> > entries;
   std::deque<SharedHandle<DHTNodeLookupEntry> > entries;
   for(std::deque<SharedHandle<DHTNode> >::const_iterator i = nodes.begin(); i != nodes.end(); ++i) {
   for(std::deque<SharedHandle<DHTNode> >::const_iterator i = nodes.begin(); i != nodes.end(); ++i) {
-    SharedHandle<DHTNodeLookupEntry> e = new DHTNodeLookupEntry(*i);
+    SharedHandle<DHTNodeLookupEntry> e(new DHTNodeLookupEntry(*i));
     entries.push_back(e);
     entries.push_back(e);
   }
   }
   return entries;
   return entries;

+ 1 - 2
src/DHTAbstractTask.cc

@@ -48,8 +48,7 @@ namespace aria2 {
 
 
 DHTAbstractTask::DHTAbstractTask():
 DHTAbstractTask::DHTAbstractTask():
   _finished(false),
   _finished(false),
-  _logger(LogFactory::getInstance()),
-  _localNode(0)
+  _logger(LogFactory::getInstance())
 {}
 {}
 
 
 bool DHTAbstractTask::finished()
 bool DHTAbstractTask::finished()

+ 1 - 3
src/DHTAnnouncePeerMessage.cc

@@ -57,9 +57,7 @@ DHTAnnouncePeerMessage::DHTAnnouncePeerMessage(const SharedHandle<DHTNode>& loca
 					       const std::string& transactionID):
 					       const std::string& transactionID):
   DHTQueryMessage(localNode, remoteNode, transactionID),
   DHTQueryMessage(localNode, remoteNode, transactionID),
   _token(token),
   _token(token),
-  _tcpPort(tcpPort),
-  _peerAnnounceStorage(0),
-  _tokenTracker(0)
+  _tcpPort(tcpPort)
 {
 {
   memcpy(_infoHash, infoHash, DHT_ID_LENGTH);
   memcpy(_infoHash, infoHash, DHT_ID_LENGTH);
 }
 }

+ 1 - 3
src/DHTAutoSaveCommand.cc

@@ -53,9 +53,7 @@
 namespace aria2 {
 namespace aria2 {
 
 
 DHTAutoSaveCommand::DHTAutoSaveCommand(int32_t cuid, DownloadEngine* e, time_t interval):
 DHTAutoSaveCommand::DHTAutoSaveCommand(int32_t cuid, DownloadEngine* e, time_t interval):
-  TimeBasedCommand(cuid, e, interval),
-  _localNode(0),
-  _routingTable(0) {}
+  TimeBasedCommand(cuid, e, interval) {}
 
 
 DHTAutoSaveCommand::~DHTAutoSaveCommand() {}
 DHTAutoSaveCommand::~DHTAutoSaveCommand() {}
 
 

+ 6 - 6
src/DHTBucket.cc

@@ -132,7 +132,7 @@ void DHTBucket::cacheNode(const SharedHandle<DHTNode>& node)
   // _cachedNodes are sorted by last time seen
   // _cachedNodes are sorted by last time seen
   _cachedNodes.push_front(node);
   _cachedNodes.push_front(node);
   if(_cachedNodes.size() > CACHE_SIZE) {
   if(_cachedNodes.size() > CACHE_SIZE) {
-    _cachedNodes.resize(CACHE_SIZE, 0);
+    _cachedNodes.resize(CACHE_SIZE, SharedHandle<DHTNode>());
   }
   }
 }
 }
 
 
@@ -182,8 +182,8 @@ SharedHandle<DHTBucket> DHTBucket::split()
   memcpy(rMax, _max, DHT_ID_LENGTH);
   memcpy(rMax, _max, DHT_ID_LENGTH);
   DHTUtil::flipBit(rMax, DHT_ID_LENGTH, _prefixLength);
   DHTUtil::flipBit(rMax, DHT_ID_LENGTH, _prefixLength);
 
 
-  SharedHandle<DHTBucket> rBucket = new DHTBucket(newPrefixLength,
-						  rMax, _min, _localNode);
+  SharedHandle<DHTBucket> rBucket(new DHTBucket(newPrefixLength,
+						rMax, _min, _localNode));
   std::deque<SharedHandle<DHTNode> > tempNodes = _nodes;
   std::deque<SharedHandle<DHTNode> > tempNodes = _nodes;
   for(std::deque<SharedHandle<DHTNode> >::iterator i = tempNodes.begin();
   for(std::deque<SharedHandle<DHTNode> >::iterator i = tempNodes.begin();
       i != tempNodes.end();) {
       i != tempNodes.end();) {
@@ -228,13 +228,13 @@ std::deque<SharedHandle<DHTNode> > DHTBucket::getGoodNodes() const
 
 
 SharedHandle<DHTNode> DHTBucket::getNode(const unsigned char* nodeID, const std::string& ipaddr, uint16_t port) const
 SharedHandle<DHTNode> DHTBucket::getNode(const unsigned char* nodeID, const std::string& ipaddr, uint16_t port) const
 {
 {
-  SharedHandle<DHTNode> node = new DHTNode(nodeID);
+  SharedHandle<DHTNode> node(new DHTNode(nodeID));
   node->setIPAddress(ipaddr);
   node->setIPAddress(ipaddr);
   node->setPort(port);
   node->setPort(port);
   std::deque<SharedHandle<DHTNode> >::const_iterator itr =
   std::deque<SharedHandle<DHTNode> >::const_iterator itr =
     std::find(_nodes.begin(), _nodes.end(), node);
     std::find(_nodes.begin(), _nodes.end(), node);
   if(itr == _nodes.end()) {
   if(itr == _nodes.end()) {
-    return 0;
+    return SharedHandle<DHTNode>();
   } else {
   } else {
     return *itr;
     return *itr;
   }
   }
@@ -274,7 +274,7 @@ SharedHandle<DHTNode> DHTBucket::getLRUQuestionableNode() const
   std::deque<SharedHandle<DHTNode> >::const_iterator i =
   std::deque<SharedHandle<DHTNode> >::const_iterator i =
     std::find_if(_nodes.begin(), _nodes.end(), FindQuestionableNode());
     std::find_if(_nodes.begin(), _nodes.end(), FindQuestionableNode());
   if(i == _nodes.end()) {
   if(i == _nodes.end()) {
-    return 0;
+    return SharedHandle<DHTNode>();
   } else {
   } else {
     return *i;
     return *i;
   }
   }

+ 1 - 4
src/DHTBucketRefreshCommand.cc

@@ -43,10 +43,7 @@
 namespace aria2 {
 namespace aria2 {
 
 
 DHTBucketRefreshCommand::DHTBucketRefreshCommand(int32_t cuid, DownloadEngine* e, time_t interval):
 DHTBucketRefreshCommand::DHTBucketRefreshCommand(int32_t cuid, DownloadEngine* e, time_t interval):
-  TimeBasedCommand(cuid, e, interval),
-  _routingTable(0),
-  _taskQueue(0),
-  _taskFactory(0) {}
+  TimeBasedCommand(cuid, e, interval) {}
 
 
 DHTBucketRefreshCommand::~DHTBucketRefreshCommand() {}
 DHTBucketRefreshCommand::~DHTBucketRefreshCommand() {}
 
 

+ 1 - 1
src/DHTBucketRefreshTask.cc

@@ -57,7 +57,7 @@ void DHTBucketRefreshTask::startup()
       (*i)->notifyUpdate();
       (*i)->notifyUpdate();
       unsigned char targetID[DHT_ID_LENGTH];
       unsigned char targetID[DHT_ID_LENGTH];
       (*i)->getRandomNodeID(targetID);
       (*i)->getRandomNodeID(targetID);
-      SharedHandle<DHTNodeLookupTask> task = new DHTNodeLookupTask(targetID);
+      SharedHandle<DHTNodeLookupTask> task(new DHTNodeLookupTask(targetID));
       task->setRoutingTable(_routingTable);
       task->setRoutingTable(_routingTable);
       task->setMessageDispatcher(_dispatcher);
       task->setMessageDispatcher(_dispatcher);
       task->setMessageFactory(_factory);
       task->setMessageFactory(_factory);

+ 1 - 5
src/DHTEntryPointNameResolveCommand.cc

@@ -55,10 +55,6 @@ DHTEntryPointNameResolveCommand::DHTEntryPointNameResolveCommand(int32_t cuid, D
   Command(cuid),
   Command(cuid),
   _e(e),
   _e(e),
   _resolver(new NameResolver()),
   _resolver(new NameResolver()),
-  _taskQueue(0),
-  _taskFactory(0),
-  _routingTable(0),
-  _localNode(0),
   _entryPoints(entryPoints),
   _entryPoints(entryPoints),
   _bootstrapEnabled(false)
   _bootstrapEnabled(false)
 {}
 {}
@@ -120,7 +116,7 @@ bool DHTEntryPointNameResolveCommand::execute()
 
 
 void DHTEntryPointNameResolveCommand::addPingTask(const std::pair<std::string, uint16_t>& addr)
 void DHTEntryPointNameResolveCommand::addPingTask(const std::pair<std::string, uint16_t>& addr)
 {
 {
-  SharedHandle<DHTNode> entryNode = new DHTNode();
+  SharedHandle<DHTNode> entryNode(new DHTNode());
   entryNode->setIPAddress(addr.first);
   entryNode->setIPAddress(addr.first);
   entryNode->setPort(addr.second);
   entryNode->setPort(addr.second);
   
   

+ 2 - 5
src/DHTGetPeersCommand.cc

@@ -57,9 +57,6 @@ DHTGetPeersCommand::DHTGetPeersCommand(int32_t cuid,
   BtContextAwareCommand(ctx),
   BtContextAwareCommand(ctx),
   RequestGroupAware(requestGroup),
   RequestGroupAware(requestGroup),
   _e(e),
   _e(e),
-  _taskQueue(0),
-  _taskFactory(0),
-  _task(0),
   _numRetry(0),
   _numRetry(0),
   _lastGetPeerTime(0)
   _lastGetPeerTime(0)
 {}
 {}
@@ -76,7 +73,7 @@ bool DHTGetPeersCommand::execute()
       _lastGetPeerTime.elapsed(GET_PEER_INTERVAL))) {
       _lastGetPeerTime.elapsed(GET_PEER_INTERVAL))) {
     logger->debug("Issuing PeerLookup for infoHash=%s",
     logger->debug("Issuing PeerLookup for infoHash=%s",
 		  btContext->getInfoHashAsString().c_str());
 		  btContext->getInfoHashAsString().c_str());
-    _task = _taskFactory->createPeerLookupTask(btContext);
+    _task = dynamic_pointer_cast<DHTPeerLookupTask>(_taskFactory->createPeerLookupTask(btContext));
     _taskQueue->addPeriodicTask2(_task);
     _taskQueue->addPeriodicTask2(_task);
   } else if(!_task.isNull() && _task->finished()) {
   } else if(!_task.isNull() && _task->finished()) {
     _lastGetPeerTime.reset();
     _lastGetPeerTime.reset();
@@ -85,7 +82,7 @@ bool DHTGetPeersCommand::execute()
     } else {
     } else {
       _numRetry = 0;
       _numRetry = 0;
     }
     }
-    _task = 0;
+    _task.reset();
   }
   }
 
 
   _e->commands.push_back(this);
   _e->commands.push_back(this);

+ 1 - 1
src/DHTGetPeersMessage.cc

@@ -67,7 +67,7 @@ void DHTGetPeersMessage::doReceivedAction()
 					      _remoteNode->getPort());
 					      _remoteNode->getPort());
   // Check to see localhost has the contents which has same infohash
   // Check to see localhost has the contents which has same infohash
   Peers peers = _peerAnnounceStorage->getPeers(_infoHash);
   Peers peers = _peerAnnounceStorage->getPeers(_infoHash);
-  SharedHandle<DHTMessage> reply = 0;
+  SharedHandle<DHTMessage> reply;
   if(peers.empty()) {
   if(peers.empty()) {
     std::deque<SharedHandle<DHTNode> > nodes = _routingTable->getClosestKNodes(_infoHash);
     std::deque<SharedHandle<DHTNode> > nodes = _routingTable->getClosestKNodes(_infoHash);
     reply =
     reply =

+ 2 - 6
src/DHTInteractionCommand.cc

@@ -43,17 +43,13 @@
 #include "message.h"
 #include "message.h"
 #include "RequestGroupMan.h"
 #include "RequestGroupMan.h"
 #include "Logger.h"
 #include "Logger.h"
+#include "DHTMessageCallback.h"
 
 
 namespace aria2 {
 namespace aria2 {
 
 
 DHTInteractionCommand::DHTInteractionCommand(int32_t cuid, DownloadEngine* e):
 DHTInteractionCommand::DHTInteractionCommand(int32_t cuid, DownloadEngine* e):
   Command(cuid),
   Command(cuid),
-  _e(e),
-  _dispatcher(0),
-  _receiver(0),
-  _taskQueue(0),
-  _readCheckSocket(0)
-{}
+  _e(e) {}
 
 
 DHTInteractionCommand::~DHTInteractionCommand()
 DHTInteractionCommand::~DHTInteractionCommand()
 {
 {

+ 4 - 2
src/DHTMessageDispatcher.h

@@ -51,11 +51,13 @@ public:
   virtual void
   virtual void
   addMessageToQueue(const SharedHandle<DHTMessage>& message,
   addMessageToQueue(const SharedHandle<DHTMessage>& message,
 		    time_t timeout,
 		    time_t timeout,
-		    const SharedHandle<DHTMessageCallback>& callback = 0) = 0;
+		    const SharedHandle<DHTMessageCallback>& callback =
+		    SharedHandle<DHTMessageCallback>()) = 0;
 
 
   virtual void
   virtual void
   addMessageToQueue(const SharedHandle<DHTMessage>& message,
   addMessageToQueue(const SharedHandle<DHTMessage>& message,
-		    const SharedHandle<DHTMessageCallback>& callback = 0) = 0;
+		    const SharedHandle<DHTMessageCallback>& callback =
+		    SharedHandle<DHTMessageCallback>()) = 0;
 
 
   virtual void sendMessages() = 0;
   virtual void sendMessages() = 0;
 
 

+ 2 - 1
src/DHTMessageDispatcherImpl.cc

@@ -55,7 +55,8 @@ DHTMessageDispatcherImpl::addMessageToQueue(const SharedHandle<DHTMessage>& mess
 					    time_t timeout,
 					    time_t timeout,
 					    const SharedHandle<DHTMessageCallback>& callback)
 					    const SharedHandle<DHTMessageCallback>& callback)
 {
 {
-  _messageQueue.push_back(new DHTMessageEntry(message, timeout, callback));
+  SharedHandle<DHTMessageEntry> e(new DHTMessageEntry(message, timeout, callback));
+  _messageQueue.push_back(e);
 }
 }
 
 
 void
 void

+ 4 - 2
src/DHTMessageDispatcherImpl.h

@@ -61,11 +61,13 @@ public:
   virtual void
   virtual void
   addMessageToQueue(const SharedHandle<DHTMessage>& message,
   addMessageToQueue(const SharedHandle<DHTMessage>& message,
 		    time_t timeout,
 		    time_t timeout,
-		    const SharedHandle<DHTMessageCallback>& callback = 0);
+		    const SharedHandle<DHTMessageCallback>& callback =
+		    SharedHandle<DHTMessageCallback>());
 
 
   virtual void
   virtual void
   addMessageToQueue(const SharedHandle<DHTMessage>& message,
   addMessageToQueue(const SharedHandle<DHTMessage>& message,
-		    const SharedHandle<DHTMessageCallback>& callback = 0);
+		    const SharedHandle<DHTMessageCallback>& callback =
+		    SharedHandle<DHTMessageCallback>());
 
 
   virtual void sendMessages();
   virtual void sendMessages();
 
 

+ 25 - 23
src/DHTMessageFactoryImpl.cc

@@ -53,6 +53,7 @@
 #include "DHTMessageDispatcher.h"
 #include "DHTMessageDispatcher.h"
 #include "DHTPeerAnnounceStorage.h"
 #include "DHTPeerAnnounceStorage.h"
 #include "DHTTokenTracker.h"
 #include "DHTTokenTracker.h"
+#include "DHTMessageCallback.h"
 #include "PeerMessageUtil.h"
 #include "PeerMessageUtil.h"
 #include "BtRuntime.h"
 #include "BtRuntime.h"
 #include "Util.h"
 #include "Util.h"
@@ -63,8 +64,8 @@
 
 
 namespace aria2 {
 namespace aria2 {
 
 
-DHTMessageFactoryImpl::DHTMessageFactoryImpl():_localNode(0),
-					       _logger(LogFactory::getInstance()) {}
+DHTMessageFactoryImpl::DHTMessageFactoryImpl():
+  _logger(LogFactory::getInstance()) {}
 
 
 DHTMessageFactoryImpl::~DHTMessageFactoryImpl() {}
 DHTMessageFactoryImpl::~DHTMessageFactoryImpl() {}
 
 
@@ -73,7 +74,7 @@ DHTMessageFactoryImpl::getRemoteNode(const unsigned char* id, const std::string&
 {
 {
   SharedHandle<DHTNode> node = _routingTable->getNode(id, ipaddr, port);
   SharedHandle<DHTNode> node = _routingTable->getNode(id, ipaddr, port);
   if(node.isNull()) {
   if(node.isNull()) {
-    node = new DHTNode(id);
+    node.reset(new DHTNode(id));
     node->setIPAddress(ipaddr);
     node->setIPAddress(ipaddr);
     node->setPort(port);
     node->setPort(port);
   }
   }
@@ -245,12 +246,13 @@ void DHTMessageFactoryImpl::setCommonProperty(const SharedHandle<DHTAbstractMess
   m->setConnection(_connection);
   m->setConnection(_connection);
   m->setMessageDispatcher(_dispatcher);
   m->setMessageDispatcher(_dispatcher);
   m->setRoutingTable(_routingTable);
   m->setRoutingTable(_routingTable);
-  m->setMessageFactory(this);
+  WeakHandle<DHTMessageFactory> factory(this);
+  m->setMessageFactory(factory);
 }
 }
 
 
 SharedHandle<DHTMessage> DHTMessageFactoryImpl::createPingMessage(const SharedHandle<DHTNode>& remoteNode, const std::string& transactionID)
 SharedHandle<DHTMessage> DHTMessageFactoryImpl::createPingMessage(const SharedHandle<DHTNode>& remoteNode, const std::string& transactionID)
 {
 {
-  SharedHandle<DHTPingMessage> m = new DHTPingMessage(_localNode, remoteNode, transactionID);
+  SharedHandle<DHTPingMessage> m(new DHTPingMessage(_localNode, remoteNode, transactionID));
   setCommonProperty(m);
   setCommonProperty(m);
   return m;
   return m;
 }
 }
@@ -260,7 +262,7 @@ DHTMessageFactoryImpl::createPingReplyMessage(const SharedHandle<DHTNode>& remot
 					      const unsigned char* id,
 					      const unsigned char* id,
 					      const std::string& transactionID)
 					      const std::string& transactionID)
 {
 {
-  SharedHandle<DHTPingReplyMessage> m = new DHTPingReplyMessage(_localNode, remoteNode, id, transactionID);
+  SharedHandle<DHTPingReplyMessage> m(new DHTPingReplyMessage(_localNode, remoteNode, id, transactionID));
   setCommonProperty(m);
   setCommonProperty(m);
   return m;
   return m;
 }
 }
@@ -270,7 +272,7 @@ DHTMessageFactoryImpl::createFindNodeMessage(const SharedHandle<DHTNode>& remote
 					     const unsigned char* targetNodeID,
 					     const unsigned char* targetNodeID,
 					     const std::string& transactionID)
 					     const std::string& transactionID)
 {
 {
-  SharedHandle<DHTFindNodeMessage> m = new DHTFindNodeMessage(_localNode, remoteNode, targetNodeID, transactionID);
+  SharedHandle<DHTFindNodeMessage> m(new DHTFindNodeMessage(_localNode, remoteNode, targetNodeID, transactionID));
   setCommonProperty(m);
   setCommonProperty(m);
   return m;
   return m;
 }
 }
@@ -280,7 +282,7 @@ DHTMessageFactoryImpl::createFindNodeReplyMessage(const SharedHandle<DHTNode>& r
 						  const std::deque<SharedHandle<DHTNode> >& closestKNodes,
 						  const std::deque<SharedHandle<DHTNode> >& closestKNodes,
 						  const std::string& transactionID)
 						  const std::string& transactionID)
 {
 {
-  SharedHandle<DHTFindNodeReplyMessage> m = new DHTFindNodeReplyMessage(_localNode, remoteNode, transactionID);
+  SharedHandle<DHTFindNodeReplyMessage> m(new DHTFindNodeReplyMessage(_localNode, remoteNode, transactionID));
   m->setClosestKNodes(closestKNodes);
   m->setClosestKNodes(closestKNodes);
   setCommonProperty(m);
   setCommonProperty(m);
   return m;
   return m;
@@ -294,7 +296,7 @@ DHTMessageFactoryImpl::extractNodes(const unsigned char* src, size_t length)
   }
   }
   std::deque<SharedHandle<DHTNode> > nodes;
   std::deque<SharedHandle<DHTNode> > nodes;
   for(size_t offset = 0; offset < length; offset += 26) {
   for(size_t offset = 0; offset < length; offset += 26) {
-    SharedHandle<DHTNode> node = new DHTNode(src+offset);
+    SharedHandle<DHTNode> node(new DHTNode(src+offset));
     std::pair<std::string, uint16_t> addr =
     std::pair<std::string, uint16_t> addr =
       PeerMessageUtil::unpackcompact(src+offset+DHT_ID_LENGTH);
       PeerMessageUtil::unpackcompact(src+offset+DHT_ID_LENGTH);
     if(addr.first.empty()) {
     if(addr.first.empty()) {
@@ -322,10 +324,10 @@ DHTMessageFactoryImpl::createGetPeersMessage(const SharedHandle<DHTNode>& remote
 					     const unsigned char* infoHash,
 					     const unsigned char* infoHash,
 					     const std::string& transactionID)
 					     const std::string& transactionID)
 {
 {
-  SharedHandle<DHTGetPeersMessage> m = new DHTGetPeersMessage(_localNode,
-							      remoteNode,
-							      infoHash,
-							      transactionID);
+  SharedHandle<DHTGetPeersMessage> m(new DHTGetPeersMessage(_localNode,
+							    remoteNode,
+							    infoHash,
+							    transactionID));
   m->setPeerAnnounceStorage(_peerAnnounceStorage);
   m->setPeerAnnounceStorage(_peerAnnounceStorage);
   m->setTokenTracker(_tokenTracker);
   m->setTokenTracker(_tokenTracker);
   setCommonProperty(m);
   setCommonProperty(m);
@@ -351,8 +353,8 @@ DHTMessageFactoryImpl::createGetPeersReplyMessage(const SharedHandle<DHTNode>& r
 						  const std::string& token,
 						  const std::string& token,
 						  const std::string& transactionID)
 						  const std::string& transactionID)
 {
 {
-  SharedHandle<DHTGetPeersReplyMessage> m =
-    new DHTGetPeersReplyMessage(_localNode, remoteNode, token, transactionID);
+  SharedHandle<DHTGetPeersReplyMessage> m
+    (new DHTGetPeersReplyMessage(_localNode, remoteNode, token, transactionID));
   m->setClosestKNodes(closestKNodes);
   m->setClosestKNodes(closestKNodes);
   setCommonProperty(m);
   setCommonProperty(m);
   return m;
   return m;
@@ -370,7 +372,7 @@ DHTMessageFactoryImpl::createGetPeersReplyMessageWithValues(const SharedHandle<D
     const Data* data = dynamic_cast<const Data*>(*i);
     const Data* data = dynamic_cast<const Data*>(*i);
     if(data && data->getLen() == 6) {
     if(data && data->getLen() == 6) {
       std::pair<std::string, uint16_t> addr = PeerMessageUtil::unpackcompact(data->getData());
       std::pair<std::string, uint16_t> addr = PeerMessageUtil::unpackcompact(data->getData());
-      PeerHandle peer = new Peer(addr.first, addr.second);
+      PeerHandle peer(new Peer(addr.first, addr.second));
       peers.push_back(peer);
       peers.push_back(peer);
     }
     }
   }
   }
@@ -385,7 +387,7 @@ DHTMessageFactoryImpl::createGetPeersReplyMessage(const SharedHandle<DHTNode>& r
 						  const std::string& token,
 						  const std::string& token,
 						  const std::string& transactionID)
 						  const std::string& transactionID)
 {
 {
-  SharedHandle<DHTGetPeersReplyMessage> m = new DHTGetPeersReplyMessage(_localNode, remoteNode, token, transactionID);
+  SharedHandle<DHTGetPeersReplyMessage> m(new DHTGetPeersReplyMessage(_localNode, remoteNode, token, transactionID));
   m->setValues(values);
   m->setValues(values);
   setCommonProperty(m);
   setCommonProperty(m);
   return m;
   return m;
@@ -398,8 +400,8 @@ DHTMessageFactoryImpl::createAnnouncePeerMessage(const SharedHandle<DHTNode>& re
 						 const std::string& token,
 						 const std::string& token,
 						 const std::string& transactionID)
 						 const std::string& transactionID)
 {
 {
-  SharedHandle<DHTAnnouncePeerMessage> m =
-    new DHTAnnouncePeerMessage(_localNode, remoteNode, infoHash, tcpPort, token, transactionID);
+  SharedHandle<DHTAnnouncePeerMessage> m
+    (new DHTAnnouncePeerMessage(_localNode, remoteNode, infoHash, tcpPort, token, transactionID));
   m->setPeerAnnounceStorage(_peerAnnounceStorage);
   m->setPeerAnnounceStorage(_peerAnnounceStorage);
   m->setTokenTracker(_tokenTracker);
   m->setTokenTracker(_tokenTracker);
   setCommonProperty(m);
   setCommonProperty(m);
@@ -410,8 +412,8 @@ SharedHandle<DHTMessage>
 DHTMessageFactoryImpl::createAnnouncePeerReplyMessage(const SharedHandle<DHTNode>& remoteNode,
 DHTMessageFactoryImpl::createAnnouncePeerReplyMessage(const SharedHandle<DHTNode>& remoteNode,
 						      const std::string& transactionID)
 						      const std::string& transactionID)
 {
 {
-  SharedHandle<DHTAnnouncePeerReplyMessage> m =
-    new DHTAnnouncePeerReplyMessage(_localNode, remoteNode, transactionID);
+  SharedHandle<DHTAnnouncePeerReplyMessage> m
+    (new DHTAnnouncePeerReplyMessage(_localNode, remoteNode, transactionID));
   setCommonProperty(m);
   setCommonProperty(m);
   return m;
   return m;
 }
 }
@@ -421,8 +423,8 @@ DHTMessageFactoryImpl::createUnknownMessage(const unsigned char* data, size_t le
 					    const std::string& ipaddr, uint16_t port)
 					    const std::string& ipaddr, uint16_t port)
 
 
 {
 {
-  SharedHandle<DHTUnknownMessage> m = 
-    new DHTUnknownMessage(_localNode, data, length, ipaddr, port);
+  SharedHandle<DHTUnknownMessage> m
+    (new DHTUnknownMessage(_localNode, data, length, ipaddr, port));
   return m;
   return m;
 }
 }
 
 

+ 4 - 7
src/DHTMessageReceiver.cc

@@ -53,9 +53,6 @@ namespace aria2 {
 
 
 DHTMessageReceiver::DHTMessageReceiver(const SharedHandle<DHTMessageTracker>& tracker):
 DHTMessageReceiver::DHTMessageReceiver(const SharedHandle<DHTMessageTracker>& tracker):
   _tracker(tracker),
   _tracker(tracker),
-  _connection(0),
-  _factory(0),
-  _routingTable(0),
   _logger(LogFactory::getInstance())
   _logger(LogFactory::getInstance())
 {}
 {}
 
 
@@ -70,11 +67,11 @@ SharedHandle<DHTMessage> DHTMessageReceiver::receiveMessage()
 					       remoteAddr,
 					       remoteAddr,
 					       remotePort);
 					       remotePort);
   if(length <= 0) {
   if(length <= 0) {
-    return 0;
+    return SharedHandle<DHTMessage>();
   }
   }
   try {
   try {
     bool isReply = false;
     bool isReply = false;
-    MetaEntryHandle msgroot = MetaFileUtil::bdecoding(data, length);
+    MetaEntryHandle msgroot(MetaFileUtil::bdecoding(data, length));
     const Dictionary* d = dynamic_cast<const Dictionary*>(msgroot.get());
     const Dictionary* d = dynamic_cast<const Dictionary*>(msgroot.get());
     if(d) {
     if(d) {
       const Data* y = dynamic_cast<const Data*>(d->get("y"));
       const Data* y = dynamic_cast<const Data*>(d->get("y"));
@@ -90,8 +87,8 @@ SharedHandle<DHTMessage> DHTMessageReceiver::receiveMessage()
       _logger->info("Malformed DHT message. This is not a bencoded directory. From:%s:%u", remoteAddr.c_str(), remotePort);
       _logger->info("Malformed DHT message. This is not a bencoded directory. From:%s:%u", remoteAddr.c_str(), remotePort);
       return handleUnknownMessage(data, sizeof(data), remoteAddr, remotePort);
       return handleUnknownMessage(data, sizeof(data), remoteAddr, remotePort);
     }
     }
-    SharedHandle<DHTMessage> message = 0;
-    SharedHandle<DHTMessageCallback> callback = 0;
+    SharedHandle<DHTMessage> message;
+    SharedHandle<DHTMessageCallback> callback;
     if(isReply) {
     if(isReply) {
       std::pair<SharedHandle<DHTMessage>, SharedHandle<DHTMessageCallback> > p = _tracker->messageArrived(d, remoteAddr, remotePort);
       std::pair<SharedHandle<DHTMessage>, SharedHandle<DHTMessageCallback> > p = _tracker->messageArrived(d, remoteAddr, remotePort);
       message = p.first;
       message = p.first;

+ 4 - 5
src/DHTMessageTracker.cc

@@ -51,15 +51,14 @@
 namespace aria2 {
 namespace aria2 {
 
 
 DHTMessageTracker::DHTMessageTracker():
 DHTMessageTracker::DHTMessageTracker():
-  _routingTable(0),
-  _factory(0),
   _logger(LogFactory::getInstance()) {}
   _logger(LogFactory::getInstance()) {}
 
 
 DHTMessageTracker::~DHTMessageTracker() {}
 DHTMessageTracker::~DHTMessageTracker() {}
 
 
 void DHTMessageTracker::addMessage(const SharedHandle<DHTMessage>& message, time_t timeout, const SharedHandle<DHTMessageCallback>& callback)
 void DHTMessageTracker::addMessage(const SharedHandle<DHTMessage>& message, time_t timeout, const SharedHandle<DHTMessageCallback>& callback)
 {
 {
-  _entries.push_back(new DHTMessageTrackerEntry(message, timeout, callback));
+  SharedHandle<DHTMessageTrackerEntry> e(new DHTMessageTrackerEntry(message, timeout, callback));
+  _entries.push_back(e);
 }
 }
 
 
 void DHTMessageTracker::addMessage(const SharedHandle<DHTMessage>& message, const SharedHandle<DHTMessageCallback>& callback)
 void DHTMessageTracker::addMessage(const SharedHandle<DHTMessage>& message, const SharedHandle<DHTMessageCallback>& callback)
@@ -95,7 +94,7 @@ DHTMessageTracker::messageArrived(const Dictionary* d,
     }
     }
   }
   }
   _logger->debug("Tracker entry not found.");
   _logger->debug("Tracker entry not found.");
-  return std::pair<SharedHandle<DHTMessage>, SharedHandle<DHTMessageCallback> >(0, 0);
+  return std::pair<SharedHandle<DHTMessage>, SharedHandle<DHTMessageCallback> >();
 }
 }
 
 
 void DHTMessageTracker::handleTimeout()
 void DHTMessageTracker::handleTimeout()
@@ -139,7 +138,7 @@ DHTMessageTracker::getEntryFor(const SharedHandle<DHTMessage>& message) const
       return *i;
       return *i;
     }
     }
   }
   }
-  return 0;
+  return SharedHandle<DHTMessageTrackerEntry>();
 }
 }
 
 
 size_t DHTMessageTracker::countEntry() const
 size_t DHTMessageTracker::countEntry() const

+ 4 - 2
src/DHTMessageTracker.h

@@ -67,10 +67,12 @@ public:
 
 
   void addMessage(const SharedHandle<DHTMessage>& message,
   void addMessage(const SharedHandle<DHTMessage>& message,
 		  time_t timeout,
 		  time_t timeout,
-		  const SharedHandle<DHTMessageCallback>& callback = 0);
+		  const SharedHandle<DHTMessageCallback>& callback =
+		  SharedHandle<DHTMessageCallback>());
 
 
   void addMessage(const SharedHandle<DHTMessage>& message,
   void addMessage(const SharedHandle<DHTMessage>& message,
-		  const SharedHandle<DHTMessageCallback>& callback = 0);
+		  const SharedHandle<DHTMessageCallback>& callback =
+		  SharedHandle<DHTMessageCallback>());
 
 
   std::pair<SharedHandle<DHTMessage>, SharedHandle<DHTMessageCallback> >
   std::pair<SharedHandle<DHTMessage>, SharedHandle<DHTMessageCallback> >
   messageArrived(const Dictionary* d, const std::string& ipaddr, uint16_t port);
   messageArrived(const Dictionary* d, const std::string& ipaddr, uint16_t port);

+ 2 - 1
src/DHTMessageTrackerEntry.h

@@ -63,7 +63,8 @@ private:
 public:
 public:
   DHTMessageTrackerEntry(const SharedHandle<DHTMessage>& sentMessage,
   DHTMessageTrackerEntry(const SharedHandle<DHTMessage>& sentMessage,
 			 time_t timeout,
 			 time_t timeout,
-			 const SharedHandle<DHTMessageCallback>& callback = 0);
+			 const SharedHandle<DHTMessageCallback>& callback =
+			 SharedHandle<DHTMessageCallback>());
 
 
   bool isTimeout() const;
   bool isTimeout() const;
 
 

+ 3 - 1
src/DHTNodeLookupTask.cc

@@ -39,6 +39,7 @@
 #include "DHTNodeLookupEntry.h"
 #include "DHTNodeLookupEntry.h"
 #include "LogFactory.h"
 #include "LogFactory.h"
 #include "Util.h"
 #include "Util.h"
+#include <cassert>
 
 
 namespace aria2 {
 namespace aria2 {
 
 
@@ -49,7 +50,8 @@ DHTNodeLookupTask::DHTNodeLookupTask(const unsigned char* targetNodeID):
 std::deque<SharedHandle<DHTNode> >
 std::deque<SharedHandle<DHTNode> >
 DHTNodeLookupTask::getNodesFromMessage(const SharedHandle<DHTMessage>& message)
 DHTNodeLookupTask::getNodesFromMessage(const SharedHandle<DHTMessage>& message)
 {
 {
-  SharedHandle<DHTFindNodeReplyMessage> m = message;
+  SharedHandle<DHTFindNodeReplyMessage> m
+    (dynamic_pointer_cast<DHTFindNodeReplyMessage>(message));
   if(m.isNull()) {
   if(m.isNull()) {
     return std::deque<SharedHandle<DHTNode> >();
     return std::deque<SharedHandle<DHTNode> >();
   } else {
   } else {

+ 1 - 3
src/DHTPeerAnnounceCommand.cc

@@ -43,9 +43,7 @@
 namespace aria2 {
 namespace aria2 {
 
 
 DHTPeerAnnounceCommand::DHTPeerAnnounceCommand(int32_t cuid, DownloadEngine* e, time_t interval):
 DHTPeerAnnounceCommand::DHTPeerAnnounceCommand(int32_t cuid, DownloadEngine* e, time_t interval):
-  TimeBasedCommand(cuid, e, interval),
-  _peerAnnounceStorage(0)
-{}
+  TimeBasedCommand(cuid, e, interval) {}
 
 
 DHTPeerAnnounceCommand::~DHTPeerAnnounceCommand() {}
 DHTPeerAnnounceCommand::~DHTPeerAnnounceCommand() {}
 
 

+ 3 - 3
src/DHTPeerAnnounceEntry.cc

@@ -42,8 +42,7 @@
 
 
 namespace aria2 {
 namespace aria2 {
 
 
-DHTPeerAnnounceEntry::DHTPeerAnnounceEntry(const unsigned char* infoHash):
-  _btCtx(0)
+DHTPeerAnnounceEntry::DHTPeerAnnounceEntry(const unsigned char* infoHash)
 {
 {
   memcpy(_infoHash, infoHash, DHT_ID_LENGTH);
   memcpy(_infoHash, infoHash, DHT_ID_LENGTH);
 }
 }
@@ -108,7 +107,8 @@ Peers DHTPeerAnnounceEntry::getPeers() const
   std::deque<SharedHandle<Peer> > peers;
   std::deque<SharedHandle<Peer> > peers;
   for(std::deque<PeerAddrEntry>::const_iterator i = _peerAddrEntries.begin();
   for(std::deque<PeerAddrEntry>::const_iterator i = _peerAddrEntries.begin();
       i != _peerAddrEntries.end(); ++i) {
       i != _peerAddrEntries.end(); ++i) {
-    peers.push_back(new Peer((*i).getIPAddress(), (*i).getPort()));
+    SharedHandle<Peer> peer(new Peer((*i).getIPAddress(), (*i).getPort()));
+    peers.push_back(peer);
   }
   }
   if(!_btCtx.isNull()) {
   if(!_btCtx.isNull()) {
     SharedHandle<PeerStorage> peerStorage = PEER_STORAGE(_btCtx);
     SharedHandle<PeerStorage> peerStorage = PEER_STORAGE(_btCtx);

+ 5 - 6
src/DHTPeerAnnounceStorage.cc

@@ -48,9 +48,8 @@
 
 
 namespace aria2 {
 namespace aria2 {
 
 
-DHTPeerAnnounceStorage::DHTPeerAnnounceStorage():_taskQueue(0),
-						 _taskFactory(0),
-						 _logger(LogFactory::getInstance()) {}
+DHTPeerAnnounceStorage::DHTPeerAnnounceStorage():
+  _logger(LogFactory::getInstance()) {}
 
 
 DHTPeerAnnounceStorage::~DHTPeerAnnounceStorage() {}
 DHTPeerAnnounceStorage::~DHTPeerAnnounceStorage() {}
 
 
@@ -74,9 +73,9 @@ DHTPeerAnnounceStorage::getPeerAnnounceEntry(const unsigned char* infoHash)
 {
 {
   std::deque<SharedHandle<DHTPeerAnnounceEntry> >::iterator i = 
   std::deque<SharedHandle<DHTPeerAnnounceEntry> >::iterator i = 
     std::find_if(_entries.begin(), _entries.end(), FindPeerAnnounceEntry(infoHash));
     std::find_if(_entries.begin(), _entries.end(), FindPeerAnnounceEntry(infoHash));
-  SharedHandle<DHTPeerAnnounceEntry> entry = 0;
+  SharedHandle<DHTPeerAnnounceEntry> entry;
   if(i == _entries.end()) {
   if(i == _entries.end()) {
-    entry = new DHTPeerAnnounceEntry(infoHash);
+    entry.reset(new DHTPeerAnnounceEntry(infoHash));
     _entries.push_back(entry);
     _entries.push_back(entry);
   } else {
   } else {
     entry = *i;
     entry = *i;
@@ -106,7 +105,7 @@ void DHTPeerAnnounceStorage::removePeerAnnounce(const BtContextHandle& ctx)
   std::deque<SharedHandle<DHTPeerAnnounceEntry> >::iterator i = 
   std::deque<SharedHandle<DHTPeerAnnounceEntry> >::iterator i = 
     std::find_if(_entries.begin(), _entries.end(), FindPeerAnnounceEntry(ctx->getInfoHash()));
     std::find_if(_entries.begin(), _entries.end(), FindPeerAnnounceEntry(ctx->getInfoHash()));
   if(i != _entries.end()) {
   if(i != _entries.end()) {
-    (*i)->setBtContext(0);
+    (*i)->setBtContext(SharedHandle<BtContext>());
     if((*i)->empty()) {
     if((*i)->empty()) {
       _entries.erase(i);
       _entries.erase(i);
     }
     }

+ 2 - 2
src/DHTPeerLookupTask.cc

@@ -58,7 +58,7 @@ DHTPeerLookupTask::DHTPeerLookupTask(const SharedHandle<BtContext>& btContext):
 
 
 std::deque<SharedHandle<DHTNode> > DHTPeerLookupTask::getNodesFromMessage(const SharedHandle<DHTMessage>& message)
 std::deque<SharedHandle<DHTNode> > DHTPeerLookupTask::getNodesFromMessage(const SharedHandle<DHTMessage>& message)
 {
 {
-  SharedHandle<DHTGetPeersReplyMessage> m = message;
+  SharedHandle<DHTGetPeersReplyMessage> m(dynamic_pointer_cast<DHTGetPeersReplyMessage>(message));
   if(m.isNull()) {
   if(m.isNull()) {
     return std::deque<SharedHandle<DHTNode> >();
     return std::deque<SharedHandle<DHTNode> >();
   } else {
   } else {
@@ -68,7 +68,7 @@ std::deque<SharedHandle<DHTNode> > DHTPeerLookupTask::getNodesFromMessage(const
   
   
 void DHTPeerLookupTask::onReceivedInternal(const SharedHandle<DHTMessage>& message)
 void DHTPeerLookupTask::onReceivedInternal(const SharedHandle<DHTMessage>& message)
 {
 {
-  SharedHandle<DHTGetPeersReplyMessage> m = message;
+  SharedHandle<DHTGetPeersReplyMessage> m(dynamic_pointer_cast<DHTGetPeersReplyMessage>(message));
   if(m.isNull()) {
   if(m.isNull()) {
     return;
     return;
   }
   }

+ 6 - 2
src/DHTPingTask.cc

@@ -55,7 +55,9 @@ DHTPingTask::~DHTPingTask() {}
 void DHTPingTask::startup()
 void DHTPingTask::startup()
 {
 {
   SharedHandle<DHTMessage> m = _factory->createPingMessage(_remoteNode);
   SharedHandle<DHTMessage> m = _factory->createPingMessage(_remoteNode);
-  _dispatcher->addMessageToQueue(m, _timeout, new DHTMessageCallbackImpl(this));
+  WeakHandle<DHTMessageCallbackListener> listener(this);
+  SharedHandle<DHTMessageCallback> callback(new DHTMessageCallbackImpl(listener));
+  _dispatcher->addMessageToQueue(m, _timeout, callback);
 }
 }
 
 
 void DHTPingTask::onReceived(const SharedHandle<DHTMessage>& message)
 void DHTPingTask::onReceived(const SharedHandle<DHTMessage>& message)
@@ -72,7 +74,9 @@ void DHTPingTask::onTimeout(const SharedHandle<DHTNode>& node)
     _finished = true;
     _finished = true;
   } else {
   } else {
     SharedHandle<DHTMessage> m = _factory->createPingMessage(_remoteNode);
     SharedHandle<DHTMessage> m = _factory->createPingMessage(_remoteNode);
-    _dispatcher->addMessageToQueue(m, _timeout, new DHTMessageCallbackImpl(this));
+    WeakHandle<DHTMessageCallbackListener> listener(this);
+    SharedHandle<DHTMessageCallback> callback(new DHTMessageCallbackImpl(listener));
+    _dispatcher->addMessageToQueue(m, _timeout, callback);
   }
   }
 }
 }
 
 

+ 19 - 18
src/DHTRegistry.cc

@@ -42,38 +42,39 @@
 #include "DHTMessageDispatcher.h"
 #include "DHTMessageDispatcher.h"
 #include "DHTMessageReceiver.h"
 #include "DHTMessageReceiver.h"
 #include "DHTMessageFactory.h"
 #include "DHTMessageFactory.h"
+#include "DHTMessageCallback.h"
 
 
 namespace aria2 {
 namespace aria2 {
 
 
-SharedHandle<DHTNode> DHTRegistry::_localNode = 0;
+SharedHandle<DHTNode> DHTRegistry::_localNode;
 
 
-SharedHandle<DHTRoutingTable> DHTRegistry::_routingTable = 0;
+SharedHandle<DHTRoutingTable> DHTRegistry::_routingTable;
 
 
-SharedHandle<DHTTaskQueue> DHTRegistry::_taskQueue = 0;
+SharedHandle<DHTTaskQueue> DHTRegistry::_taskQueue;
 
 
-SharedHandle<DHTTaskFactory> DHTRegistry::_taskFactory = 0;
+SharedHandle<DHTTaskFactory> DHTRegistry::_taskFactory;
 
 
-SharedHandle<DHTPeerAnnounceStorage> DHTRegistry::_peerAnnounceStorage = 0;
+SharedHandle<DHTPeerAnnounceStorage> DHTRegistry::_peerAnnounceStorage;
 
 
-SharedHandle<DHTTokenTracker> DHTRegistry::_tokenTracker = 0;
+SharedHandle<DHTTokenTracker> DHTRegistry::_tokenTracker;
 
 
-SharedHandle<DHTMessageDispatcher> DHTRegistry::_messageDispatcher = 0;
+SharedHandle<DHTMessageDispatcher> DHTRegistry::_messageDispatcher;
 
 
-SharedHandle<DHTMessageReceiver> DHTRegistry::_messageReceiver = 0;
+SharedHandle<DHTMessageReceiver> DHTRegistry::_messageReceiver;
 
 
-SharedHandle<DHTMessageFactory> DHTRegistry::_messageFactory = 0;
+SharedHandle<DHTMessageFactory> DHTRegistry::_messageFactory;
 
 
 void DHTRegistry::clear()
 void DHTRegistry::clear()
 {
 {
-  _localNode = 0;
-  _routingTable = 0;
-  _taskQueue = 0;
-  _taskFactory = 0;
-  _peerAnnounceStorage = 0;
-  _tokenTracker = 0;
-  _messageDispatcher = 0;
-  _messageReceiver = 0;
-  _messageFactory = 0;
+  _localNode.reset();
+  _routingTable.reset();
+  _taskQueue.reset();
+  _taskFactory.reset();
+  _peerAnnounceStorage.reset();
+  _tokenTracker.reset();
+  _messageDispatcher.reset();
+  _messageReceiver.reset();
+  _messageFactory.reset();
 }
 }
 
 
 } // namespace aria2
 } // namespace aria2

+ 3 - 1
src/DHTReplaceNodeTask.cc

@@ -65,7 +65,9 @@ void DHTReplaceNodeTask::sendMessage()
     _finished = true;
     _finished = true;
   } else {
   } else {
     SharedHandle<DHTMessage> m = _factory->createPingMessage(questionableNode);
     SharedHandle<DHTMessage> m = _factory->createPingMessage(questionableNode);
-    _dispatcher->addMessageToQueue(m, _timeout, new DHTMessageCallbackImpl(this));
+    WeakHandle<DHTMessageCallbackListener> listener(this);
+    SharedHandle<DHTMessageCallback> callback(new DHTMessageCallbackImpl(listener));
+    _dispatcher->addMessageToQueue(m, _timeout, callback);
   }
   }
 }
 }
 
 

+ 5 - 5
src/DHTRoutingTable.cc

@@ -47,12 +47,12 @@ namespace aria2 {
 
 
 DHTRoutingTable::DHTRoutingTable(const SharedHandle<DHTNode>& localNode):
 DHTRoutingTable::DHTRoutingTable(const SharedHandle<DHTNode>& localNode):
   _localNode(localNode),
   _localNode(localNode),
-  _root(new BNode(new DHTBucket(localNode))),
   _numBucket(1),
   _numBucket(1),
-  _taskQueue(0),
-  _taskFactory(0),
   _logger(LogFactory::getInstance())
   _logger(LogFactory::getInstance())
-{}
+{
+  SharedHandle<DHTBucket> bucket(new DHTBucket(_localNode));
+  _root = new BNode(bucket);
+}
 
 
 DHTRoutingTable::~DHTRoutingTable()
 DHTRoutingTable::~DHTRoutingTable()
 {
 {
@@ -84,7 +84,7 @@ bool DHTRoutingTable::addNode(const SharedHandle<DHTNode>& node, bool good)
 		     Util::toHex(bucket->getMaxID(), DHT_ID_LENGTH).c_str());
 		     Util::toHex(bucket->getMaxID(), DHT_ID_LENGTH).c_str());
       SharedHandle<DHTBucket> r = bucket->split();
       SharedHandle<DHTBucket> r = bucket->split();
 
 
-      bnode->setBucket(0);
+      bnode->setBucket(SharedHandle<DHTBucket>());
       BNode* lbnode = new BNode(bucket);
       BNode* lbnode = new BNode(bucket);
       BNode* rbnode = new BNode(r);
       BNode* rbnode = new BNode(r);
       bnode->setLeft(lbnode);
       bnode->setLeft(lbnode);

+ 3 - 4
src/DHTRoutingTableDeserializer.cc

@@ -46,8 +46,7 @@
 
 
 namespace aria2 {
 namespace aria2 {
 
 
-DHTRoutingTableDeserializer::DHTRoutingTableDeserializer():
-  _localNode(0) {}
+DHTRoutingTableDeserializer::DHTRoutingTableDeserializer() {}
 
 
 DHTRoutingTableDeserializer::~DHTRoutingTableDeserializer() {}
 DHTRoutingTableDeserializer::~DHTRoutingTableDeserializer() {}
 
 
@@ -96,7 +95,7 @@ void DHTRoutingTableDeserializer::deserialize(std::istream& in)
     in.read(buf, 8);
     in.read(buf, 8);
     // localnode ID
     // localnode ID
     in.read(buf, DHT_ID_LENGTH);
     in.read(buf, DHT_ID_LENGTH);
-    SharedHandle<DHTNode> localNode = new DHTNode(reinterpret_cast<const unsigned char*>(buf));
+    SharedHandle<DHTNode> localNode(new DHTNode(reinterpret_cast<const unsigned char*>(buf)));
     // 4bytes reserved
     // 4bytes reserved
     in.read(buf, 4);
     in.read(buf, 4);
 
 
@@ -140,7 +139,7 @@ void DHTRoutingTableDeserializer::deserialize(std::istream& in)
       // localnode ID
       // localnode ID
       in.read(buf, DHT_ID_LENGTH);
       in.read(buf, DHT_ID_LENGTH);
 
 
-      SharedHandle<DHTNode> node = new DHTNode(reinterpret_cast<const unsigned char*>(buf));
+      SharedHandle<DHTNode> node(new DHTNode(reinterpret_cast<const unsigned char*>(buf)));
       node->setIPAddress(peer.first);
       node->setIPAddress(peer.first);
       node->setPort(peer.second);
       node->setPort(peer.second);
       // 4bytes reserved
       // 4bytes reserved

+ 1 - 1
src/DHTRoutingTableSerializer.cc

@@ -45,7 +45,7 @@
 
 
 namespace aria2 {
 namespace aria2 {
 
 
-DHTRoutingTableSerializer::DHTRoutingTableSerializer():_localNode(0) {}
+DHTRoutingTableSerializer::DHTRoutingTableSerializer() {}
 
 
 DHTRoutingTableSerializer::~DHTRoutingTableSerializer() {}
 DHTRoutingTableSerializer::~DHTRoutingTableSerializer() {}
 
 

+ 15 - 13
src/DHTSetup.cc

@@ -58,6 +58,7 @@
 #include "DHTRoutingTableDeserializer.h"
 #include "DHTRoutingTableDeserializer.h"
 #include "DHTRegistry.h"
 #include "DHTRegistry.h"
 #include "DHTBucketRefreshTask.h"
 #include "DHTBucketRefreshTask.h"
+#include "DHTMessageCallback.h"
 #include "CUIDCounter.h"
 #include "CUIDCounter.h"
 #include "prefs.h"
 #include "prefs.h"
 #include "Option.h"
 #include "Option.h"
@@ -82,7 +83,7 @@ Commands DHTSetup::setup(DownloadEngine* e, const Option* option)
   try {
   try {
     // load routing table and localnode id here
     // load routing table and localnode id here
 
 
-    SharedHandle<DHTNode> localNode = 0;
+    SharedHandle<DHTNode> localNode;
 
 
     DHTRoutingTableDeserializer deserializer;
     DHTRoutingTableDeserializer deserializer;
     std::string dhtFile = option->get(PREF_DHT_FILE_PATH);
     std::string dhtFile = option->get(PREF_DHT_FILE_PATH);
@@ -99,10 +100,10 @@ Commands DHTSetup::setup(DownloadEngine* e, const Option* option)
       }
       }
     }
     }
     if(localNode.isNull()) {
     if(localNode.isNull()) {
-      localNode = new DHTNode();
+      localNode.reset(new DHTNode());
     }
     }
 
 
-    SharedHandle<DHTConnectionImpl> connection = new DHTConnectionImpl();
+    SharedHandle<DHTConnectionImpl> connection(new DHTConnectionImpl());
     {
     {
       IntSequence seq = Util::parseIntRange(option->get(PREF_DHT_LISTEN_PORT));
       IntSequence seq = Util::parseIntRange(option->get(PREF_DHT_LISTEN_PORT));
       uint16_t port;
       uint16_t port;
@@ -114,23 +115,23 @@ Commands DHTSetup::setup(DownloadEngine* e, const Option* option)
     _logger->debug("Initialized local node ID=%s",
     _logger->debug("Initialized local node ID=%s",
 		   Util::toHex(localNode->getID(), DHT_ID_LENGTH).c_str());
 		   Util::toHex(localNode->getID(), DHT_ID_LENGTH).c_str());
 
 
-    SharedHandle<DHTRoutingTable> routingTable = new DHTRoutingTable(localNode);
+    SharedHandle<DHTRoutingTable> routingTable(new DHTRoutingTable(localNode));
 
 
-    SharedHandle<DHTMessageFactoryImpl> factory = new DHTMessageFactoryImpl();
+    SharedHandle<DHTMessageFactoryImpl> factory(new DHTMessageFactoryImpl());
 
 
-    SharedHandle<DHTMessageTracker> tracker = new DHTMessageTracker();
+    SharedHandle<DHTMessageTracker> tracker(new DHTMessageTracker());
 
 
-    SharedHandle<DHTMessageDispatcherImpl> dispatcher = new DHTMessageDispatcherImpl(tracker);
+    SharedHandle<DHTMessageDispatcherImpl> dispatcher(new DHTMessageDispatcherImpl(tracker));
 
 
-    SharedHandle<DHTMessageReceiver> receiver = new DHTMessageReceiver(tracker);
+    SharedHandle<DHTMessageReceiver> receiver(new DHTMessageReceiver(tracker));
 
 
-    SharedHandle<DHTTaskQueue> taskQueue = new DHTTaskQueueImpl();
+    SharedHandle<DHTTaskQueue> taskQueue(new DHTTaskQueueImpl());
 
 
-    SharedHandle<DHTTaskFactoryImpl> taskFactory = new DHTTaskFactoryImpl();
+    SharedHandle<DHTTaskFactoryImpl> taskFactory(new DHTTaskFactoryImpl());
 
 
-    SharedHandle<DHTPeerAnnounceStorage> peerAnnounceStorage = new DHTPeerAnnounceStorage();
+    SharedHandle<DHTPeerAnnounceStorage> peerAnnounceStorage(new DHTPeerAnnounceStorage());
 
 
-    SharedHandle<DHTTokenTracker> tokenTracker = new DHTTokenTracker();
+    SharedHandle<DHTTokenTracker> tokenTracker(new DHTTokenTracker());
 
 
     // wiring up
     // wiring up
     tracker->setRoutingTable(routingTable);
     tracker->setRoutingTable(routingTable);
@@ -176,7 +177,8 @@ Commands DHTSetup::setup(DownloadEngine* e, const Option* option)
       routingTable->addNode(*i);
       routingTable->addNode(*i);
     }
     }
     if(!desnodes.empty() && deserializer.getSerializedTime().elapsed(DHT_BUCKET_REFRESH_INTERVAL)) {
     if(!desnodes.empty() && deserializer.getSerializedTime().elapsed(DHT_BUCKET_REFRESH_INTERVAL)) {
-      SharedHandle<DHTBucketRefreshTask> task = taskFactory->createBucketRefreshTask();
+      SharedHandle<DHTBucketRefreshTask> task
+	(dynamic_pointer_cast<DHTBucketRefreshTask>(taskFactory->createBucketRefreshTask()));
       task->setForceRefresh(true);
       task->setForceRefresh(true);
       taskQueue->addPeriodicTask1(task);
       taskQueue->addPeriodicTask1(task);
     }
     }

+ 8 - 12
src/DHTTaskFactoryImpl.cc

@@ -50,15 +50,11 @@
 #include "BtContext.h"
 #include "BtContext.h"
 #include "PeerStorage.h"
 #include "PeerStorage.h"
 #include "BtRuntime.h"
 #include "BtRuntime.h"
+#include "DHTMessageCallback.h"
 
 
 namespace aria2 {
 namespace aria2 {
 
 
-DHTTaskFactoryImpl::DHTTaskFactoryImpl():_localNode(0),
-					 _routingTable(0),
-					 _dispatcher(0),
-					 _factory(0),
-					 _taskQueue(0),
-					 _logger(LogFactory::getInstance()) {}
+DHTTaskFactoryImpl::DHTTaskFactoryImpl():_logger(LogFactory::getInstance()) {}
 
 
 DHTTaskFactoryImpl::~DHTTaskFactoryImpl() {}
 DHTTaskFactoryImpl::~DHTTaskFactoryImpl() {}
 
 
@@ -66,7 +62,7 @@ SharedHandle<DHTTask>
 DHTTaskFactoryImpl::createPingTask(const SharedHandle<DHTNode>& remoteNode,
 DHTTaskFactoryImpl::createPingTask(const SharedHandle<DHTNode>& remoteNode,
 				   size_t numRetry)
 				   size_t numRetry)
 {
 {
-  SharedHandle<DHTPingTask> task = new DHTPingTask(remoteNode, numRetry);
+  SharedHandle<DHTPingTask> task(new DHTPingTask(remoteNode, numRetry));
   setCommonProperty(task);
   setCommonProperty(task);
   return task;
   return task;
 }
 }
@@ -74,7 +70,7 @@ DHTTaskFactoryImpl::createPingTask(const SharedHandle<DHTNode>& remoteNode,
 SharedHandle<DHTTask>
 SharedHandle<DHTTask>
 DHTTaskFactoryImpl::createNodeLookupTask(const unsigned char* targetID)
 DHTTaskFactoryImpl::createNodeLookupTask(const unsigned char* targetID)
 {
 {
-  SharedHandle<DHTNodeLookupTask> task = new DHTNodeLookupTask(targetID);
+  SharedHandle<DHTNodeLookupTask> task(new DHTNodeLookupTask(targetID));
   setCommonProperty(task);
   setCommonProperty(task);
   return task;
   return task;
 }
 }
@@ -82,7 +78,7 @@ DHTTaskFactoryImpl::createNodeLookupTask(const unsigned char* targetID)
 SharedHandle<DHTTask>
 SharedHandle<DHTTask>
 DHTTaskFactoryImpl::createBucketRefreshTask()
 DHTTaskFactoryImpl::createBucketRefreshTask()
 {
 {
-  SharedHandle<DHTBucketRefreshTask> task = new DHTBucketRefreshTask();
+  SharedHandle<DHTBucketRefreshTask> task(new DHTBucketRefreshTask());
   setCommonProperty(task);
   setCommonProperty(task);
   return task;
   return task;
 }
 }
@@ -90,7 +86,7 @@ DHTTaskFactoryImpl::createBucketRefreshTask()
 SharedHandle<DHTTask>
 SharedHandle<DHTTask>
 DHTTaskFactoryImpl::createPeerLookupTask(const SharedHandle<BtContext>& ctx)
 DHTTaskFactoryImpl::createPeerLookupTask(const SharedHandle<BtContext>& ctx)
 {
 {
-  SharedHandle<DHTPeerLookupTask> task = new DHTPeerLookupTask(ctx);
+  SharedHandle<DHTPeerLookupTask> task(new DHTPeerLookupTask(ctx));
   setCommonProperty(task);
   setCommonProperty(task);
   return task;
   return task;
 }
 }
@@ -99,14 +95,14 @@ SharedHandle<DHTTask>
 DHTTaskFactoryImpl::createPeerAnnounceTask(const unsigned char* infoHash)
 DHTTaskFactoryImpl::createPeerAnnounceTask(const unsigned char* infoHash)
 {
 {
   // TODO
   // TODO
-  return 0;
+  return SharedHandle<DHTTask>();
 }
 }
 
 
 SharedHandle<DHTTask>
 SharedHandle<DHTTask>
 DHTTaskFactoryImpl::createReplaceNodeTask(const SharedHandle<DHTBucket>& bucket,
 DHTTaskFactoryImpl::createReplaceNodeTask(const SharedHandle<DHTBucket>& bucket,
 					  const SharedHandle<DHTNode>& newNode)
 					  const SharedHandle<DHTNode>& newNode)
 {
 {
-  SharedHandle<DHTReplaceNodeTask> task = new DHTReplaceNodeTask(bucket, newNode);
+  SharedHandle<DHTReplaceNodeTask> task(new DHTReplaceNodeTask(bucket, newNode));
   setCommonProperty(task);
   setCommonProperty(task);
   return task;
   return task;
 }
 }

+ 2 - 4
src/DHTTaskQueueImpl.cc

@@ -37,9 +37,7 @@
 
 
 namespace aria2 {
 namespace aria2 {
 
 
-DHTTaskQueueImpl::DHTTaskQueueImpl():_periodicTask1(0),
-				     _periodicTask2(0),
-				     _immediateTask(0) {}
+DHTTaskQueueImpl::DHTTaskQueueImpl() {}
 
 
 DHTTaskQueueImpl::~DHTTaskQueueImpl() {}
 DHTTaskQueueImpl::~DHTTaskQueueImpl() {}
 
 
@@ -48,7 +46,7 @@ void DHTTaskQueueImpl::executeTask(SharedHandle<DHTTask>& task,
 {
 {
   while(1) {
   while(1) {
     if(task.isNull() || task->finished()) {
     if(task.isNull() || task->finished()) {
-      task = 0;
+      task.reset();
       if(taskQueue.empty()) {
       if(taskQueue.empty()) {
 	break;
 	break;
       }
       }

+ 1 - 3
src/DHTTokenUpdateCommand.cc

@@ -45,9 +45,7 @@ namespace aria2 {
 DHTTokenUpdateCommand::DHTTokenUpdateCommand(int32_t cuid,
 DHTTokenUpdateCommand::DHTTokenUpdateCommand(int32_t cuid,
 					     DownloadEngine* e,
 					     DownloadEngine* e,
 					     time_t interval):
 					     time_t interval):
-  TimeBasedCommand(cuid, e, interval),
-  _tokenTracker(0)
-{}
+  TimeBasedCommand(cuid, e, interval) {}
 
 
 DHTTokenUpdateCommand::~DHTTokenUpdateCommand() {}
 DHTTokenUpdateCommand::~DHTTokenUpdateCommand() {}
 
 

+ 1 - 1
src/DHTUnknownMessage.cc

@@ -42,7 +42,7 @@ namespace aria2 {
 DHTUnknownMessage::DHTUnknownMessage(const SharedHandle<DHTNode>& localNode,
 DHTUnknownMessage::DHTUnknownMessage(const SharedHandle<DHTNode>& localNode,
 				     const unsigned char* data, size_t length,
 				     const unsigned char* data, size_t length,
 				     const std::string& ipaddr, uint16_t port):
 				     const std::string& ipaddr, uint16_t port):
-  DHTMessage(localNode, 0),
+  DHTMessage(localNode, SharedHandle<DHTNode>()),
   _length(length),
   _length(length),
   _ipaddr(ipaddr),
   _ipaddr(ipaddr),
   _port(port)
   _port(port)

+ 2 - 2
src/DefaultBtContext.cc

@@ -262,7 +262,7 @@ void DefaultBtContext::loadFromMemory(const unsigned char* content,
 				      size_t length,
 				      size_t length,
 				      const std::string& defaultName)
 				      const std::string& defaultName)
 {
 {
-  SharedHandle<MetaEntry> rootEntry = MetaFileUtil::bdecoding(content, length);
+  SharedHandle<MetaEntry> rootEntry(MetaFileUtil::bdecoding(content, length));
   const Dictionary* rootDic = dynamic_cast<const Dictionary*>(rootEntry.get());
   const Dictionary* rootDic = dynamic_cast<const Dictionary*>(rootEntry.get());
   if(!rootDic) {
   if(!rootDic) {
     throw new DlAbortEx("torrent file does not contain a root dictionary .");
     throw new DlAbortEx("torrent file does not contain a root dictionary .");
@@ -271,7 +271,7 @@ void DefaultBtContext::loadFromMemory(const unsigned char* content,
 }
 }
 
 
 void DefaultBtContext::load(const std::string& torrentFile) {
 void DefaultBtContext::load(const std::string& torrentFile) {
-  SharedHandle<MetaEntry> rootEntry = MetaFileUtil::parseMetaFile(torrentFile);
+  SharedHandle<MetaEntry> rootEntry(MetaFileUtil::parseMetaFile(torrentFile));
   const Dictionary* rootDic = dynamic_cast<const Dictionary*>(rootEntry.get());
   const Dictionary* rootDic = dynamic_cast<const Dictionary*>(rootEntry.get());
   if(!rootDic) {
   if(!rootDic) {
     throw new DlAbortEx("torrent file does not contain a root dictionary .");
     throw new DlAbortEx("torrent file does not contain a root dictionary .");

+ 9 - 9
src/DefaultBtInteractive.cc

@@ -83,7 +83,7 @@ DefaultBtInteractive::~DefaultBtInteractive() {}
 
 
 
 
 void DefaultBtInteractive::initiateHandshake() {
 void DefaultBtInteractive::initiateHandshake() {
-  SharedHandle<BtHandshakeMessage> message =
+  SharedHandle<BtMessage> message =
     messageFactory->createHandshakeMessage(btContext->getInfoHash(),
     messageFactory->createHandshakeMessage(btContext->getInfoHash(),
 					   btContext->getPeerId());
 					   btContext->getPeerId());
   dispatcher->addMessageToQueue(message);
   dispatcher->addMessageToQueue(message);
@@ -94,7 +94,7 @@ BtMessageHandle DefaultBtInteractive::receiveHandshake(bool quickReply) {
   SharedHandle<BtHandshakeMessage> message =
   SharedHandle<BtHandshakeMessage> message =
     btMessageReceiver->receiveHandshake(quickReply);
     btMessageReceiver->receiveHandshake(quickReply);
   if(message.isNull()) {
   if(message.isNull()) {
-    return 0;
+    return SharedHandle<BtMessage>();
   }
   }
   peer->setPeerId(message->getPeerId());
   peer->setPeerId(message->getPeerId());
     
     
@@ -104,8 +104,8 @@ BtMessageHandle DefaultBtInteractive::receiveHandshake(bool quickReply) {
   }
   }
   if(message->isExtendedMessagingEnabled()) {
   if(message->isExtendedMessagingEnabled()) {
     peer->setExtendedMessagingEnabled(true);
     peer->setExtendedMessagingEnabled(true);
-    DefaultExtensionMessageFactoryHandle factory = 
-      new DefaultExtensionMessageFactory(btContext, peer);
+    DefaultExtensionMessageFactoryHandle factory
+      (new DefaultExtensionMessageFactory(btContext, peer));
     if(!_utPexEnabled) {
     if(!_utPexEnabled) {
       factory->removeExtension("ut_pex");
       factory->removeExtension("ut_pex");
     }
     }
@@ -150,12 +150,12 @@ void DefaultBtInteractive::addPortMessageToQueue()
 
 
 void DefaultBtInteractive::addHandshakeExtendedMessageToQueue()
 void DefaultBtInteractive::addHandshakeExtendedMessageToQueue()
 {
 {
-  HandshakeExtensionMessageHandle m = new HandshakeExtensionMessage();
+  HandshakeExtensionMessageHandle m(new HandshakeExtensionMessage());
   m->setClientVersion("aria2");
   m->setClientVersion("aria2");
   m->setTCPPort(btRuntime->getListenPort());
   m->setTCPPort(btRuntime->getListenPort());
   m->setExtensions(EXTENSION_MESSAGE_FACTORY(btContext, peer)->getExtensions());
   m->setExtensions(EXTENSION_MESSAGE_FACTORY(btContext, peer)->getExtensions());
   
   
-  BtExtendedMessageHandle msg = messageFactory->createBtExtendedMessage(m);
+  SharedHandle<BtMessage> msg = messageFactory->createBtExtendedMessage(m);
   dispatcher->addMessageToQueue(msg);
   dispatcher->addMessageToQueue(msg);
 }
 }
 
 
@@ -386,8 +386,8 @@ void DefaultBtInteractive::addPeerExchangeMessage()
 {
 {
   time_t interval = 60;
   time_t interval = 60;
   if(_pexCheckPoint.elapsed(interval)) {
   if(_pexCheckPoint.elapsed(interval)) {
-    UTPexExtensionMessageHandle m =
-      new UTPexExtensionMessage(peer->getExtensionMessageID("ut_pex"));
+    UTPexExtensionMessageHandle m
+      (new UTPexExtensionMessage(peer->getExtensionMessageID("ut_pex")));
     const Peers& peers = peerStorage->getPeers();
     const Peers& peers = peerStorage->getPeers();
     {
     {
       size_t max = 30;
       size_t max = 30;
@@ -413,7 +413,7 @@ void DefaultBtInteractive::addPeerExchangeMessage()
 	}
 	}
       }
       }
     }
     }
-    BtExtendedMessageHandle msg = messageFactory->createBtExtendedMessage(m);
+    BtMessageHandle msg = messageFactory->createBtExtendedMessage(m);
     dispatcher->addMessageToQueue(msg);
     dispatcher->addMessageToQueue(msg);
     _pexCheckPoint.reset();
     _pexCheckPoint.reset();
   }
   }

+ 6 - 10
src/DefaultBtMessageDispatcher.cc

@@ -56,10 +56,6 @@ namespace aria2 {
 
 
 DefaultBtMessageDispatcher::DefaultBtMessageDispatcher():
 DefaultBtMessageDispatcher::DefaultBtMessageDispatcher():
   cuid(0),
   cuid(0),
-  btContext(0),
-  peerStorage(0),
-  pieceStorage(0),
-  peer(0),
   maxUploadSpeedLimit(0),
   maxUploadSpeedLimit(0),
   requestTimeout(0),
   requestTimeout(0),
   logger(LogFactory::getInstance()) {}
   logger(LogFactory::getInstance()) {}
@@ -108,8 +104,8 @@ void DefaultBtMessageDispatcher::sendMessages() {
 // Cancel sending piece message to peer.
 // Cancel sending piece message to peer.
 void DefaultBtMessageDispatcher::doCancelSendingPieceAction(size_t index, uint32_t begin, size_t length)
 void DefaultBtMessageDispatcher::doCancelSendingPieceAction(size_t index, uint32_t begin, size_t length)
 {
 {
-  BtCancelSendingPieceEventHandle event =
-    new BtCancelSendingPieceEvent(index, begin, length);
+  BtCancelSendingPieceEventHandle event
+    (new BtCancelSendingPieceEvent(index, begin, length));
 
 
   BtMessages tempQueue = messageQueue;
   BtMessages tempQueue = messageQueue;
   for(BtMessages::iterator itr = tempQueue.begin(); itr != tempQueue.end(); itr++) {
   for(BtMessages::iterator itr = tempQueue.begin(); itr != tempQueue.end(); itr++) {
@@ -140,8 +136,8 @@ void DefaultBtMessageDispatcher::doAbortOutstandingRequestAction(const PieceHand
     }
     }
   }
   }
 
 
-  BtAbortOutstandingRequestEventHandle event =
-    new BtAbortOutstandingRequestEvent(piece);
+  BtAbortOutstandingRequestEventHandle event
+    (new BtAbortOutstandingRequestEvent(piece));
 
 
   BtMessages tempQueue = messageQueue;
   BtMessages tempQueue = messageQueue;
   for(BtMessages::iterator itr = tempQueue.begin(); itr != tempQueue.end(); ++itr) {
   for(BtMessages::iterator itr = tempQueue.begin(); itr != tempQueue.end(); ++itr) {
@@ -168,7 +164,7 @@ void DefaultBtMessageDispatcher::doChokedAction()
     }
     }
   }
   }
 
 
-  BtChokedEventHandle event = new BtChokedEvent();
+  BtChokedEventHandle event(new BtChokedEvent());
 
 
   BtMessages tempQueue = messageQueue;
   BtMessages tempQueue = messageQueue;
   for(BtMessages::iterator itr = tempQueue.begin(); itr != tempQueue.end(); ++itr) {
   for(BtMessages::iterator itr = tempQueue.begin(); itr != tempQueue.end(); ++itr) {
@@ -179,7 +175,7 @@ void DefaultBtMessageDispatcher::doChokedAction()
 // localhost dispatched choke message to the peer.
 // localhost dispatched choke message to the peer.
 void DefaultBtMessageDispatcher::doChokingAction()
 void DefaultBtMessageDispatcher::doChokingAction()
 {
 {
-  BtChokingEventHandle event = new BtChokingEvent();
+  BtChokingEventHandle event(new BtChokingEvent());
 
 
   BtMessages tempQueue = messageQueue;
   BtMessages tempQueue = messageQueue;
   for(BtMessages::iterator itr = tempQueue.begin(); itr != tempQueue.end(); ++itr) {
   for(BtMessages::iterator itr = tempQueue.begin(); itr != tempQueue.end(); ++itr) {

+ 92 - 83
src/DefaultBtMessageFactory.cc

@@ -72,9 +72,6 @@
 namespace aria2 {
 namespace aria2 {
 
 
 DefaultBtMessageFactory::DefaultBtMessageFactory():cuid(0),
 DefaultBtMessageFactory::DefaultBtMessageFactory():cuid(0),
-						   btContext(0),
-						   pieceStorage(0),
-						   peer(0),
 						   _dhtEnabled(false)
 						   _dhtEnabled(false)
 {}
 {}
 
 
@@ -83,10 +80,10 @@ DefaultBtMessageFactory::~DefaultBtMessageFactory() {}
 BtMessageHandle
 BtMessageHandle
 DefaultBtMessageFactory::createBtMessage(const unsigned char* data, size_t dataLength)
 DefaultBtMessageFactory::createBtMessage(const unsigned char* data, size_t dataLength)
 {
 {
-  AbstractBtMessageHandle msg(0);
+  AbstractBtMessageHandle msg;
   if(dataLength == 0) {
   if(dataLength == 0) {
     // keep-alive
     // keep-alive
-    msg = new BtKeepAliveMessage();
+    msg.reset(new BtKeepAliveMessage());
   } else {
   } else {
     uint8_t id = PeerMessageUtil::getId(data);
     uint8_t id = PeerMessageUtil::getId(data);
     switch(id) {
     switch(id) {
@@ -104,40 +101,48 @@ DefaultBtMessageFactory::createBtMessage(const unsigned char* data, size_t dataL
       break;
       break;
     case BtHaveMessage::ID:
     case BtHaveMessage::ID:
       msg = BtHaveMessage::create(data, dataLength);
       msg = BtHaveMessage::create(data, dataLength);
-      msg->setBtMessageValidator(new BtHaveMessageValidator((BtHaveMessage*)msg.get(),
-							    btContext->getNumPieces()));
+      {
+	SharedHandle<BtMessageValidator> v
+	  (new BtHaveMessageValidator((BtHaveMessage*)msg.get(),
+				      btContext->getNumPieces()));
+	msg->setBtMessageValidator(v);
+      }
       break;
       break;
     case BtBitfieldMessage::ID:
     case BtBitfieldMessage::ID:
       msg = BtBitfieldMessage::create(data, dataLength);
       msg = BtBitfieldMessage::create(data, dataLength);
-      msg->setBtMessageValidator(new BtBitfieldMessageValidator((BtBitfieldMessage*)msg.get(),
-								btContext->getNumPieces()));
+      {
+	SharedHandle<BtMessageValidator> v
+	  (new BtBitfieldMessageValidator((BtBitfieldMessage*)msg.get(),
+					  btContext->getNumPieces()));
+	msg->setBtMessageValidator(v);
+      }
       break;
       break;
     case BtRequestMessage::ID: {
     case BtRequestMessage::ID: {
       BtRequestMessageHandle temp = BtRequestMessage::create(data, dataLength);
       BtRequestMessageHandle temp = BtRequestMessage::create(data, dataLength);
-      BtMessageValidatorHandle validator =
-	new BtRequestMessageValidator(temp.get(),
+      BtMessageValidatorHandle validator
+	(new BtRequestMessageValidator(temp.get(),
 				      btContext->getNumPieces(),
 				      btContext->getNumPieces(),
-				      pieceStorage->getPieceLength(temp->getIndex()));
+				       pieceStorage->getPieceLength(temp->getIndex())));
       temp->setBtMessageValidator(validator);
       temp->setBtMessageValidator(validator);
       msg = temp;
       msg = temp;
       break;
       break;
     }
     }
     case BtCancelMessage::ID: {
     case BtCancelMessage::ID: {
       BtCancelMessageHandle temp = BtCancelMessage::create(data, dataLength);
       BtCancelMessageHandle temp = BtCancelMessage::create(data, dataLength);
-      BtMessageValidatorHandle validator =
-	new BtCancelMessageValidator(temp.get(),
+      BtMessageValidatorHandle validator
+	(new BtCancelMessageValidator(temp.get(),
 				     btContext->getNumPieces(),
 				     btContext->getNumPieces(),
-				     pieceStorage->getPieceLength(temp->getIndex()));
+				      pieceStorage->getPieceLength(temp->getIndex())));
       temp->setBtMessageValidator(validator);
       temp->setBtMessageValidator(validator);
       msg = temp;
       msg = temp;
       break;
       break;
     }
     }
     case BtPieceMessage::ID: {
     case BtPieceMessage::ID: {
       BtPieceMessageHandle temp = BtPieceMessage::create(data, dataLength);
       BtPieceMessageHandle temp = BtPieceMessage::create(data, dataLength);
-      BtMessageValidatorHandle validator =
-	new BtPieceMessageValidator(temp.get(),
-				    btContext->getNumPieces(),
-				    pieceStorage->getPieceLength(temp->getIndex()));
+      BtMessageValidatorHandle validator
+	(new BtPieceMessageValidator(temp.get(),
+				     btContext->getNumPieces(),
+				     pieceStorage->getPieceLength(temp->getIndex())));
       temp->setBtMessageValidator(validator);
       temp->setBtMessageValidator(validator);
       msg = temp;
       msg = temp;
       break;
       break;
@@ -150,28 +155,28 @@ DefaultBtMessageFactory::createBtMessage(const unsigned char* data, size_t dataL
       break;
       break;
     case BtRejectMessage::ID: {
     case BtRejectMessage::ID: {
       BtRejectMessageHandle temp = BtRejectMessage::create(data, dataLength);
       BtRejectMessageHandle temp = BtRejectMessage::create(data, dataLength);
-      BtMessageValidatorHandle validator =
-	new BtRejectMessageValidator(temp.get(),
-				     btContext->getNumPieces(),
-				     pieceStorage->getPieceLength(temp->getIndex()));
+      BtMessageValidatorHandle validator
+	(new BtRejectMessageValidator(temp.get(),
+				      btContext->getNumPieces(),
+				      pieceStorage->getPieceLength(temp->getIndex())));
       temp->setBtMessageValidator(validator);
       temp->setBtMessageValidator(validator);
       msg = temp;
       msg = temp;
       break;
       break;
     }
     }
     case BtSuggestPieceMessage::ID: {
     case BtSuggestPieceMessage::ID: {
       BtSuggestPieceMessageHandle temp = BtSuggestPieceMessage::create(data, dataLength);
       BtSuggestPieceMessageHandle temp = BtSuggestPieceMessage::create(data, dataLength);
-      BtMessageValidatorHandle validator =
-	new BtSuggestPieceMessageValidator(temp.get(),
-					   btContext->getNumPieces());
+      BtMessageValidatorHandle validator
+	(new BtSuggestPieceMessageValidator(temp.get(),
+					    btContext->getNumPieces()));
       temp->setBtMessageValidator(validator);
       temp->setBtMessageValidator(validator);
       msg = temp;
       msg = temp;
       break;
       break;
     }
     }
     case BtAllowedFastMessage::ID: {
     case BtAllowedFastMessage::ID: {
       BtAllowedFastMessageHandle temp = BtAllowedFastMessage::create(data, dataLength);
       BtAllowedFastMessageHandle temp = BtAllowedFastMessage::create(data, dataLength);
-      BtMessageValidatorHandle validator =
-	new BtAllowedFastMessageValidator(temp.get(),
-					  btContext->getNumPieces());
+      BtMessageValidatorHandle validator
+	(new BtAllowedFastMessageValidator(temp.get(),
+					  btContext->getNumPieces()));
       temp->setBtMessageValidator(validator);
       temp->setBtMessageValidator(validator);
       msg = temp;
       msg = temp;
       break;
       break;
@@ -207,30 +212,30 @@ void DefaultBtMessageFactory::setCommonProperty(const AbstractBtMessageHandle& m
   msg->setBtContext(btContext);
   msg->setBtContext(btContext);
   msg->setBtMessageDispatcher(dispatcher);
   msg->setBtMessageDispatcher(dispatcher);
   msg->setBtRequestFactory(requestFactory);
   msg->setBtRequestFactory(requestFactory);
-  msg->setBtMessageFactory(this);
+  msg->setBtMessageFactory(WeakHandle<BtMessageFactory>(this));
   msg->setPeerConnection(peerConnection);
   msg->setPeerConnection(peerConnection);
 }
 }
 
 
-BtMessageHandle
+SharedHandle<BtHandshakeMessage>
 DefaultBtMessageFactory::createHandshakeMessage(const unsigned char* data, size_t dataLength)
 DefaultBtMessageFactory::createHandshakeMessage(const unsigned char* data, size_t dataLength)
 {
 {
   SharedHandle<BtHandshakeMessage> msg = BtHandshakeMessage::create(data, dataLength);
   SharedHandle<BtHandshakeMessage> msg = BtHandshakeMessage::create(data, dataLength);
-  BtMessageValidatorHandle validator =
-    new BtHandshakeMessageValidator(msg.get(),
-				    btContext->getInfoHash());
+  BtMessageValidatorHandle validator
+    (new BtHandshakeMessageValidator(msg.get(),
+				     btContext->getInfoHash()));
   msg->setBtMessageValidator(validator);
   msg->setBtMessageValidator(validator);
   setCommonProperty(msg);
   setCommonProperty(msg);
   return msg;
   return msg;
 }
 }
 
 
-BtMessageHandle
+SharedHandle<BtHandshakeMessage>
 DefaultBtMessageFactory::createHandshakeMessage(const unsigned char* infoHash,
 DefaultBtMessageFactory::createHandshakeMessage(const unsigned char* infoHash,
 						const unsigned char* peerId)
 						const unsigned char* peerId)
 {
 {
-  SharedHandle<BtHandshakeMessage> msg = new BtHandshakeMessage(infoHash, peerId);
-  BtMessageValidatorHandle validator =
-    new BtHandshakeMessageValidator(msg.get(),
-				    btContext->getInfoHash());
+  SharedHandle<BtHandshakeMessage> msg(new BtHandshakeMessage(infoHash, peerId));
+  BtMessageValidatorHandle validator
+    (new BtHandshakeMessageValidator(msg.get(),
+				     btContext->getInfoHash()));
   msg->setBtMessageValidator(validator);
   msg->setBtMessageValidator(validator);
   msg->setDHTEnabled(_dhtEnabled);
   msg->setDHTEnabled(_dhtEnabled);
   setCommonProperty(msg);
   setCommonProperty(msg);
@@ -240,15 +245,15 @@ DefaultBtMessageFactory::createHandshakeMessage(const unsigned char* infoHash,
 BtMessageHandle
 BtMessageHandle
 DefaultBtMessageFactory::createRequestMessage(const PieceHandle& piece, size_t blockIndex)
 DefaultBtMessageFactory::createRequestMessage(const PieceHandle& piece, size_t blockIndex)
 {
 {
-  BtRequestMessageHandle msg =
-    new BtRequestMessage(piece->getIndex(),
-			 blockIndex*piece->getBlockLength(),
-			 piece->getBlockLength(blockIndex),
-			 blockIndex);
-  BtMessageValidatorHandle validator =
-    new BtRequestMessageValidator(msg.get(),
-				  btContext->getNumPieces(),
-				  pieceStorage->getPieceLength(msg->getIndex()));
+  BtRequestMessageHandle msg
+    (new BtRequestMessage(piece->getIndex(),
+			  blockIndex*piece->getBlockLength(),
+			  piece->getBlockLength(blockIndex),
+			  blockIndex));
+  BtMessageValidatorHandle validator
+    (new BtRequestMessageValidator(msg.get(),
+				   btContext->getNumPieces(),
+				   pieceStorage->getPieceLength(msg->getIndex())));
   msg->setBtMessageValidator(validator);
   msg->setBtMessageValidator(validator);
   setCommonProperty(msg);
   setCommonProperty(msg);
   return msg;
   return msg;
@@ -257,11 +262,11 @@ DefaultBtMessageFactory::createRequestMessage(const PieceHandle& piece, size_t b
 BtMessageHandle
 BtMessageHandle
 DefaultBtMessageFactory::createCancelMessage(size_t index, uint32_t begin, size_t length)
 DefaultBtMessageFactory::createCancelMessage(size_t index, uint32_t begin, size_t length)
 {
 {
-  BtCancelMessageHandle msg = new BtCancelMessage(index, begin, length);
-  BtMessageValidatorHandle validator =
-    new BtCancelMessageValidator(msg.get(),
-				 btContext->getNumPieces(),
-				 pieceStorage->getPieceLength(index));
+  BtCancelMessageHandle msg(new BtCancelMessage(index, begin, length));
+  BtMessageValidatorHandle validator
+    (new BtCancelMessageValidator(msg.get(),
+				  btContext->getNumPieces(),
+				  pieceStorage->getPieceLength(index)));
   msg->setBtMessageValidator(validator);
   msg->setBtMessageValidator(validator);
   setCommonProperty(msg);
   setCommonProperty(msg);
   return msg;
   return msg;
@@ -270,11 +275,11 @@ DefaultBtMessageFactory::createCancelMessage(size_t index, uint32_t begin, size_
 BtMessageHandle
 BtMessageHandle
 DefaultBtMessageFactory::createPieceMessage(size_t index, uint32_t begin, size_t length)
 DefaultBtMessageFactory::createPieceMessage(size_t index, uint32_t begin, size_t length)
 {
 {
-  BtPieceMessageHandle msg = new BtPieceMessage(index, begin, length);
-  BtMessageValidatorHandle validator =
-    new BtPieceMessageValidator(msg.get(),
+  BtPieceMessageHandle msg(new BtPieceMessage(index, begin, length));
+  BtMessageValidatorHandle validator
+    (new BtPieceMessageValidator(msg.get(),
 				btContext->getNumPieces(),
 				btContext->getNumPieces(),
-				pieceStorage->getPieceLength(index));
+				pieceStorage->getPieceLength(index)));
   msg->setBtMessageValidator(validator);
   msg->setBtMessageValidator(validator);
   setCommonProperty(msg);
   setCommonProperty(msg);
   return msg;
   return msg;
@@ -283,9 +288,11 @@ DefaultBtMessageFactory::createPieceMessage(size_t index, uint32_t begin, size_t
 BtMessageHandle
 BtMessageHandle
 DefaultBtMessageFactory::createHaveMessage(size_t index)
 DefaultBtMessageFactory::createHaveMessage(size_t index)
 {
 {
-  BtHaveMessageHandle msg = new BtHaveMessage(index);
-  msg->setBtMessageValidator(new BtHaveMessageValidator(msg.get(),
-							btContext->getNumPieces()));
+  BtHaveMessageHandle msg(new BtHaveMessage(index));
+  SharedHandle<BtMessageValidator> v
+    (new BtHaveMessageValidator(msg.get(),
+				btContext->getNumPieces()));
+  msg->setBtMessageValidator(v);
   setCommonProperty(msg);
   setCommonProperty(msg);
   return msg;
   return msg;
 }
 }
@@ -293,7 +300,7 @@ DefaultBtMessageFactory::createHaveMessage(size_t index)
 BtMessageHandle
 BtMessageHandle
 DefaultBtMessageFactory::createChokeMessage()
 DefaultBtMessageFactory::createChokeMessage()
 {
 {
-  BtChokeMessageHandle msg = new BtChokeMessage();
+  BtChokeMessageHandle msg(new BtChokeMessage());
   setCommonProperty(msg);
   setCommonProperty(msg);
   return msg;
   return msg;
 }
 }
@@ -301,7 +308,7 @@ DefaultBtMessageFactory::createChokeMessage()
 BtMessageHandle
 BtMessageHandle
 DefaultBtMessageFactory::createUnchokeMessage()
 DefaultBtMessageFactory::createUnchokeMessage()
 {
 {
-  BtUnchokeMessageHandle msg = new BtUnchokeMessage();
+  BtUnchokeMessageHandle msg(new BtUnchokeMessage());
   setCommonProperty(msg);
   setCommonProperty(msg);
   return msg;
   return msg;
 }
 }
@@ -309,7 +316,7 @@ DefaultBtMessageFactory::createUnchokeMessage()
 BtMessageHandle
 BtMessageHandle
 DefaultBtMessageFactory::createInterestedMessage()
 DefaultBtMessageFactory::createInterestedMessage()
 {
 {
-  BtInterestedMessageHandle msg = new BtInterestedMessage();
+  BtInterestedMessageHandle msg(new BtInterestedMessage());
   setCommonProperty(msg);
   setCommonProperty(msg);
   return msg;
   return msg;
 }
 }
@@ -317,7 +324,7 @@ DefaultBtMessageFactory::createInterestedMessage()
 BtMessageHandle
 BtMessageHandle
 DefaultBtMessageFactory::createNotInterestedMessage()
 DefaultBtMessageFactory::createNotInterestedMessage()
 {
 {
-  BtNotInterestedMessageHandle msg = new BtNotInterestedMessage();
+  BtNotInterestedMessageHandle msg(new BtNotInterestedMessage());
   setCommonProperty(msg);
   setCommonProperty(msg);
   return msg;
   return msg;
 }
 }
@@ -325,11 +332,13 @@ DefaultBtMessageFactory::createNotInterestedMessage()
 BtMessageHandle
 BtMessageHandle
 DefaultBtMessageFactory::createBitfieldMessage()
 DefaultBtMessageFactory::createBitfieldMessage()
 {
 {
-  BtBitfieldMessageHandle msg =
-    new BtBitfieldMessage(pieceStorage->getBitfield(),
-			  pieceStorage->getBitfieldLength());
-  msg->setBtMessageValidator(new BtBitfieldMessageValidator(msg.get(),
-							    btContext->getNumPieces()));
+  BtBitfieldMessageHandle msg
+    (new BtBitfieldMessage(pieceStorage->getBitfield(),
+			   pieceStorage->getBitfieldLength()));
+  SharedHandle<BtMessageValidator> v
+    (new BtBitfieldMessageValidator(msg.get(),
+				    btContext->getNumPieces()));
+  msg->setBtMessageValidator(v);
   setCommonProperty(msg);
   setCommonProperty(msg);
   return msg;
   return msg;
 }
 }
@@ -337,7 +346,7 @@ DefaultBtMessageFactory::createBitfieldMessage()
 BtMessageHandle
 BtMessageHandle
 DefaultBtMessageFactory::createKeepAliveMessage()
 DefaultBtMessageFactory::createKeepAliveMessage()
 {
 {
-  BtKeepAliveMessageHandle msg = new BtKeepAliveMessage();
+  BtKeepAliveMessageHandle msg(new BtKeepAliveMessage());
   setCommonProperty(msg);
   setCommonProperty(msg);
   return msg;
   return msg;
 } 
 } 
@@ -345,7 +354,7 @@ DefaultBtMessageFactory::createKeepAliveMessage()
 BtMessageHandle
 BtMessageHandle
 DefaultBtMessageFactory::createHaveAllMessage()
 DefaultBtMessageFactory::createHaveAllMessage()
 {
 {
-  BtHaveAllMessageHandle msg = new BtHaveAllMessage();
+  BtHaveAllMessageHandle msg(new BtHaveAllMessage());
   setCommonProperty(msg);
   setCommonProperty(msg);
   return msg;
   return msg;
 }
 }
@@ -353,7 +362,7 @@ DefaultBtMessageFactory::createHaveAllMessage()
 BtMessageHandle
 BtMessageHandle
 DefaultBtMessageFactory::createHaveNoneMessage()
 DefaultBtMessageFactory::createHaveNoneMessage()
 {
 {
-  BtHaveNoneMessageHandle msg = new BtHaveNoneMessage();
+  BtHaveNoneMessageHandle msg(new BtHaveNoneMessage());
   setCommonProperty(msg);
   setCommonProperty(msg);
   return msg;
   return msg;
 }
 }
@@ -361,11 +370,11 @@ DefaultBtMessageFactory::createHaveNoneMessage()
 BtMessageHandle
 BtMessageHandle
 DefaultBtMessageFactory::createRejectMessage(size_t index, uint32_t begin, size_t length)
 DefaultBtMessageFactory::createRejectMessage(size_t index, uint32_t begin, size_t length)
 {
 {
-  BtRejectMessageHandle msg = new BtRejectMessage(index, begin, length);
-  BtMessageValidatorHandle validator =
-    new BtRejectMessageValidator(msg.get(),
-				 btContext->getNumPieces(),
-				 pieceStorage->getPieceLength(index));
+  BtRejectMessageHandle msg(new BtRejectMessage(index, begin, length));
+  BtMessageValidatorHandle validator
+    (new BtRejectMessageValidator(msg.get(),
+				  btContext->getNumPieces(),
+				  pieceStorage->getPieceLength(index)));
   msg->setBtMessageValidator(validator);
   msg->setBtMessageValidator(validator);
   setCommonProperty(msg);
   setCommonProperty(msg);
   return msg;
   return msg;
@@ -374,10 +383,10 @@ DefaultBtMessageFactory::createRejectMessage(size_t index, uint32_t begin, size_
 BtMessageHandle
 BtMessageHandle
 DefaultBtMessageFactory::createAllowedFastMessage(size_t index)
 DefaultBtMessageFactory::createAllowedFastMessage(size_t index)
 {
 {
-  BtAllowedFastMessageHandle msg = new BtAllowedFastMessage(index);
-  BtMessageValidatorHandle validator =
-    new BtAllowedFastMessageValidator(msg.get(),
-				      btContext->getNumPieces());
+  BtAllowedFastMessageHandle msg(new BtAllowedFastMessage(index));
+  BtMessageValidatorHandle validator
+    (new BtAllowedFastMessageValidator(msg.get(),
+				       btContext->getNumPieces()));
   msg->setBtMessageValidator(validator);
   msg->setBtMessageValidator(validator);
   setCommonProperty(msg);
   setCommonProperty(msg);
   return msg;
   return msg;
@@ -386,7 +395,7 @@ DefaultBtMessageFactory::createAllowedFastMessage(size_t index)
 BtMessageHandle
 BtMessageHandle
 DefaultBtMessageFactory::createPortMessage(uint16_t port)
 DefaultBtMessageFactory::createPortMessage(uint16_t port)
 {
 {
-  SharedHandle<BtPortMessage> msg = new BtPortMessage(port);
+  SharedHandle<BtPortMessage> msg(new BtPortMessage(port));
   setCommonProperty(msg);
   setCommonProperty(msg);
   return msg;
   return msg;
 }
 }
@@ -394,7 +403,7 @@ DefaultBtMessageFactory::createPortMessage(uint16_t port)
 BtMessageHandle
 BtMessageHandle
 DefaultBtMessageFactory::createBtExtendedMessage(const ExtensionMessageHandle& msg)
 DefaultBtMessageFactory::createBtExtendedMessage(const ExtensionMessageHandle& msg)
 {
 {
-  BtExtendedMessageHandle m = new BtExtendedMessage(msg);
+  BtExtendedMessageHandle m(new BtExtendedMessage(msg));
   setCommonProperty(m);
   setCommonProperty(m);
   return m;
   return m;
 }
 }

+ 2 - 2
src/DefaultBtMessageFactory.h

@@ -83,10 +83,10 @@ public:
   virtual SharedHandle<BtMessage>
   virtual SharedHandle<BtMessage>
   createBtMessage(const unsigned char* msg, size_t msgLength);
   createBtMessage(const unsigned char* msg, size_t msgLength);
 
 
-  virtual SharedHandle<BtMessage>
+  virtual SharedHandle<BtHandshakeMessage>
   createHandshakeMessage(const unsigned char* msg, size_t msgLength);
   createHandshakeMessage(const unsigned char* msg, size_t msgLength);
 
 
-  virtual SharedHandle<BtMessage>
+  virtual SharedHandle<BtHandshakeMessage>
   createHandshakeMessage(const unsigned char* infoHash,
   createHandshakeMessage(const unsigned char* infoHash,
 			 const unsigned char* peerId);
 			 const unsigned char* peerId);
 
 

+ 10 - 10
src/DefaultBtMessageReceiver.cc

@@ -50,10 +50,6 @@ namespace aria2 {
 DefaultBtMessageReceiver::DefaultBtMessageReceiver():
 DefaultBtMessageReceiver::DefaultBtMessageReceiver():
   cuid(0),
   cuid(0),
   handshakeSent(false),
   handshakeSent(false),
-  btContext(0),
-  peer(0),
-  peerConnection(0),
-  dispatcher(0),
   logger(LogFactory::getInstance())
   logger(LogFactory::getInstance())
 {
 {
   logger->debug("DefaultBtMessageReceiver::instantiated");
   logger->debug("DefaultBtMessageReceiver::instantiated");
@@ -64,7 +60,9 @@ DefaultBtMessageReceiver::~DefaultBtMessageReceiver()
   logger->debug("DefaultBtMessageReceiver::deleted");
   logger->debug("DefaultBtMessageReceiver::deleted");
 }
 }
 
 
-BtMessageHandle DefaultBtMessageReceiver::receiveHandshake(bool quickReply) {
+SharedHandle<BtHandshakeMessage>
+DefaultBtMessageReceiver::receiveHandshake(bool quickReply)
+{
   unsigned char data[BtHandshakeMessage::MESSAGE_LENGTH];
   unsigned char data[BtHandshakeMessage::MESSAGE_LENGTH];
   size_t dataLength = BtHandshakeMessage::MESSAGE_LENGTH;
   size_t dataLength = BtHandshakeMessage::MESSAGE_LENGTH;
   bool retval = peerConnection->receiveHandshake(data, dataLength);
   bool retval = peerConnection->receiveHandshake(data, dataLength);
@@ -77,7 +75,7 @@ BtMessageHandle DefaultBtMessageReceiver::receiveHandshake(bool quickReply) {
     }
     }
   }
   }
   if(!retval) {
   if(!retval) {
-    return 0;
+    return SharedHandle<BtHandshakeMessage>();
   }
   }
   SharedHandle<BtHandshakeMessage> msg = messageFactory->createHandshakeMessage(data, dataLength);
   SharedHandle<BtHandshakeMessage> msg = messageFactory->createHandshakeMessage(data, dataLength);
   std::deque<std::string> errors;
   std::deque<std::string> errors;
@@ -85,12 +83,14 @@ BtMessageHandle DefaultBtMessageReceiver::receiveHandshake(bool quickReply) {
   return msg;
   return msg;
 }
 }
 
 
-BtMessageHandle DefaultBtMessageReceiver::receiveAndSendHandshake() {
+SharedHandle<BtHandshakeMessage>
+DefaultBtMessageReceiver::receiveAndSendHandshake()
+{
   return receiveHandshake(true);
   return receiveHandshake(true);
 }
 }
 
 
 void DefaultBtMessageReceiver::sendHandshake() {
 void DefaultBtMessageReceiver::sendHandshake() {
-  SharedHandle<BtHandshakeMessage> msg =
+  SharedHandle<BtMessage> msg =
     messageFactory->createHandshakeMessage(btContext->getInfoHash(),
     messageFactory->createHandshakeMessage(btContext->getInfoHash(),
 					   btContext->getPeerId());
 					   btContext->getPeerId());
   dispatcher->addMessageToQueue(msg);
   dispatcher->addMessageToQueue(msg);
@@ -101,7 +101,7 @@ BtMessageHandle DefaultBtMessageReceiver::receiveMessage() {
   unsigned char data[MAX_PAYLOAD_LEN];
   unsigned char data[MAX_PAYLOAD_LEN];
   size_t dataLength = 0;
   size_t dataLength = 0;
   if(!peerConnection->receiveMessage(data, dataLength)) {
   if(!peerConnection->receiveMessage(data, dataLength)) {
-    return 0;
+    return SharedHandle<BtMessage>();
   }
   }
   BtMessageHandle msg = messageFactory->createBtMessage(data, dataLength);
   BtMessageHandle msg = messageFactory->createBtMessage(data, dataLength);
   std::deque<std::string> errors;
   std::deque<std::string> errors;
@@ -109,7 +109,7 @@ BtMessageHandle DefaultBtMessageReceiver::receiveMessage() {
     return msg;
     return msg;
   } else {
   } else {
     // TODO throw exception here based on errors;
     // TODO throw exception here based on errors;
-    return 0;
+    return SharedHandle<BtMessage>();
   }
   }
 }
 }
 
 

+ 2 - 2
src/DefaultBtMessageReceiver.h

@@ -63,9 +63,9 @@ public:
 
 
   virtual ~DefaultBtMessageReceiver();
   virtual ~DefaultBtMessageReceiver();
 
 
-  virtual SharedHandle<BtMessage> receiveHandshake(bool quickReply = false);
+  virtual SharedHandle<BtHandshakeMessage> receiveHandshake(bool quickReply = false);
 
 
-  virtual SharedHandle<BtMessage> receiveAndSendHandshake();
+  virtual SharedHandle<BtHandshakeMessage> receiveAndSendHandshake();
 
 
   virtual SharedHandle<BtMessage> receiveMessage();
   virtual SharedHandle<BtMessage> receiveMessage();
 
 

+ 6 - 6
src/DefaultBtProgressInfoFile.cc

@@ -72,7 +72,7 @@ DefaultBtProgressInfoFile::~DefaultBtProgressInfoFile() {}
 
 
 bool DefaultBtProgressInfoFile::isTorrentDownload()
 bool DefaultBtProgressInfoFile::isTorrentDownload()
 {
 {
-  return !BtContextHandle(_dctx).isNull();
+  return !dynamic_pointer_cast<BtContext>(_dctx).isNull();
 }
 }
 
 
 void DefaultBtProgressInfoFile::save() {
 void DefaultBtProgressInfoFile::save() {
@@ -98,7 +98,7 @@ void DefaultBtProgressInfoFile::save() {
     if(torrentDownload) {
     if(torrentDownload) {
       // infoHashLength:
       // infoHashLength:
       // length: 32 bits
       // length: 32 bits
-      BtContextHandle btContext = _dctx;
+      BtContextHandle btContext(dynamic_pointer_cast<BtContext>(_dctx));
       uint32_t infoHashLength = btContext->getInfoHashLength();
       uint32_t infoHashLength = btContext->getInfoHashLength();
       o.write(reinterpret_cast<const char*>(&infoHashLength), sizeof(infoHashLength));
       o.write(reinterpret_cast<const char*>(&infoHashLength), sizeof(infoHashLength));
       // infoHash:
       // infoHash:
@@ -119,7 +119,7 @@ void DefaultBtProgressInfoFile::save() {
     // uploadLength: 64 bits
     // uploadLength: 64 bits
     uint64_t uploadLength = 0;
     uint64_t uploadLength = 0;
     if(torrentDownload) {
     if(torrentDownload) {
-      BtContextHandle btContext = _dctx;
+      BtContextHandle btContext(dynamic_pointer_cast<BtContext>(_dctx));
       TransferStat stat = PEER_STORAGE(btContext)->calculateStat();
       TransferStat stat = PEER_STORAGE(btContext)->calculateStat();
       uploadLength = stat.getAllTimeUploadLength();
       uploadLength = stat.getAllTimeUploadLength();
     }
     }
@@ -189,7 +189,7 @@ void DefaultBtProgressInfoFile::load()
     if(infoHashLength > 0) {
     if(infoHashLength > 0) {
       savedInfoHash = new unsigned char[infoHashLength];
       savedInfoHash = new unsigned char[infoHashLength];
       in.read(reinterpret_cast<char*>(savedInfoHash), infoHashLength);
       in.read(reinterpret_cast<char*>(savedInfoHash), infoHashLength);
-      BtContextHandle btContext = _dctx;
+      BtContextHandle btContext(dynamic_pointer_cast<BtContext>(_dctx));
       if(infoHashCheckEnabled &&
       if(infoHashCheckEnabled &&
 	 Util::toHex(savedInfoHash, infoHashLength) != btContext->getInfoHashAsString()) {
 	 Util::toHex(savedInfoHash, infoHashLength) != btContext->getInfoHashAsString()) {
 	throw new DlAbortEx("info hash mismatch. expected: %s, actual: %s",
 	throw new DlAbortEx("info hash mismatch. expected: %s, actual: %s",
@@ -213,7 +213,7 @@ void DefaultBtProgressInfoFile::load()
     uint64_t uploadLength;
     uint64_t uploadLength;
     in.read(reinterpret_cast<char*>(&uploadLength), sizeof(uploadLength));
     in.read(reinterpret_cast<char*>(&uploadLength), sizeof(uploadLength));
     if(isTorrentDownload()) {
     if(isTorrentDownload()) {
-      BT_RUNTIME(BtContextHandle(_dctx))->setUploadLengthAtStartup(uploadLength);
+      BT_RUNTIME(dynamic_pointer_cast<BtContext>(_dctx))->setUploadLengthAtStartup(uploadLength);
     }
     }
 
 
     // TODO implement the conversion mechanism between different piece length.
     // TODO implement the conversion mechanism between different piece length.
@@ -249,7 +249,7 @@ void DefaultBtProgressInfoFile::load()
 	if(!(length <=_dctx->getPieceLength())) {
 	if(!(length <=_dctx->getPieceLength())) {
 	  throw new DlAbortEx("piece length out of range: %u", length);
 	  throw new DlAbortEx("piece length out of range: %u", length);
 	}
 	}
-	PieceHandle piece = new Piece(index, length);
+	PieceHandle piece(new Piece(index, length));
 	uint32_t bitfieldLength;
 	uint32_t bitfieldLength;
 	in.read(reinterpret_cast<char*>(&bitfieldLength), sizeof(bitfieldLength));
 	in.read(reinterpret_cast<char*>(&bitfieldLength), sizeof(bitfieldLength));
 	if(piece->getBitfieldLength() != bitfieldLength) {
 	if(piece->getBitfieldLength() != bitfieldLength) {

+ 1 - 5
src/DefaultBtRequestFactory.cc

@@ -48,11 +48,7 @@
 namespace aria2 {
 namespace aria2 {
 
 
 DefaultBtRequestFactory::DefaultBtRequestFactory():
 DefaultBtRequestFactory::DefaultBtRequestFactory():
-  cuid(0),
-  btContext(0),
-  pieceStorage(0),
-  peer(0),
-  dispatcher(0)
+  cuid(0)
 {
 {
   LogFactory::getInstance()->debug("DefaultBtRequestFactory::instantiated");
   LogFactory::getInstance()->debug("DefaultBtRequestFactory::instantiated");
 }
 }

+ 1 - 1
src/DefaultDiskWriterFactory.cc

@@ -39,7 +39,7 @@ namespace aria2 {
 
 
 SharedHandle<DiskWriter> DefaultDiskWriterFactory::newDiskWriter()
 SharedHandle<DiskWriter> DefaultDiskWriterFactory::newDiskWriter()
 {
 {
-  return new DefaultDiskWriter();
+  return SharedHandle<DiskWriter>(new DefaultDiskWriter());
 }
 }
 
 
 } // namespace aria2
 } // namespace aria2

+ 0 - 2
src/DefaultExtensionMessageFactory.cc

@@ -45,8 +45,6 @@
 namespace aria2 {
 namespace aria2 {
 
 
 DefaultExtensionMessageFactory::DefaultExtensionMessageFactory():
 DefaultExtensionMessageFactory::DefaultExtensionMessageFactory():
-  _btContext(0),
-  _peer(0),
   _logger(LogFactory::getInstance()) {}
   _logger(LogFactory::getInstance()) {}
 
 
 DefaultExtensionMessageFactory::DefaultExtensionMessageFactory(const BtContextHandle& btContext,
 DefaultExtensionMessageFactory::DefaultExtensionMessageFactory(const BtContextHandle& btContext,

+ 1 - 1
src/DefaultPeerListProcessor.cc

@@ -67,7 +67,7 @@ Peers DefaultPeerListProcessor::extractPeer(const MetaEntry* peersEntry) {
     if(!ip || !port || !port->isNumber()) {
     if(!ip || !port || !port->isNumber()) {
       continue;
       continue;
     }
     }
-    PeerHandle peer = new Peer(ip->toString(), port->toInt());
+    PeerHandle peer(new Peer(ip->toString(), port->toInt()));
     peers.push_back(peer);
     peers.push_back(peer);
   }
   }
   return peers;
   return peers;

+ 2 - 2
src/DefaultPeerStorage.cc

@@ -123,7 +123,7 @@ PeerHandle DefaultPeerStorage::getUnusedPeer() {
   Peers::const_iterator itr = std::find_if(peers.begin(), peers.end(),
   Peers::const_iterator itr = std::find_if(peers.begin(), peers.end(),
 					   FindFinePeer());
 					   FindFinePeer());
   if(itr == peers.end()) {
   if(itr == peers.end()) {
-    return 0;
+    return SharedHandle<Peer>();
   } else {
   } else {
     return *itr;
     return *itr;
   }
   }
@@ -146,7 +146,7 @@ PeerHandle DefaultPeerStorage::getPeer(const std::string& ipaddr,
   Peers::const_iterator itr = std::find_if(peers.begin(), peers.end(),
   Peers::const_iterator itr = std::find_if(peers.begin(), peers.end(),
 					   FindPeer(ipaddr, port));
 					   FindPeer(ipaddr, port));
   if(itr == peers.end()) {
   if(itr == peers.end()) {
-    return 0;
+    return SharedHandle<Peer>();
   } else {
   } else {
     return *itr;
     return *itr;
   }
   }

+ 14 - 16
src/DefaultPieceStorage.cc

@@ -59,7 +59,6 @@ namespace aria2 {
 
 
 DefaultPieceStorage::DefaultPieceStorage(const DownloadContextHandle& downloadContext, const Option* option):
 DefaultPieceStorage::DefaultPieceStorage(const DownloadContextHandle& downloadContext, const Option* option):
   downloadContext(downloadContext),
   downloadContext(downloadContext),
-  diskAdaptor(0),
   _diskWriterFactory(new DefaultDiskWriterFactory()),
   _diskWriterFactory(new DefaultDiskWriterFactory()),
   endGamePieceNum(END_GAME_PIECE_NUM),
   endGamePieceNum(END_GAME_PIECE_NUM),
   option(option)
   option(option)
@@ -103,7 +102,7 @@ PieceHandle DefaultPieceStorage::checkOutPiece(size_t index)
 
 
   PieceHandle piece = findUsedPiece(index);
   PieceHandle piece = findUsedPiece(index);
   if(piece.isNull()) {
   if(piece.isNull()) {
-    piece = new Piece(index, bitfieldMan->getBlockLength(index));
+    piece.reset(new Piece(index, bitfieldMan->getBlockLength(index)));
     addUsedPiece(piece);
     addUsedPiece(piece);
     return piece;
     return piece;
   } else {
   } else {
@@ -117,18 +116,17 @@ PieceHandle DefaultPieceStorage::checkOutPiece(size_t index)
  */
  */
 PieceHandle DefaultPieceStorage::getPiece(size_t index)
 PieceHandle DefaultPieceStorage::getPiece(size_t index)
 {
 {
+  PieceHandle piece;
   if(0 <= index && index <= bitfieldMan->getMaxIndex()) {
   if(0 <= index && index <= bitfieldMan->getMaxIndex()) {
-    PieceHandle piece = findUsedPiece(index);
+    piece = findUsedPiece(index);
     if(piece.isNull()) {
     if(piece.isNull()) {
-      piece = new Piece(index, bitfieldMan->getBlockLength(index));
+      piece.reset(new Piece(index, bitfieldMan->getBlockLength(index)));
       if(hasPiece(index)) {
       if(hasPiece(index)) {
 	piece->setAllBlock();
 	piece->setAllBlock();
       }
       }
     }
     }
-    return piece;
-  } else {
-    return 0;
   }
   }
+  return piece;
 }
 }
 
 
 void DefaultPieceStorage::addUsedPiece(const PieceHandle& piece)
 void DefaultPieceStorage::addUsedPiece(const PieceHandle& piece)
@@ -153,7 +151,7 @@ PieceHandle DefaultPieceStorage::findUsedPiece(size_t index) const
 					    usedPieces.end(),
 					    usedPieces.end(),
 					    FindPiece(index));
 					    FindPiece(index));
   if(itr == usedPieces.end()) {
   if(itr == usedPieces.end()) {
-    return 0;
+    return SharedHandle<Piece>();
   } else {
   } else {
     return *itr;
     return *itr;
   }
   }
@@ -165,7 +163,7 @@ PieceHandle DefaultPieceStorage::getMissingPiece(const PeerHandle& peer)
   if(getMissingPieceIndex(index, peer)) {
   if(getMissingPieceIndex(index, peer)) {
     return checkOutPiece(index);
     return checkOutPiece(index);
   } else {
   } else {
-    return 0;
+    return SharedHandle<Piece>();
   }
   }
 }
 }
 
 
@@ -199,7 +197,7 @@ PieceHandle DefaultPieceStorage::getMissingFastPiece(const PeerHandle& peer)
   if(getMissingFastPieceIndex(index, peer)) {
   if(getMissingFastPieceIndex(index, peer)) {
     return checkOutPiece(index);
     return checkOutPiece(index);
   } else {
   } else {
-    return 0;
+    return SharedHandle<Piece>();
   }
   }
 }
 }
 
 
@@ -209,14 +207,14 @@ PieceHandle DefaultPieceStorage::getMissingPiece()
   if(bitfieldMan->getSparseMissingUnusedIndex(index)) {
   if(bitfieldMan->getSparseMissingUnusedIndex(index)) {
     return checkOutPiece(index);
     return checkOutPiece(index);
   } else {
   } else {
-    return 0;
+    return SharedHandle<Piece>();
   }
   }
 }
 }
 
 
 PieceHandle DefaultPieceStorage::getMissingPiece(size_t index)
 PieceHandle DefaultPieceStorage::getMissingPiece(size_t index)
 {
 {
   if(hasPiece(index) || isPieceUsed(index)) {
   if(hasPiece(index) || isPieceUsed(index)) {
-    return 0;
+    return SharedHandle<Piece>();
   } else {
   } else {
     return checkOutPiece(index);
     return checkOutPiece(index);
   }
   }
@@ -421,7 +419,7 @@ void DefaultPieceStorage::initStorage()
     logger->debug("Instantiating DirectDiskAdaptor");
     logger->debug("Instantiating DirectDiskAdaptor");
     DiskWriterHandle writer = _diskWriterFactory->newDiskWriter();
     DiskWriterHandle writer = _diskWriterFactory->newDiskWriter();
     writer->setDirectIOAllowed(option->getAsBool(PREF_ENABLE_DIRECT_IO));
     writer->setDirectIOAllowed(option->getAsBool(PREF_ENABLE_DIRECT_IO));
-    DirectDiskAdaptorHandle directDiskAdaptor = new DirectDiskAdaptor();
+    DirectDiskAdaptorHandle directDiskAdaptor(new DirectDiskAdaptor());
     directDiskAdaptor->setDiskWriter(writer);
     directDiskAdaptor->setDiskWriter(writer);
     directDiskAdaptor->setTotalLength(downloadContext->getTotalLength());
     directDiskAdaptor->setTotalLength(downloadContext->getTotalLength());
     this->diskAdaptor = directDiskAdaptor;
     this->diskAdaptor = directDiskAdaptor;
@@ -429,7 +427,7 @@ void DefaultPieceStorage::initStorage()
     // file mode == DownloadContext::MULTI
     // file mode == DownloadContext::MULTI
     if(option->get(PREF_DIRECT_FILE_MAPPING) == V_TRUE) {
     if(option->get(PREF_DIRECT_FILE_MAPPING) == V_TRUE) {
       logger->debug("Instantiating MultiDiskAdaptor");
       logger->debug("Instantiating MultiDiskAdaptor");
-      MultiDiskAdaptorHandle multiDiskAdaptor = new MultiDiskAdaptor();
+      MultiDiskAdaptorHandle multiDiskAdaptor(new MultiDiskAdaptor());
       multiDiskAdaptor->setDirectIOAllowed(option->getAsBool(PREF_ENABLE_DIRECT_IO));
       multiDiskAdaptor->setDirectIOAllowed(option->getAsBool(PREF_ENABLE_DIRECT_IO));
       multiDiskAdaptor->setPieceLength(downloadContext->getPieceLength());
       multiDiskAdaptor->setPieceLength(downloadContext->getPieceLength());
       multiDiskAdaptor->setTopDir(downloadContext->getName());
       multiDiskAdaptor->setTopDir(downloadContext->getName());
@@ -438,7 +436,7 @@ void DefaultPieceStorage::initStorage()
       logger->debug("Instantiating CopyDiskAdaptor");
       logger->debug("Instantiating CopyDiskAdaptor");
       DiskWriterHandle writer = _diskWriterFactory->newDiskWriter();
       DiskWriterHandle writer = _diskWriterFactory->newDiskWriter();
       writer->setDirectIOAllowed(option->getAsBool(PREF_ENABLE_DIRECT_IO));
       writer->setDirectIOAllowed(option->getAsBool(PREF_ENABLE_DIRECT_IO));
-      CopyDiskAdaptorHandle copyDiskAdaptor = new CopyDiskAdaptor();
+      CopyDiskAdaptorHandle copyDiskAdaptor(new CopyDiskAdaptor());
       copyDiskAdaptor->setDiskWriter(writer);
       copyDiskAdaptor->setDiskWriter(writer);
       copyDiskAdaptor->setTempFilename(downloadContext->getName()+".a2tmp");
       copyDiskAdaptor->setTempFilename(downloadContext->getName()+".a2tmp");
       copyDiskAdaptor->setTotalLength(downloadContext->getTotalLength());
       copyDiskAdaptor->setTotalLength(downloadContext->getTotalLength());
@@ -543,7 +541,7 @@ void DefaultPieceStorage::markPiecesDone(uint64_t length)
     }
     }
     size_t r = (length%bitfieldMan->getBlockLength())/Piece::BLOCK_LENGTH;
     size_t r = (length%bitfieldMan->getBlockLength())/Piece::BLOCK_LENGTH;
     if(r > 0) {
     if(r > 0) {
-      PieceHandle p = new Piece(numPiece, bitfieldMan->getBlockLength(numPiece));
+      PieceHandle p(new Piece(numPiece, bitfieldMan->getBlockLength(numPiece)));
       for(size_t i = 0; i < r; ++i) {
       for(size_t i = 0; i < r; ++i) {
 	p->completeBlock(i);
 	p->completeBlock(i);
       }
       }

+ 1 - 6
src/DefaultSegmentManFactory.cc

@@ -45,12 +45,7 @@ SegmentManHandle
 DefaultSegmentManFactory::createNewInstance(const DownloadContextHandle& dctx,
 DefaultSegmentManFactory::createNewInstance(const DownloadContextHandle& dctx,
 					    const PieceStorageHandle& ps)
 					    const PieceStorageHandle& ps)
 {
 {
-  SegmentManHandle segmentMan = new SegmentMan(_option, dctx, ps);
-  //segmentMan->diskWriter = new DefaultDiskWriter();
-  //segmentMan->dir = _option->get(PREF_DIR);
-  // TODO disable this in multi-simultaneous download mode.
-  //segmentMan->ufilename = _option->get(PREF_OUT);
-  //segmentMan->option = _option;
+  SegmentManHandle segmentMan(new SegmentMan(_option, dctx, ps));
   return segmentMan;
   return segmentMan;
 }
 }
 
 

+ 8 - 2
src/DelegatingPeerListProcessor.cc

@@ -41,8 +41,14 @@ namespace aria2 {
 
 
 DelegatingPeerListProcessor::DelegatingPeerListProcessor()
 DelegatingPeerListProcessor::DelegatingPeerListProcessor()
 {
 {
-  processors.push_back(new DefaultPeerListProcessor());
-  processors.push_back(new CompactPeerListProcessor());
+  {
+    SharedHandle<PeerListProcessor> proc(new DefaultPeerListProcessor);
+    processors.push_back(proc);
+  }
+  {
+    SharedHandle<PeerListProcessor> proc(new CompactPeerListProcessor);
+    processors.push_back(proc);
+  }
 }
 }
 
 
 DelegatingPeerListProcessor::~DelegatingPeerListProcessor() {}
 DelegatingPeerListProcessor::~DelegatingPeerListProcessor() {}

+ 3 - 5
src/DownloadCommand.cc

@@ -67,11 +67,9 @@ DownloadCommand::DownloadCommand(int cuid,
 				 DownloadEngine* e,
 				 DownloadEngine* e,
 				 const SocketHandle& s):
 				 const SocketHandle& s):
   AbstractCommand(cuid, req, requestGroup, e, s),
   AbstractCommand(cuid, req, requestGroup, e, s),
-  peerStat(0),
 #ifdef ENABLE_MESSAGE_DIGEST
 #ifdef ENABLE_MESSAGE_DIGEST
-  _messageDigestContext(0),
+  _messageDigestContext(0)
 #endif // ENABLE_MESSAGE_DIGEST
 #endif // ENABLE_MESSAGE_DIGEST
-  transferDecoder(0)
 {
 {
 #ifdef ENABLE_MESSAGE_DIGEST
 #ifdef ENABLE_MESSAGE_DIGEST
   {
   {
@@ -85,7 +83,7 @@ DownloadCommand::DownloadCommand(int cuid,
 #endif // ENABLE_MESSAGE_DIGEST
 #endif // ENABLE_MESSAGE_DIGEST
   peerStat = _requestGroup->getSegmentMan()->getPeerStat(cuid);
   peerStat = _requestGroup->getSegmentMan()->getPeerStat(cuid);
   if(peerStat.isNull()) {
   if(peerStat.isNull()) {
-    peerStat = new PeerStat(cuid);
+    peerStat.reset(new PeerStat(cuid));
     _requestGroup->getSegmentMan()->registerPeerStat(peerStat);
     _requestGroup->getSegmentMan()->registerPeerStat(peerStat);
   }
   }
   peerStat->downloadStart();
   peerStat->downloadStart();
@@ -175,7 +173,7 @@ void DownloadCommand::checkLowestDownloadSpeed() const
 bool DownloadCommand::prepareForNextSegment() {
 bool DownloadCommand::prepareForNextSegment() {
   if(_requestGroup->downloadFinished()) {
   if(_requestGroup->downloadFinished()) {
 #ifdef ENABLE_MESSAGE_DIGEST
 #ifdef ENABLE_MESSAGE_DIGEST
-    CheckIntegrityEntryHandle entry = new ChecksumCheckIntegrityEntry(_requestGroup);
+    CheckIntegrityEntryHandle entry(new ChecksumCheckIntegrityEntry(_requestGroup));
     if(entry->isValidationReady()) {
     if(entry->isValidationReady()) {
       entry->initValidator();
       entry->initValidator();
       CheckIntegrityCommand* command =
       CheckIntegrityCommand* command =

+ 1 - 5
src/DownloadEngine.cc

@@ -84,12 +84,8 @@ bool NameResolverEntry::operator==(const NameResolverEntry& entry)
 #endif // ENABLE_ASYNC_DNS
 #endif // ENABLE_ASYNC_DNS
 
 
 DownloadEngine::DownloadEngine():logger(LogFactory::getInstance()),
 DownloadEngine::DownloadEngine():logger(LogFactory::getInstance()),
-				 _statCalc(0),
 				 _haltRequested(false),
 				 _haltRequested(false),
-				 noWait(false),
-				 _requestGroupMan(0),
-				 _fileAllocationMan(0),
-				 _checkIntegrityMan(0)
+				 noWait(false)
 {}
 {}
 
 
 DownloadEngine::~DownloadEngine() {
 DownloadEngine::~DownloadEngine() {

+ 6 - 6
src/DownloadEngineFactory.cc

@@ -72,16 +72,16 @@ DownloadEngineFactory::newDownloadEngine(Option* op,
     workingSet = requestGroups;
     workingSet = requestGroups;
   }
   }
 
 
-  DownloadEngineHandle e = new DownloadEngine();
+  DownloadEngineHandle e(new DownloadEngine());
   e->option = op;
   e->option = op;
-  RequestGroupManHandle requestGroupMan =
-    new RequestGroupMan(workingSet,
-			op->getAsInt(PREF_MAX_CONCURRENT_DOWNLOADS));
+  RequestGroupManHandle
+    requestGroupMan(new RequestGroupMan(workingSet,
+					op->getAsInt(PREF_MAX_CONCURRENT_DOWNLOADS)));
   requestGroupMan->addReservedGroup(reservedSet);
   requestGroupMan->addReservedGroup(reservedSet);
   e->_requestGroupMan = requestGroupMan;
   e->_requestGroupMan = requestGroupMan;
-  e->_fileAllocationMan = new FileAllocationMan();
+  e->_fileAllocationMan.reset(new FileAllocationMan());
 #ifdef ENABLE_MESSAGE_DIGEST
 #ifdef ENABLE_MESSAGE_DIGEST
-  e->_checkIntegrityMan = new CheckIntegrityMan();
+  e->_checkIntegrityMan.reset(new CheckIntegrityMan());
 #endif // ENABLE_MESSAGE_DIGEST
 #endif // ENABLE_MESSAGE_DIGEST
   e->commands.push_back(new FillRequestGroupCommand(CUIDCounterSingletonHolder::instance()->newID(), e.get(), 1));
   e->commands.push_back(new FillRequestGroupCommand(CUIDCounterSingletonHolder::instance()->newID(), e.get(), 1));
   e->commands.push_back(new FileAllocationDispatcherCommand(CUIDCounterSingletonHolder::instance()->newID(), e.get()));
   e->commands.push_back(new FileAllocationDispatcherCommand(CUIDCounterSingletonHolder::instance()->newID(), e.get()));

Some files were not shown because too many files changed in this diff