Browse Source

Don't instantiate SharedHandle for DHT{Query, Response}Message subclass

Tatsuhiro Tsujikawa 13 năm trước cách đây
mục cha
commit
c6b76f1d32
2 tập tin đã thay đổi với 30 bổ sung34 xóa
  1. 27 31
      src/DHTMessageFactoryImpl.cc
  2. 3 3
      src/DHTMessageFactoryImpl.h

+ 27 - 31
src/DHTMessageFactoryImpl.cc

@@ -303,8 +303,7 @@ const std::string& getDefaultVersion()
 }
 } // namespace
 
-void DHTMessageFactoryImpl::setCommonProperty
-(const SharedHandle<DHTAbstractMessage>& m)
+void DHTMessageFactoryImpl::setCommonProperty(DHTAbstractMessage* m)
 {
   m->setConnection(connection_);
   m->setMessageDispatcher(dispatcher_);
@@ -316,10 +315,9 @@ void DHTMessageFactoryImpl::setCommonProperty
 SharedHandle<DHTQueryMessage> DHTMessageFactoryImpl::createPingMessage
 (const SharedHandle<DHTNode>& remoteNode, const std::string& transactionID)
 {
-  SharedHandle<DHTPingMessage> m
-    (new DHTPingMessage(localNode_, remoteNode, transactionID));
+  DHTPingMessage* m(new DHTPingMessage(localNode_, remoteNode, transactionID));
   setCommonProperty(m);
-  return m;
+  return SharedHandle<DHTQueryMessage>(m);
 }
 
 SharedHandle<DHTResponseMessage> DHTMessageFactoryImpl::createPingReplyMessage
@@ -327,10 +325,10 @@ SharedHandle<DHTResponseMessage> DHTMessageFactoryImpl::createPingReplyMessage
  const unsigned char* id,
  const std::string& transactionID)
 {
-  SharedHandle<DHTPingReplyMessage> m
+  DHTPingReplyMessage* m
     (new DHTPingReplyMessage(localNode_, remoteNode, id, transactionID));
   setCommonProperty(m);
-  return m;
+  return SharedHandle<DHTResponseMessage>(m);
 }
 
 SharedHandle<DHTQueryMessage> DHTMessageFactoryImpl::createFindNodeMessage
@@ -338,11 +336,10 @@ SharedHandle<DHTQueryMessage> DHTMessageFactoryImpl::createFindNodeMessage
  const unsigned char* targetNodeID,
  const std::string& transactionID)
 {
-  SharedHandle<DHTFindNodeMessage> m
-    (new DHTFindNodeMessage
-     (localNode_, remoteNode, targetNodeID, transactionID));
+  DHTFindNodeMessage* m(new DHTFindNodeMessage
+                        (localNode_, remoteNode, targetNodeID, transactionID));
   setCommonProperty(m);
-  return m;
+  return SharedHandle<DHTQueryMessage>(m);
 }
 
 SharedHandle<DHTResponseMessage>
@@ -351,12 +348,11 @@ DHTMessageFactoryImpl::createFindNodeReplyMessage
  const std::vector<SharedHandle<DHTNode> >& closestKNodes,
  const std::string& transactionID)
 {
-  SharedHandle<DHTFindNodeReplyMessage> m
-    (new DHTFindNodeReplyMessage
-     (family_, localNode_, remoteNode, transactionID));
+  DHTFindNodeReplyMessage* m(new DHTFindNodeReplyMessage
+                             (family_, localNode_, remoteNode, transactionID));
   m->setClosestKNodes(closestKNodes);
   setCommonProperty(m);
-  return m;
+  return SharedHandle<DHTResponseMessage>(m);
 }
 
 void DHTMessageFactoryImpl::extractNodes
@@ -404,12 +400,12 @@ DHTMessageFactoryImpl::createGetPeersMessage
  const unsigned char* infoHash,
  const std::string& transactionID)
 {
-  SharedHandle<DHTGetPeersMessage> m
+  DHTGetPeersMessage* m
     (new DHTGetPeersMessage(localNode_, remoteNode, infoHash, transactionID));
   m->setPeerAnnounceStorage(peerAnnounceStorage_);
   m->setTokenTracker(tokenTracker_);
   setCommonProperty(m);
-  return m;
+  return SharedHandle<DHTQueryMessage>(m);
 }
 
 SharedHandle<DHTResponseMessage>
@@ -444,7 +440,7 @@ DHTMessageFactoryImpl::createGetPeersReplyMessage
         peers.push_back(peer);
       }
     }
-  }  
+  }
   const String* token = getString(rDict, DHTGetPeersReplyMessage::TOKEN);
   return createGetPeersReplyMessage
     (remoteNode, nodes, peers, token->s(), transactionID);
@@ -458,13 +454,13 @@ DHTMessageFactoryImpl::createGetPeersReplyMessage
  const std::string& token,
  const std::string& transactionID)
 {
-  SharedHandle<DHTGetPeersReplyMessage> m
-    (new DHTGetPeersReplyMessage
-     (family_, localNode_, remoteNode, token, transactionID));
+  DHTGetPeersReplyMessage* m(new DHTGetPeersReplyMessage
+                             (family_, localNode_, remoteNode, token,
+                              transactionID));
   m->setClosestKNodes(closestKNodes);
   m->setValues(values);
   setCommonProperty(m);
-  return m;
+  return SharedHandle<DHTResponseMessage>(m);
 }
 
 SharedHandle<DHTQueryMessage>
@@ -475,23 +471,23 @@ DHTMessageFactoryImpl::createAnnouncePeerMessage
  const std::string& token,
  const std::string& transactionID)
 {
-  SharedHandle<DHTAnnouncePeerMessage> m
-    (new DHTAnnouncePeerMessage
-     (localNode_, remoteNode, infoHash, tcpPort, token, transactionID));
+  DHTAnnouncePeerMessage* m(new DHTAnnouncePeerMessage
+                            (localNode_, remoteNode, infoHash, tcpPort, token,
+                             transactionID));
   m->setPeerAnnounceStorage(peerAnnounceStorage_);
   m->setTokenTracker(tokenTracker_);
   setCommonProperty(m);
-  return m;
+  return SharedHandle<DHTQueryMessage>(m);
 }
 
 SharedHandle<DHTResponseMessage>
 DHTMessageFactoryImpl::createAnnouncePeerReplyMessage
 (const SharedHandle<DHTNode>& remoteNode, const std::string& transactionID)
 {
-  SharedHandle<DHTAnnouncePeerReplyMessage> m
+  DHTAnnouncePeerReplyMessage* m
     (new DHTAnnouncePeerReplyMessage(localNode_, remoteNode, transactionID));
   setCommonProperty(m);
-  return m;
+  return SharedHandle<DHTResponseMessage>(m);
 }
 
 SharedHandle<DHTMessage>
@@ -500,9 +496,9 @@ DHTMessageFactoryImpl::createUnknownMessage
  const std::string& ipaddr, uint16_t port)
 
 {
-  SharedHandle<DHTUnknownMessage> m
+  DHTUnknownMessage* m
     (new DHTUnknownMessage(localNode_, data, length, ipaddr, port));
-  return m;
+  return SharedHandle<DHTMessage>(m);
 }
 
 void DHTMessageFactoryImpl::setRoutingTable(DHTRoutingTable* routingTable)
@@ -520,7 +516,7 @@ void DHTMessageFactoryImpl::setMessageDispatcher
 {
   dispatcher_ = dispatcher;
 }
-  
+
 void DHTMessageFactoryImpl::setPeerAnnounceStorage
 (DHTPeerAnnounceStorage* storage)
 {

+ 3 - 3
src/DHTMessageFactoryImpl.h

@@ -59,11 +59,11 @@ private:
   DHTMessageDispatcher* dispatcher_;
 
   DHTRoutingTable* routingTable_;
-  
+
   DHTPeerAnnounceStorage* peerAnnounceStorage_;
 
   DHTTokenTracker* tokenTracker_;
-  
+
   // search node in routingTable. If it is not found, create new one.
   SharedHandle<DHTNode> getRemoteNode
   (const unsigned char* id, const std::string& ipaddr, uint16_t port) const;
@@ -76,7 +76,7 @@ private:
   (std::vector<SharedHandle<DHTNode> >& nodes,
    const unsigned char* src, size_t length);
 
-  void setCommonProperty(const SharedHandle<DHTAbstractMessage>& m);
+  void setCommonProperty(DHTAbstractMessage* m);
 
 public:
   DHTMessageFactoryImpl(int family);