You can download/fork it on GitHub: https://github.com/petermrg/eNode
It's written in Node.js and the code should be very easy to understand so feel free to contribute.
It would be also great to write an Official protocol specification. There are lots of outdated opcodes and protocol parts that could be removed from emule.
Just an example, files>4GB and Unicode support should be a MUST in all clients and servers so why give support for old ones? That "Official protocol" should have the extensions for supporting IPv6.
David_X started a draft on piratenpad: http://piratenpad.de/p/ed2kIPv6
Copypaste of the README:
eNode - A node.js eD2K/eMule Server
This is an experimental-buggy-testing-pre-alpha release. Not ready to use!
Contributions are welcome.
Features:
- TCP/UDP opcodes
- Lugdunum/emule extended protocol
- gzip compression
- LowID Callbacks
- Files > 4GiB
- Easy support for any storage engine. Look at ed2k/storage.js and create your own storage.<engine>.js plugin
Requires:
- Node.js v0.8+
- MySQL server
- Node.js modules:
- mysql
- hexy: to do hexdumps, useful for debugging packets
- tinylogger: to show messages in console
- colors: used in tinylogger
- mysql
Usage:
- Create MySQL database tables. Database structure: misc/enode.sql
- Modify config file: enode.config.js
- Execute: node enode.js -or- chmod +x enode.js and then ./enode.js
- You can modify the verbose level modifing the options of the tinylogger module
If you want to test the server on a local network, change emule options to allow local connections.
To do:
- TCP/UPD protocol obfuscation
- IPv6 support: unoficial draft for eD2K IPv6 extension
- Better storage and indexing. Perhaps with Sphinx
- Support for Nat Traversal
Thanks to:
- David_X
This post has been edited by petermrg: 08 February 2013 - 06:35 PM