Outline SDK は基本的なコンセプトに基づいて構築されています。それらのコンセプトは、コンポジションや簡単な再利用を可能にするための相互運用可能なインターフェースとして定義されます。
接続
接続は、抽象的なトランスポート上の 2 つのエンドポイント間の通信を可能にします。接続には次の 2 種類があります。
transport.StreamConn
: TCP やSOCK_STREAM
タイプの Posix ソケットなど、ストリーム ベースの接続。transport.PacketConn
: UDP やSOCK_DGRAM
タイプの Posix ソケットなど、データグラム ベースの接続。Go 標準ライブラリの慣習に従い、「データグラム」ではなく「パケット」という言葉を使用します。
接続をラップし、新しいトランスポート上でネストした接続を作成することもできます。たとえば、StreamConn
には、TCP 上、TCP 上の TLS 上、TCP 上の TLS 上の HTTP 上、QUIC 上など、さまざまなオプションがあります。
ダイヤラー
ダイヤラーは、基盤となるトランスポート プロトコルまたはプロキシ プロトコルをカプセル化しながら、host:port アドレスを指定した接続の作成を可能にします。指定したアドレスに対し、StreamDialer
タイプは StreamConn
接続、PacketDialer
タイプは PacketConn
接続を作成します。ダイヤラーもネスト化が可能です。たとえば TLS ストリーム ダイヤラーは、TCP ダイヤラーを使用して TCP 接続に基づく StreamConn
を作成した後、TCP StreamConn
に基づく TLS StreamConn
を作成できます。SOCKS5-over-TLS ダイヤラーは、TLS ダイヤラーを使用してプロキシへの TLS StreamConn
を作成した後、ターゲット アドレスへの SOCKS5 接続を実行できます。
リゾルバ
リゾルバ(dns.Resolver
)は、基盤となるアルゴリズムまたはプロトコルをカプセル化しながら、DNS クエリへの回答を可能にします。リゾルバは主に、ドメイン名から IP アドレスへのマッピングに使用されます。