TsgcQUICServer は UDP 上で QUIC 接続をリッスンし、QUIC ストリーム上でデータを交換する低レベル QUIC サーバーです。
TsgcQUICServer は、UDP 上で QUIC 接続をリッスンし、QUIC ストリームでアプリケーションデータを交換する低レベル QUIC サーバー(RFC 9000)を実装しています。既定では OpenSSL 3.5+ の組み込み QUIC リスナー API 上で動作し、読み込まれた OpenSSL がそれをエクスポートしていない場合は sgc QUIC エンジンにフォールバックします。QUICOptions.SSLOptions.IOHandler = iohNativeTLS の場合は常に sgc エンジンが使用され、TLS 1.3 ハンドシェイクはネイティブ TLS エンジン上で実行されます。起動時に選択されたエンジンは読み取り専用の QUICMode プロパティで報告されます。QUIC は常に TLS 1.3 上で動作し、サーバー証明書と秘密鍵が必要です。このコンポーネントを設定するには、以下の手順に従ってください:
1. TsgcQUICServer コンポーネントの新しいインスタンスを作成します。
2. リッスンする Port を設定し、QUICOptions.SSLOptions を通じてサーバー証明書と秘密鍵を設定します。
3. OnQUICConnect と OnQUICData イベントを処理し、Start を呼び出してリッスンを開始します。使用例:
oServer := TsgcQUICServer.Create(nil);
oServer.Port := 4433;
oServer.QUICOptions.SSLOptions.CertFile := 'cert.pem';
oServer.QUICOptions.SSLOptions.KeyFile := 'key.pem';
oServer.OnQUICConnect := OnQUICConnectEvent;
oServer.OnQUICData := OnQUICDataEvent;
oServer.Start;
procedure OnQUICDataEvent(Sender: TObject; const aConnection:
TsgcQUICServerConnection; const aData: TBytes);
begin
// echo the received bytes back to the peer
oServer.WriteData(aConnection, aData);
end;
| 名前 | 説明 |
|---|---|
| Active | QUIC サーバーがアクティブで受信接続をリッスンしているかどうかを示します。 |
| Port | サーバーが着信 QUIC 接続のためにバインドしてリッスンする UDP ポート。 |
| QUICOptions | TLS 証明書と秘密鍵および最大接続数を含むサーバー設定。 |
| 名前 | 説明 |
|---|---|
| Start | OpenSSL をロードし、QUIC リスナーを作成して接続の受け入れを開始します。 |
| Stop | リッスンを停止し、すべてのアクティブな接続を閉じて QUIC リスナーを解放します。 |
| WriteData | デフォルト QUIC ストリームを介して接続中のピアにアプリケーションバイトを送信します。 |
| 名前 | 説明 |
|---|---|
| OnQUICConnect | 新しい QUIC 接続が受け入れられ、その最初のストリームが準備完了したときに発生します。 |
| OnQUICData | デフォルト QUIC ストリームを通じてピアからアプリケーションデータを受信したときに発生します。 |
| OnQUICDisconnect | QUIC 接続が閉じられたときに発生します。 |
oServer := TsgcQUICServer.Create(nil);
oServer.Port := 4433;
oServer.QUICOptions.SSLOptions.CertFile := 'cert.pem';
oServer.QUICOptions.SSLOptions.KeyFile := 'key.pem';
oServer.OnQUICConnect := OnQUICConnectEvent;
oServer.OnQUICData := OnQUICDataEvent;
oServer.OnQUICDisconnect := OnQUICDisconnectEvent;
oServer.OnQUICException := OnQUICExceptionEvent;
oServer.Start;
procedure OnQUICConnectEvent(Sender: TObject; const aConnection: TsgcQUICServerConnection);
begin
Log('Connected: ' + aConnection.PeerIP);
end;
procedure OnQUICDataEvent(Sender: TObject; const aConnection: TsgcQUICServerConnection; const aData: TBytes);
begin
// echo the received bytes back to the peer
oServer.WriteData(aConnection, aData);
end;
procedure OnQUICDisconnectEvent(Sender: TObject; const aConnection: TsgcQUICServerConnection; aCode: Int64; const aReason: string);
begin
Log('Disconnected: ' + aReason);
end;
procedure OnQUICExceptionEvent(Sender: TObject; const aConnection: TsgcQUICServerConnection; const aException: Exception);
begin
Log('Error: ' + aException.Message);
end;
| 要件 | 詳細 |
|---|---|
| エディション | エンタープライズエディション。 |
| コンパイラ定義 | SGC_QUIC は sgcVer.inc で有効にする必要があります。 |
| ユニット | sgcQUIC_Server |
| OpenSSL | IOHandler = iohOpenSSL の場合は OpenSSL 3.5 以降が必要です。組み込みエンジンはネイティブ QUIC リスナー API(OSSL_QUIC_server_method、SSL_new_listener)を、sgc エンジンは OpenSSL 3.5 の QUIC TLS API を使用します。どちらも旧バージョンには存在しません。iohNativeTLS を使用すれば OpenSSL は不要です。QUICOptions.SSLOptions.OpenSSL_Options.APIVersion は oslAPI_3_0 のままにしてください。 |