UDP Hole Punching / NAT Traversal
— at Version 12
Details
Right now in 0 A.D. we use a primitive UPnP system to implement NAT transversal, but this system is unreliable. We would like to see a better method using UDP Hole Punching instead.
The solution would involve interacting with the lobby server to get transversal information. The recommended implementation would use STUN with ICE. It may be possible to (ab)use XEP-0176: Jingle ICE-UDP Transport Method for the desired result. Ejabberd has a built-in STUN server (Manual Entry). Both Ejabberd and Gloox support XEP-0176.
Expected Result
Enabling 0 A.D. clients to connect to a host behind any type of NAT.
Required Prerequisites
Fluency in C++ and understanding of NAT transversal. JavaScript knowledge would also be recommended. (Ability to learn/familiarity with erlang would also be required when dealing with the lobby server)
Helpful Links
Incomplete/failed try at implementation
Change History
(12)
Component: |
Core engine → Multiplayer lobby
|
Priority: |
Release Blocker → Must Have
|
Milestone: |
Alpha 15 → Alpha 16
|
Description: |
modified (diff)
|
Priority: |
Must Have → Should Have
|
Description: |
modified (diff)
|
Owner: |
Josh removed
|
Priority: |
Should Have → Must Have
|
Milestone: |
Alpha 16 → Alpha 17
|
Milestone: |
Alpha 17 → Alpha 18
|
Milestone: |
Alpha 18 → Backlog
|
Summary: |
UDP Hole Punching / NAT Transversal → UDP Hole Punching / NAT Traversal
|
Description: |
modified (diff)
|
In 14332: