Hello. I would like to extend the ASIO (in boost::asio) by adding support for new virtual protocols. For example i2p, it is similar to Tor but it works with equivalent of .onion hidden servers, and is not used to connect to "normal Internet" usually. It works like this: - the end-points, equivalent of the ip4/ip6 address, is a very long string (around 500-1000 characters, it is technically the public key of data) - the end-point address is often expressed as shorter version of the address, that is around 50 characters afair, in two possible formats (b32 and b64) - user can create new i2p listening socket for TCP-like data (for stream of bytes), or for UDP-like data (message oriented). On creation of the listening socket you can get a new own "address" as above. Or, you can on creation/before creation tell it to reuse an previously created address by providing the std::string with private key of it (that you saved previously) - user can connect to an i2p address. When connecting, he is getting a new endpoint from which he connects, or he can reuse old one by loading the private key as above. - there exists naming lookup system, that allows to convert domain-name strings like "zzz.i2p" into proper i2p address Can I add such new class of protocol on top of ASIO? Which classes I need to extend (create child class)? Where exactly would each of the listed above functions go?