TsgcQUICClient は、RFC 9000 に準拠したローレベルの QUIC クライアントです。サーバーへの QUIC 接続を開き、QUIC ストリームを介してデータを交換します。
TsgcQUICClient は RFC 9000 で定義されたトランスポートを実装する低レベル QUIC クライアントです。サーバーへの QUIC 接続を開き、QUIC ストリーム上でデータを交換します。OpenSSL 3.5 以降が提供する QUIC 実装上に構築されています。このコンポーネントを設定するには、以下の手順に従ってください。
QUIC は 2 つのエンジンのいずれかで動作し、使用されるエンジンは SSLQUICOptions.IOHandler に従います。既定の iohOpenSSL では、読み込まれた OpenSSL が OSSL_QUIC_client_method をエクスポートしていれば組み込みエンジン(qmBuiltin)が使用され、OpenSSL 3.5 の QUIC TLS API(SSL_set_quic_tls_cbs)のみをエクスポートしている場合は sgc エンジン(qmCustom)がフォールバックとして使用されます。iohNativeTLS では常に sgc エンジンが使用され、TLS 1.3 ハンドシェイクはネイティブ TLS エンジン上で実行され、セッションチケット、再開、0-RTT に対応します。パケット保護もネイティブであるため、OpenSSL は一切読み込まれません。詳しくはQUICのエンジン比較を参照してください。
1. TsgcQUICClient コンポーネントの新しいインスタンスを作成し、QUIC サーバーの Host と Port を設定します。
2. OnQUICConnect イベントを処理し、Active を True に設定して接続を開き、WriteData でデータを送信します。使用例:
oClient := TsgcQUICClient.Create(nil);
oClient.Host := 'www.example.com';
oClient.Port := 443;
oClient.SSLQUIC := True;
oClient.OnQUICConnect := OnQUICConnectEvent;
oClient.Active := True;
oClient.WriteData('Hello QUIC');
procedure OnQUICConnectEvent(Sender: TObject; const
Connection: TsgcQUICConnectionClient);
begin
ShowMessage('Connected to QUIC server');
end;
| 名前 | 説明 |
|---|---|
| Active | リモートサーバーへの QUIC 接続を開いたり閉じたりします。 |
| Host | クライアントが接続する QUIC サーバーの IP アドレスまたは DNS 名。 |
| Port | QUIC サーバーへの接続に使用する UDP ポート。 |
| SSLQUIC | QUIC が必要とする TLS 1.3 セキュアレイヤーを有効にします(デフォルトで有効)。 |
| QUICOptions | QUIC トランスポートのクライアント側チューニングオプション。 |
| 名前 | 説明 |
|---|---|
| Connect | サーバーへの QUIC 接続を開き、接続が確立されるかタイムアウトが切れるまで待機します。 |
| Disconnect | サーバーへの QUIC 接続を閉じます。 |
| WriteData | デフォルト QUIC ストリームを介してサーバーにデータを送信します。 |
| OpenStream | 新しい QUIC ストリームを開き、データを送信できるように返します。 |
| 名前 | 説明 |
|---|---|
| OnQUICConnect | クライアントが QUIC サーバーへの接続に成功した直後に発生します。 |
| OnQUICDisconnect | QUIC 接続が閉じられたときに発生します。 |
| OnQUICException | QUIC 接続で例外が発生したときに発生します。 |
oClient := TsgcQUICClient.Create(nil);
oClient.Host := 'www.example.com';
oClient.Port := 443;
oClient.SSLQUIC := True;
oClient.OnQUICConnect := OnQUICConnectEvent;
oClient.OnQUICDisconnect := OnQUICDisconnectEvent;
oClient.OnQUICException := OnQUICExceptionEvent;
if oClient.Connect then
begin
oClient.WriteData('Hello QUIC');
oClient.Disconnect;
end;
procedure OnQUICConnectEvent(Sender: TObject; const Connection: TsgcQUICConnectionClient);
begin
Log('connected');
end;
procedure OnQUICDisconnectEvent(Sender: TObject; const Connection: TsgcQUICConnectionClient; const Code: Integer);
begin
Log('disconnected, code ' + IntToStr(Code));
end;
procedure OnQUICExceptionEvent(Sender: TObject; E: Exception);
begin
Log('error: ' + E.Message);
end;