コンセプト

Outline SDK は、コンポジションと簡単な再利用を可能にする相互運用可能なインターフェースとして定義された基本コンセプトに基づいて構築されています。

接続

接続により、抽象的なトランスポート経由で 2 つのエンドポイント間の通信が可能になります。接続には次の 2 種類があります。

  • transport.StreamConn: TCP や SOCK_STREAM Posix ソケット タイプなどのストリームベースの接続。
  • transport.PacketConn: UDP や SOCK_DGRAM Posix ソケット タイプなどのデータグラムベースの接続。Go 標準ライブラリの慣例に従い、「Datagram」ではなく「Packet」を使用しています。

接続をラップして、新しいトランスポート経由でネストされた接続を作成できます。たとえば、StreamConn は TCP 経由、TCP 経由の TLS 経由、TCP 経由の TLS 経由の HTTP 経由、QUIC 経由など、さまざまなオプションがあります。

ダイヤラー(接続ソフト)

ダイヤラーを使用すると、基盤となるトランスポート プロトコルまたはプロキシ プロトコルをカプセル化し、ホスト:ポート アドレスを指定して接続を作成できます。StreamDialer タイプと PacketDialer タイプは、アドレスを指定して、それぞれ StreamConn 接続と PacketConn 接続を作成します。ダイアラーはネストすることもできます。たとえば、TLS ストリーム ダイアラーは、TCP ダイアラーを使用して TCP 接続でバッキングされた StreamConn を作成し、TCP StreamConn でバッキングされた TLS StreamConn を作成できます。SOCKS5-over-TLS ダイアラーは、TLS ダイアラーを使用してプロキシへの TLS StreamConn を作成し、ターゲット アドレスへの SOCKS5 接続を行うことができます。

リゾルバ

リゾルバ(dns.Resolver)は、基盤となるアルゴリズムまたはプロトコルをカプセル化しながら DNS クエリに回答できるようにします。リゾルバは主に、ドメイン名を IP アドレスにマッピングするために使用されます。