Open knocte opened 5 years ago
Issue Status: 1. Open 2. Started 3. Submitted 4. Done
This issue now has a funding of 0.554 ETH (172.04 USD @ $310.54/ETH) attached to it.
Hi there, I'd be interested into this.
But could you please specify more on the implementation?
I suppose you want both client & server to be implemented. So that the hole-punching scheme would look like this: Client A connects to publicly available server C. Client B connects to publicly available server C. Server C sends NAT IP and established port of A to B. Server C sends NAT IP and established port of B to A. A connects to B and vice versa. Server C is not needed for further A <-> B communication (as long as the connection is alive, thus at least periodically sending empty UDP data packets).
If the connection is lost, both A & B again connect to C to determine their NAT IPs & ports.
However, a few questions arises:
If you want executable program, there is a few questions that arise:
If you want a library, there is also a few questions to answer:
HolePuncher
(the naming is a subject for discussion), which takes IP & port of hole-punching server at construction, while providing methods like connect
, which takes some sort of identifier of the other side you want to connect with and returns an established connection.Have a good day!
any update?
@knocte what's update on your purpose?
Just to lend a hand, here are some libraries I've used which you can draw inspiration from: https://github.com/mafintosh/utp https://github.com/basarevych/utp-punch https://github.com/mafintosh/hyperdht
@tcrowe cool.
hi, i found have two p2p lib to implement the udp hole-punching protocol. please check it.
https://docs.rs/p2p/0.6.0/p2p/ https://github.com/maidsafe/tokio_utp/
we don't need reinvent the wheel.
Issue Status: 1. Open 2. Cancelled
The funding of 0.554 ETH (98.74 USD @ $178.23/ETH) attached to this issue has been cancelled by the bounty submitter
By "pure rust" we mean: no other dependencies other than the Rust base class libraries (because we want this to work on all OSs: Linux, Windows, Mac, Android, iOS).