From: <arn...@us...> - 2008-04-14 20:15:57
|
Revision: 1149 http://dcplusplus.svn.sourceforge.net/dcplusplus/?rev=1149&view=rev Author: arnetheduck Date: 2008-04-14 13:15:30 -0700 (Mon, 14 Apr 2008) Log Message: ----------- First go at auto-segment size Modified Paths: -------------- dcplusplus/trunk/changelog.txt dcplusplus/trunk/dcpp/Download.cpp dcplusplus/trunk/dcpp/DownloadManager.cpp dcplusplus/trunk/dcpp/QueueItem.cpp dcplusplus/trunk/dcpp/QueueItem.h dcplusplus/trunk/dcpp/QueueManager.cpp dcplusplus/trunk/dcpp/QueueManager.h dcplusplus/trunk/dcpp/Transfer.cpp dcplusplus/trunk/dcpp/Transfer.h dcplusplus/trunk/dcpp/UploadManager.cpp dcplusplus/trunk/dcpp/UserConnection.h Property Changed: ---------------- dcplusplus/trunk/ Property changes on: dcplusplus/trunk ___________________________________________________________________ Name: bzr:revision-info - timestamp: 2008-04-08 23:24:39.858999968 +0200 committer: poy <po...@12...> properties: branch-nick: bzr + timestamp: 2008-04-09 21:37:08.112999916 +0200 committer: Jacek Sieka <arn...@gm...> properties: branch-nick: dcplusplus Name: bzr:revision-id:v3-trunk1 - 1027 arn...@gm...-20080323183926-schknwnkgeo7ivdn 1028 zouzou123gen-20080323220411-r8usuc3qxwuh7zsn 1029 zouzou123gen-20080323221249-0su72zaj13e706mk 1030 arn...@gm...-20080324140623-muba1dl46m000o8c 1031 zouzou123gen-20080324141933-qbgr93ugpe0297m6 1032 arn...@gm...-20080324153706-siidja05n84i00b1 1033 arn...@gm...-20080324153823-lhn3awurnu77riln 1034 arn...@gm...-20080324165650-zapppziji67yf5a2 1035 zouzou123gen-20080324175936-4mqc2kh0lo5wtdu2 1036 zouzou123gen-20080325004602-6wdsoym95mjuhwd3 1037 arn...@gm...-20080325100659-8fqy6q65itmghlep 1038 zouzou123gen-20080325175216-s297sdiucukfvijh 1039 arn...@gm...-20080325210137-3dfqyoi8ykosy087 1040 arn...@gm...-20080325211747-nwwy1eb33r071sca 1041 arn...@gm...-20080326084110-qbselrjckku275xi 1042 zouzou123gen-20080326123631-35642mgbk2i4ty32 1043 zouzou123gen-20080326124345-f4xwn2d3ty8ubd6r 1044 arn...@gm...-20080326162031-il0nyms30w0mky43 1045 arn...@gm...-20080326164801-8dru8mjc06xgzjpv 1046 arn...@gm...-20080326170438-uzl2rx8fqnohak7g 1047 zouzou123gen-20080326172821-d6uqcbmfb0c6rwlv 1048 arn...@gm...-20080326213257-qlgdh7m2712p2l0q 1049 arn...@gm...-20080326214313-ktnoekgk3s0wmatz 1050 arn...@gm...-20080326215256-0j1iqrf286b9g7zf 1051 arn...@gm...-20080327082121-hoi22wh1gwjdfbyd 1052 arn...@gm...-20080327120639-um3tukdt374rwvgm 1053 zouzou123gen-20080327130703-6vtek6uxy3vua543 1054 arn...@gm...-20080327215831-dmg5mkufskabwkro 1055 arn...@gm...-20080327231459-cdztcv25alsuyqmf 1056 arn...@gm...-20080328085925-gceybsr53oml1p24 1057 arn...@gm...-20080328200512-1sjuu6bcnl2dyd2a 1058 arn...@gm...-20080328210347-bussqjrm5mfswh7o 1059 arn...@gm...-20080329055630-braiir1dskv7a4qm 1060 arn...@gm...-20080329061558-rck8dz60wpj3c5ja 1061 arn...@gm...-20080329081253-if6o5jn329mbzfpl 1062 arn...@gm...-20080329081619-cb4x930j8sp55cs0 1063 arn...@gm...-20080329103216-hgjzo7ra2zixbztd 1064 arn...@gm...-20080329124042-q3aw4iodmo5kafyp 1065 arn...@gm...-20080329124926-2je1z18p0272zpua 1066 arn...@gm...-20080329150901-ehj9t32en7eps2dp 1067 zouzou123gen-20080329153653-36xlvpik2ns9r84r 1068 zouzou123gen-20080329162703-51xr8hg073pg7wq5 1069 zouzou123gen-20080329234706-8ddipdqu0xeudkql 1070 arn...@gm...-20080330081232-ubqr1171ewalrd4q 1071 zouzou123gen-20080330131607-yppbs3mgyjef1cux 1072 zouzou123gen-20080330134835-yv1nogy77ib1uehd 1073 zouzou123gen-20080331124549-alyw7vugdn30piqy 1074 zouzou123gen-20080331135108-q8frtqsin5bosfzm 1075 zouzou123gen-20080331140757-u94q52yccl5lsifk 1076 zouzou123gen-20080331152513-ue1x5qhigcw51348 1077 arn...@gm...-20080331184436-a8g6chibmg8nswls 1078 arn...@gm...-20080331220648-81485k28qmwruwz6 1079 zouzou123gen-20080401081001-2yjn07cf8s5sxr3a 1080 zouzou123gen-20080401081247-f3p4hdjojnd460jw 1081 zouzou123gen-20080401084117-24a454g8o0x656kg 1082 zouzou123gen-20080401133146-jabb5i8870fg6f66 1083 zouzou123gen-20080401154610-mxdqoo5bksru93e6 1084 arn...@gm...-20080401185530-lqj4tflt5ldmx46f 1085 arn...@gm...-20080401212616-ffl7m0xm8gt15knk 1086 arn...@gm...-20080402084515-ofmnwihzv159jton 1087 arn...@gm...-20080402133105-y70soi38owzl76i9 1088 arn...@gm...-20080402142417-rn2dbkx19wfz3vae 1089 arn...@gm...-20080402144459-u3z3hqvl8aqjc4a0 1090 zouzou123gen-20080402145051-zi8tmvy8u3r2mzu8 1091 arn...@gm...-20080402152137-f397uz1yp9qjvfwh 1092 zouzou123gen-20080402170355-29wda40wk3cy7lu5 1093 arn...@gm...-20080402180628-ipos9li0c4bsmq1h 1094 arn...@gm...-20080402181235-s2a6f4ww4lzayl46 1095 arn...@gm...-20080402193851-6mu64vgep6tijith 1096 arn...@gm...-20080402203810-86zpxsx69q83zf3r 1097 arn...@gm...-20080402204331-so2e8n892o23pejr 1098 poy-20080402224153-225qylr2cfwhqrg7 1099 mrmikejj-20080403125112-o8polh8rkn62umyh 1100 arn...@gm...-20080403125139-8xub76j1xazhfxna 1101 po...@12...-20080403140544-13kockkjho883nb4 1102 po...@12...-20080403143012-bxghtoodiolugpbs 1103 arn...@gm...-20080403190809-bbi4bz5rfcvjnt20 1104 arn...@gm...-20080403205410-czxru1vcg1s4wcws 1105 arn...@gm...-20080403213124-54spdrwszgyimd90 1106 po...@12...-20080404002406-aj74x5tngi6mmmj1 1107 arn...@gm...-20080404122415-mjy07qzbaxyhagra 1108 po...@12...-20080404145445-84lyk5tyy3b3br14 1109 po...@12...-20080404231417-v4v8x7u3f0hm0ejc 1110 po...@12...-20080405001107-14d1ojjof8xhvcj8 1111 arn...@gm...-20080405071929-jmnrul21sxx04kky 1112 arn...@gm...-20080405080105-9qbda7be0pi7y1ai 1113 po...@12...-20080405154555-yuj2n5kyndfjlpsf 1114 po...@12...-20080405220250-8y09d0samsj8ja94 1115 po...@12...-20080406134101-4860ytb61sbu3yhg 1116 po...@12...-20080406155849-2wzxzuzs5m8zpk0g 1117 po...@12...-20080406164835-bv5dydhm3qqydsty 1118 arn...@gm...-20080406210237-c7tyfgiz2sjgv044 1119 po...@12...-20080407114423-4yajg1rffidq76bj 1120 arn...@gm...-20080407194826-c42t4bjzw4vflejn 1121 po...@12...-20080407214303-o7ul1bvcn6gvaoc9 1122 po...@12...-20080407220647-r7f3em92til5j67s 1123 po...@12...-20080408212439-54t3bqlhvw1nu4xc + 1027 arn...@gm...-20080323183926-schknwnkgeo7ivdn 1028 zouzou123gen-20080323220411-r8usuc3qxwuh7zsn 1029 zouzou123gen-20080323221249-0su72zaj13e706mk 1030 arn...@gm...-20080324140623-muba1dl46m000o8c 1031 zouzou123gen-20080324141933-qbgr93ugpe0297m6 1032 arn...@gm...-20080324153706-siidja05n84i00b1 1033 arn...@gm...-20080324153823-lhn3awurnu77riln 1034 arn...@gm...-20080324165650-zapppziji67yf5a2 1035 zouzou123gen-20080324175936-4mqc2kh0lo5wtdu2 1036 zouzou123gen-20080325004602-6wdsoym95mjuhwd3 1037 arn...@gm...-20080325100659-8fqy6q65itmghlep 1038 zouzou123gen-20080325175216-s297sdiucukfvijh 1039 arn...@gm...-20080325210137-3dfqyoi8ykosy087 1040 arn...@gm...-20080325211747-nwwy1eb33r071sca 1041 arn...@gm...-20080326084110-qbselrjckku275xi 1042 zouzou123gen-20080326123631-35642mgbk2i4ty32 1043 zouzou123gen-20080326124345-f4xwn2d3ty8ubd6r 1044 arn...@gm...-20080326162031-il0nyms30w0mky43 1045 arn...@gm...-20080326164801-8dru8mjc06xgzjpv 1046 arn...@gm...-20080326170438-uzl2rx8fqnohak7g 1047 zouzou123gen-20080326172821-d6uqcbmfb0c6rwlv 1048 arn...@gm...-20080326213257-qlgdh7m2712p2l0q 1049 arn...@gm...-20080326214313-ktnoekgk3s0wmatz 1050 arn...@gm...-20080326215256-0j1iqrf286b9g7zf 1051 arn...@gm...-20080327082121-hoi22wh1gwjdfbyd 1052 arn...@gm...-20080327120639-um3tukdt374rwvgm 1053 zouzou123gen-20080327130703-6vtek6uxy3vua543 1054 arn...@gm...-20080327215831-dmg5mkufskabwkro 1055 arn...@gm...-20080327231459-cdztcv25alsuyqmf 1056 arn...@gm...-20080328085925-gceybsr53oml1p24 1057 arn...@gm...-20080328200512-1sjuu6bcnl2dyd2a 1058 arn...@gm...-20080328210347-bussqjrm5mfswh7o 1059 arn...@gm...-20080329055630-braiir1dskv7a4qm 1060 arn...@gm...-20080329061558-rck8dz60wpj3c5ja 1061 arn...@gm...-20080329081253-if6o5jn329mbzfpl 1062 arn...@gm...-20080329081619-cb4x930j8sp55cs0 1063 arn...@gm...-20080329103216-hgjzo7ra2zixbztd 1064 arn...@gm...-20080329124042-q3aw4iodmo5kafyp 1065 arn...@gm...-20080329124926-2je1z18p0272zpua 1066 arn...@gm...-20080329150901-ehj9t32en7eps2dp 1067 zouzou123gen-20080329153653-36xlvpik2ns9r84r 1068 zouzou123gen-20080329162703-51xr8hg073pg7wq5 1069 zouzou123gen-20080329234706-8ddipdqu0xeudkql 1070 arn...@gm...-20080330081232-ubqr1171ewalrd4q 1071 zouzou123gen-20080330131607-yppbs3mgyjef1cux 1072 zouzou123gen-20080330134835-yv1nogy77ib1uehd 1073 zouzou123gen-20080331124549-alyw7vugdn30piqy 1074 zouzou123gen-20080331135108-q8frtqsin5bosfzm 1075 zouzou123gen-20080331140757-u94q52yccl5lsifk 1076 zouzou123gen-20080331152513-ue1x5qhigcw51348 1077 arn...@gm...-20080331184436-a8g6chibmg8nswls 1078 arn...@gm...-20080331220648-81485k28qmwruwz6 1079 zouzou123gen-20080401081001-2yjn07cf8s5sxr3a 1080 zouzou123gen-20080401081247-f3p4hdjojnd460jw 1081 zouzou123gen-20080401084117-24a454g8o0x656kg 1082 zouzou123gen-20080401133146-jabb5i8870fg6f66 1083 zouzou123gen-20080401154610-mxdqoo5bksru93e6 1084 arn...@gm...-20080401185530-lqj4tflt5ldmx46f 1085 arn...@gm...-20080401212616-ffl7m0xm8gt15knk 1086 arn...@gm...-20080402084515-ofmnwihzv159jton 1087 arn...@gm...-20080402133105-y70soi38owzl76i9 1088 arn...@gm...-20080402142417-rn2dbkx19wfz3vae 1089 arn...@gm...-20080402144459-u3z3hqvl8aqjc4a0 1090 zouzou123gen-20080402145051-zi8tmvy8u3r2mzu8 1091 arn...@gm...-20080402152137-f397uz1yp9qjvfwh 1092 zouzou123gen-20080402170355-29wda40wk3cy7lu5 1093 arn...@gm...-20080402180628-ipos9li0c4bsmq1h 1094 arn...@gm...-20080402181235-s2a6f4ww4lzayl46 1095 arn...@gm...-20080402193851-6mu64vgep6tijith 1096 arn...@gm...-20080402203810-86zpxsx69q83zf3r 1097 arn...@gm...-20080402204331-so2e8n892o23pejr 1098 poy-20080402224153-225qylr2cfwhqrg7 1099 mrmikejj-20080403125112-o8polh8rkn62umyh 1100 arn...@gm...-20080403125139-8xub76j1xazhfxna 1101 po...@12...-20080403140544-13kockkjho883nb4 1102 po...@12...-20080403143012-bxghtoodiolugpbs 1103 arn...@gm...-20080403190809-bbi4bz5rfcvjnt20 1104 arn...@gm...-20080403205410-czxru1vcg1s4wcws 1105 arn...@gm...-20080403213124-54spdrwszgyimd90 1106 po...@12...-20080404002406-aj74x5tngi6mmmj1 1107 arn...@gm...-20080404122415-mjy07qzbaxyhagra 1108 po...@12...-20080404145445-84lyk5tyy3b3br14 1109 po...@12...-20080404231417-v4v8x7u3f0hm0ejc 1110 po...@12...-20080405001107-14d1ojjof8xhvcj8 1111 arn...@gm...-20080405071929-jmnrul21sxx04kky 1112 arn...@gm...-20080405080105-9qbda7be0pi7y1ai 1113 po...@12...-20080405154555-yuj2n5kyndfjlpsf 1114 po...@12...-20080405220250-8y09d0samsj8ja94 1115 po...@12...-20080406134101-4860ytb61sbu3yhg 1116 po...@12...-20080406155849-2wzxzuzs5m8zpk0g 1117 po...@12...-20080406164835-bv5dydhm3qqydsty 1118 arn...@gm...-20080406210237-c7tyfgiz2sjgv044 1119 po...@12...-20080407114423-4yajg1rffidq76bj 1120 arn...@gm...-20080407194826-c42t4bjzw4vflejn 1121 po...@12...-20080407214303-o7ul1bvcn6gvaoc9 1122 po...@12...-20080407220647-r7f3em92til5j67s 1123 po...@12...-20080408212439-54t3bqlhvw1nu4xc 1124 arn...@gm...-20080409193708-y6erfzwrcb1seet3 Modified: dcplusplus/trunk/changelog.txt =================================================================== --- dcplusplus/trunk/changelog.txt 2008-04-14 20:14:03 UTC (rev 1148) +++ dcplusplus/trunk/changelog.txt 2008-04-14 20:15:30 UTC (rev 1149) @@ -28,6 +28,8 @@ * [L#211313] Fixed bad virtual name being loaded (thanks kulmegil) * [L#202801] Allow virtual folders to have the same name * Allow more characters in virtual names +* Fixed downloading multiple file lists with the enter key (poy) +* Improved transfer speed averaging * [L#212411] Fixed downloading multiple file lists (poy) -- 0.705 2008-03-14 -- Modified: dcplusplus/trunk/dcpp/Download.cpp =================================================================== --- dcplusplus/trunk/dcpp/Download.cpp 2008-04-14 20:14:03 UTC (rev 1148) +++ dcplusplus/trunk/dcpp/Download.cpp 2008-04-14 20:15:30 UTC (rev 1149) @@ -46,7 +46,7 @@ if(qi.getSize() != -1) { if(HashManager::getInstance()->getTree(getTTH(), getTigerTree())) { setTreeValid(true); - setSegment(qi.getNextSegment(getTigerTree().getBlockSize())); + setSegment(qi.getNextSegment(getTigerTree().getBlockSize(), conn.getSpeed(), conn.getChunkSize())); } else if(supportsTrees && !qi.getSource(conn.getUser())->isSet(QueueItem::Source::FLAG_NO_TREE) && qi.getSize() > HashManager::MIN_BLOCK_SIZE) { // Get the tree unless the file is small (for small files, we'd probably only get the root anyway) setType(TYPE_TREE); @@ -56,7 +56,7 @@ // Use the root as tree to get some sort of validation at least... getTigerTree() = TigerTree(qi.getSize(), qi.getSize(), getTTH()); setTreeValid(true); - setSegment(qi.getNextSegment(getTigerTree().getBlockSize())); + setSegment(qi.getNextSegment(getTigerTree().getBlockSize(), 0, 0)); } if(qi.isSet(QueueItem::FLAG_RESUME)) { Modified: dcplusplus/trunk/dcpp/DownloadManager.cpp =================================================================== --- dcplusplus/trunk/dcpp/DownloadManager.cpp 2008-04-14 20:14:03 UTC (rev 1148) +++ dcplusplus/trunk/dcpp/DownloadManager.cpp 2008-04-14 20:15:30 UTC (rev 1149) @@ -253,6 +253,7 @@ } d->setStart(GET_TICK()); + d->tick(); aSource->setState(UserConnection::STATE_RUNNING); fire(DownloadManagerListener::Starting(), d); @@ -275,7 +276,8 @@ try { d->addPos(d->getFile()->write(aData, aLen), aLen); - + d->tick(); + if(d->getPos() > d->getSize()) { failDownload(aSource, _("More data was sent than was expected")); } else if(d->getPos() == d->getSize()) { @@ -323,7 +325,12 @@ failDownload(aSource, e.getError()); return; } - + + aSource->setSpeed(d->getAverageSpeed()); + if(aSource->getChunkSize() < d->getSize()) { + aSource->setChunkSize(d->getSize()); + } + dcdebug("Download finished: %s, size " I64_FMT ", downloaded " I64_FMT "\n", d->getPath().c_str(), d->getSize(), d->getPos()); #if PORT_ME Modified: dcplusplus/trunk/dcpp/QueueItem.cpp =================================================================== --- dcplusplus/trunk/dcpp/QueueItem.cpp 2008-04-14 20:14:03 UTC (rev 1148) +++ dcplusplus/trunk/dcpp/QueueItem.cpp 2008-04-14 20:15:30 UTC (rev 1149) @@ -84,14 +84,31 @@ return tempTarget; } -Segment QueueItem::getNextSegment(int64_t blockSize) const { +// # ms we should aim for per segment +static const int64_t SEGMENT_TIME = 10*1000; + +Segment QueueItem::getNextSegment(int64_t blockSize, double lastSpeed, int64_t lastSize) const { if(getSize() == -1 || blockSize == 0) { return Segment(0, -1); } + + int64_t remaining = getSize() - getDownloadedBytes(); + + int64_t targetSize = std::max(blockSize, lastSize); + if(lastSpeed > 0) { + double msecs = 1000 * targetSize / lastSpeed; + if(msecs < SEGMENT_TIME / 2) { + targetSize *= 2; + } else if(msecs > SEGMENT_TIME * 2) { + targetSize = std::max(blockSize, targetSize / 2); + } + } + + // Round off to nearest block size + targetSize = ((targetSize + blockSize / 2) / blockSize) * blockSize; + int64_t start = 0; - int64_t maxSize = std::max(blockSize, static_cast<int64_t>(SETTING(MIN_SEGMENT_SIZE) * 1024)); - maxSize = ((maxSize + blockSize - 1) / blockSize) * blockSize; // Make sure we're on an even block boundary - int64_t curSize = maxSize; + int64_t curSize = targetSize; while(start < getSize()) { int64_t end = std::min(getSize(), start + curSize); @@ -122,7 +139,7 @@ curSize -= blockSize; } else { start = end; - curSize = maxSize; + curSize = targetSize; } } Modified: dcplusplus/trunk/dcpp/QueueItem.h =================================================================== --- dcplusplus/trunk/dcpp/QueueItem.h 2008-04-14 20:14:03 UTC (rev 1148) +++ dcplusplus/trunk/dcpp/QueueItem.h 2008-04-14 20:15:30 UTC (rev 1149) @@ -157,7 +157,7 @@ DownloadList& getDownloads() { return downloads; } /** Next segment that is not done and not being downloaded, zero-sized segment returned if there is none is found */ - Segment getNextSegment(int64_t blockSize) const; + Segment getNextSegment(int64_t blockSize, double lastSpeed, int64_t lastSize) const; void addSegment(const Segment& segment); Modified: dcplusplus/trunk/dcpp/QueueManager.cpp =================================================================== --- dcplusplus/trunk/dcpp/QueueManager.cpp 2008-04-14 20:14:03 UTC (rev 1148) +++ dcplusplus/trunk/dcpp/QueueManager.cpp 2008-04-14 20:15:30 UTC (rev 1149) @@ -192,7 +192,7 @@ } } -QueueItem* QueueManager::UserQueue::getNext(const UserPtr& aUser, QueueItem::Priority minPrio) { +QueueItem* QueueManager::UserQueue::getNext(const UserPtr& aUser, QueueItem::Priority minPrio, double lastSpeed, int64_t lastSize) { int p = QueueItem::LAST - 1; do { @@ -213,7 +213,7 @@ int64_t blockSize = HashManager::getInstance()->getBlockSize(qi->getTTH()); if(blockSize == 0) blockSize = qi->getSize(); - if(qi->getNextSegment(blockSize).getSize() == 0) { + if(qi->getNextSegment(blockSize, lastSpeed, lastSize).getSize() == 0) { dcdebug("No segment for %s in %s, block " I64_FMT "\n", aUser->getCID().toBase32().c_str(), qi->getTarget().c_str(), blockSize); continue; } Modified: dcplusplus/trunk/dcpp/QueueManager.h =================================================================== --- dcplusplus/trunk/dcpp/QueueManager.h 2008-04-14 20:14:03 UTC (rev 1148) +++ dcplusplus/trunk/dcpp/QueueManager.h 2008-04-14 20:15:30 UTC (rev 1149) @@ -178,7 +178,7 @@ public: void add(QueueItem* qi); void add(QueueItem* qi, const UserPtr& aUser); - QueueItem* getNext(const UserPtr& aUser, QueueItem::Priority minPrio = QueueItem::LOWEST); + QueueItem* getNext(const UserPtr& aUser, QueueItem::Priority minPrio = QueueItem::LOWEST, double lastSpeed = 0, int64_t lastSize = 0); QueueItem* getRunning(const UserPtr& aUser); void addDownload(QueueItem* qi, Download* d); void removeDownload(QueueItem* qi, const UserPtr& d); Modified: dcplusplus/trunk/dcpp/Transfer.cpp =================================================================== --- dcplusplus/trunk/dcpp/Transfer.cpp 2008-04-14 20:14:03 UTC (rev 1148) +++ dcplusplus/trunk/dcpp/Transfer.cpp 2008-04-14 20:15:30 UTC (rev 1149) @@ -38,9 +38,16 @@ void Transfer::tick() { Lock l(cs); - while(samples.size() >= SAMPLES) { - samples.pop_front(); + + if(samples.size() >= 1) { + int64_t tdiff = samples.back().first - samples.front().first; + if((tdiff / 1000) > MIN_SECS) { + while(samples.size() >= MIN_SAMPLES) { + samples.pop_front(); + } + } } + samples.push_back(std::make_pair(GET_TICK(), pos)); } Modified: dcplusplus/trunk/dcpp/Transfer.h =================================================================== --- dcplusplus/trunk/dcpp/Transfer.h 2008-04-14 20:14:03 UTC (rev 1148) +++ dcplusplus/trunk/dcpp/Transfer.h 2008-04-14 20:15:30 UTC (rev 1149) @@ -52,7 +52,7 @@ void addPos(int64_t aBytes, int64_t aActual) { pos += aBytes; actual+= aActual; } - enum { SAMPLES = 15 }; + enum { MIN_SAMPLES = 15, MIN_SECS = 15 }; /** Record a sample for average calculation */ void tick(); Modified: dcplusplus/trunk/dcpp/UploadManager.cpp =================================================================== --- dcplusplus/trunk/dcpp/UploadManager.cpp 2008-04-14 20:14:03 UTC (rev 1148) +++ dcplusplus/trunk/dcpp/UploadManager.cpp 2008-04-14 20:15:30 UTC (rev 1149) @@ -273,6 +273,7 @@ dcassert(u != NULL); u->setStart(GET_TICK()); + u->tick(); aSource->setState(UserConnection::STATE_RUNNING); aSource->transmitFile(u->getStream()); fire(UploadManagerListener::Starting(), u); @@ -307,6 +308,7 @@ aSource->send(cmd); u->setStart(GET_TICK()); + u->tick(); aSource->setState(UserConnection::STATE_RUNNING); aSource->transmitFile(u->getStream()); fire(UploadManagerListener::Starting(), u); @@ -318,6 +320,7 @@ Upload* u = aSource->getUpload(); dcassert(u != NULL); u->addPos(aBytes, aActual); + u->tick(); } void UploadManager::on(UserConnectionListener::Failed, UserConnection* aSource, const string& aError) throw() { Modified: dcplusplus/trunk/dcpp/UserConnection.h =================================================================== --- dcplusplus/trunk/dcpp/UserConnection.h 2008-04-14 20:14:03 UTC (rev 1148) +++ dcplusplus/trunk/dcpp/UserConnection.h 2008-04-14 20:15:30 UTC (rev 1149) @@ -33,7 +33,8 @@ namespace dcpp { class UserConnection : public Speaker<UserConnectionListener>, - private BufferedSocketListener, public Flags, private CommandHandler<UserConnection> + private BufferedSocketListener, public Flags, private CommandHandler<UserConnection>, + private boost::noncopyable { public: friend class ConnectionManager; @@ -166,6 +167,8 @@ GETSET(string, encoding, Encoding); GETSET(States, state, State); GETSET(uint64_t, lastActivity, LastActivity); + GETSET(double, speed, Speed); + GETSET(int64_t, chunkSize, ChunkSize); private: BufferedSocket* socket; bool secure; @@ -180,17 +183,15 @@ // We only want ConnectionManager to create this... UserConnection(bool secure_) throw() : encoding(Text::systemCharset), state(STATE_UNCONNECTED), - lastActivity(0), socket(0), secure(secure_), download(NULL) { + lastActivity(0), speed(0), chunkSize(0), socket(0), secure(secure_), download(NULL) { } virtual ~UserConnection() throw() { BufferedSocket::putSocket(socket); } + friend struct DeleteFunction; - UserConnection(const UserConnection&); - UserConnection& operator=(const UserConnection&); - void setUser(const UserPtr& aUser) { user = aUser; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |