Quick feature overview- One-Queue-Per-File
Fair chances for rare files - Reserved release slots
Give some of your slots exclusively to release files. - New: Estimated queuing time
For clients in the upload queue a estimated waiting time is calculated. - Auto-nick-naming
Don't be annoyed by thousands of http://emule-project.net/ clients. - New: Coutermessures against a leeching mod [by Vorlost]
Downscoring of clients that use a popular german community leeching mod.
- New: Mod feature recognition (interesting for developers)
System to identify mod features - New: Developer tools
diff2html, bbcode2html - New: Commented source code
You can now see in the sources (or better the diff file) what I did and why.
Downloads Things you really should know before you use it (same as last version):- "Try to upload full chunks" is required by the mod. The mod will enable this if you haven't already done so.
- The old "Release" priority is now called "Very high". The new "Release" is something special.
Downloads/Links: Plans for the next release- Update to 0.27[ab]
- Improvements for the waiting time estimation
- Looking at some potential memory leaks I noticed
More about the features Old Features
For the old (but good) features like
One-Queue-Per-File,
Reserved release slots and
Auto-nick-naming see
my posting for the last release.
Feature: Estimated queuing time The problem
If you see that you're at a queue position of 1234 waiting for a download, this doesn't tell you much about how long it will take you to get a download slot. If the remote client has a upload of 2kb/s and the file is low priority, it's hopeless to wait. If the client has an upload of 128kb/s and it's a release file you will get it quite soon.
An additional problem comes with my new queueing system. Because the waiting clients are queued per file it is hard to say what would be the corresponding position of a user in a global queue.
This mods solution
The mod keeps track how long it usually takes to get a slot and uses this information to calculate a estimated waiting time for a waiting client. This time is send if a client asks for it's queue position. If you want to download from another client that supports this feature you'll see a estimated time to get a slot instead of a queue position in the download list.
The implementation is fully compatible with other clients that don't support this feature and doesn't make any protocol extentions. These other clients will just display a queue position that is
2*estimatedminutestowait. You can see the estimated time in the client details after the upload queue score. The estimation is not perfect yet and will be further improved, but it's already useful.
Feature: Coutermessures against a leeching mod [by Vorlost] The problem
There is a mod (Friendsharing 0.3) that rised in popularity and tends to only share with other users of this mod. From not-mod users it is just leeching. See also
here This mods solution
Users of this "Friendsharing" mod get scored down if they wait for a upload like they score us down, I think that's fair. This downscoring happens inside the per-file-queue and so they can get download slots if they a) ask for a rare or release file that nobody else wants at the moment or b ) if they wait for a
very long time (some days).
Developers Feature: Mod feature recognition The problem
Sometimes when you add a feature to a mod (like I send the estimated waiting time when asked for a queue position) you want to know if the clients that you are connected to also support this feature. You need some way to send/receive information about features that a given client implements.
This mods solution
I send one more tag in the EmuleInfo packet to transmit feature information. This won't disturb old clients, they will just ignore the additional tag. Because I send a 32-bit integer and only implemented one feature that uses this extention there are 31 bits left to carry information about
31 other new features. So if you have a feature that needs this notification, here are empty capacities.
Important for developers: If someone has alredy defined an emule tagname (like ET_COMPRESSION, ET_UDPPORT, ET_EXTENDEDREQUEST,...) with value 0x54 then tell me, else this one is mine now Developers Feature: Developer tools (source only) The problem
I made some diff files from the sources and they don't really look nice and you cannot really copy-paste code from them because of all these "+" and "-" in front of the lines.
I write a big article for this forum useing these formatting codes in square brackets and then I want to put the same text on a web page, but I need it converted to HTML.
The solution
I hacked two small perl schripts that solve these problems.
diff2html.pl converts a .diff file to html so that the result looks nice in a web browser (stylesheet included).
bbcode2html.pl just converts SIZE and COLOR and simular formattings to corresponding HTML. Just a quick and dirty hack.
These skripts are only included in the source code Developers Feature: Commented source code
You can now actually see what I changed in the sources. I added some tags corresponding to the different features. Look at this webpage:
comments on the source code or look directly at this
diff file Minor modifications (As far as I remember them)
So try it and if you like it tell all the other modders and the base development team they should include this features
. Or wait with including the features for version 0.4, which will be based on 0.27a or 0.27b or so...
Have fun!
/bm