mirror of https://github.com/aria2/aria2
				
				
				
			2008-12-09 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Fixed the bug that bad URI is sent to the tracker when the announe URI in torrent file includes query. * src/DefaultBtAnnounce.cc * test/DefaultBtAnnounceTest.ccpull/1/head
							parent
							
								
									1e6a579258
								
							
						
					
					
						commit
						bd8645262d
					
				|  | @ -1,3 +1,10 @@ | |||
| 2008-12-09  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net> | ||||
| 
 | ||||
| 	Fixed the bug that bad URI is sent to the tracker when the announe | ||||
| 	URI in torrent file includes query. | ||||
| 	* src/DefaultBtAnnounce.cc | ||||
| 	* test/DefaultBtAnnounceTest.cc | ||||
| 
 | ||||
| 2008-12-04  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net> | ||||
| 
 | ||||
| 	Added Option::blank(). | ||||
|  |  | |||
|  | @ -53,6 +53,7 @@ | |||
| #include "Option.h" | ||||
| #include "StringFormat.h" | ||||
| #include "A2STR.h" | ||||
| #include "Request.h" | ||||
| 
 | ||||
| namespace aria2 { | ||||
| 
 | ||||
|  | @ -105,6 +106,13 @@ bool DefaultBtAnnounce::isAnnounceReady() { | |||
|     isDefaultAnnounceReady(); | ||||
| } | ||||
| 
 | ||||
| static bool uriHasQuery(const std::string& uri) | ||||
| { | ||||
|   Request req; | ||||
|   req.setUrl(uri); | ||||
|   return !req.getQuery().empty(); | ||||
| } | ||||
| 
 | ||||
| std::string DefaultBtAnnounce::getAnnounceUrl() { | ||||
|   if(isStoppedAnnounceReady()) { | ||||
|     if(!announceList.currentTierAcceptsStoppedEvent()) { | ||||
|  | @ -134,8 +142,10 @@ std::string DefaultBtAnnounce::getAnnounceUrl() { | |||
|   TransferStat stat = peerStorage->calculateStat(); | ||||
|   uint64_t left = | ||||
|     pieceStorage->getTotalLength()-pieceStorage->getCompletedLength(); | ||||
|   std::string url = announceList.getAnnounce()+ | ||||
|     "?info_hash="+Util::torrentUrlencode(btContext->getInfoHash(), | ||||
|   std::string url = announceList.getAnnounce(); | ||||
|   url += uriHasQuery(url) ? "&" : "?"; | ||||
|   url +=  | ||||
|     "info_hash="+Util::torrentUrlencode(btContext->getInfoHash(), | ||||
| 					btContext->getInfoHashLength())+ | ||||
|     "&peer_id="+Util::torrentUrlencode(btContext->getPeerId(), 20)+ | ||||
|     "&uploaded="+Util::uitos(stat.getSessionUploadLength())+ | ||||
|  |  | |||
|  | @ -22,6 +22,7 @@ class DefaultBtAnnounceTest:public CppUnit::TestFixture { | |||
| 
 | ||||
|   CPPUNIT_TEST_SUITE(DefaultBtAnnounceTest); | ||||
|   CPPUNIT_TEST(testGetAnnounceUrl); | ||||
|   CPPUNIT_TEST(testGetAnnounceUrl_withQuery); | ||||
|   CPPUNIT_TEST(testNoMoreAnnounce); | ||||
|   CPPUNIT_TEST(testIsAllAnnounceFailed); | ||||
|   CPPUNIT_TEST(testURLOrderInStoppedEvent); | ||||
|  | @ -77,6 +78,7 @@ public: | |||
|   } | ||||
| 
 | ||||
|   void testGetAnnounceUrl(); | ||||
|   void testGetAnnounceUrl_withQuery(); | ||||
|   void testNoMoreAnnounce(); | ||||
|   void testIsAllAnnounceFailed(); | ||||
|   void testURLOrderInStoppedEvent(); | ||||
|  | @ -182,6 +184,32 @@ void DefaultBtAnnounceTest::testGetAnnounceUrl() | |||
|   CPPUNIT_ASSERT_EQUAL(std::string("http://localhost/announce?info_hash=%01%23Eg%89%AB%CD%EF%01%23Eg%89%AB%CD%EF%01%23Eg&peer_id=%2Daria2%2Dultrafastdltl&uploaded=1572864&downloaded=1310720&left=1572864&compact=1&key=AAAAAAAA&numwant=0&no_peer_id=1&port=6989&event=stopped&supportcrypto=1"), btAnnounce.getAnnounceUrl()); | ||||
| } | ||||
| 
 | ||||
| void DefaultBtAnnounceTest::testGetAnnounceUrl_withQuery() | ||||
| { | ||||
|   std::string trackerURI = "http://localhost/announce?k=v"; | ||||
|   std::deque<std::string> uris; | ||||
|   uris.push_back(trackerURI); | ||||
|   SharedHandle<AnnounceTier> announceTier(new AnnounceTier(uris)); | ||||
| 
 | ||||
|   _btContext->addAnnounceTier(announceTier); | ||||
| 
 | ||||
|   DefaultBtAnnounce btAnnounce(_btContext, _option); | ||||
|   btAnnounce.setPieceStorage(_pieceStorage); | ||||
|   btAnnounce.setPeerStorage(_peerStorage); | ||||
|   btAnnounce.setBtRuntime(_btRuntime); | ||||
|   btAnnounce.setRandomizer(SharedHandle<Randomizer>(new FixedNumberRandomizer())); | ||||
|   btAnnounce.generateKey(); | ||||
| 
 | ||||
|   CPPUNIT_ASSERT_EQUAL | ||||
|     (std::string("http://localhost/announce?k=v&" | ||||
| 		 "info_hash=%01%23Eg%89%AB%CD%EF%01%23Eg%89%AB%CD%EF%01%23Eg&" | ||||
| 		 "peer_id=%2Daria2%2Dultrafastdltl&" | ||||
| 		 "uploaded=1572864&downloaded=1310720&left=1572864&compact=1&" | ||||
| 		 "key=AAAAAAAA&numwant=50&no_peer_id=1&port=6989&event=started&" | ||||
| 		 "supportcrypto=1"), | ||||
|      btAnnounce.getAnnounceUrl()); | ||||
| } | ||||
| 
 | ||||
| void DefaultBtAnnounceTest::testIsAllAnnounceFailed() | ||||
| { | ||||
|   std::string trackerURI1 = "http://localhost/announce"; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Tatsuhiro Tsujikawa
						Tatsuhiro Tsujikawa