SAM with the i2plib
It allows creating client and server tunnels, and it supports UDP tunneling (Good for #3)