Madcat begins some strange incantations... Madcat utters the words 'raise compiler' GCC looks around, rather silly-looking, and mutters "Hm? I'm alive already ... " MSVC raises from the ashes, and compiles again!After some playing around in ed2k module, I was able to locate the problem that caused MSVC to crash. Seems the issue is related to boost::multi_index const_mem_fun-based indexes. After replacing them with alternative indexes, no more crashes. The exact reason why MSVC didn't like it is yet to be determined though.
On other news, we'r moving towards UDP support. Currently, we are being dropped from ALL eMule queues after roughly a hour, so if we don't pass the queue in a hour, we lose our queue position. I'm surprised we'r downloading anything at all after 5-6 hour uptimes, but non-the-less, we need UDP. In eDonkey2000 protocol, there aren't many different UDP packets, there is total of ~5 packets in Client<->Client UDP communication, and another ~5 in Client<->Server communication, so it shouldn't take long to implement. I got lot of research and pre-work done today already, so hopefully I can finish it tomorrow.
Below is the (almost) complete list of improvements done today.
- Event API: MSVC-specific workarounds in the newly added Trackable concept.
- Event API: Trackable is also now boost::signals::trackable; this solves the event-handlers removal problem - when a Trackable object is set to handle some event, it is automatically disconnected also during destruction.
- Hash API: Safer and faster hash comparisons (less virtual function calls).
- Hasher stats are now printed (again) on shutdown.
- Networking: More safety in UDPSocket::recv() implementation.
- IPV4Address constructors made explicit to avoid accidental programmers errors (inherent from its default constructor parameters).
- Scheduler: DLLEXPORT request base classes. Also removed request count debug counters.
- PartData now keeps a complete-chunks bool-vector internally to reduce manual complete-map calculation by modules (this is currently done 2-3 times during each client<->client negotiation).
- HNShell: Now handles win32-style EOL correctly.
- HNShell: No longer crashes on nmap TCP connect() port scan.
- ED2K: Support for the "Message" packet.
- ED2K: No longer crashes MSVC 7.1. Seems it doesnt like const_mem_fun at all ...
- ED2K: Experimental UDP support. Currently only in listening state, no data is sent out, and all incoming packets are simply echoed.
Madcat, ZzZz