De Outline SDK is gemaakt aan de hand van enkele basisconcepten, beschreven als interoperabele interfaces die makkelijk kunnen worden aangepast en hergebruikt.
Verbindingen
Verbindingen maken communicatie tussen 2 eindpunten via een abstracte transportmanier mogelijk. Er zijn 2 soorten verbindingen:
transport.StreamConn
: Streamgebaseerde verbinding, zoals TCP en het type Posix-netwerkverbindingSOCK_STREAM
.transport.PacketConn
: Datagramgebaseerde verbinding, zoals UDP en het type Posix-netwerkverbindingSOCK_DGRAM
. We gebruiken het woord Packet in plaats van Datagram, omdat dat de conventie is in de standaard Go-bibliotheek.
Je kunt verbindingen verpakken om geneste verbindingen mogelijk te maken via een nieuwe transportmanier.
Een StreamConn
kan bijvoorbeeld worden gestuurd over TCP, over TLS over TCP, over HTTP over TLS over TCP of over QUIC.
Dialers
Dialers zorgen dat er verbinding kan worden gemaakt als je een host:port-adres opgeeft terwijl het onderliggende transport of proxyprotocol wordt ingekapseld.
De typen StreamDialer
en PacketDialer
zorgen respectievelijk voor StreamConn
- en PacketConn
-verbindingen als je een adres opgeeft. Je kunt dialers ook nesten.
Een TLS Stream Dialer kan bijvoorbeeld een TCP Dialer gebruiken om een StreamConn
te maken die wordt ondersteund door een TCP-verbinding, en dan een TLS StreamConn
maken die wordt ondersteund door de TCP StreamConn
. Een SOCKS5-over-TLS Dialer kan de TLS Dialer gebruiken om de TLS StreamConn
te maken voor de proxy voordat de SOCKS5-verbinding met het doeladres wordt gemaakt.
Resolvers
Resolvers (dns.Resolver
) zorgen dat DNS-vragen kunnen worden beantwoord terwijl het onderliggende algoritme of protocol wordt ingekapseld.
Resolvers worden voornamelijk gebruikt om domeinnamen toe te wijzen aan IP-adressen.