El SDK de Outline se basa en ciertos conceptos fundamentales definidos como interfaces interoperables que permiten la composición y una reutilización sencilla.
Conexiones
Las conexiones permiten la comunicación entre dos extremos a través de un transporte abstracto. Las hay de dos tipos:
transport.StreamConn
: Es una conexión basada en transmisiones, como TCP y el tipo de socketSOCK_STREAM
de POSIX.transport.PacketConn
: Es una conexión basada en datagramas, como UDP y el tipo de socketSOCK_DGRAM
de POSIX. Usamos "Packet" en vez de "Datagram" porque seguimos la convención de la biblioteca estándar de Go.
Las conexiones se pueden unir para crear conexiones anidadas a través de un nuevo transporte.
Por ejemplo, una StreamConn
podría funcionar por TCP, por TLS sobre TCP, por HTTP sobre
TLS sobre TCP o por QUIC, entre otras opciones.
Marcadores
Los marcadores permiten crear conexiones si se proporciona una dirección host:puerto
y encapsulan el protocolo de proxy o transporte subyacente.
Los tipos StreamDialer
y PacketDialer
crean conexiones StreamConn
y PacketConn
,
respectivamente, si se proporciona una dirección. Los marcadores también pueden anidarse.
Por ejemplo, un marcador de transmisión TLS puede usar un marcador TCP para crear una StreamConn
respaldada por una conexión TCP y, luego, crear una StreamConn
TLS respaldada por la StreamConn
TCP. Un marcador SOCKS5 sobre TLS podría usar el marcador TLS para crear la
StreamConn
TLS al proxy antes de realizar la conexión SOCKS5 a la dirección de
destino.
Agentes de resolución
Los agentes de resolución (dns.Resolver
) permiten responder las preguntas del DNS
y encapsulan el algoritmo o protocolo subyacente.
Se usan principalmente para asignar nombres de dominio a direcciones IP.