TsgcQUICServer

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;

リファレンス

主なプロパティ

名前説明
ActiveQUIC サーバーがアクティブで受信接続をリッスンしているかどうかを示します。
Portサーバーが着信 QUIC 接続のためにバインドしてリッスンする UDP ポート。
QUICOptionsTLS 証明書と秘密鍵および最大接続数を含むサーバー設定。

主なメソッド

名前説明
StartOpenSSL をロードし、QUIC リスナーを作成して接続の受け入れを開始します。
Stopリッスンを停止し、すべてのアクティブな接続を閉じて QUIC リスナーを解放します。
WriteDataデフォルト QUIC ストリームを介して接続中のピアにアプリケーションバイトを送信します。

主なイベント

名前説明
OnQUICConnect新しい QUIC 接続が受け入れられ、その最初のストリームが準備完了したときに発生します。
OnQUICDataデフォルト QUIC ストリームを通じてピアからアプリケーションデータを受信したときに発生します。
OnQUICDisconnectQUIC 接続が閉じられたときに発生します。

完全な使用例


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
OpenSSLIOHandler = 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 のままにしてください。