The fix and/or improvements set for today includes the following items:
- Completely disabled the chunk-request rotational thingie. It's way too error-prone, I even saw (at least) one eMule who got it wrong (or I got it wrong). For whatever the reason, this thing isn't very useful, and quickly leads to errors (and hence double data trasnfering), and since it's completely optional apparently (all clients seem to work fine w/o using it), hydranode won't be doing it anymore. (It still supports it if remote clients does it, but it doesn't send this stuff itself anymore).
- Fixed a rather obscure bug in RangeList::getContains() method, which returned different (but equally) correct range, however, PartData relied on it returning the first range that contains, not any range that contains. This caused some obscure errors with having file at 100% but not completing (missing 300 bytes etc), and unable to complete.
- Ensure that when a chunk completes, the chunk-hash-job is posted to HashThread before PartData has chance to submit fulljob; delay fulljob until all pending-jobs are finished (because if there are chunk-hashes still pending, it doesn't make sense to do a full rehash yet).
- Fixed PartData::addSourceMask() to update a proper range of ChunkMap (e.g. based on chunksize). It currently worked, but would'v broken when dealing with multi-net, multi-chunksize downloads.
- Added PartData::delSourceMask(), which, as the name says, removes a source mask.
- ED2k.Clients now properly handles the source mask adding/removing; no more duplicate source masks etc. Also, Client::ChunkMap is now shared between SourceInfo and DownloadInfo, so they don't get out of sync again.
- Beginning to add operations/data to output from modules (to future GUI), ED2k.ServerList now exports the server names, as well as allows connecting to specific servers. Go to /modules/ed2k/serverlist in hnshell and type `help` for more information.
- ED2K: Added support for SourceExchange v1, one of many eMule extended protocol features. Currently the support is only enabled in listen-mode - we respond to queries, but don't send queries ourselves - this is done in order have further time to investigate (and watch other client's behaviour) for when and how often are we allowed to do so. v2 [adds client userhash] and v3 [supports Hybrid ID's (e.g. *.*.*.0 high-id IPs)] support will most likely be added in near future (while v2 sounds useless, v3 is indeed useful, and you can't get v3 w/o also supporting v2).
Madcat, too tired to write any funny (?) stuff tonight, ZzZz